From f4ef5aa067b253c0732f20abb2f74402ead7036d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A3=E5=9C=A3=E5=8D=8E?= <752718920@qq.com> Date: Wed, 7 Apr 2021 23:53:57 +0800 Subject: [PATCH] =?UTF-8?q?vue=E7=89=88=E6=9C=AC=E4=B8=8A=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 7 +- .gitignore | 29 +- README.md | 9 +- jshERP-boot/.gitattributes | 3 + jshERP-boot/.gitignore | 19 + jshERP-boot/docs/jsh_erp.sql | 995 ++ jshERP-boot/docs/华夏ERP数据库设计汇总.xlsx | Bin 0 -> 67570 bytes .../docs/数据库更新记录-首次安装请勿使用.txt | 1072 ++ jshERP-boot/pom.xml | 178 + jshERP-boot/src/main/assembly/assembly.xml | 71 + jshERP-boot/src/main/bin/restart.sh | 1 + jshERP-boot/src/main/bin/run-manage.sh | 146 + jshERP-boot/src/main/bin/start.bat | 6 + jshERP-boot/src/main/bin/start.sh | 1 + jshERP-boot/src/main/bin/status.sh | 1 + jshERP-boot/src/main/bin/stop.sh | 1 + .../main/java/com/jsh/erp/ErpApplication.java | 27 + .../com/jsh/erp/config/PluginBeanConfig.java | 24 + .../jsh/erp/config/PluginConfiguration.java | 104 + .../com/jsh/erp/config/Swagger2Config.java | 44 + .../java/com/jsh/erp/config/TenantConfig.java | 107 + .../jsh/erp/constants/BusinessConstants.java | 177 + .../jsh/erp/constants/ExceptionConstants.java | 416 + .../jsh/erp/controller/AccountController.java | 166 + .../erp/controller/AccountHeadController.java | 117 + .../erp/controller/AccountItemController.java | 70 + .../jsh/erp/controller/DepotController.java | 193 + .../erp/controller/DepotHeadController.java | 420 + .../erp/controller/DepotItemController.java | 698 + .../erp/controller/FunctionController.java | 234 + .../erp/controller/InOutItemController.java | 60 + .../MaterialCategoryController.java | 142 + .../erp/controller/MaterialController.java | 476 + .../controller/MaterialExtendController.java | 84 + .../MaterialPropertyController.java | 28 + .../com/jsh/erp/controller/MsgController.java | 77 + .../controller/OrganizationController.java | 134 + .../jsh/erp/controller/PersonController.java | 130 + .../controller/PlatformConfigController.java | 90 + .../jsh/erp/controller/PluginController.java | 269 + .../erp/controller/ResourceController.java | 138 + .../jsh/erp/controller/RoleController.java | 72 + .../erp/controller/SequenceController.java | 50 + .../controller/SerialNumberController.java | 87 + .../erp/controller/SupplierController.java | 422 + .../controller/SystemConfigController.java | 87 + .../jsh/erp/controller/UnitController.java | 27 + .../controller/UserBusinessController.java | 94 + .../jsh/erp/controller/UserController.java | 401 + .../jsh/erp/datasource/entities/Account.java | 95 + .../datasource/entities/AccountExample.java | 780 + .../erp/datasource/entities/AccountHead.java | 136 + .../entities/AccountHeadExample.java | 1021 ++ .../entities/AccountHeadVo4Body.java | 34 + .../entities/AccountHeadVo4ListEx.java | 187 + .../erp/datasource/entities/AccountItem.java | 85 + .../entities/AccountItemExample.java | 700 + .../jsh/erp/datasource/entities/Depot.java | 389 + .../jsh/erp/datasource/entities/DepotEx.java | 22 + .../erp/datasource/entities/DepotExample.java | 1073 ++ .../erp/datasource/entities/DepotHead.java | 306 + .../datasource/entities/DepotHeadExample.java | 2151 +++ .../datasource/entities/DepotHeadVo4Body.java | 46 + .../erp/datasource/entities/DepotItem.java | 265 + .../datasource/entities/DepotItemExample.java | 1860 +++ .../DepotItemVo4DetailByTypeAndMId.java | 67 + .../entities/DepotItemVo4Material.java | 27 + .../entities/DepotItemVo4WithInfoEx.java | 206 + .../jsh/erp/datasource/entities/Function.java | 133 + .../datasource/entities/FunctionExample.java | 1079 ++ .../erp/datasource/entities/InOutItem.java | 63 + .../datasource/entities/InOutItemExample.java | 599 + .../com/jsh/erp/datasource/entities/Log.java | 85 + .../erp/datasource/entities/LogExample.java | 710 + .../jsh/erp/datasource/entities/Material.java | 185 + .../datasource/entities/MaterialCategory.java | 115 + .../entities/MaterialCategoryExample.java | 910 ++ .../entities/MaterialCurrentStock.java | 65 + .../entities/MaterialCurrentStockExample.java | 570 + .../datasource/entities/MaterialExample.java | 1400 ++ .../datasource/entities/MaterialExtend.java | 156 + .../entities/MaterialExtendExample.java | 1161 ++ .../entities/MaterialInitialStock.java | 65 + .../entities/MaterialInitialStockExample.java | 570 + .../datasource/entities/MaterialProperty.java | 63 + .../entities/MaterialPropertyExample.java | 599 + .../datasource/entities/MaterialVo4Unit.java | 116 + .../entities/MaterialWithInitStock.java | 29 + .../com/jsh/erp/datasource/entities/Msg.java | 261 + .../erp/datasource/entities/MsgExample.java | 833 ++ .../erp/datasource/entities/OrgaUserRel.java | 325 + .../datasource/entities/OrgaUserRelEx.java | 10 + .../entities/OrgaUserRelExample.java | 923 ++ .../erp/datasource/entities/Organization.java | 115 + .../entities/OrganizationExample.java | 920 ++ .../jsh/erp/datasource/entities/Person.java | 53 + .../datasource/entities/PersonExample.java | 529 + .../datasource/entities/PlatformConfig.java | 43 + .../entities/PlatformConfigExample.java | 469 + .../com/jsh/erp/datasource/entities/Role.java | 73 + .../erp/datasource/entities/RoleExample.java | 669 + .../erp/datasource/entities/SerialNumber.java | 125 + .../datasource/entities/SerialNumberEx.java | 78 + .../entities/SerialNumberExample.java | 960 ++ .../jsh/erp/datasource/entities/Supplier.java | 235 + .../datasource/entities/SupplierExample.java | 1710 +++ .../datasource/entities/SysLoginModel.java | 55 + .../erp/datasource/entities/SystemConfig.java | 123 + .../entities/SystemConfigExample.java | 1019 ++ .../jsh/erp/datasource/entities/Tenant.java | 197 + .../datasource/entities/TenantExample.java | 673 + .../com/jsh/erp/datasource/entities/Unit.java | 73 + .../erp/datasource/entities/UnitExample.java | 659 + .../com/jsh/erp/datasource/entities/User.java | 143 + .../erp/datasource/entities/UserBusiness.java | 63 + .../entities/UserBusinessExample.java | 609 + .../jsh/erp/datasource/entities/UserEx.java | 80 + .../erp/datasource/entities/UserExample.java | 1129 ++ .../datasource/mappers/AccountHeadMapper.java | 30 + .../mappers/AccountHeadMapperEx.java | 46 + .../datasource/mappers/AccountItemMapper.java | 30 + .../mappers/AccountItemMapperEx.java | 37 + .../erp/datasource/mappers/AccountMapper.java | 30 + .../datasource/mappers/AccountMapperEx.java | 40 + .../datasource/mappers/DepotHeadMapper.java | 30 + .../datasource/mappers/DepotHeadMapperEx.java | 135 + .../datasource/mappers/DepotItemMapper.java | 30 + .../datasource/mappers/DepotItemMapperEx.java | 118 + .../erp/datasource/mappers/DepotMapper.java | 96 + .../erp/datasource/mappers/DepotMapperEx.java | 27 + .../datasource/mappers/FunctionMapper.java | 30 + .../datasource/mappers/FunctionMapperEx.java | 22 + .../datasource/mappers/InOutItemMapper.java | 30 + .../datasource/mappers/InOutItemMapperEx.java | 25 + .../jsh/erp/datasource/mappers/LogMapper.java | 30 + .../erp/datasource/mappers/LogMapperEx.java | 31 + .../mappers/MaterialCategoryMapper.java | 30 + .../mappers/MaterialCategoryMapperEx.java | 42 + .../mappers/MaterialCurrentStockMapper.java | 30 + .../mappers/MaterialExtendMapper.java | 30 + .../mappers/MaterialExtendMapperEx.java | 25 + .../mappers/MaterialInitialStockMapper.java | 30 + .../datasource/mappers/MaterialMapper.java | 30 + .../datasource/mappers/MaterialMapperEx.java | 88 + .../mappers/MaterialPropertyMapper.java | 30 + .../mappers/MaterialPropertyMapperEx.java | 20 + .../jsh/erp/datasource/mappers/MsgMapper.java | 96 + .../erp/datasource/mappers/MsgMapperEx.java | 27 + .../datasource/mappers/OrgaUserRelMapper.java | 96 + .../mappers/OrgaUserRelMapperEx.java | 14 + .../mappers/OrganizationMapper.java | 30 + .../mappers/OrganizationMapperEx.java | 30 + .../erp/datasource/mappers/PersonMapper.java | 30 + .../datasource/mappers/PersonMapperEx.java | 23 + .../mappers/PlatformConfigMapper.java | 30 + .../mappers/PlatformConfigMapperEx.java | 19 + .../erp/datasource/mappers/RoleMapper.java | 30 + .../erp/datasource/mappers/RoleMapperEx.java | 21 + .../datasource/mappers/SequenceMapperEx.java | 13 + .../mappers/SerialNumberMapper.java | 30 + .../mappers/SerialNumberMapperEx.java | 65 + .../datasource/mappers/SupplierMapper.java | 30 + .../datasource/mappers/SupplierMapperEx.java | 33 + .../mappers/SystemConfigMapper.java | 30 + .../mappers/SystemConfigMapperEx.java | 21 + .../erp/datasource/mappers/TenantMapper.java | 96 + .../datasource/mappers/TenantMapperEx.java | 17 + .../erp/datasource/mappers/UnitMapper.java | 30 + .../erp/datasource/mappers/UnitMapperEx.java | 21 + .../mappers/UserBusinessMapper.java | 30 + .../mappers/UserBusinessMapperEx.java | 15 + .../erp/datasource/mappers/UserMapper.java | 30 + .../erp/datasource/mappers/UserMapperEx.java | 33 + .../erp/datasource/vo/AccountItemVo4List.java | 26 + .../datasource/vo/AccountVo4InOutList.java | 96 + .../jsh/erp/datasource/vo/AccountVo4List.java | 16 + .../datasource/vo/DepotHeadVo4InDetail.java | 128 + .../vo/DepotHeadVo4InOutMCount.java | 87 + .../erp/datasource/vo/DepotHeadVo4List.java | 79 + .../vo/DepotHeadVo4StatementAccount.java | 107 + .../vo/DepotItemStockWarningCount.java | 157 + .../erp/datasource/vo/DepotItemVo4Stock.java | 26 + .../com/jsh/erp/datasource/vo/LogVo4List.java | 26 + .../datasource/vo/MaterialExtendVo4List.java | 68 + .../jsh/erp/datasource/vo/NodeAttributes.java | 30 + .../com/jsh/erp/datasource/vo/TreeNode.java | 114 + .../com/jsh/erp/datasource/vo/TreeNodeEx.java | 96 + .../BusinessParamCheckingException.java | 32 + .../exception/BusinessRunTimeException.java | 32 + .../erp/exception/GlobalExceptionHandler.java | 47 + .../com/jsh/erp/exception/JshException.java | 27 + .../com/jsh/erp/filter/LogCostFilter.java | 98 + .../jsh/erp/service/CommonQueryManager.java | 137 + .../com/jsh/erp/service/ICommonQuery.java | 80 + .../jsh/erp/service/InterfaceContainer.java | 31 + .../com/jsh/erp/service/ResourceInfo.java | 14 + .../erp/service/account/AccountComponent.java | 75 + .../erp/service/account/AccountResource.java | 15 + .../erp/service/account/AccountService.java | 555 + .../accountHead/AccountHeadComponent.java | 79 + .../accountHead/AccountHeadResource.java | 15 + .../accountHead/AccountHeadService.java | 342 + .../accountItem/AccountItemComponent.java | 75 + .../accountItem/AccountItemResource.java | 15 + .../accountItem/AccountItemService.java | 241 + .../jsh/erp/service/depot/DepotComponent.java | 75 + .../jsh/erp/service/depot/DepotResource.java | 15 + .../jsh/erp/service/depot/DepotService.java | 265 + .../service/depotHead/DepotHeadComponent.java | 86 + .../service/depotHead/DepotHeadResource.java | 15 + .../service/depotHead/DepotHeadService.java | 592 + .../service/depotItem/DepotItemComponent.java | 75 + .../service/depotItem/DepotItemResource.java | 15 + .../service/depotItem/DepotItemService.java | 530 + .../service/functions/FunctionComponent.java | 73 + .../service/functions/FunctionResource.java | 15 + .../service/functions/FunctionService.java | 209 + .../service/inOutItem/InOutItemComponent.java | 75 + .../service/inOutItem/InOutItemResource.java | 15 + .../service/inOutItem/InOutItemService.java | 202 + .../com/jsh/erp/service/log/LogComponent.java | 83 + .../com/jsh/erp/service/log/LogResource.java | 15 + .../com/jsh/erp/service/log/LogService.java | 180 + .../service/material/MaterialComponent.java | 82 + .../service/material/MaterialResource.java | 15 + .../erp/service/material/MaterialService.java | 796 ++ .../MaterialCategoryComponent.java | 75 + .../MaterialCategoryResource.java | 15 + .../MaterialCategoryService.java | 374 + .../MaterialExtendComponent.java | 65 + .../MaterialExtendResource.java | 15 + .../materialExtend/MaterialExtendService.java | 362 + .../MaterialPropertyComponent.java | 71 + .../MaterialPropertyResource.java | 15 + .../MaterialPropertyService.java | 141 + .../com/jsh/erp/service/msg/MsgComponent.java | 72 + .../com/jsh/erp/service/msg/MsgResource.java | 15 + .../com/jsh/erp/service/msg/MsgService.java | 252 + .../orgaUserRel/OrgaUserRelComponent.java | 67 + .../orgaUserRel/OrgaUserRelResource.java | 19 + .../orgaUserRel/OrgaUserRelService.java | 222 + .../organization/OrganizationComponent.java | 68 + .../organization/OrganizationResource.java | 18 + .../organization/OrganizationService.java | 306 + .../erp/service/person/PersonComponent.java | 75 + .../erp/service/person/PersonResource.java | 15 + .../jsh/erp/service/person/PersonService.java | 233 + .../PlatformConfigComponent.java | 70 + .../PlatformConfigResource.java | 15 + .../platformConfig/PlatformConfigService.java | 148 + .../jsh/erp/service/redis/RedisService.java | 98 + .../jsh/erp/service/role/RoleComponent.java | 70 + .../jsh/erp/service/role/RoleResource.java | 15 + .../com/jsh/erp/service/role/RoleService.java | 186 + .../service/sequence/SequenceComponent.java | 74 + .../service/sequence/SequenceResource.java | 18 + .../erp/service/sequence/SequenceService.java | 100 + .../serialNumber/SerialNumberComponent.java | 78 + .../serialNumber/SerialNumberResource.java | 18 + .../serialNumber/SerialNumberService.java | 461 + .../service/supplier/SupplierComponent.java | 79 + .../service/supplier/SupplierResource.java | 15 + .../erp/service/supplier/SupplierService.java | 390 + .../systemConfig/SystemConfigComponent.java | 73 + .../systemConfig/SystemConfigResource.java | 15 + .../systemConfig/SystemConfigService.java | 208 + .../erp/service/tenant/TenantComponent.java | 72 + .../erp/service/tenant/TenantResource.java | 15 + .../jsh/erp/service/tenant/TenantService.java | 153 + .../jsh/erp/service/unit/UnitComponent.java | 71 + .../jsh/erp/service/unit/UnitResource.java | 15 + .../com/jsh/erp/service/unit/UnitService.java | 202 + .../jsh/erp/service/user/UserComponent.java | 73 + .../jsh/erp/service/user/UserResource.java | 15 + .../com/jsh/erp/service/user/UserService.java | 745 + .../userBusiness/UserBusinessComponent.java | 69 + .../userBusiness/UserBusinessResource.java | 15 + .../userBusiness/UserBusinessService.java | 198 + .../com/jsh/erp/utils/AnnotationUtils.java | 28 + .../com/jsh/erp/utils/BaseResponseInfo.java | 11 + .../com/jsh/erp/utils/ColumnPropertyUtil.java | 65 + .../java/com/jsh/erp/utils/ComputerInfo.java | 155 + .../java/com/jsh/erp/utils/Constants.java | 34 + .../main/java/com/jsh/erp/utils/ErpInfo.java | 37 + .../java/com/jsh/erp/utils/ExcelUtils.java | 240 + .../jsh/erp/utils/ExceptionCodeConstants.java | 33 + .../com/jsh/erp/utils/ExportExecUtil.java | 28 + .../java/com/jsh/erp/utils/ExtJsonUtils.java | 141 + .../java/com/jsh/erp/utils/FileUtils.java | 333 + .../java/com/jsh/erp/utils/HttpClient.java | 88 + .../java/com/jsh/erp/utils/JsonUtils.java | 22 + .../java/com/jsh/erp/utils/OrderUtils.java | 69 + .../java/com/jsh/erp/utils/PageQueryInfo.java | 30 + .../java/com/jsh/erp/utils/ParamUtils.java | 57 + .../java/com/jsh/erp/utils/QueryUtils.java | 142 + .../java/com/jsh/erp/utils/RandImageUtil.java | 140 + .../java/com/jsh/erp/utils/RegExpTools.java | 154 + .../java/com/jsh/erp/utils/ResponseCode.java | 24 + .../com/jsh/erp/utils/ResponseJsonUtil.java | 83 + .../java/com/jsh/erp/utils/StringUtil.java | 257 + .../main/java/com/jsh/erp/utils/Tools.java | 696 + .../src/main/resources/application.properties | 28 + .../src/main/resources/logback-spring.xml | 34 + .../mapper_xml/AccountHeadMapper.xml | 338 + .../mapper_xml/AccountHeadMapperEx.xml | 139 + .../mapper_xml/AccountItemMapper.xml | 258 + .../mapper_xml/AccountItemMapperEx.xml | 109 + .../resources/mapper_xml/AccountMapper.xml | 276 + .../resources/mapper_xml/AccountMapperEx.xml | 201 + .../resources/mapper_xml/DepotHeadMapper.xml | 608 + .../mapper_xml/DepotHeadMapperEx.xml | 441 + .../resources/mapper_xml/DepotItemMapper.xml | 543 + .../mapper_xml/DepotItemMapperEx.xml | 418 + .../main/resources/mapper_xml/DepotMapper.xml | 383 + .../resources/mapper_xml/DepotMapperEx.xml | 59 + .../resources/mapper_xml/FunctionMapper.xml | 338 + .../resources/mapper_xml/FunctionMapperEx.xml | 43 + .../resources/mapper_xml/InOutItemMapper.xml | 228 + .../mapper_xml/InOutItemMapperEx.xml | 48 + .../main/resources/mapper_xml/LogMapper.xml | 258 + .../main/resources/mapper_xml/LogMapperEx.xml | 67 + .../mapper_xml/MaterialCategoryMapper.xml | 306 + .../mapper_xml/MaterialCategoryMapperEx.xml | 142 + .../mapper_xml/MaterialCurrentStockMapper.xml | 228 + .../mapper_xml/MaterialExtendMapper.xml | 371 + .../mapper_xml/MaterialExtendMapperEx.xml | 68 + .../mapper_xml/MaterialInitialStockMapper.xml | 228 + .../resources/mapper_xml/MaterialMapper.xml | 418 + .../resources/mapper_xml/MaterialMapperEx.xml | 296 + .../mapper_xml/MaterialPropertyMapper.xml | 228 + .../mapper_xml/MaterialPropertyMapperEx.xml | 36 + .../main/resources/mapper_xml/MsgMapper.xml | 318 + .../main/resources/mapper_xml/MsgMapperEx.xml | 71 + .../mapper_xml/OrgaUserRelMapper.xml | 351 + .../mapper_xml/OrgaUserRelMapperEx.xml | 44 + .../mapper_xml/OrganizationMapper.xml | 306 + .../mapper_xml/OrganizationMapperEx.xml | 98 + .../resources/mapper_xml/PersonMapper.xml | 211 + .../resources/mapper_xml/PersonMapperEx.xml | 42 + .../mapper_xml/PlatformConfigMapper.xml | 196 + .../main/resources/mapper_xml/RoleMapper.xml | 243 + .../resources/mapper_xml/RoleMapperEx.xml | 36 + .../resources/mapper_xml/SequenceMapperEx.xml | 13 + .../mapper_xml/SerialNumberMapper.xml | 323 + .../mapper_xml/SerialNumberMapperEx.xml | 247 + .../resources/mapper_xml/SupplierMapper.xml | 495 + .../resources/mapper_xml/SupplierMapperEx.xml | 75 + .../mapper_xml/SystemConfigMapper.xml | 323 + .../mapper_xml/SystemConfigMapperEx.xml | 36 + .../resources/mapper_xml/TenantMapper.xml | 288 + .../resources/mapper_xml/TenantMapperEx.xml | 24 + .../main/resources/mapper_xml/UnitMapper.xml | 243 + .../resources/mapper_xml/UnitMapperEx.xml | 36 + .../mapper_xml/UserBusinessMapper.xml | 228 + .../mapper_xml/UserBusinessMapperEx.xml | 15 + .../main/resources/mapper_xml/UserMapper.xml | 353 + .../resources/mapper_xml/UserMapperEx.xml | 125 + jshERP-boot/src/test/java/Test.java | 12 + jshERP-boot/src/test/java/ThreadPoolTest.java | 64 + .../src/test/java/com/jsh/erp/DepotTest.java | 35 + .../src/test/resources/generatorConfig.xml | 73 + jshERP-web/.editorconfig | 39 + jshERP-web/.eslintignore | 1 + jshERP-web/.gitattributes | 1 + jshERP-web/.gitignore | 21 + jshERP-web/.prettierrc | 5 + jshERP-web/README.md | 100 + jshERP-web/babel.config.js | 6 + jshERP-web/idea.config.js | 24 + jshERP-web/package.json | 108 + jshERP-web/public/avatar2.jpg | Bin 0 -> 80189 bytes .../cdn/babel-polyfill/polyfill_7_2_5.js | 6953 +++++++++ jshERP-web/public/color.less | 7701 ++++++++++ jshERP-web/public/doc/goods_template.xls | Bin 0 -> 19968 bytes jshERP-web/public/favicon.ico | Bin 0 -> 51262 bytes jshERP-web/public/goright.png | Bin 0 -> 1105 bytes jshERP-web/public/index.html | 278 + jshERP-web/public/logo.png | Bin 0 -> 6686 bytes jshERP-web/public/tinymce/langs/zh_CN.js | 261 + .../tinymce/skins/lightgray/content.min.css | 554 + .../tinymce/skins/lightgray/skin.min.css | 2159 +++ jshERP-web/public/v2.js | 1 + jshERP-web/src/App.vue | 44 + jshERP-web/src/api/GroupRequest.js | 30 + jshERP-web/src/api/api.js | 271 + jshERP-web/src/api/index.js | 10 + jshERP-web/src/api/login.js | 69 + jshERP-web/src/api/manage.js | 177 + jshERP-web/src/assets/background.svg | 69 + jshERP-web/src/assets/checkcode.png | Bin 0 -> 2236 bytes jshERP-web/src/assets/daiban.png | Bin 0 -> 3632 bytes jshERP-web/src/assets/duban.png | Bin 0 -> 4933 bytes jshERP-web/src/assets/guaz.png | Bin 0 -> 7491 bytes jshERP-web/src/assets/less/JAreaLinkage.less | 259 + jshERP-web/src/assets/less/TableExpand.less | 15 + jshERP-web/src/assets/less/common.less | 58 + jshERP-web/src/assets/less/index.less | 28 + jshERP-web/src/assets/logo.png | Bin 0 -> 6686 bytes jshERP-web/src/assets/logo.psd | Bin 0 -> 56354 bytes jshERP-web/src/assets/logo_top.png | Bin 0 -> 1871 bytes jshERP-web/src/assets/nodata.png | Bin 0 -> 101556 bytes jshERP-web/src/assets/pdf4.jpg | Bin 0 -> 50960 bytes jshERP-web/src/assets/zaiban.png | Bin 0 -> 10332 bytes jshERP-web/src/cas/sso.js | 73 + jshERP-web/src/components/AvatarList/Item.vue | 46 + jshERP-web/src/components/AvatarList/List.vue | 100 + jshERP-web/src/components/AvatarList/index.js | 4 + .../src/components/AvatarList/index.less | 60 + jshERP-web/src/components/ChartCard.vue | 105 + .../src/components/CountDown/CountDown.vue | 103 + jshERP-web/src/components/CountDown/index.js | 3 + .../src/components/Ellipsis/Ellipsis.vue | 49 + jshERP-web/src/components/Ellipsis/index.js | 3 + .../src/components/NumberInfo/NumberInfo.vue | 54 + jshERP-web/src/components/NumberInfo/index.js | 3 + .../src/components/NumberInfo/index.less | 55 + jshERP-web/src/components/README.md | 43 + jshERP-web/src/components/Trend/Trend.vue | 41 + jshERP-web/src/components/Trend/index.js | 3 + jshERP-web/src/components/Trend/index.less | 42 + jshERP-web/src/components/_util/Area.js | 79 + jshERP-web/src/components/_util/StringUtil.js | 35 + jshERP-web/src/components/_util/util.js | 12 + .../src/components/chart/AreaChartTy.vue | 88 + jshERP-web/src/components/chart/Bar.vue | 50 + .../src/components/chart/BarAndLine.vue | 60 + jshERP-web/src/components/chart/BarMultid.vue | 88 + .../src/components/chart/DashChartDemo.vue | 187 + jshERP-web/src/components/chart/IndexBar.vue | 61 + .../src/components/chart/LineChartMultid.vue | 94 + jshERP-web/src/components/chart/Liquid.vue | 80 + jshERP-web/src/components/chart/MiniArea.vue | 69 + jshERP-web/src/components/chart/MiniBar.vue | 76 + .../src/components/chart/MiniProgress.vue | 75 + jshERP-web/src/components/chart/Pie.vue | 70 + jshERP-web/src/components/chart/README.md | 367 + jshERP-web/src/components/chart/Radar.vue | 90 + jshERP-web/src/components/chart/RankList.vue | 81 + jshERP-web/src/components/chart/StackBar.vue | 54 + .../src/components/chart/TransferBar.vue | 66 + jshERP-web/src/components/chart/Trend.vue | 84 + jshERP-web/src/components/chart/chart.less | 13 + jshERP-web/src/components/chart/chart.scss | 13 + .../components/chart/mixins/ChartMixins.js | 10 + .../src/components/dict/JDictSelectTag.vue | 103 + .../src/components/dict/JDictSelectUtil.js | 142 + .../src/components/dict/JMultiSelectTag.vue | 107 + .../src/components/dict/JSearchSelectTag.vue | 201 + jshERP-web/src/components/dict/README.md | 181 + jshERP-web/src/components/dict/index.js | 7 + jshERP-web/src/components/index.less | 4 + .../src/components/jeecg/JAreaLinkage.vue | 156 + .../src/components/jeecg/JCategorySelect.vue | 238 + jshERP-web/src/components/jeecg/JCheckbox.vue | 43 + .../src/components/jeecg/JCodeEditor.vue | 429 + jshERP-web/src/components/jeecg/JCron.vue | 65 + jshERP-web/src/components/jeecg/JDate.vue | 85 + .../src/components/jeecg/JEditableTable.vue | 3057 ++++ jshERP-web/src/components/jeecg/JEditor.vue | 118 + jshERP-web/src/components/jeecg/JEllipsis.vue | 29 + .../src/components/jeecg/JFormContainer.vue | 61 + .../src/components/jeecg/JGraphicCode.vue | 202 + .../src/components/jeecg/JImageUpload.vue | 201 + .../src/components/jeecg/JImportModal.vue | 123 + jshERP-web/src/components/jeecg/JInput.vue | 100 + .../jeecg/JMarkdownEditor/default-options.js | 30 + .../jeecg/JMarkdownEditor/index.vue | 121 + .../src/components/jeecg/JModal/index.vue | 225 + .../src/components/jeecg/JSelectMultiple.vue | 66 + jshERP-web/src/components/jeecg/JSlider.vue | 116 + .../src/components/jeecg/JSuperQuery.vue | 640 + jshERP-web/src/components/jeecg/JSwitch.vue | 57 + jshERP-web/src/components/jeecg/JTreeDict.vue | 199 + .../src/components/jeecg/JTreeSelect.vue | 260 + .../src/components/jeecg/JTreeTable.vue | 180 + jshERP-web/src/components/jeecg/JUpload.vue | 434 + jshERP-web/src/components/jeecg/README.md | 512 + .../components/jeecg/README_JEditableTable.md | 577 + jshERP-web/src/components/jeecg/index.js | 9 + .../src/components/jeecg/minipop/JFilePop.vue | 113 + .../components/jeecg/minipop/JInputPop.vue | 98 + .../src/components/jeecg/modal/JCronModal.vue | 928 ++ .../JSelectBizComponentModal.vue | 334 + .../jeecgbiz/JSelectBizComponent/README.md | 36 + .../jeecgbiz/JSelectBizComponent/index.vue | 165 + .../src/components/jeecgbiz/JSelectDepart.vue | 122 + .../components/jeecgbiz/JSelectMaterial.vue | 87 + .../components/jeecgbiz/JSelectMultiUser.vue | 47 + .../components/jeecgbiz/JSelectPosition.vue | 37 + .../src/components/jeecgbiz/JSelectRole.vue | 38 + .../jeecgbiz/JSelectSerialMaterial.vue | 87 + .../components/jeecgbiz/JSelectUserByDep.vue | 89 + jshERP-web/src/components/jeecgbiz/README.md | 137 + .../jeecgbiz/modal/JSelectDepartModal.vue | 241 + .../jeecgbiz/modal/JSelectMaterialModal.vue | 296 + .../modal/JSelectSerialMaterialModal.vue | 244 + .../jeecgbiz/modal/JSelectUserByDepModal.vue | 329 + .../jeecgbiz/modal/SelectUserListModal.vue | 122 + .../src/components/layouts/BasicLayout.vue | 60 + .../src/components/layouts/BlankLayout.vue | 16 + .../components/layouts/IframeFReportView.vue | 47 + .../src/components/layouts/IframePageView.vue | 51 + .../src/components/layouts/PageView.vue | 85 + .../src/components/layouts/RouteView.vue | 19 + .../src/components/layouts/TabLayout.vue | 412 + .../src/components/layouts/UserLayout.vue | 124 + jshERP-web/src/components/layouts/index.js | 8 + .../src/components/menu/Contextmenu.vue | 71 + jshERP-web/src/components/menu/SideMenu.vue | 177 + jshERP-web/src/components/menu/index.js | 188 + .../src/components/page/GlobalFooter.vue | 38 + .../src/components/page/GlobalHeader.vue | 219 + .../src/components/page/GlobalLayout.vue | 682 + jshERP-web/src/components/page/PageHeader.vue | 238 + jshERP-web/src/components/page/PageLayout.vue | 127 + .../src/components/page/SHeaderNotice.vue | 58 + .../src/components/setting/SettingDrawer.vue | 330 + .../src/components/setting/SettingItem.vue | 38 + jshERP-web/src/components/table/README.md | 292 + .../src/components/table/StandardTable.vue | 252 + jshERP-web/src/components/table/index.js | 268 + .../src/components/tools/Breadcrumb.vue | 48 + .../src/components/tools/DepartSelect.vue | 162 + .../src/components/tools/DetailList.vue | 147 + .../src/components/tools/DynamicNotice.vue | 36 + .../src/components/tools/FooterToolBar.vue | 32 + jshERP-web/src/components/tools/HeadInfo.vue | 66 + .../src/components/tools/HeaderNotice.vue | 319 + jshERP-web/src/components/tools/Logo.vue | 57 + .../src/components/tools/ShowAnnouncement.vue | 139 + .../src/components/tools/TwoStepCaptcha.vue | 89 + jshERP-web/src/components/tools/UserMenu.vue | 242 + .../src/components/tools/UserPassword.vue | 157 + jshERP-web/src/components/tools/setting.js | 95 + jshERP-web/src/config/router.config.js | 82 + jshERP-web/src/defaultSettings.js | 32 + jshERP-web/src/main.js | 72 + .../src/mixins/DisabledAuthFilterMixin.js | 19 + jshERP-web/src/mixins/JEditableTableMixin.js | 163 + jshERP-web/src/mixins/JeecgListMixin.js | 348 + jshERP-web/src/mixins/OnlAutoListMixin.js | 78 + jshERP-web/src/mixins/OnlineCommonUtil.js | 26 + jshERP-web/src/permission.js | 65 + jshERP-web/src/router/README.md | 139 + jshERP-web/src/router/index.js | 22 + jshERP-web/src/store/getters.js | 22 + jshERP-web/src/store/index.js | 29 + jshERP-web/src/store/modules/app.js | 126 + jshERP-web/src/store/modules/enhance.js | 37 + jshERP-web/src/store/modules/permission.js | 91 + jshERP-web/src/store/modules/user.js | 202 + jshERP-web/src/store/mutation-types.js | 26 + jshERP-web/src/utils/JEditableTableUtil.js | 113 + jshERP-web/src/utils/LunarFullCalendarUtil.js | 107 + jshERP-web/src/utils/auth.js | 19 + jshERP-web/src/utils/authFilter.js | 243 + jshERP-web/src/utils/axios.js | 37 + jshERP-web/src/utils/commonUploadFile.js | 52 + .../src/utils/desform/CustomExpression.js | 22 + jshERP-web/src/utils/device.js | 23 + jshERP-web/src/utils/encryption/aesEncrypt.js | 6003 ++++++++ jshERP-web/src/utils/filter.js | 30 + jshERP-web/src/utils/hasPermission.js | 120 + jshERP-web/src/utils/mixin.js | 40 + jshERP-web/src/utils/permissions.js | 8 + jshERP-web/src/utils/props-util.js | 115 + jshERP-web/src/utils/request.js | 116 + jshERP-web/src/utils/storage.js | 78 + jshERP-web/src/utils/util.js | 539 + jshERP-web/src/utils/validate.js | 31 + jshERP-web/src/utils/vueBus.js | 5 + jshERP-web/src/views/404.vue | 15 + jshERP-web/src/views/Home.vue | 162 + jshERP-web/src/views/account/center/Index.vue | 286 + .../src/views/account/center/page/App.vue | 113 + .../src/views/account/center/page/Article.vue | 24 + .../src/views/account/center/page/Project.vue | 17 + .../src/views/account/center/page/index.js | 5 + .../views/account/settings/AvatarModal.vue | 103 + .../views/account/settings/BaseSetting.vue | 161 + .../src/views/account/settings/Binding.vue | 25 + .../src/views/account/settings/Custom.vue | 75 + .../src/views/account/settings/Index.vue | 154 + .../views/account/settings/Notification.vue | 25 + .../src/views/account/settings/Security.vue | 41 + .../src/views/bill/AllocationOutList.vue | 162 + jshERP-web/src/views/bill/AssembleList.vue | 162 + jshERP-web/src/views/bill/DisassembleList.vue | 162 + jshERP-web/src/views/bill/OtherInList.vue | 163 + jshERP-web/src/views/bill/OtherOutList.vue | 163 + .../src/views/bill/PurchaseBackList.vue | 170 + jshERP-web/src/views/bill/PurchaseInList.vue | 170 + .../src/views/bill/PurchaseOrderList.vue | 174 + jshERP-web/src/views/bill/RetailBackList.vue | 164 + jshERP-web/src/views/bill/RetailOutList.vue | 164 + jshERP-web/src/views/bill/SaleBackList.vue | 162 + jshERP-web/src/views/bill/SaleOrderList.vue | 174 + jshERP-web/src/views/bill/SaleOutList.vue | 170 + .../views/bill/dialog/ManyAccountModal.vue | 170 + .../src/views/bill/mixins/BillListMixin.js | 50 + .../src/views/bill/mixins/BillModalMixin.js | 324 + .../views/bill/modules/AllocationOutModal.vue | 173 + .../src/views/bill/modules/AssembleModal.vue | 184 + .../views/bill/modules/DisassembleModal.vue | 183 + .../src/views/bill/modules/OtherInModal.vue | 180 + .../src/views/bill/modules/OtherOutModal.vue | 180 + .../views/bill/modules/PurchaseBackModal.vue | 238 + .../views/bill/modules/PurchaseInModal.vue | 260 + .../views/bill/modules/PurchaseOrderModal.vue | 182 + .../views/bill/modules/RetailBackModal.vue | 230 + .../src/views/bill/modules/RetailOutModal.vue | 237 + .../src/views/bill/modules/SaleBackModal.vue | 238 + .../src/views/bill/modules/SaleOrderModal.vue | 180 + .../src/views/bill/modules/SaleOutModal.vue | 238 + jshERP-web/src/views/dashboard/Analysis.vue | 27 + jshERP-web/src/views/dashboard/IndexBdc.vue | 519 + jshERP-web/src/views/dashboard/IndexChart.vue | 167 + jshERP-web/src/views/dashboard/IndexTask.vue | 372 + jshERP-web/src/views/dashboard/Monitor.vue | 15 + jshERP-web/src/views/dashboard/Workplace.vue | 360 + jshERP-web/src/views/exception/403.vue | 17 + jshERP-web/src/views/exception/404.vue | 17 + jshERP-web/src/views/exception/500.vue | 17 + .../src/views/exception/ExceptionPage.vue | 88 + jshERP-web/src/views/exception/type.js | 19 + .../src/views/financial/AdvanceInList.vue | 143 + jshERP-web/src/views/financial/GiroList.vue | 142 + jshERP-web/src/views/financial/ItemInList.vue | 143 + .../src/views/financial/ItemOutList.vue | 143 + .../src/views/financial/MoneyInList.vue | 143 + .../src/views/financial/MoneyOutList.vue | 143 + .../financial/mixins/FinancialListMixin.js | 49 + .../financial/mixins/FinancialModalMixin.js | 174 + .../financial/modules/AdvanceInModal.vue | 180 + .../src/views/financial/modules/GiroModal.vue | 182 + .../views/financial/modules/ItemInModal.vue | 189 + .../views/financial/modules/ItemOutModal.vue | 189 + .../views/financial/modules/MoneyInModal.vue | 180 + .../views/financial/modules/MoneyOutModal.vue | 180 + jshERP-web/src/views/form/BasicForm.vue | 138 + .../views/form/advancedForm/AdvancedForm.vue | 206 + .../form/advancedForm/RepositoryForm.vue | 119 + .../src/views/form/advancedForm/TaskForm.vue | 107 + jshERP-web/src/views/form/stepForm/Step1.vue | 60 + jshERP-web/src/views/form/stepForm/Step2.vue | 82 + jshERP-web/src/views/form/stepForm/Step3.vue | 69 + .../src/views/form/stepForm/StepForm.vue | 62 + jshERP-web/src/views/list/CardList.vue | 110 + jshERP-web/src/views/list/PermissionList.vue | 272 + jshERP-web/src/views/list/RoleList.vue | 182 + jshERP-web/src/views/list/StandardList.vue | 164 + .../src/views/list/TableInnerEditList.vue | 270 + jshERP-web/src/views/list/TableList.vue | 337 + jshERP-web/src/views/list/UserList.vue | 264 + .../src/views/list/modules/RoleModal.vue | 203 + .../src/views/list/search/SearchLayout.vue | 78 + .../views/material/MaterialCategoryList.vue | 487 + .../src/views/material/MaterialList.vue | 235 + .../views/material/MaterialPropertyList.vue | 107 + .../modules/MaterialCategoryModal.vue | 145 + .../views/material/modules/MaterialModal.vue | 490 + .../modules/MaterialPropertyModal.vue | 117 + .../views/modules/message/SysMessageList.vue | 238 + .../message/SysMessageTemplateList.vue | 253 + .../message/modules/SysMessageModal.vue | 185 + .../modules/SysMessageTemplateModal.vue | 223 + .../message/modules/SysMessageTestModal.vue | 122 + .../views/modules/monitor/DiskMonitoring.vue | 49 + .../src/views/modules/monitor/HttpTrace.vue | 148 + .../src/views/modules/monitor/JvmInfo.vue | 169 + .../src/views/modules/monitor/RedisInfo.vue | 189 + .../views/modules/monitor/RedisTerminal.vue | 13 + .../src/views/modules/monitor/SystemInfo.vue | 137 + .../src/views/modules/monitor/TomcatInfo.vue | 149 + .../online/cgform/OnlCgformCopyList.vue | 391 + .../online/cgform/OnlCgformHeadList.vue | 493 + .../online/cgform/auto/ButtonExpHandler.js | 41 + .../online/cgform/auto/OnlCgformAutoList.vue | 827 ++ .../online/cgform/auto/OnlCgformTreeList.vue | 696 + .../cgform/auto/erp/OnlCgformErpList.vue | 111 + .../modules/online/cgform/util/TableUtils.js | 269 + .../online/cgreport/OnlCgreportHeadList.vue | 256 + .../cgreport/auto/OnlCgreportAutoList.vue | 320 + .../src/views/modules/oss/OSSFileList.vue | 196 + jshERP-web/src/views/plugin/car/Car.vue | 110 + jshERP-web/src/views/plugin/car/car.html | 36 + jshERP-web/src/views/plugin/car/main.js | 69 + jshERP-web/src/views/plugin/car/page1.vue | 13 + jshERP-web/src/views/plugin/car/router.js | 17 + jshERP-web/src/views/plugin/car/store.js | 16 + .../src/views/profile/advanced/Advanced.vue | 342 + jshERP-web/src/views/profile/basic/Index.vue | 255 + jshERP-web/src/views/report/AccountReport.vue | 141 + jshERP-web/src/views/report/BuyInReport.vue | 117 + .../src/views/report/CustomerAccount.vue | 186 + jshERP-web/src/views/report/InDetail.vue | 181 + .../src/views/report/InMaterialCount.vue | 177 + .../src/views/report/InOutStockReport.vue | 178 + jshERP-web/src/views/report/OutDetail.vue | 181 + .../src/views/report/OutMaterialCount.vue | 177 + jshERP-web/src/views/report/SaleOutReport.vue | 120 + .../src/views/report/StockWarningReport.vue | 136 + jshERP-web/src/views/report/VendorAccount.vue | 186 + .../views/report/modules/AccountInOutList.vue | 124 + jshERP-web/src/views/result/Error.vue | 45 + jshERP-web/src/views/result/Result.vue | 91 + jshERP-web/src/views/result/Success.vue | 92 + jshERP-web/src/views/system/AccountList.vue | 154 + jshERP-web/src/views/system/AddressList.vue | 31 + jshERP-web/src/views/system/CustomerList.vue | 166 + jshERP-web/src/views/system/DataLogList.vue | 138 + jshERP-web/src/views/system/DepartList.vue | 657 + jshERP-web/src/views/system/DepartList2.vue | 260 + .../src/views/system/DepartUserList.vue | 221 + jshERP-web/src/views/system/DepotList.vue | 151 + .../src/views/system/DictDeleteList.vue | 138 + jshERP-web/src/views/system/DictItemList.vue | 207 + jshERP-web/src/views/system/DictList.vue | 208 + jshERP-web/src/views/system/FunctionList.vue | 127 + jshERP-web/src/views/system/InOutItemList.vue | 134 + jshERP-web/src/views/system/LogList.vue | 176 + jshERP-web/src/views/system/MemberList.vue | 166 + .../src/views/system/NewPermissionList.vue | 227 + .../src/views/system/OrganizationList.vue | 517 + .../views/system/PermissionDataRuleList.vue | 188 + .../src/views/system/PermissionList.vue | 196 + jshERP-web/src/views/system/PersonList.vue | 132 + jshERP-web/src/views/system/PluginList.vue | 235 + jshERP-web/src/views/system/QuartzJobList.vue | 263 + jshERP-web/src/views/system/RoleList.vue | 152 + jshERP-web/src/views/system/RoleUserList.vue | 548 + .../src/views/system/SerialNumberList.vue | 151 + .../src/views/system/SysAnnouncementList.vue | 291 + .../src/views/system/SysCategoryList.vue | 302 + .../src/views/system/SysCheckRuleList.vue | 178 + .../src/views/system/SysDataSourceList.vue | 188 + .../src/views/system/SysFillRuleList.vue | 187 + .../src/views/system/SysPositionList.vue | 178 + .../src/views/system/SystemConfigList.vue | 133 + jshERP-web/src/views/system/UnitList.vue | 116 + .../src/views/system/UserAnnouncementList.vue | 192 + jshERP-web/src/views/system/UserList.vue | 222 + jshERP-web/src/views/system/VendorList.vue | 166 + .../src/views/system/modules/AccountModal.vue | 138 + .../views/system/modules/AddressListLeft.vue | 99 + .../views/system/modules/AddressListRight.vue | 211 + .../views/system/modules/CustomerModal.vue | 206 + .../system/modules/DataLogCompareModal.vue | 163 + .../src/views/system/modules/DataLogModal.vue | 153 + .../views/system/modules/DepartAuthModal.vue | 188 + .../system/modules/DepartDataruleModal.vue | 116 + .../src/views/system/modules/DepartModal.vue | 223 + .../src/views/system/modules/DepartWindow.vue | 185 + .../src/views/system/modules/DepotModal.vue | 139 + .../src/views/system/modules/DeptBaseInfo.vue | 129 + .../system/modules/DeptRoleAuthModal.vue | 213 + .../system/modules/DeptRoleDataruleModal.vue | 122 + .../src/views/system/modules/DeptRoleInfo.vue | 191 + .../system/modules/DeptRoleUserModal.vue | 200 + .../src/views/system/modules/DeptUserInfo.vue | 342 + .../views/system/modules/DictItemModal.vue | 158 + .../src/views/system/modules/DictModal.vue | 151 + .../views/system/modules/FunctionModal.vue | 174 + .../views/system/modules/InOutItemModal.vue | 134 + .../src/views/system/modules/MemberModal.vue | 206 + .../system/modules/OrganizationModal.vue | 149 + .../views/system/modules/PasswordModal.vue | 142 + .../modules/PermissionDataRuleModal.vue | 179 + .../views/system/modules/PermissionModal.vue | 430 + .../src/views/system/modules/PersonModal.vue | 132 + .../src/views/system/modules/PluginModal.vue | 114 + .../views/system/modules/QuartzJobModal.vue | 190 + .../system/modules/RoleDataruleModal.vue | 120 + .../system/modules/RoleFunctionModal.vue | 209 + .../src/views/system/modules/RoleModal.vue | 141 + .../views/system/modules/RolePushBtnModal.vue | 141 + .../system/modules/SelectUserListModal.vue | 290 + .../views/system/modules/SelectUserModal.vue | 287 + .../system/modules/SerialNumberBatchModal.vue | 130 + .../system/modules/SerialNumberModal.vue | 147 + .../system/modules/SysAnnouncementModal.vue | 332 + .../views/system/modules/SysCategoryModal.vue | 194 + .../system/modules/SysCheckRuleModal.vue | 379 + .../system/modules/SysCheckRuleTestModal.vue | 58 + .../system/modules/SysDataSourceModal.vue | 239 + .../system/modules/SysDepartRoleModal.vue | 162 + .../views/system/modules/SysFillRuleModal.vue | 158 + .../views/system/modules/SysPositionModal.vue | 180 + .../system/modules/SysUserAgentModal.vue | 181 + .../system/modules/SystemConfigModal.vue | 175 + .../src/views/system/modules/UnitModal.vue | 121 + .../src/views/system/modules/UserModal.vue | 367 + .../system/modules/UserRecycleBinModal.vue | 193 + .../views/system/modules/UserRoleModal.vue | 200 + .../src/views/system/modules/VendorModal.vue | 206 + .../src/views/system/modules/icon/Icon.less | 35 + .../src/views/system/modules/icon/Icons.vue | 123 + jshERP-web/src/views/user/Login.vue | 348 + jshERP-web/src/views/user/Register.vue | 337 + jshERP-web/src/views/user/RegisterResult.vue | 52 + jshERP-web/vue.config.js | 112 + jshERP-web/yarn | 0 jshERP-web/yarn.lock | 11903 ++++++++++++++++ 803 files changed, 171959 insertions(+), 27 deletions(-) create mode 100644 jshERP-boot/.gitattributes create mode 100644 jshERP-boot/.gitignore create mode 100644 jshERP-boot/docs/jsh_erp.sql create mode 100644 jshERP-boot/docs/华夏ERP数据库设计汇总.xlsx create mode 100644 jshERP-boot/docs/数据库更新记录-首次安装请勿使用.txt create mode 100644 jshERP-boot/pom.xml create mode 100644 jshERP-boot/src/main/assembly/assembly.xml create mode 100644 jshERP-boot/src/main/bin/restart.sh create mode 100644 jshERP-boot/src/main/bin/run-manage.sh create mode 100644 jshERP-boot/src/main/bin/start.bat create mode 100644 jshERP-boot/src/main/bin/start.sh create mode 100644 jshERP-boot/src/main/bin/status.sh create mode 100644 jshERP-boot/src/main/bin/stop.sh create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/ErpApplication.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/config/PluginBeanConfig.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/config/PluginConfiguration.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/config/Swagger2Config.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/config/TenantConfig.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/constants/BusinessConstants.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/constants/ExceptionConstants.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/AccountController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/AccountHeadController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/AccountItemController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/DepotController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/DepotHeadController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/DepotItemController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/FunctionController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/InOutItemController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialCategoryController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialExtendController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialPropertyController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/MsgController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/OrganizationController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/PersonController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/PlatformConfigController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/PluginController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/ResourceController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/RoleController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/SequenceController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/SerialNumberController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/SupplierController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/SystemConfigController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/UnitController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/UserBusinessController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/controller/UserController.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Account.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountHead.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountHeadExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountHeadVo4Body.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountHeadVo4ListEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountItem.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountItemExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Depot.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotHead.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotHeadExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotHeadVo4Body.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItem.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItemExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItemVo4DetailByTypeAndMId.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItemVo4Material.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItemVo4WithInfoEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Function.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/FunctionExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/InOutItem.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/InOutItemExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Log.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/LogExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Material.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialCategory.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialCategoryExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialCurrentStock.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialCurrentStockExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialExtend.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialExtendExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialInitialStock.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialInitialStockExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialProperty.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialPropertyExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialVo4Unit.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialWithInitStock.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Msg.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MsgExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/OrgaUserRel.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/OrgaUserRelEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/OrgaUserRelExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Organization.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/OrganizationExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Person.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/PersonExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/PlatformConfig.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/PlatformConfigExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Role.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/RoleExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SerialNumber.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SerialNumberEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SerialNumberExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Supplier.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SupplierExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SysLoginModel.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SystemConfig.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SystemConfigExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Tenant.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/TenantExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Unit.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UnitExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/User.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UserBusiness.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UserBusinessExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UserEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UserExample.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountHeadMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountHeadMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountItemMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountItemMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotHeadMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotHeadMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotItemMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotItemMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/FunctionMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/FunctionMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/InOutItemMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/InOutItemMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/LogMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/LogMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialCategoryMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialCategoryMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialCurrentStockMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialExtendMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialExtendMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialInitialStockMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialPropertyMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialPropertyMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MsgMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MsgMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/OrgaUserRelMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/OrgaUserRelMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/OrganizationMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/OrganizationMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/PersonMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/PersonMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/PlatformConfigMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/PlatformConfigMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/RoleMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/RoleMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SequenceMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SerialNumberMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SerialNumberMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SupplierMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SupplierMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SystemConfigMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SystemConfigMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/TenantMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/TenantMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UnitMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UnitMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UserBusinessMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UserBusinessMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UserMapper.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UserMapperEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/AccountItemVo4List.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/AccountVo4InOutList.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/AccountVo4List.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotHeadVo4InDetail.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotHeadVo4InOutMCount.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotHeadVo4List.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotHeadVo4StatementAccount.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotItemStockWarningCount.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotItemVo4Stock.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/LogVo4List.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/MaterialExtendVo4List.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/NodeAttributes.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/TreeNode.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/TreeNodeEx.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/exception/BusinessParamCheckingException.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/exception/BusinessRunTimeException.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/exception/GlobalExceptionHandler.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/exception/JshException.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/filter/LogCostFilter.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/CommonQueryManager.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/ICommonQuery.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/InterfaceContainer.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/ResourceInfo.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/account/AccountComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/account/AccountResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/account/AccountService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/accountHead/AccountHeadComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/accountHead/AccountHeadResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/accountHead/AccountHeadService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/accountItem/AccountItemComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/accountItem/AccountItemResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/accountItem/AccountItemService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/depot/DepotComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/depot/DepotResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/depot/DepotService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/depotHead/DepotHeadComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/depotHead/DepotHeadResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/depotHead/DepotHeadService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/functions/FunctionComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/functions/FunctionResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/functions/FunctionService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/inOutItem/InOutItemComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/inOutItem/InOutItemResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/inOutItem/InOutItemService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/log/LogComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/log/LogResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/log/LogService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/material/MaterialComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/material/MaterialResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/material/MaterialService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/materialExtend/MaterialExtendComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/materialExtend/MaterialExtendResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/materialExtend/MaterialExtendService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/materialProperty/MaterialPropertyComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/materialProperty/MaterialPropertyResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/materialProperty/MaterialPropertyService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/msg/MsgComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/msg/MsgResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/msg/MsgService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/organization/OrganizationComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/organization/OrganizationResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/organization/OrganizationService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/person/PersonComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/person/PersonResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/person/PersonService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/platformConfig/PlatformConfigComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/platformConfig/PlatformConfigResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/platformConfig/PlatformConfigService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/redis/RedisService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/role/RoleComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/role/RoleResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/role/RoleService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/sequence/SequenceComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/sequence/SequenceResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/sequence/SequenceService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/serialNumber/SerialNumberComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/serialNumber/SerialNumberResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/serialNumber/SerialNumberService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/supplier/SupplierComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/supplier/SupplierResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/supplier/SupplierService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/systemConfig/SystemConfigComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/systemConfig/SystemConfigResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/systemConfig/SystemConfigService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/tenant/TenantComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/tenant/TenantResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/tenant/TenantService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/unit/UnitComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/unit/UnitResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/unit/UnitService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/user/UserComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/user/UserResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/user/UserService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/userBusiness/UserBusinessComponent.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/userBusiness/UserBusinessResource.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/service/userBusiness/UserBusinessService.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/AnnotationUtils.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/BaseResponseInfo.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/ColumnPropertyUtil.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/ComputerInfo.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/Constants.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/ErpInfo.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/ExcelUtils.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/ExceptionCodeConstants.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/ExportExecUtil.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/ExtJsonUtils.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/FileUtils.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/HttpClient.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/JsonUtils.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/OrderUtils.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/PageQueryInfo.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/ParamUtils.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/QueryUtils.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/RandImageUtil.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/RegExpTools.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/ResponseCode.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/ResponseJsonUtil.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/StringUtil.java create mode 100644 jshERP-boot/src/main/java/com/jsh/erp/utils/Tools.java create mode 100644 jshERP-boot/src/main/resources/application.properties create mode 100644 jshERP-boot/src/main/resources/logback-spring.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/AccountHeadMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/AccountHeadMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/AccountItemMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/AccountItemMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/AccountMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/AccountMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/DepotHeadMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/DepotHeadMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/DepotItemMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/DepotItemMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/DepotMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/DepotMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/FunctionMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/FunctionMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/InOutItemMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/InOutItemMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/LogMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/LogMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/MaterialCategoryMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/MaterialCategoryMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/MaterialCurrentStockMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/MaterialExtendMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/MaterialExtendMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/MaterialInitialStockMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/MaterialMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/MaterialMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/MaterialPropertyMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/MaterialPropertyMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/MsgMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/MsgMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/OrgaUserRelMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/OrgaUserRelMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/OrganizationMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/OrganizationMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/PersonMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/PersonMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/PlatformConfigMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/RoleMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/RoleMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/SequenceMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/SerialNumberMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/SerialNumberMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/SupplierMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/SupplierMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/SystemConfigMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/SystemConfigMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/TenantMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/TenantMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/UnitMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/UnitMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/UserBusinessMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/UserBusinessMapperEx.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/UserMapper.xml create mode 100644 jshERP-boot/src/main/resources/mapper_xml/UserMapperEx.xml create mode 100644 jshERP-boot/src/test/java/Test.java create mode 100644 jshERP-boot/src/test/java/ThreadPoolTest.java create mode 100644 jshERP-boot/src/test/java/com/jsh/erp/DepotTest.java create mode 100644 jshERP-boot/src/test/resources/generatorConfig.xml create mode 100644 jshERP-web/.editorconfig create mode 100644 jshERP-web/.eslintignore create mode 100644 jshERP-web/.gitattributes create mode 100644 jshERP-web/.gitignore create mode 100644 jshERP-web/.prettierrc create mode 100644 jshERP-web/README.md create mode 100644 jshERP-web/babel.config.js create mode 100644 jshERP-web/idea.config.js create mode 100644 jshERP-web/package.json create mode 100644 jshERP-web/public/avatar2.jpg create mode 100644 jshERP-web/public/cdn/babel-polyfill/polyfill_7_2_5.js create mode 100644 jshERP-web/public/color.less create mode 100644 jshERP-web/public/doc/goods_template.xls create mode 100644 jshERP-web/public/favicon.ico create mode 100644 jshERP-web/public/goright.png create mode 100644 jshERP-web/public/index.html create mode 100644 jshERP-web/public/logo.png create mode 100644 jshERP-web/public/tinymce/langs/zh_CN.js create mode 100644 jshERP-web/public/tinymce/skins/lightgray/content.min.css create mode 100644 jshERP-web/public/tinymce/skins/lightgray/skin.min.css create mode 100644 jshERP-web/public/v2.js create mode 100644 jshERP-web/src/App.vue create mode 100644 jshERP-web/src/api/GroupRequest.js create mode 100644 jshERP-web/src/api/api.js create mode 100644 jshERP-web/src/api/index.js create mode 100644 jshERP-web/src/api/login.js create mode 100644 jshERP-web/src/api/manage.js create mode 100644 jshERP-web/src/assets/background.svg create mode 100644 jshERP-web/src/assets/checkcode.png create mode 100644 jshERP-web/src/assets/daiban.png create mode 100644 jshERP-web/src/assets/duban.png create mode 100644 jshERP-web/src/assets/guaz.png create mode 100644 jshERP-web/src/assets/less/JAreaLinkage.less create mode 100644 jshERP-web/src/assets/less/TableExpand.less create mode 100644 jshERP-web/src/assets/less/common.less create mode 100644 jshERP-web/src/assets/less/index.less create mode 100644 jshERP-web/src/assets/logo.png create mode 100644 jshERP-web/src/assets/logo.psd create mode 100644 jshERP-web/src/assets/logo_top.png create mode 100644 jshERP-web/src/assets/nodata.png create mode 100644 jshERP-web/src/assets/pdf4.jpg create mode 100644 jshERP-web/src/assets/zaiban.png create mode 100644 jshERP-web/src/cas/sso.js create mode 100644 jshERP-web/src/components/AvatarList/Item.vue create mode 100644 jshERP-web/src/components/AvatarList/List.vue create mode 100644 jshERP-web/src/components/AvatarList/index.js create mode 100644 jshERP-web/src/components/AvatarList/index.less create mode 100644 jshERP-web/src/components/ChartCard.vue create mode 100644 jshERP-web/src/components/CountDown/CountDown.vue create mode 100644 jshERP-web/src/components/CountDown/index.js create mode 100644 jshERP-web/src/components/Ellipsis/Ellipsis.vue create mode 100644 jshERP-web/src/components/Ellipsis/index.js create mode 100644 jshERP-web/src/components/NumberInfo/NumberInfo.vue create mode 100644 jshERP-web/src/components/NumberInfo/index.js create mode 100644 jshERP-web/src/components/NumberInfo/index.less create mode 100644 jshERP-web/src/components/README.md create mode 100644 jshERP-web/src/components/Trend/Trend.vue create mode 100644 jshERP-web/src/components/Trend/index.js create mode 100644 jshERP-web/src/components/Trend/index.less create mode 100644 jshERP-web/src/components/_util/Area.js create mode 100644 jshERP-web/src/components/_util/StringUtil.js create mode 100644 jshERP-web/src/components/_util/util.js create mode 100644 jshERP-web/src/components/chart/AreaChartTy.vue create mode 100644 jshERP-web/src/components/chart/Bar.vue create mode 100644 jshERP-web/src/components/chart/BarAndLine.vue create mode 100644 jshERP-web/src/components/chart/BarMultid.vue create mode 100644 jshERP-web/src/components/chart/DashChartDemo.vue create mode 100644 jshERP-web/src/components/chart/IndexBar.vue create mode 100644 jshERP-web/src/components/chart/LineChartMultid.vue create mode 100644 jshERP-web/src/components/chart/Liquid.vue create mode 100644 jshERP-web/src/components/chart/MiniArea.vue create mode 100644 jshERP-web/src/components/chart/MiniBar.vue create mode 100644 jshERP-web/src/components/chart/MiniProgress.vue create mode 100644 jshERP-web/src/components/chart/Pie.vue create mode 100644 jshERP-web/src/components/chart/README.md create mode 100644 jshERP-web/src/components/chart/Radar.vue create mode 100644 jshERP-web/src/components/chart/RankList.vue create mode 100644 jshERP-web/src/components/chart/StackBar.vue create mode 100644 jshERP-web/src/components/chart/TransferBar.vue create mode 100644 jshERP-web/src/components/chart/Trend.vue create mode 100644 jshERP-web/src/components/chart/chart.less create mode 100644 jshERP-web/src/components/chart/chart.scss create mode 100644 jshERP-web/src/components/chart/mixins/ChartMixins.js create mode 100644 jshERP-web/src/components/dict/JDictSelectTag.vue create mode 100644 jshERP-web/src/components/dict/JDictSelectUtil.js create mode 100644 jshERP-web/src/components/dict/JMultiSelectTag.vue create mode 100644 jshERP-web/src/components/dict/JSearchSelectTag.vue create mode 100644 jshERP-web/src/components/dict/README.md create mode 100644 jshERP-web/src/components/dict/index.js create mode 100644 jshERP-web/src/components/index.less create mode 100644 jshERP-web/src/components/jeecg/JAreaLinkage.vue create mode 100644 jshERP-web/src/components/jeecg/JCategorySelect.vue create mode 100644 jshERP-web/src/components/jeecg/JCheckbox.vue create mode 100644 jshERP-web/src/components/jeecg/JCodeEditor.vue create mode 100644 jshERP-web/src/components/jeecg/JCron.vue create mode 100644 jshERP-web/src/components/jeecg/JDate.vue create mode 100644 jshERP-web/src/components/jeecg/JEditableTable.vue create mode 100644 jshERP-web/src/components/jeecg/JEditor.vue create mode 100644 jshERP-web/src/components/jeecg/JEllipsis.vue create mode 100644 jshERP-web/src/components/jeecg/JFormContainer.vue create mode 100644 jshERP-web/src/components/jeecg/JGraphicCode.vue create mode 100644 jshERP-web/src/components/jeecg/JImageUpload.vue create mode 100644 jshERP-web/src/components/jeecg/JImportModal.vue create mode 100644 jshERP-web/src/components/jeecg/JInput.vue create mode 100644 jshERP-web/src/components/jeecg/JMarkdownEditor/default-options.js create mode 100644 jshERP-web/src/components/jeecg/JMarkdownEditor/index.vue create mode 100644 jshERP-web/src/components/jeecg/JModal/index.vue create mode 100644 jshERP-web/src/components/jeecg/JSelectMultiple.vue create mode 100644 jshERP-web/src/components/jeecg/JSlider.vue create mode 100644 jshERP-web/src/components/jeecg/JSuperQuery.vue create mode 100644 jshERP-web/src/components/jeecg/JSwitch.vue create mode 100644 jshERP-web/src/components/jeecg/JTreeDict.vue create mode 100644 jshERP-web/src/components/jeecg/JTreeSelect.vue create mode 100644 jshERP-web/src/components/jeecg/JTreeTable.vue create mode 100644 jshERP-web/src/components/jeecg/JUpload.vue create mode 100644 jshERP-web/src/components/jeecg/README.md create mode 100644 jshERP-web/src/components/jeecg/README_JEditableTable.md create mode 100644 jshERP-web/src/components/jeecg/index.js create mode 100644 jshERP-web/src/components/jeecg/minipop/JFilePop.vue create mode 100644 jshERP-web/src/components/jeecg/minipop/JInputPop.vue create mode 100644 jshERP-web/src/components/jeecg/modal/JCronModal.vue create mode 100644 jshERP-web/src/components/jeecgbiz/JSelectBizComponent/JSelectBizComponentModal.vue create mode 100644 jshERP-web/src/components/jeecgbiz/JSelectBizComponent/README.md create mode 100644 jshERP-web/src/components/jeecgbiz/JSelectBizComponent/index.vue create mode 100644 jshERP-web/src/components/jeecgbiz/JSelectDepart.vue create mode 100644 jshERP-web/src/components/jeecgbiz/JSelectMaterial.vue create mode 100644 jshERP-web/src/components/jeecgbiz/JSelectMultiUser.vue create mode 100644 jshERP-web/src/components/jeecgbiz/JSelectPosition.vue create mode 100644 jshERP-web/src/components/jeecgbiz/JSelectRole.vue create mode 100644 jshERP-web/src/components/jeecgbiz/JSelectSerialMaterial.vue create mode 100644 jshERP-web/src/components/jeecgbiz/JSelectUserByDep.vue create mode 100644 jshERP-web/src/components/jeecgbiz/README.md create mode 100644 jshERP-web/src/components/jeecgbiz/modal/JSelectDepartModal.vue create mode 100644 jshERP-web/src/components/jeecgbiz/modal/JSelectMaterialModal.vue create mode 100644 jshERP-web/src/components/jeecgbiz/modal/JSelectSerialMaterialModal.vue create mode 100644 jshERP-web/src/components/jeecgbiz/modal/JSelectUserByDepModal.vue create mode 100644 jshERP-web/src/components/jeecgbiz/modal/SelectUserListModal.vue create mode 100644 jshERP-web/src/components/layouts/BasicLayout.vue create mode 100644 jshERP-web/src/components/layouts/BlankLayout.vue create mode 100644 jshERP-web/src/components/layouts/IframeFReportView.vue create mode 100644 jshERP-web/src/components/layouts/IframePageView.vue create mode 100644 jshERP-web/src/components/layouts/PageView.vue create mode 100644 jshERP-web/src/components/layouts/RouteView.vue create mode 100644 jshERP-web/src/components/layouts/TabLayout.vue create mode 100644 jshERP-web/src/components/layouts/UserLayout.vue create mode 100644 jshERP-web/src/components/layouts/index.js create mode 100644 jshERP-web/src/components/menu/Contextmenu.vue create mode 100644 jshERP-web/src/components/menu/SideMenu.vue create mode 100644 jshERP-web/src/components/menu/index.js create mode 100644 jshERP-web/src/components/page/GlobalFooter.vue create mode 100644 jshERP-web/src/components/page/GlobalHeader.vue create mode 100644 jshERP-web/src/components/page/GlobalLayout.vue create mode 100644 jshERP-web/src/components/page/PageHeader.vue create mode 100644 jshERP-web/src/components/page/PageLayout.vue create mode 100644 jshERP-web/src/components/page/SHeaderNotice.vue create mode 100644 jshERP-web/src/components/setting/SettingDrawer.vue create mode 100644 jshERP-web/src/components/setting/SettingItem.vue create mode 100644 jshERP-web/src/components/table/README.md create mode 100644 jshERP-web/src/components/table/StandardTable.vue create mode 100644 jshERP-web/src/components/table/index.js create mode 100644 jshERP-web/src/components/tools/Breadcrumb.vue create mode 100644 jshERP-web/src/components/tools/DepartSelect.vue create mode 100644 jshERP-web/src/components/tools/DetailList.vue create mode 100644 jshERP-web/src/components/tools/DynamicNotice.vue create mode 100644 jshERP-web/src/components/tools/FooterToolBar.vue create mode 100644 jshERP-web/src/components/tools/HeadInfo.vue create mode 100644 jshERP-web/src/components/tools/HeaderNotice.vue create mode 100644 jshERP-web/src/components/tools/Logo.vue create mode 100644 jshERP-web/src/components/tools/ShowAnnouncement.vue create mode 100644 jshERP-web/src/components/tools/TwoStepCaptcha.vue create mode 100644 jshERP-web/src/components/tools/UserMenu.vue create mode 100644 jshERP-web/src/components/tools/UserPassword.vue create mode 100644 jshERP-web/src/components/tools/setting.js create mode 100644 jshERP-web/src/config/router.config.js create mode 100644 jshERP-web/src/defaultSettings.js create mode 100644 jshERP-web/src/main.js create mode 100644 jshERP-web/src/mixins/DisabledAuthFilterMixin.js create mode 100644 jshERP-web/src/mixins/JEditableTableMixin.js create mode 100644 jshERP-web/src/mixins/JeecgListMixin.js create mode 100644 jshERP-web/src/mixins/OnlAutoListMixin.js create mode 100644 jshERP-web/src/mixins/OnlineCommonUtil.js create mode 100644 jshERP-web/src/permission.js create mode 100644 jshERP-web/src/router/README.md create mode 100644 jshERP-web/src/router/index.js create mode 100644 jshERP-web/src/store/getters.js create mode 100644 jshERP-web/src/store/index.js create mode 100644 jshERP-web/src/store/modules/app.js create mode 100644 jshERP-web/src/store/modules/enhance.js create mode 100644 jshERP-web/src/store/modules/permission.js create mode 100644 jshERP-web/src/store/modules/user.js create mode 100644 jshERP-web/src/store/mutation-types.js create mode 100644 jshERP-web/src/utils/JEditableTableUtil.js create mode 100644 jshERP-web/src/utils/LunarFullCalendarUtil.js create mode 100644 jshERP-web/src/utils/auth.js create mode 100644 jshERP-web/src/utils/authFilter.js create mode 100644 jshERP-web/src/utils/axios.js create mode 100644 jshERP-web/src/utils/commonUploadFile.js create mode 100644 jshERP-web/src/utils/desform/CustomExpression.js create mode 100644 jshERP-web/src/utils/device.js create mode 100644 jshERP-web/src/utils/encryption/aesEncrypt.js create mode 100644 jshERP-web/src/utils/filter.js create mode 100644 jshERP-web/src/utils/hasPermission.js create mode 100644 jshERP-web/src/utils/mixin.js create mode 100644 jshERP-web/src/utils/permissions.js create mode 100644 jshERP-web/src/utils/props-util.js create mode 100644 jshERP-web/src/utils/request.js create mode 100644 jshERP-web/src/utils/storage.js create mode 100644 jshERP-web/src/utils/util.js create mode 100644 jshERP-web/src/utils/validate.js create mode 100644 jshERP-web/src/utils/vueBus.js create mode 100644 jshERP-web/src/views/404.vue create mode 100644 jshERP-web/src/views/Home.vue create mode 100644 jshERP-web/src/views/account/center/Index.vue create mode 100644 jshERP-web/src/views/account/center/page/App.vue create mode 100644 jshERP-web/src/views/account/center/page/Article.vue create mode 100644 jshERP-web/src/views/account/center/page/Project.vue create mode 100644 jshERP-web/src/views/account/center/page/index.js create mode 100644 jshERP-web/src/views/account/settings/AvatarModal.vue create mode 100644 jshERP-web/src/views/account/settings/BaseSetting.vue create mode 100644 jshERP-web/src/views/account/settings/Binding.vue create mode 100644 jshERP-web/src/views/account/settings/Custom.vue create mode 100644 jshERP-web/src/views/account/settings/Index.vue create mode 100644 jshERP-web/src/views/account/settings/Notification.vue create mode 100644 jshERP-web/src/views/account/settings/Security.vue create mode 100644 jshERP-web/src/views/bill/AllocationOutList.vue create mode 100644 jshERP-web/src/views/bill/AssembleList.vue create mode 100644 jshERP-web/src/views/bill/DisassembleList.vue create mode 100644 jshERP-web/src/views/bill/OtherInList.vue create mode 100644 jshERP-web/src/views/bill/OtherOutList.vue create mode 100644 jshERP-web/src/views/bill/PurchaseBackList.vue create mode 100644 jshERP-web/src/views/bill/PurchaseInList.vue create mode 100644 jshERP-web/src/views/bill/PurchaseOrderList.vue create mode 100644 jshERP-web/src/views/bill/RetailBackList.vue create mode 100644 jshERP-web/src/views/bill/RetailOutList.vue create mode 100644 jshERP-web/src/views/bill/SaleBackList.vue create mode 100644 jshERP-web/src/views/bill/SaleOrderList.vue create mode 100644 jshERP-web/src/views/bill/SaleOutList.vue create mode 100644 jshERP-web/src/views/bill/dialog/ManyAccountModal.vue create mode 100644 jshERP-web/src/views/bill/mixins/BillListMixin.js create mode 100644 jshERP-web/src/views/bill/mixins/BillModalMixin.js create mode 100644 jshERP-web/src/views/bill/modules/AllocationOutModal.vue create mode 100644 jshERP-web/src/views/bill/modules/AssembleModal.vue create mode 100644 jshERP-web/src/views/bill/modules/DisassembleModal.vue create mode 100644 jshERP-web/src/views/bill/modules/OtherInModal.vue create mode 100644 jshERP-web/src/views/bill/modules/OtherOutModal.vue create mode 100644 jshERP-web/src/views/bill/modules/PurchaseBackModal.vue create mode 100644 jshERP-web/src/views/bill/modules/PurchaseInModal.vue create mode 100644 jshERP-web/src/views/bill/modules/PurchaseOrderModal.vue create mode 100644 jshERP-web/src/views/bill/modules/RetailBackModal.vue create mode 100644 jshERP-web/src/views/bill/modules/RetailOutModal.vue create mode 100644 jshERP-web/src/views/bill/modules/SaleBackModal.vue create mode 100644 jshERP-web/src/views/bill/modules/SaleOrderModal.vue create mode 100644 jshERP-web/src/views/bill/modules/SaleOutModal.vue create mode 100644 jshERP-web/src/views/dashboard/Analysis.vue create mode 100644 jshERP-web/src/views/dashboard/IndexBdc.vue create mode 100644 jshERP-web/src/views/dashboard/IndexChart.vue create mode 100644 jshERP-web/src/views/dashboard/IndexTask.vue create mode 100644 jshERP-web/src/views/dashboard/Monitor.vue create mode 100644 jshERP-web/src/views/dashboard/Workplace.vue create mode 100644 jshERP-web/src/views/exception/403.vue create mode 100644 jshERP-web/src/views/exception/404.vue create mode 100644 jshERP-web/src/views/exception/500.vue create mode 100644 jshERP-web/src/views/exception/ExceptionPage.vue create mode 100644 jshERP-web/src/views/exception/type.js create mode 100644 jshERP-web/src/views/financial/AdvanceInList.vue create mode 100644 jshERP-web/src/views/financial/GiroList.vue create mode 100644 jshERP-web/src/views/financial/ItemInList.vue create mode 100644 jshERP-web/src/views/financial/ItemOutList.vue create mode 100644 jshERP-web/src/views/financial/MoneyInList.vue create mode 100644 jshERP-web/src/views/financial/MoneyOutList.vue create mode 100644 jshERP-web/src/views/financial/mixins/FinancialListMixin.js create mode 100644 jshERP-web/src/views/financial/mixins/FinancialModalMixin.js create mode 100644 jshERP-web/src/views/financial/modules/AdvanceInModal.vue create mode 100644 jshERP-web/src/views/financial/modules/GiroModal.vue create mode 100644 jshERP-web/src/views/financial/modules/ItemInModal.vue create mode 100644 jshERP-web/src/views/financial/modules/ItemOutModal.vue create mode 100644 jshERP-web/src/views/financial/modules/MoneyInModal.vue create mode 100644 jshERP-web/src/views/financial/modules/MoneyOutModal.vue create mode 100644 jshERP-web/src/views/form/BasicForm.vue create mode 100644 jshERP-web/src/views/form/advancedForm/AdvancedForm.vue create mode 100644 jshERP-web/src/views/form/advancedForm/RepositoryForm.vue create mode 100644 jshERP-web/src/views/form/advancedForm/TaskForm.vue create mode 100644 jshERP-web/src/views/form/stepForm/Step1.vue create mode 100644 jshERP-web/src/views/form/stepForm/Step2.vue create mode 100644 jshERP-web/src/views/form/stepForm/Step3.vue create mode 100644 jshERP-web/src/views/form/stepForm/StepForm.vue create mode 100644 jshERP-web/src/views/list/CardList.vue create mode 100644 jshERP-web/src/views/list/PermissionList.vue create mode 100644 jshERP-web/src/views/list/RoleList.vue create mode 100644 jshERP-web/src/views/list/StandardList.vue create mode 100644 jshERP-web/src/views/list/TableInnerEditList.vue create mode 100644 jshERP-web/src/views/list/TableList.vue create mode 100644 jshERP-web/src/views/list/UserList.vue create mode 100644 jshERP-web/src/views/list/modules/RoleModal.vue create mode 100644 jshERP-web/src/views/list/search/SearchLayout.vue create mode 100644 jshERP-web/src/views/material/MaterialCategoryList.vue create mode 100644 jshERP-web/src/views/material/MaterialList.vue create mode 100644 jshERP-web/src/views/material/MaterialPropertyList.vue create mode 100644 jshERP-web/src/views/material/modules/MaterialCategoryModal.vue create mode 100644 jshERP-web/src/views/material/modules/MaterialModal.vue create mode 100644 jshERP-web/src/views/material/modules/MaterialPropertyModal.vue create mode 100644 jshERP-web/src/views/modules/message/SysMessageList.vue create mode 100644 jshERP-web/src/views/modules/message/SysMessageTemplateList.vue create mode 100644 jshERP-web/src/views/modules/message/modules/SysMessageModal.vue create mode 100644 jshERP-web/src/views/modules/message/modules/SysMessageTemplateModal.vue create mode 100644 jshERP-web/src/views/modules/message/modules/SysMessageTestModal.vue create mode 100644 jshERP-web/src/views/modules/monitor/DiskMonitoring.vue create mode 100644 jshERP-web/src/views/modules/monitor/HttpTrace.vue create mode 100644 jshERP-web/src/views/modules/monitor/JvmInfo.vue create mode 100644 jshERP-web/src/views/modules/monitor/RedisInfo.vue create mode 100644 jshERP-web/src/views/modules/monitor/RedisTerminal.vue create mode 100644 jshERP-web/src/views/modules/monitor/SystemInfo.vue create mode 100644 jshERP-web/src/views/modules/monitor/TomcatInfo.vue create mode 100644 jshERP-web/src/views/modules/online/cgform/OnlCgformCopyList.vue create mode 100644 jshERP-web/src/views/modules/online/cgform/OnlCgformHeadList.vue create mode 100644 jshERP-web/src/views/modules/online/cgform/auto/ButtonExpHandler.js create mode 100644 jshERP-web/src/views/modules/online/cgform/auto/OnlCgformAutoList.vue create mode 100644 jshERP-web/src/views/modules/online/cgform/auto/OnlCgformTreeList.vue create mode 100644 jshERP-web/src/views/modules/online/cgform/auto/erp/OnlCgformErpList.vue create mode 100644 jshERP-web/src/views/modules/online/cgform/util/TableUtils.js create mode 100644 jshERP-web/src/views/modules/online/cgreport/OnlCgreportHeadList.vue create mode 100644 jshERP-web/src/views/modules/online/cgreport/auto/OnlCgreportAutoList.vue create mode 100644 jshERP-web/src/views/modules/oss/OSSFileList.vue create mode 100644 jshERP-web/src/views/plugin/car/Car.vue create mode 100644 jshERP-web/src/views/plugin/car/car.html create mode 100644 jshERP-web/src/views/plugin/car/main.js create mode 100644 jshERP-web/src/views/plugin/car/page1.vue create mode 100644 jshERP-web/src/views/plugin/car/router.js create mode 100644 jshERP-web/src/views/plugin/car/store.js create mode 100644 jshERP-web/src/views/profile/advanced/Advanced.vue create mode 100644 jshERP-web/src/views/profile/basic/Index.vue create mode 100644 jshERP-web/src/views/report/AccountReport.vue create mode 100644 jshERP-web/src/views/report/BuyInReport.vue create mode 100644 jshERP-web/src/views/report/CustomerAccount.vue create mode 100644 jshERP-web/src/views/report/InDetail.vue create mode 100644 jshERP-web/src/views/report/InMaterialCount.vue create mode 100644 jshERP-web/src/views/report/InOutStockReport.vue create mode 100644 jshERP-web/src/views/report/OutDetail.vue create mode 100644 jshERP-web/src/views/report/OutMaterialCount.vue create mode 100644 jshERP-web/src/views/report/SaleOutReport.vue create mode 100644 jshERP-web/src/views/report/StockWarningReport.vue create mode 100644 jshERP-web/src/views/report/VendorAccount.vue create mode 100644 jshERP-web/src/views/report/modules/AccountInOutList.vue create mode 100644 jshERP-web/src/views/result/Error.vue create mode 100644 jshERP-web/src/views/result/Result.vue create mode 100644 jshERP-web/src/views/result/Success.vue create mode 100644 jshERP-web/src/views/system/AccountList.vue create mode 100644 jshERP-web/src/views/system/AddressList.vue create mode 100644 jshERP-web/src/views/system/CustomerList.vue create mode 100644 jshERP-web/src/views/system/DataLogList.vue create mode 100644 jshERP-web/src/views/system/DepartList.vue create mode 100644 jshERP-web/src/views/system/DepartList2.vue create mode 100644 jshERP-web/src/views/system/DepartUserList.vue create mode 100644 jshERP-web/src/views/system/DepotList.vue create mode 100644 jshERP-web/src/views/system/DictDeleteList.vue create mode 100644 jshERP-web/src/views/system/DictItemList.vue create mode 100644 jshERP-web/src/views/system/DictList.vue create mode 100644 jshERP-web/src/views/system/FunctionList.vue create mode 100644 jshERP-web/src/views/system/InOutItemList.vue create mode 100644 jshERP-web/src/views/system/LogList.vue create mode 100644 jshERP-web/src/views/system/MemberList.vue create mode 100644 jshERP-web/src/views/system/NewPermissionList.vue create mode 100644 jshERP-web/src/views/system/OrganizationList.vue create mode 100644 jshERP-web/src/views/system/PermissionDataRuleList.vue create mode 100644 jshERP-web/src/views/system/PermissionList.vue create mode 100644 jshERP-web/src/views/system/PersonList.vue create mode 100644 jshERP-web/src/views/system/PluginList.vue create mode 100644 jshERP-web/src/views/system/QuartzJobList.vue create mode 100644 jshERP-web/src/views/system/RoleList.vue create mode 100644 jshERP-web/src/views/system/RoleUserList.vue create mode 100644 jshERP-web/src/views/system/SerialNumberList.vue create mode 100644 jshERP-web/src/views/system/SysAnnouncementList.vue create mode 100644 jshERP-web/src/views/system/SysCategoryList.vue create mode 100644 jshERP-web/src/views/system/SysCheckRuleList.vue create mode 100644 jshERP-web/src/views/system/SysDataSourceList.vue create mode 100644 jshERP-web/src/views/system/SysFillRuleList.vue create mode 100644 jshERP-web/src/views/system/SysPositionList.vue create mode 100644 jshERP-web/src/views/system/SystemConfigList.vue create mode 100644 jshERP-web/src/views/system/UnitList.vue create mode 100644 jshERP-web/src/views/system/UserAnnouncementList.vue create mode 100644 jshERP-web/src/views/system/UserList.vue create mode 100644 jshERP-web/src/views/system/VendorList.vue create mode 100644 jshERP-web/src/views/system/modules/AccountModal.vue create mode 100644 jshERP-web/src/views/system/modules/AddressListLeft.vue create mode 100644 jshERP-web/src/views/system/modules/AddressListRight.vue create mode 100644 jshERP-web/src/views/system/modules/CustomerModal.vue create mode 100644 jshERP-web/src/views/system/modules/DataLogCompareModal.vue create mode 100644 jshERP-web/src/views/system/modules/DataLogModal.vue create mode 100644 jshERP-web/src/views/system/modules/DepartAuthModal.vue create mode 100644 jshERP-web/src/views/system/modules/DepartDataruleModal.vue create mode 100644 jshERP-web/src/views/system/modules/DepartModal.vue create mode 100644 jshERP-web/src/views/system/modules/DepartWindow.vue create mode 100644 jshERP-web/src/views/system/modules/DepotModal.vue create mode 100644 jshERP-web/src/views/system/modules/DeptBaseInfo.vue create mode 100644 jshERP-web/src/views/system/modules/DeptRoleAuthModal.vue create mode 100644 jshERP-web/src/views/system/modules/DeptRoleDataruleModal.vue create mode 100644 jshERP-web/src/views/system/modules/DeptRoleInfo.vue create mode 100644 jshERP-web/src/views/system/modules/DeptRoleUserModal.vue create mode 100644 jshERP-web/src/views/system/modules/DeptUserInfo.vue create mode 100644 jshERP-web/src/views/system/modules/DictItemModal.vue create mode 100644 jshERP-web/src/views/system/modules/DictModal.vue create mode 100644 jshERP-web/src/views/system/modules/FunctionModal.vue create mode 100644 jshERP-web/src/views/system/modules/InOutItemModal.vue create mode 100644 jshERP-web/src/views/system/modules/MemberModal.vue create mode 100644 jshERP-web/src/views/system/modules/OrganizationModal.vue create mode 100644 jshERP-web/src/views/system/modules/PasswordModal.vue create mode 100644 jshERP-web/src/views/system/modules/PermissionDataRuleModal.vue create mode 100644 jshERP-web/src/views/system/modules/PermissionModal.vue create mode 100644 jshERP-web/src/views/system/modules/PersonModal.vue create mode 100644 jshERP-web/src/views/system/modules/PluginModal.vue create mode 100644 jshERP-web/src/views/system/modules/QuartzJobModal.vue create mode 100644 jshERP-web/src/views/system/modules/RoleDataruleModal.vue create mode 100644 jshERP-web/src/views/system/modules/RoleFunctionModal.vue create mode 100644 jshERP-web/src/views/system/modules/RoleModal.vue create mode 100644 jshERP-web/src/views/system/modules/RolePushBtnModal.vue create mode 100644 jshERP-web/src/views/system/modules/SelectUserListModal.vue create mode 100644 jshERP-web/src/views/system/modules/SelectUserModal.vue create mode 100644 jshERP-web/src/views/system/modules/SerialNumberBatchModal.vue create mode 100644 jshERP-web/src/views/system/modules/SerialNumberModal.vue create mode 100644 jshERP-web/src/views/system/modules/SysAnnouncementModal.vue create mode 100644 jshERP-web/src/views/system/modules/SysCategoryModal.vue create mode 100644 jshERP-web/src/views/system/modules/SysCheckRuleModal.vue create mode 100644 jshERP-web/src/views/system/modules/SysCheckRuleTestModal.vue create mode 100644 jshERP-web/src/views/system/modules/SysDataSourceModal.vue create mode 100644 jshERP-web/src/views/system/modules/SysDepartRoleModal.vue create mode 100644 jshERP-web/src/views/system/modules/SysFillRuleModal.vue create mode 100644 jshERP-web/src/views/system/modules/SysPositionModal.vue create mode 100644 jshERP-web/src/views/system/modules/SysUserAgentModal.vue create mode 100644 jshERP-web/src/views/system/modules/SystemConfigModal.vue create mode 100644 jshERP-web/src/views/system/modules/UnitModal.vue create mode 100644 jshERP-web/src/views/system/modules/UserModal.vue create mode 100644 jshERP-web/src/views/system/modules/UserRecycleBinModal.vue create mode 100644 jshERP-web/src/views/system/modules/UserRoleModal.vue create mode 100644 jshERP-web/src/views/system/modules/VendorModal.vue create mode 100644 jshERP-web/src/views/system/modules/icon/Icon.less create mode 100644 jshERP-web/src/views/system/modules/icon/Icons.vue create mode 100644 jshERP-web/src/views/user/Login.vue create mode 100644 jshERP-web/src/views/user/Register.vue create mode 100644 jshERP-web/src/views/user/RegisterResult.vue create mode 100644 jshERP-web/vue.config.js create mode 100644 jshERP-web/yarn create mode 100644 jshERP-web/yarn.lock diff --git a/.gitattributes b/.gitattributes index cc41a2fd0..d479839ef 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,4 @@ -*.js linguist-language=Java -*.css linguist-language=Java -*.html linguist-language=Java +*.js linguist-language=Java +*.css linguist-language=Java +*.html linguist-language=Java +*.vue linguist-language=Java diff --git a/.gitignore b/.gitignore index 0fc2067d5..0d78ee0ad 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,10 @@ -*.class - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -*.iml -# Package Files # -*.jar -*.war -*.ear - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -.idea -/target - -**/*.iml - +## ide +**/.idea +*.iml + +## backend +**/target +**/logs + +## front +**/*.lock diff --git a/README.md b/README.md index 5f3640b1b..565f3f9bd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 项目总述 * 很多人说华夏ERP(英文名:jshERP)是目前人气领先的国产ERP系统 -* 虽然目前只有进销存+财务+生产的功能,但后面会推出ERP的全部功能,有兴趣请帮点一下 **Star** 哦 +* 虽然目前只有进销存+财务+生产的功能,但后面将会推出ERP的全部功能,有兴趣请帮点一下 **Star** 哦 * **官网URL:http://www.huaxiaerp.com 商务合作或技术交流,请联系QQ:752718920** * 欢迎加入华夏ERP交流QQ群,群1:120725710(满)、群2:732152262 * 演示地址:http://47.116.69.14 演示账号:jsh,密码:123456 @@ -24,10 +24,9 @@ * UI框架: EasyUI 1.9.4 * 模板框架: AdminLTE 2.4.0 * 项目管理框架: Maven 3.2.3 -* API接口框架: swagger2.7.0(ip:port/doc.html) # 开发环境 -建议开发者使用以下环境,可以避免版本不一致带来的问题 +建议开发者使用以下环境,可以避免版本带来的问题 * IDE: IntelliJ IDEA 2017+ * DB: Mysql5.7+ * JDK: JDK1.8 @@ -38,7 +37,7 @@ * JAVA平台: JRE1.8 * 操作系统:Windows、Linux等 * 为方便大家搭建运行环境,分享了下载地址 https://pan.baidu.com/s/1jlild9uyGdQ7H2yaMx76zw 提取码:814g -* 不会maven打包的小伙伴,请下载此打包后的文件 https://pan.baidu.com/s/1Opqz-WjonJEfwWL_7iiyPw 提取码:yrq2 +* 不会maven打包的小伙伴,请下载此打包后的文件:https://pan.baidu.com/s/1soId837KuvhpzTAgF62XRA 提取码:tm3k # 开源说明 * 本系统100%开源,遵守GPL-3.0协议 @@ -66,7 +65,7 @@ ![输入图片说明](https://images.gitee.com/uploads/images/2020/0529/232101_a502d325_852955.png "系统管理.png") # 捐赠 -开源不易,坚持更难!如果您觉得华夏ERP不错,可以通过捐赠请作者喝杯咖啡~,在此表示感谢^_^。 +开源不易,坚持更难!如果您觉得华夏ERP不错,可以捐赠请作者喝杯咖啡~,在此表示感谢^_^。 点击以下链接,将页面拉到最下方点击“捐赠”即可。 diff --git a/jshERP-boot/.gitattributes b/jshERP-boot/.gitattributes new file mode 100644 index 000000000..cc41a2fd0 --- /dev/null +++ b/jshERP-boot/.gitattributes @@ -0,0 +1,3 @@ +*.js linguist-language=Java +*.css linguist-language=Java +*.html linguist-language=Java diff --git a/jshERP-boot/.gitignore b/jshERP-boot/.gitignore new file mode 100644 index 000000000..0fc2067d5 --- /dev/null +++ b/jshERP-boot/.gitignore @@ -0,0 +1,19 @@ +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +*.iml +# Package Files # +*.jar +*.war +*.ear + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +.idea +/target + +**/*.iml + diff --git a/jshERP-boot/docs/jsh_erp.sql b/jshERP-boot/docs/jsh_erp.sql new file mode 100644 index 000000000..d98bd5f93 --- /dev/null +++ b/jshERP-boot/docs/jsh_erp.sql @@ -0,0 +1,995 @@ +/* +Navicat MySQL Data Transfer + +Source Server : localhost +Source Server Version : 50704 +Source Host : localhost:3306 +Source Database : jsh_erp_boot + +Target Server Type : MYSQL +Target Server Version : 50704 +File Encoding : 65001 + +Date: 2021-01-21 00:19:22 +*/ + +SET FOREIGN_KEY_CHECKS=0; + +-- ---------------------------- +-- Table structure for jsh_account +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_account`; +CREATE TABLE `jsh_account` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(50) DEFAULT NULL COMMENT '名称', + `serial_no` varchar(50) DEFAULT NULL COMMENT '编号', + `initial_amount` decimal(24,6) DEFAULT NULL COMMENT '期初金额', + `current_amount` decimal(24,6) DEFAULT NULL COMMENT '当前余额', + `remark` varchar(100) DEFAULT NULL COMMENT '备注', + `is_default` bit(1) DEFAULT NULL COMMENT '是否默认', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COMMENT='账户信息'; + +-- ---------------------------- +-- Records of jsh_account +-- ---------------------------- +INSERT INTO `jsh_account` VALUES ('17', '账户1', 'zzz111', '100.000000', '-2096.000000', 'aabb', '', '63', '0'); +INSERT INTO `jsh_account` VALUES ('18', '账户2', '1234131324', '200.000000', '-1750.000000', 'bb', '\0', '63', '0'); + +-- ---------------------------- +-- Table structure for jsh_account_head +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_account_head`; +CREATE TABLE `jsh_account_head` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `type` varchar(50) DEFAULT NULL COMMENT '类型(支出/收入/收款/付款/转账)', + `organ_id` bigint(20) DEFAULT NULL COMMENT '单位Id(收款/付款单位)', + `hands_person_id` bigint(20) DEFAULT NULL COMMENT '经手人id', + `creator` bigint(20) DEFAULT NULL COMMENT '操作员', + `change_amount` decimal(24,6) DEFAULT NULL COMMENT '变动金额(优惠/收款/付款/实付)', + `total_price` decimal(24,6) DEFAULT NULL COMMENT '合计金额', + `account_id` bigint(20) DEFAULT NULL COMMENT '账户(收款/付款)', + `bill_no` varchar(50) DEFAULT NULL COMMENT '单据编号', + `bill_time` datetime DEFAULT NULL COMMENT '单据日期', + `remark` varchar(100) DEFAULT NULL COMMENT '备注', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`), + KEY `FK9F4C0D8DB610FC06` (`organ_id`), + KEY `FK9F4C0D8DAAE50527` (`account_id`), + KEY `FK9F4C0D8DC4170B37` (`hands_person_id`) +) ENGINE=InnoDB AUTO_INCREMENT=107 DEFAULT CHARSET=utf8 COMMENT='财务主表'; + +-- ---------------------------- +-- Records of jsh_account_head +-- ---------------------------- +INSERT INTO `jsh_account_head` VALUES ('97', '收入', '58', '16', '63', '10.000000', '10.000000', '17', 'SR20191228121609', '2019-12-28 00:00:00', '备注1', '63', '0'); +INSERT INTO `jsh_account_head` VALUES ('98', '支出', '57', '16', '63', '-20.000000', '-20.000000', '17', 'ZC20191228121854', '2019-12-28 12:18:54', '', '63', '0'); +INSERT INTO `jsh_account_head` VALUES ('99', '收款', '58', '16', '63', null, '20.000000', null, 'SK20191228121908', '2019-12-28 12:19:08', '', '63', '0'); +INSERT INTO `jsh_account_head` VALUES ('100', '付款', '68', '16', '63', null, '-20.000000', null, 'FK20191228121920', '2019-12-28 12:19:20', '', '63', '0'); +INSERT INTO `jsh_account_head` VALUES ('101', '转账', null, '16', '63', '-20.000000', '-20.000000', '18', 'ZZ20191228121932', '2019-12-28 12:19:32', '', '63', '0'); +INSERT INTO `jsh_account_head` VALUES ('102', '收预付款', '60', '16', '63', null, '1000.000000', null, 'SYF20191228121945', '2019-12-28 12:19:45', '', '63', '0'); +INSERT INTO `jsh_account_head` VALUES ('103', '收入', '58', '16', '63', '20.000000', '20.000000', '18', 'SR20200721163125', '2020-07-21 16:31:25', '', '63', '0'); +INSERT INTO `jsh_account_head` VALUES ('104', '收入', '71', '16', '63', '60.000000', '50.000000', '18', 'SR20200721225712', '2020-07-21 00:00:00', 'bb', '63', '0'); +INSERT INTO `jsh_account_head` VALUES ('105', '转账', null, '16', '63', '-11.000000', '-11.000000', '18', 'ZZ20200722005429', '2020-07-22 00:54:29', '', '63', '0'); +INSERT INTO `jsh_account_head` VALUES ('106', '收入', '58', '16', '131', '1000.000000', '1000.000000', '17', 'SR20200913184412', '2020-09-13 18:44:12', '', '63', '0'); + +-- ---------------------------- +-- Table structure for jsh_account_item +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_account_item`; +CREATE TABLE `jsh_account_item` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `header_id` bigint(20) NOT NULL COMMENT '表头Id', + `account_id` bigint(20) DEFAULT NULL COMMENT '账户Id', + `in_out_item_id` bigint(20) DEFAULT NULL COMMENT '收支项目Id', + `each_amount` decimal(24,6) DEFAULT NULL COMMENT '单项金额', + `remark` varchar(100) DEFAULT NULL COMMENT '单据备注', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`), + KEY `FK9F4CBAC0AAE50527` (`account_id`), + KEY `FK9F4CBAC0C5FE6007` (`header_id`), + KEY `FK9F4CBAC0D203EDC5` (`in_out_item_id`) +) ENGINE=InnoDB AUTO_INCREMENT=108 DEFAULT CHARSET=utf8 COMMENT='财务子表'; + +-- ---------------------------- +-- Records of jsh_account_item +-- ---------------------------- +INSERT INTO `jsh_account_item` VALUES ('98', '97', null, '22', '10.000000', '', '63', '0'); +INSERT INTO `jsh_account_item` VALUES ('99', '98', null, '21', '20.000000', '', '63', '0'); +INSERT INTO `jsh_account_item` VALUES ('100', '99', '17', null, '20.000000', '', '63', '0'); +INSERT INTO `jsh_account_item` VALUES ('101', '100', '17', null, '-20.000000', '', '63', '0'); +INSERT INTO `jsh_account_item` VALUES ('102', '101', '17', null, '20.000000', '', '63', '0'); +INSERT INTO `jsh_account_item` VALUES ('103', '102', '17', null, '1000.000000', '', '63', '0'); +INSERT INTO `jsh_account_item` VALUES ('104', '103', null, '22', '20.000000', '', '63', '0'); +INSERT INTO `jsh_account_item` VALUES ('105', '104', null, '22', '50.000000', '', '63', '0'); +INSERT INTO `jsh_account_item` VALUES ('106', '105', '17', null, '11.000000', '', '63', '0'); +INSERT INTO `jsh_account_item` VALUES ('107', '106', null, '22', '1000.000000', '', '63', '0'); + +-- ---------------------------- +-- Table structure for jsh_depot +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_depot`; +CREATE TABLE `jsh_depot` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(20) DEFAULT NULL COMMENT '仓库名称', + `address` varchar(50) DEFAULT NULL COMMENT '仓库地址', + `warehousing` decimal(24,6) DEFAULT NULL COMMENT '仓储费', + `truckage` decimal(24,6) DEFAULT NULL COMMENT '搬运费', + `type` int(10) DEFAULT NULL COMMENT '类型', + `sort` varchar(10) DEFAULT NULL COMMENT '排序', + `remark` varchar(100) DEFAULT NULL COMMENT '描述', + `principal` bigint(20) DEFAULT NULL COMMENT '负责人', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + `delete_Flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + `is_default` bit(1) DEFAULT NULL COMMENT '是否默认', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8 COMMENT='仓库表'; + +-- ---------------------------- +-- Records of jsh_depot +-- ---------------------------- +INSERT INTO `jsh_depot` VALUES ('14', '仓库1', 'dizhi', '12.000000', '12.000000', '0', '2', '描述', '131', '63', '0', ''); +INSERT INTO `jsh_depot` VALUES ('15', '仓库2', '地址100', null, null, '0', '', '', '131', '63', '0', '\0'); +INSERT INTO `jsh_depot` VALUES ('17', '仓库3', '123123', '123.000000', '123.000000', '0', '123', '123', '131', '63', '0', '\0'); + +-- ---------------------------- +-- Table structure for jsh_depot_head +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_depot_head`; +CREATE TABLE `jsh_depot_head` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `type` varchar(50) DEFAULT NULL COMMENT '类型(出库/入库)', + `sub_type` varchar(50) DEFAULT NULL COMMENT '出入库分类', + `default_number` varchar(50) DEFAULT NULL COMMENT '初始票据号', + `number` varchar(50) DEFAULT NULL COMMENT '票据号', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `oper_time` datetime DEFAULT NULL COMMENT '出入库时间', + `organ_id` bigint(20) DEFAULT NULL COMMENT '供应商id', + `hands_person_id` bigint(20) DEFAULT NULL COMMENT '采购/领料-经手人id', + `creator` bigint(20) DEFAULT NULL COMMENT '操作员', + `account_id` bigint(20) DEFAULT NULL COMMENT '账户id', + `change_amount` decimal(24,6) DEFAULT NULL COMMENT '变动金额(收款/付款)', + `total_price` decimal(24,6) DEFAULT NULL COMMENT '合计金额', + `pay_type` varchar(50) DEFAULT NULL COMMENT '付款类型(现金、记账等)', + `bill_type` varchar(50) DEFAULT NULL COMMENT '单据类型', + `remark` varchar(1000) DEFAULT NULL COMMENT '备注', + `sales_man` varchar(50) DEFAULT NULL COMMENT '业务员(可以多个)', + `account_id_list` varchar(50) DEFAULT NULL COMMENT '多账户ID列表', + `account_money_list` varchar(200) DEFAULT NULL COMMENT '多账户金额列表', + `discount` decimal(24,6) DEFAULT NULL COMMENT '优惠率', + `discount_money` decimal(24,6) DEFAULT NULL COMMENT '优惠金额', + `discount_last_money` decimal(24,6) DEFAULT NULL COMMENT '优惠后金额', + `other_money` decimal(24,6) DEFAULT NULL COMMENT '销售或采购费用合计', + `other_money_list` varchar(200) DEFAULT NULL COMMENT '销售或采购费用涉及项目Id数组(包括快递、招待等)', + `other_money_item` varchar(200) DEFAULT NULL COMMENT '销售或采购费用涉及项目(包括快递、招待等)', + `account_day` int(10) DEFAULT NULL COMMENT '结算天数', + `status` varchar(1) DEFAULT NULL COMMENT '状态,0未审核、1已审核、2已转采购|销售', + `link_number` varchar(50) DEFAULT NULL COMMENT '关联订单号', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`), + KEY `FK2A80F214C4170B37` (`hands_person_id`), + KEY `FK2A80F214B610FC06` (`organ_id`), + KEY `FK2A80F214AAE50527` (`account_id`) +) ENGINE=InnoDB AUTO_INCREMENT=230 DEFAULT CHARSET=utf8 COMMENT='单据主表'; + +-- ---------------------------- +-- Records of jsh_depot_head +-- ---------------------------- +INSERT INTO `jsh_depot_head` VALUES ('189', '入库', '采购', 'CGRK00000000261', 'CGRK00000000261', '2019-04-10 22:25:49', '2020-02-20 23:51:03', '57', null, null, '17', '-120.000000', '-120.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '120.000000', '0.000000', '[\"undefined\"]', '[\"undefined\"]', null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('191', '入库', '采购', 'CGRK00000000264', 'CGRK00000000264', '2019-04-13 19:57:58', '2020-02-20 23:50:55', '57', null, null, '17', '-10.000000', '-10.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '10.000000', '0.000000', '[\"undefined\"]', '[\"undefined\"]', null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('192', '入库', '采购', 'CGRK00000000265', 'CGRK00000000265', '2019-04-20 00:36:24', '2020-02-20 23:50:47', '57', null, null, '17', '-220.000000', '-220.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '220.000000', '0.000000', '[\"undefined\"]', '[\"undefined\"]', null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('193', '出库', '销售', 'XSCK00000000268', 'XSCK00000000268', '2019-04-29 23:41:02', '2020-02-20 23:52:17', '58', null, null, '17', '300.000000', '300.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '300.000000', null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('196', '入库', '采购', 'CGRK00000000274', 'CGRK00000000274', '2019-04-30 22:35:53', '2020-02-20 23:49:07', '57', null, null, '18', '-1930.000000', '-1930.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '1930.000000', '0.000000', '[\"undefined\"]', '[\"undefined\"]', null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('197', '出库', '销售', 'XSCK00000000290', 'XSCK00000000290', '2019-04-30 23:15:27', '2020-02-20 23:52:01', '58', null, null, '17', '270.000000', '270.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '270.000000', null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('199', '其它', '采购订单', 'CGDD00000000305', 'CGDD00000000305', '2019-12-28 12:16:36', '2020-02-20 23:47:56', '57', '63', '63', null, '0.000000', '-22.000000', '现付', null, '', '', null, '', null, null, null, null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('200', '出库', '采购退货', 'CGTH00000000306', 'CGTH00000000306', '2019-12-28 12:16:55', '2020-02-20 23:51:28', '57', '63', '63', '17', '11.000000', '11.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '11.000000', null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('201', '其它', '销售订单', 'XSDD00000000307', 'XSDD00000000307', '2019-12-28 12:17:09', '2020-02-20 23:51:37', '58', '63', '63', null, '0.000000', '15.000000', '现付', null, '', '<14>', null, '', null, null, null, null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('202', '入库', '销售退货', 'XSTH00000000308', 'XSTH00000000308', '2019-12-28 12:17:22', '2020-02-20 23:52:33', '58', '63', '63', '17', '-15.000000', '-15.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '15.000000', null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('203', '入库', '其它', 'QTRK00000000309', 'QTRK00000000309', '2019-12-28 12:17:40', '2020-02-20 23:52:51', '57', '63', '63', null, '0.000000', '42.000000', '现付', null, '', '', null, '', null, null, null, null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('204', '出库', '其它', 'QTCK00000000310', 'QTCK00000000310', '2019-12-28 12:17:48', '2020-02-20 23:53:04', '58', '63', '63', null, '0.000000', '15.000000', '现付', null, '', '', null, '', null, null, null, null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('205', '出库', '调拨', 'DBCK00000000311', 'DBCK00000000311', '2019-12-28 12:17:58', '2020-02-20 23:53:21', null, '63', '63', null, '0.000000', '15.000000', '现付', null, '', '', null, '', null, null, null, null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('206', '其它', '组装单', 'ZZD00000000312', 'ZZD00000000312', '2019-12-28 12:18:09', '2020-02-20 23:54:02', null, '63', '63', null, '0.000000', '10.000000', '现付', null, '', '', null, '', null, null, null, null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('207', '其它', '拆卸单', 'CXD00000000313', 'CXD00000000313', '2019-12-28 12:18:47', '2020-02-20 23:54:21', null, '63', '63', null, '0.000000', '0.000000', '现付', null, '', '', null, '', null, null, null, null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('208', '出库', '零售', 'LSCK00000000314', 'LSCK00000000314', '2019-12-28 12:20:26', '2019-12-28 12:20:14', '60', '63', '63', '17', '30.000000', '30.000000', '预付款', null, '', '', null, '', null, null, null, null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('209', '入库', '零售退货', 'LSTH00000000315', 'LSTH00000000315', '2019-12-28 12:20:39', '2019-12-28 12:20:29', '60', '63', '63', '17', '-15.000000', '-15.000000', '现付', null, '', '', null, '', null, null, null, null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('210', '入库', '采购', 'CGRK00000000318', 'CGRK00000000318', '2020-02-20 23:22:38', '2020-02-20 23:22:27', '57', '63', '63', '17', '-110.000000', '-110.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '110.000000', null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('211', '入库', '采购', 'CGRK00000000319', 'CGRK00000000319', '2020-02-20 23:54:48', '2020-02-20 23:54:33', '57', '63', '63', '17', '-2400.000000', '-2400.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '2400.000000', null, '[\"undefined\"]', '[\"undefined\"]', null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('212', '入库', '采购', 'CGRK00000000320', 'CGRK00000000320', '2020-07-14 00:28:15', '2020-07-14 00:27:59', '57', '63', '63', '17', '-535.000000', '-535.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '535.000000', null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('214', '出库', '销售', 'XSCK00000000321', 'XSCK00000000321', '2020-07-15 00:38:07', '2020-07-15 00:37:36', '58', '63', '63', '17', '2400.000000', '2500.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '2500.000000', null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('215', '入库', '采购', 'CGRK00000000329', 'CGRK00000000329', '2020-07-21 00:35:16', '2020-07-21 00:35:05', '57', '63', '63', '17', '-800.000000', '-800.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '800.000000', null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('216', '出库', '销售', 'XSCK00000000330', 'XSCK00000000330', '2020-07-21 00:35:37', '2020-07-21 00:35:26', '58', '63', '63', '17', '308.000000', '308.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '308.000000', null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('217', '其它', '采购订单', 'CGDD00000000333', 'CGDD00000000333', '2020-07-21 01:15:15', '2020-07-21 01:15:07', '57', '63', '63', null, '0.000000', '-96.000000', '现付', null, '', '', null, '', null, null, null, null, null, null, null, '2', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('218', '入库', '采购', 'CGRK00000000334', 'CGRK00000000334', '2020-07-21 01:15:32', '2020-07-21 01:15:28', '57', '63', '63', '17', '-270.000000', '-270.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '270.000000', null, null, null, null, '0', 'CGDD00000000333', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('219', '出库', '销售', 'XSCK00000000336', 'XSCK00000000336', '2020-07-21 15:06:02', '2020-07-21 15:05:49', '59', '63', '63', '17', '70.000000', '70.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '70.000000', null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('222', '出库', '销售', 'XSCK00000000338', 'XSCK00000000338', '2020-07-21 23:05:55', '2020-07-21 23:04:05', '58', '63', '63', '17', '110.000000', '110.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '110.000000', null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('223', '入库', '采购', 'CGRK00000000339', 'CGRK00000000339', '2020-07-21 23:06:55', '2020-07-21 23:06:43', '68', '63', '63', '17', '-110.000000', '-110.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '110.000000', null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('224', '出库', '销售', 'XSCK00000000340', 'XSCK00000000340', '2020-07-21 23:07:06', '2020-07-21 23:06:59', '71', '63', '63', '17', '44.000000', '44.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '44.000000', null, null, null, null, '0', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('225', '其它', '盘点录入', 'PDLR00000000342', 'PDLR00000000342', '2020-07-22 00:07:13', '2020-07-22 00:06:53', null, '63', '63', null, '0.000000', '16.000000', '现付', null, '', '', null, '', null, null, null, null, null, null, null, '2', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('226', '其它', '盘点复盘', 'PDFP00000000344', 'PDFP00000000344', '2020-07-22 00:07:41', '2020-07-22 00:08:06', null, '63', '63', null, '0.000000', '16.000000', '现付', null, '', '', null, '', null, null, null, null, null, null, null, '1', 'PDFP00000000343', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('227', '其它', '采购订单', 'CGDD00000000345', 'CGDD00000000345', '2020-07-22 00:41:37', '2020-07-22 00:41:27', '74', '63', '63', null, '0.000000', '-110.000000', '现付', null, '', '', null, '', null, null, null, null, null, null, null, '2', '', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('228', '入库', '采购', 'CGRK00000000351', 'CGRK00000000351', '2020-07-22 00:48:09', '2020-07-22 00:47:48', '74', '63', '63', '17', '-110.000000', '-110.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '110.000000', null, null, null, null, '0', 'CGDD00000000345', '63', '0'); +INSERT INTO `jsh_depot_head` VALUES ('229', '入库', '采购', 'CGRK00000000352', 'CGRK00000000352', '2020-09-13 18:43:56', '2020-09-13 18:43:45', '57', null, '131', '17', '-90.000000', '-90.000000', '现付', null, '', '', null, '', '0.000000', '0.000000', '90.000000', null, null, null, null, '0', '', '63', '0'); + +-- ---------------------------- +-- Table structure for jsh_depot_item +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_depot_item`; +CREATE TABLE `jsh_depot_item` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `header_id` bigint(20) NOT NULL COMMENT '表头Id', + `material_id` bigint(20) NOT NULL COMMENT '商品Id', + `material_extend_id` bigint(20) DEFAULT NULL COMMENT '商品扩展id', + `material_unit` varchar(20) DEFAULT NULL COMMENT '商品计量单位', + `oper_number` decimal(24,6) DEFAULT NULL COMMENT '数量', + `basic_number` decimal(24,6) DEFAULT NULL COMMENT '基础数量,如kg、瓶', + `unit_price` decimal(24,6) DEFAULT NULL COMMENT '单价', + `tax_unit_price` decimal(24,6) DEFAULT NULL COMMENT '含税单价', + `all_price` decimal(24,6) DEFAULT NULL COMMENT '金额', + `remark` varchar(200) DEFAULT NULL COMMENT '备注', + `img` varchar(50) DEFAULT NULL COMMENT '图片', + `incidentals` decimal(24,6) DEFAULT NULL COMMENT '运杂费', + `depot_id` bigint(20) DEFAULT NULL COMMENT '仓库ID', + `another_depot_id` bigint(20) DEFAULT NULL COMMENT '调拨时,对方仓库Id', + `tax_rate` decimal(24,6) DEFAULT NULL COMMENT '税率', + `tax_money` decimal(24,6) DEFAULT NULL COMMENT '税额', + `tax_last_money` decimal(24,6) DEFAULT NULL COMMENT '价税合计', + `other_field1` varchar(50) DEFAULT NULL COMMENT '自定义字段1-名称', + `other_field2` varchar(50) DEFAULT NULL COMMENT '自定义字段2-型号', + `other_field3` varchar(50) DEFAULT NULL COMMENT '自定义字段3-制造商', + `other_field4` varchar(50) DEFAULT NULL COMMENT '自定义字段4-名称', + `other_field5` varchar(50) DEFAULT NULL COMMENT '自定义字段5-名称', + `material_type` varchar(20) DEFAULT NULL COMMENT '商品类型', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`), + KEY `FK2A819F475D61CCF7` (`material_id`), + KEY `FK2A819F474BB6190E` (`header_id`), + KEY `FK2A819F479485B3F5` (`depot_id`), + KEY `FK2A819F47729F5392` (`another_depot_id`) +) ENGINE=InnoDB AUTO_INCREMENT=249 DEFAULT CHARSET=utf8 COMMENT='单据子表'; + +-- ---------------------------- +-- Records of jsh_depot_item +-- ---------------------------- +INSERT INTO `jsh_depot_item` VALUES ('198', '189', '569', '3', '只', '12.000000', '12.000000', '10.000000', '10.000000', '120.000000', '', null, null, '14', null, '0.000000', '0.000000', '120.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('200', '191', '569', '3', '只', '1.000000', '1.000000', '10.000000', '10.000000', '10.000000', '', null, null, '14', null, '0.000000', '0.000000', '10.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('201', '192', '569', '3', '只', '22.000000', '22.000000', '10.000000', '10.000000', '220.000000', '', null, null, '14', null, '0.000000', '0.000000', '220.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('202', '193', '569', '3', '只', '20.000000', '0.000000', '15.000000', '15.000000', '300.000000', '', null, null, '14', null, '0.000000', '0.000000', '300.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('205', '196', '569', '3', '只', '2.000000', '122.000000', '10.000000', '10.000000', '20.000000', '', null, null, '15', null, '0.000000', '0.000000', '20.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('206', '197', '569', '3', '只', '18.000000', '0.000000', '15.000000', '15.000000', '270.000000', '', null, null, '14', null, '0.000000', '0.000000', '270.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('207', '196', '568', '2', '个', '10.000000', '2.000000', '11.000000', '11.000000', '110.000000', '', null, null, '15', null, '0.000000', '0.000000', '110.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('208', '196', '568', '2', '个', '10.000000', '2.000000', '11.000000', '11.000000', '110.000000', '', null, null, '15', null, '0.000000', '0.000000', '110.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('209', '196', '568', '2', '个', '10.000000', '2.000000', '11.000000', '11.000000', '110.000000', '', null, null, '14', null, '0.000000', '0.000000', '110.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('210', '196', '568', '2', '个', '10.000000', '2.000000', '11.000000', '11.000000', '110.000000', '', null, null, '14', null, '0.000000', '0.000000', '110.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('211', '196', '568', '2', '个', '10.000000', '3.000000', '11.000000', '11.000000', '110.000000', '', null, null, '14', null, '0.000000', '0.000000', '110.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('212', '196', '568', '2', '个', '10.000000', '4.000000', '11.000000', '11.000000', '110.000000', '', null, null, '14', null, '0.000000', '0.000000', '110.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('213', '196', '568', '2', '个', '100.000000', '5.000000', '11.000000', '11.000000', '1100.000000', '', null, null, '14', null, '0.000000', '0.000000', '1100.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('214', '196', '569', '3', '只', '15.000000', '6.000000', '10.000000', '10.000000', '150.000000', '', null, null, '14', null, '0.000000', '0.000000', '150.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('216', '199', '568', '2', '个', '2.000000', '2.000000', '11.000000', '11.000000', '22.000000', '', null, null, '14', null, '0.000000', '0.000000', '22.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('217', '200', '568', '2', '个', '1.000000', '0.000000', '11.000000', '11.000000', '11.000000', '', null, null, '14', null, '0.000000', '0.000000', '11.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('218', '201', '568', '2', '个', '1.000000', '1.000000', '15.000000', '15.000000', '15.000000', '', null, null, '14', null, '0.000000', '0.000000', '15.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('219', '202', '568', '2', '个', '1.000000', '1.000000', '15.000000', '15.000000', '15.000000', '', null, null, '14', null, '0.000000', '0.000000', '15.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('220', '203', '568', '2', '个', '2.000000', '2.000000', '11.000000', '11.000000', '22.000000', '', null, null, '14', null, '0.000000', '0.000000', '22.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('221', '203', '569', '3', '只', '2.000000', '2.000000', '10.000000', '10.000000', '20.000000', '', null, null, '14', null, '0.000000', '0.000000', '20.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('222', '204', '569', '3', '只', '1.000000', '0.000000', '15.000000', '15.000000', '15.000000', '', null, null, '14', null, '0.000000', '0.000000', '15.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('223', '205', '568', '2', '个', '1.000000', '1.000000', '15.000000', '15.000000', '15.000000', '', null, null, '14', '15', '0.000000', '0.000000', '15.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('224', '206', '568', '2', '个', '1.000000', '1.000000', '5.000000', '5.000000', '5.000000', '', null, null, '14', null, '0.000000', '0.000000', '5.000000', '', '', '', '', '', '组合件', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('225', '206', '569', '3', '只', '1.000000', '1.000000', '5.000000', '5.000000', '5.000000', '', null, null, '14', null, '0.000000', '0.000000', '5.000000', '', '', '', '', '', '普通子件', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('226', '207', '569', '3', '只', '1.000000', '1.000000', '0.000000', '0.000000', '0.000000', '', null, null, '14', null, '0.000000', '0.000000', '0.000000', '', '', '', '', '', '组合件', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('227', '207', '568', '2', '个', '1.000000', '1.000000', '0.000000', '0.000000', '0.000000', '', null, null, '14', null, '0.000000', '0.000000', '0.000000', '', '', '', '', '', '普通子件', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('228', '208', '568', '2', '个', '2.000000', '2.000000', '15.000000', '15.000000', '30.000000', '', null, null, '14', null, '0.000000', '0.000000', '30.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('229', '209', '568', '2', '个', '1.000000', '1.000000', '15.000000', '15.000000', '15.000000', '', null, null, '14', null, '0.000000', '0.000000', '15.000000', '', '', '', '', '', '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('230', '210', '587', '1', '个', '10.000000', '10.000000', '11.000000', '11.000000', '110.000000', '', null, null, '14', null, '0.000000', '0.000000', '110.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('231', '211', '579', '8', '箱', '10.000000', '120.000000', '240.000000', '240.000000', '2400.000000', '', null, null, '14', null, '0.000000', '0.000000', '2400.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('232', '212', '587', '1', '个', '5.000000', '5.000000', '11.000000', '11.000000', '55.000000', '', null, null, '14', null, '0.000000', '0.000000', '55.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('233', '212', '570', '4', '个', '60.000000', '60.000000', '8.000000', '8.000000', '480.000000', '', null, null, '14', null, '0.000000', '0.000000', '480.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('234', '214', '570', '4', '个', '100.000000', '100.000000', '14.000000', '14.000000', '1400.000000', '', null, null, '14', null, '0.000000', '0.000000', '1400.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('235', '214', '587', '1', '个', '50.000000', '50.000000', '22.000000', '22.000000', '1100.000000', '', null, null, '14', null, '0.000000', '0.000000', '1100.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('236', '215', '570', '4', '个', '100.000000', '100.000000', '8.000000', '8.000000', '800.000000', '', null, null, '14', null, '0.000000', '0.000000', '800.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('237', '216', '570', '4', '个', '22.000000', '22.000000', '14.000000', '14.000000', '308.000000', '', null, null, '14', null, '0.000000', '0.000000', '308.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('238', '217', '570', '4', '个', '12.000000', '12.000000', '8.000000', '8.000000', '96.000000', '', null, null, '14', null, '0.000000', '0.000000', '96.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('239', '218', '570', '4', '个', '15.000000', '15.000000', '18.000000', '18.000000', '270.000000', '', null, null, '14', null, '0.000000', '0.000000', '270.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('240', '219', '570', '4', '个', '5.000000', '5.000000', '14.000000', '14.000000', '70.000000', '', null, null, '14', null, '0.000000', '0.000000', '70.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('241', '222', '588', '10', '个', '5.000000', '5.000000', '22.000000', '22.000000', '110.000000', '', null, null, '14', null, '0.000000', '0.000000', '110.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('242', '223', '588', '10', '个', '10.000000', '10.000000', '11.000000', '11.000000', '110.000000', '', null, null, '14', null, '0.000000', '0.000000', '110.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('243', '224', '588', '10', '个', '2.000000', '2.000000', '22.000000', '22.000000', '44.000000', '', null, null, '14', null, '0.000000', '0.000000', '44.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('244', '225', '570', '4', '个', '2.000000', '2.000000', '8.000000', '8.000000', '16.000000', '', null, null, '14', null, '0.000000', '0.000000', '16.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('245', '226', '570', '4', '个', '2.000000', '2.000000', '8.000000', '8.000000', '16.000000', '', null, null, '14', null, '0.000000', '0.000000', '16.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('246', '227', '588', '10', '个', '10.000000', '10.000000', '11.000000', '11.000000', '110.000000', '', null, null, '14', null, '0.000000', '0.000000', '110.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('247', '228', '588', '10', '个', '10.000000', '10.000000', '11.000000', '11.000000', '110.000000', '', null, null, '14', null, '0.000000', '0.000000', '110.000000', null, null, null, null, null, '', '63', '0'); +INSERT INTO `jsh_depot_item` VALUES ('248', '229', '569', '3', '只', '9.000000', '9.000000', '10.000000', '10.000000', '90.000000', '', null, null, '14', null, '0.000000', '0.000000', '90.000000', null, null, null, null, null, '', '63', '0'); + +-- ---------------------------- +-- Table structure for jsh_function +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_function`; +CREATE TABLE `jsh_function` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `number` varchar(50) DEFAULT NULL COMMENT '编号', + `name` varchar(50) DEFAULT NULL COMMENT '名称', + `parent_number` varchar(50) DEFAULT NULL COMMENT '上级编号', + `url` varchar(100) DEFAULT NULL COMMENT '链接', + `component` varchar(100) DEFAULT NULL COMMENT '组件', + `state` bit(1) DEFAULT NULL COMMENT '收缩', + `sort` varchar(50) DEFAULT NULL COMMENT '排序', + `enabled` bit(1) DEFAULT NULL COMMENT '启用', + `type` varchar(50) DEFAULT NULL COMMENT '类型', + `push_btn` varchar(50) DEFAULT NULL COMMENT '功能按钮', + `icon` varchar(50) DEFAULT NULL COMMENT '图标', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=257 DEFAULT CHARSET=utf8 COMMENT='功能模块表'; + +-- ---------------------------- +-- Records of jsh_function +-- ---------------------------- +INSERT INTO `jsh_function` VALUES ('1', '0001', '系统管理', '0', '/system', '/layouts/TabLayout', '', '0910', '', '电脑版', '', 'setting', '0'); +INSERT INTO `jsh_function` VALUES ('13', '000102', '角色管理', '0001', '/system/role', '/system/RoleList', '\0', '0130', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('14', '000103', '用户管理', '0001', '/system/user', '/system/UserList', '\0', '0140', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('15', '000104', '日志管理', '0001', '/system/log', '/system/LogList', '\0', '0160', '', '电脑版', '', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('16', '000105', '功能管理', '0001', '/system/function', '/system/FunctionList', '\0', '0166', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('21', '0101', '商品管理', '0', '/material', '/layouts/TabLayout', '\0', '0620', '', '电脑版', null, 'shopping', '0'); +INSERT INTO `jsh_function` VALUES ('22', '010101', '商品类别', '0101', '/material/material_category', '/material/MaterialCategoryList', '\0', '0230', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('23', '010102', '商品信息', '0101', '/material/material', '/material/MaterialList', '\0', '0240', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('24', '0102', '基本资料', '0', '/system', '/layouts/TabLayout', '\0', '0750', '', '电脑版', null, 'appstore', '0'); +INSERT INTO `jsh_function` VALUES ('25', '01020101', '供应商信息', '0102', '/system/vendor', '/system/VendorList', '\0', '0260', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('26', '010202', '仓库信息', '0102', '/system/depot', '/system/DepotList', '\0', '0270', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('31', '010206', '经手人管理', '0102', '/system/person', '/system/PersonList', '\0', '0284', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('32', '0502', '采购管理', '0', '/bill', '/layouts/TabLayout', '\0', '0330', '', '电脑版', '', 'retweet', '0'); +INSERT INTO `jsh_function` VALUES ('33', '050201', '采购入库', '0502', '/bill/purchase_in', '/bill/PurchaseInList', '\0', '0340', '', '电脑版', '1,2', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('38', '0603', '销售管理', '0', '/bill', '/layouts/TabLayout', '\0', '0390', '', '电脑版', '', 'shopping-cart', '0'); +INSERT INTO `jsh_function` VALUES ('40', '080107', '调拨出库', '0801', '/bill/allocation_out', '/bill/AllocationOutList', '\0', '0807', '', '电脑版', '1,2', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('41', '060303', '销售出库', '0603', '/bill/sale_out', '/bill/SaleOutList', '\0', '0394', '', '电脑版', '1,2', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('44', '0704', '财务管理', '0', '/financial', '/layouts/TabLayout', '\0', '0450', '', '电脑版', '', 'money-collect', '0'); +INSERT INTO `jsh_function` VALUES ('59', '030101', '库存状况', '0301', '/report/in_out_stock_report', '/report/InOutStockReport', '\0', '0600', '', '电脑版', '', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('194', '010204', '收支项目', '0102', '/system/in_out_item', '/system/InOutItemList', '\0', '0282', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('195', '010205', '结算账户', '0102', '/system/account', '/system/AccountList', '\0', '0283', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('197', '070402', '收入单', '0704', '/financial/item_in', '/financial/ItemInList', '\0', '0465', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('198', '0301', '报表查询', '0', '/report', '/layouts/TabLayout', '\0', '0570', '', '电脑版', null, 'pie-chart', '0'); +INSERT INTO `jsh_function` VALUES ('199', '050204', '采购退货', '0502', '/bill/purchase_back', '/bill/PurchaseBackList', '\0', '0345', '', '电脑版', '1,2', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('200', '060305', '销售退货', '0603', '/bill/sale_back', '/bill/SaleBackList', '\0', '0396', '', '电脑版', '1,2', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('201', '080103', '其它入库', '0801', '/bill/other_in', '/bill/OtherInList', '\0', '0803', '', '电脑版', '1,2', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('202', '080105', '其它出库', '0801', '/bill/other_out', '/bill/OtherOutList', '\0', '0805', '', '电脑版', '1,2', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('203', '070403', '支出单', '0704', '/financial/item_out', '/financial/ItemOutList', '\0', '0470', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('204', '070404', '收款单', '0704', '/financial/money_in', '/financial/MoneyInList', '\0', '0475', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('205', '070405', '付款单', '0704', '/financial/money_out', '/financial/MoneyOutList', '\0', '0480', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('206', '070406', '转账单', '0704', '/financial/giro', '/financial/GiroList', '\0', '0490', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('207', '030102', '账户统计', '0301', '/report/account_report', '/report/AccountReport', '\0', '0610', '', '电脑版', '', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('208', '030103', '进货统计', '0301', '/report/buy_in_report', '/report/BuyInReport', '\0', '0620', '', '电脑版', '', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('209', '030104', '销售统计', '0301', '/report/sale_out_report', '/report/SaleOutReport', '\0', '0630', '', '电脑版', '', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('210', '040102', '零售出库', '0401', '/bill/retail_out', '/bill/RetailOutList', '\0', '0405', '', '电脑版', '1,2', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('211', '040104', '零售退货', '0401', '/bill/retail_back', '/bill/RetailBackList', '\0', '0407', '', '电脑版', '1,2', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('212', '070407', '收预付款', '0704', '/financial/advance_in', '/financial/AdvanceInList', '\0', '0495', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('217', '01020102', '客户信息', '0102', '/system/customer', '/system/CustomerList', '\0', '0262', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('218', '01020103', '会员信息', '0102', '/system/member', '/system/MemberList', '\0', '0263', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('220', '010103', '计量单位', '0101', '/system/unit', '/system/UnitList', '\0', '0245', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('225', '0401', '零售管理', '0', '/bill', '/layouts/TabLayout', '\0', '0101', '', '电脑版', '', 'gift', '0'); +INSERT INTO `jsh_function` VALUES ('226', '030106', '入库明细', '0301', '/report/in_detail', '/report/InDetail', '\0', '0640', '', '电脑版', '', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('227', '030107', '出库明细', '0301', '/report/out_detail', '/report/OutDetail', '\0', '0645', '', '电脑版', '', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('228', '030108', '入库汇总', '0301', '/report/in_material_count', '/report/InMaterialCount', '\0', '0650', '', '电脑版', '', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('229', '030109', '出库汇总', '0301', '/report/out_material_count', '/report/OutMaterialCount', '\0', '0655', '', '电脑版', '', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('232', '080109', '组装单', '0801', '/bill/assemble', '/bill/AssembleList', '\0', '0809', '', '电脑版', '1,2', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('233', '080111', '拆卸单', '0801', '/bill/disassemble', '/bill/DisassembleList', '\0', '0811', '', '电脑版', '1,2', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('234', '000105', '系统配置', '0001', '/system/system_config', '/system/SystemConfigList', '\0', '0165', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('235', '030110', '客户对账', '0301', '/report/customer_account', '/report/CustomerAccount', '\0', '0660', '', '电脑版', '', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('236', '000106', '商品属性', '0001', '/material/material_property', '/system/MaterialPropertyList', '\0', '0168', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('237', '030111', '供应商对账', '0301', '/report/vendor_account', '/report/VendorAccount', '\0', '0665', '', '电脑版', '', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('239', '0801', '仓库管理', '0', '/bill', '/layouts/TabLayout', '\0', '0420', '', '电脑版', '', 'hdd', '0'); +INSERT INTO `jsh_function` VALUES ('240', '010104', '序列号', '0101', '/system/serial_number', '/system/SerialNumberList', '\0', '0246', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('241', '050202', '采购订单', '0502', '/bill/purchase_order', '/bill/PurchaseOrderList', '\0', '0335', '', '电脑版', '1,2', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('242', '060301', '销售订单', '0603', '/bill/sale_orders', '/bill/SaleOrdersList', '\0', '0392', '', '电脑版', '1,2', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('243', '000108', '机构管理', '0001', '/system/organization', '/system/OrganizationList', '', '0150', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('244', '030112', '库存预警', '0301', '/report/stock_warning_report', '/report/StockWarningReport', '\0', '0670', '', '电脑版', '', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('245', '000107', '插件管理', '0001', '/system/plugin', '/system/PluginList', '\0', '0170', '', '电脑版', '1', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('254', '1001', '生产管理', '0', '/plugin', '/layouts/TabLayout', '\0', '0550', '', '电脑版', '', 'tool', '0'); +INSERT INTO `jsh_function` VALUES ('255', '100101', '生产任务[插件]', '1001', '/plugin/produce/task', '/plugin/Produce/TaskList', '\0', '0552', '', '电脑版', '1,2', 'profile', '0'); +INSERT INTO `jsh_function` VALUES ('256', '100102', 'BOM管理[插件]', '1001', '/plugin/produce/bom', '/plugin/Produce/BomList', '\0', '0554', '', '电脑版', '1', 'profile', '0'); + +-- ---------------------------- +-- Table structure for jsh_in_out_item +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_in_out_item`; +CREATE TABLE `jsh_in_out_item` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(50) DEFAULT NULL COMMENT '名称', + `type` varchar(20) DEFAULT NULL COMMENT '类型', + `remark` varchar(100) DEFAULT NULL COMMENT '备注', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COMMENT='收支项目'; + +-- ---------------------------- +-- Records of jsh_in_out_item +-- ---------------------------- +INSERT INTO `jsh_in_out_item` VALUES ('21', '快递费', '支出', '', '63', '0'); +INSERT INTO `jsh_in_out_item` VALUES ('22', '房租收入', '收入', '', '63', '0'); +INSERT INTO `jsh_in_out_item` VALUES ('23', '利息收入', '收入', '收入', '63', '0'); + +-- ---------------------------- +-- Table structure for jsh_log +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_log`; +CREATE TABLE `jsh_log` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `user_id` bigint(20) DEFAULT NULL COMMENT '用户id', + `operation` varchar(500) DEFAULT NULL COMMENT '操作模块名称', + `client_ip` varchar(50) DEFAULT NULL COMMENT '客户端IP', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `status` tinyint(4) DEFAULT NULL COMMENT '操作状态 0==成功,1==失败', + `content` varchar(1000) DEFAULT NULL COMMENT '详情', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`), + KEY `FKF2696AA13E226853` (`user_id`) +) ENGINE=InnoDB AUTO_INCREMENT=6800 DEFAULT CHARSET=utf8 COMMENT='操作日志'; + +-- ---------------------------- +-- Records of jsh_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for jsh_material +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_material`; +CREATE TABLE `jsh_material` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `category_id` bigint(20) DEFAULT NULL COMMENT '产品类型id', + `name` varchar(50) DEFAULT NULL COMMENT '名称', + `mfrs` varchar(50) DEFAULT NULL COMMENT '制造商', + `safety_stock` decimal(24,6) DEFAULT NULL COMMENT '安全存量(KG)', + `model` varchar(50) DEFAULT NULL COMMENT '型号', + `standard` varchar(50) DEFAULT NULL COMMENT '规格', + `color` varchar(50) DEFAULT NULL COMMENT '颜色', + `unit` varchar(50) DEFAULT NULL COMMENT '单位-单个', + `remark` varchar(100) DEFAULT NULL COMMENT '备注', + `unit_id` bigint(20) DEFAULT NULL COMMENT '计量单位Id', + `enabled` bit(1) DEFAULT NULL COMMENT '启用 0-禁用 1-启用', + `other_field1` varchar(50) DEFAULT NULL COMMENT '自定义1', + `other_field2` varchar(50) DEFAULT NULL COMMENT '自定义2', + `other_field3` varchar(50) DEFAULT NULL COMMENT '自定义3', + `enable_serial_number` varchar(1) DEFAULT '0' COMMENT '是否开启序列号,0否,1是', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`), + KEY `FK675951272AB6672C` (`category_id`), + KEY `UnitId` (`unit_id`) +) ENGINE=InnoDB AUTO_INCREMENT=589 DEFAULT CHARSET=utf8 COMMENT='产品表'; + +-- ---------------------------- +-- Records of jsh_material +-- ---------------------------- +INSERT INTO `jsh_material` VALUES ('568', '17', '商品1', '制1', '100.000000', 'sp1', '', '', '个', '', null, '', '', '', '', '0', '63', '0'); +INSERT INTO `jsh_material` VALUES ('569', '17', '商品2', '', '200.000000', 'sp2', '', '', '只', '', null, '', '', '', '', '0', '63', '0'); +INSERT INTO `jsh_material` VALUES ('570', '17', '商品3', '', '300.000000', 'sp3', '', '', '个', '', null, '', '', '', '', '0', '63', '0'); +INSERT INTO `jsh_material` VALUES ('577', null, '商品8', '', null, 'sp8', '', '', '', '', '15', '', '', '', '', '0', '63', '0'); +INSERT INTO `jsh_material` VALUES ('579', '21', '商品17', '', null, 'sp17', '', '', '', '', '15', '', '', '', '', '0', '63', '0'); +INSERT INTO `jsh_material` VALUES ('586', '17', '序列号商品测试', '', null, 'xlh123', '', '', '个', '', null, '', '', '', '', '1', '63', '0'); +INSERT INTO `jsh_material` VALUES ('587', '17', '商品test1', '南通中远', null, '', 'test1', '', '个', '', null, '', '', '', '', '0', '63', '0'); +INSERT INTO `jsh_material` VALUES ('588', '21', '商品200', '', '112.000000', '', '300ml', '', '个', '', null, '', '', '', '', '0', '63', '0'); + +-- ---------------------------- +-- Table structure for jsh_material_category +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_material_category`; +CREATE TABLE `jsh_material_category` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(50) DEFAULT NULL COMMENT '名称', + `category_level` smallint(6) DEFAULT NULL COMMENT '等级', + `parent_id` bigint(20) DEFAULT NULL COMMENT '上级id', + `sort` varchar(10) DEFAULT NULL COMMENT '显示顺序', + `status` varchar(1) DEFAULT '0' COMMENT '状态,0系统默认,1启用,2删除', + `serial_no` varchar(100) DEFAULT NULL COMMENT '编号', + `remark` varchar(1024) DEFAULT NULL COMMENT '备注', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `creator` bigint(20) DEFAULT NULL COMMENT '创建人', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `updater` bigint(20) DEFAULT NULL COMMENT '更新人', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`), + KEY `FK3EE7F725237A77D8` (`parent_id`) +) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 COMMENT='产品类型表'; + +-- ---------------------------- +-- Records of jsh_material_category +-- ---------------------------- +INSERT INTO `jsh_material_category` VALUES ('17', '目录1', null, '-1', '', '1', '', '', '2019-04-10 22:18:12', '63', '2019-04-10 22:18:12', '63', '63'); +INSERT INTO `jsh_material_category` VALUES ('21', '目录2', null, '17', '', '1', '', '', '2020-07-20 23:08:44', '63', '2020-07-20 23:08:44', '63', '63'); + +-- ---------------------------- +-- Table structure for jsh_material_current_stock +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_material_current_stock`; +CREATE TABLE `jsh_material_current_stock` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `material_id` bigint(20) DEFAULT NULL COMMENT '产品id', + `depot_id` bigint(20) DEFAULT NULL COMMENT '仓库id', + `current_number` decimal(24,6) DEFAULT NULL COMMENT '当前库存数量', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='产品当前库存'; + +-- ---------------------------- +-- Records of jsh_material_current_stock +-- ---------------------------- +INSERT INTO `jsh_material_current_stock` VALUES ('1', '587', '14', '-30.000000', '63', '0'); +INSERT INTO `jsh_material_current_stock` VALUES ('2', '570', '14', '48.000000', '63', '0'); +INSERT INTO `jsh_material_current_stock` VALUES ('3', '568', '14', '19.000000', '63', '0'); +INSERT INTO `jsh_material_current_stock` VALUES ('4', '569', '14', '50.000000', '63', '0'); +INSERT INTO `jsh_material_current_stock` VALUES ('5', '588', '14', '13.000000', '63', '0'); +INSERT INTO `jsh_material_current_stock` VALUES ('6', '569', '15', '122.000000', '63', '0'); + +-- ---------------------------- +-- Table structure for jsh_material_extend +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_material_extend`; +CREATE TABLE `jsh_material_extend` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `material_id` bigint(20) DEFAULT NULL COMMENT '商品id', + `bar_code` varchar(50) DEFAULT NULL COMMENT '商品条码', + `commodity_unit` varchar(50) DEFAULT NULL COMMENT '商品单位', + `purchase_decimal` decimal(24,6) DEFAULT NULL COMMENT '采购价格', + `commodity_decimal` decimal(24,6) DEFAULT NULL COMMENT '零售价格', + `wholesale_decimal` decimal(24,6) DEFAULT NULL COMMENT '销售价格', + `low_decimal` decimal(24,6) DEFAULT NULL COMMENT '最低售价', + `default_flag` varchar(1) DEFAULT '1' COMMENT '是否为默认单位,1是,0否', + `create_time` datetime DEFAULT NULL COMMENT '创建日期', + `create_serial` varchar(50) DEFAULT NULL COMMENT '创建人编码', + `update_serial` varchar(50) DEFAULT NULL COMMENT '更新人编码', + `update_time` bigint(20) DEFAULT NULL COMMENT '更新时间戳', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + `delete_Flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='产品价格扩展'; + +-- ---------------------------- +-- Records of jsh_material_extend +-- ---------------------------- +INSERT INTO `jsh_material_extend` VALUES ('1', '587', '1000', '个', '11.000000', '22.000000', '22.000000', '22.000000', '1', '2020-02-20 23:22:03', 'jsh', 'jsh', '1595263657135', '63', '0'); +INSERT INTO `jsh_material_extend` VALUES ('2', '568', '1001', '个', '11.000000', '15.000000', '15.000000', '15.000000', '1', '2020-02-20 23:44:57', 'jsh', 'jsh', '1595265439418', '63', '0'); +INSERT INTO `jsh_material_extend` VALUES ('3', '569', '1002', '只', '10.000000', '15.000000', '15.000000', '13.000000', '1', '2020-02-20 23:45:15', 'jsh', 'jsh', '1582213514731', '63', '0'); +INSERT INTO `jsh_material_extend` VALUES ('4', '570', '1003', '个', '8.000000', '15.000000', '14.000000', '13.000000', '1', '2020-02-20 23:45:37', 'jsh', 'jsh', '1587657604430', '63', '0'); +INSERT INTO `jsh_material_extend` VALUES ('5', '577', '1004', '个', '10.000000', '20.000000', '20.000000', '20.000000', '1', '2020-02-20 23:46:36', 'jsh', 'jsh', '1582213596494', '63', '0'); +INSERT INTO `jsh_material_extend` VALUES ('6', '577', '1005', '箱', '120.000000', '240.000000', '240.000000', '240.000000', '0', '2020-02-20 23:46:36', 'jsh', 'jsh', '1582213596497', '63', '0'); +INSERT INTO `jsh_material_extend` VALUES ('7', '579', '1006', '个', '20.000000', '30.000000', '30.000000', '30.000000', '1', '2020-02-20 23:47:04', 'jsh', 'jsh', '1595264270458', '63', '0'); +INSERT INTO `jsh_material_extend` VALUES ('8', '579', '1007', '箱', '240.000000', '360.000000', '360.000000', '360.000000', '0', '2020-02-20 23:47:04', 'jsh', 'jsh', '1595264270466', '63', '0'); +INSERT INTO `jsh_material_extend` VALUES ('9', '586', '1008', '个', '12.000000', '15.000000', '15.000000', '15.000000', '1', '2020-02-20 23:47:23', 'jsh', 'jsh', '1595254981896', '63', '0'); +INSERT INTO `jsh_material_extend` VALUES ('10', '588', '1009', '个', '11.000000', '22.000000', '22.000000', '22.000000', '1', '2020-07-21 00:58:15', 'jsh', 'jsh', '1595264315873', '63', '0'); + +-- ---------------------------- +-- Table structure for jsh_material_initial_stock +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_material_initial_stock`; +CREATE TABLE `jsh_material_initial_stock` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `material_id` bigint(20) DEFAULT NULL COMMENT '产品id', + `depot_id` bigint(20) DEFAULT NULL COMMENT '仓库id', + `number` decimal(24,6) DEFAULT NULL COMMENT '初始库存数量', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=124 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='产品初始库存'; + +-- ---------------------------- +-- Records of jsh_material_initial_stock +-- ---------------------------- +INSERT INTO `jsh_material_initial_stock` VALUES ('123', '587', '14', '5.000000', '63', '0'); + +-- ---------------------------- +-- Table structure for jsh_material_property +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_material_property`; +CREATE TABLE `jsh_material_property` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `native_name` varchar(50) DEFAULT NULL COMMENT '原始名称', + `enabled` bit(1) DEFAULT NULL COMMENT '是否启用', + `sort` varchar(10) DEFAULT NULL COMMENT '排序', + `another_name` varchar(50) DEFAULT NULL COMMENT '别名', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='产品扩展字段表'; + +-- ---------------------------- +-- Records of jsh_material_property +-- ---------------------------- +INSERT INTO `jsh_material_property` VALUES ('1', '制造商', '', '01', '制造商', '0'); +INSERT INTO `jsh_material_property` VALUES ('2', '自定义1', '', '02', '自定义1', '0'); +INSERT INTO `jsh_material_property` VALUES ('3', '自定义2', '', '03', '自定义2', '0'); +INSERT INTO `jsh_material_property` VALUES ('4', '自定义3', '', '04', '自定义3', '0'); + +-- ---------------------------- +-- Table structure for jsh_msg +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_msg`; +CREATE TABLE `jsh_msg` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `msg_title` varchar(100) DEFAULT NULL COMMENT '消息标题', + `msg_content` varchar(500) DEFAULT NULL COMMENT '消息内容', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `type` varchar(20) DEFAULT NULL COMMENT '消息类型', + `status` varchar(1) DEFAULT NULL COMMENT '状态,1未读 2已读', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + `delete_Flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='消息表'; + +-- ---------------------------- +-- Records of jsh_msg +-- ---------------------------- +INSERT INTO `jsh_msg` VALUES ('2', '标题1', '内容1', '2019-09-10 00:11:39', '类型1', '1', '63', '0'); + +-- ---------------------------- +-- Table structure for jsh_organization +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_organization`; +CREATE TABLE `jsh_organization` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `org_no` varchar(20) DEFAULT NULL COMMENT '机构编号', + `org_full_name` varchar(500) DEFAULT NULL COMMENT '机构全称', + `org_abr` varchar(20) DEFAULT NULL COMMENT '机构简称', + `org_tpcd` varchar(9) DEFAULT NULL COMMENT '机构类型', + `org_stcd` char(1) DEFAULT NULL COMMENT '机构状态,1未营业、2正常营业、3暂停营业、4终止营业、5已除名', + `org_parent_no` varchar(20) DEFAULT NULL COMMENT '机构父节点编号', + `sort` varchar(20) DEFAULT NULL COMMENT '机构显示顺序', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `creator` bigint(20) DEFAULT NULL COMMENT '创建人', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `updater` bigint(20) DEFAULT NULL COMMENT '更新人', + `org_create_time` datetime DEFAULT NULL COMMENT '机构创建时间', + `org_stop_time` datetime DEFAULT NULL COMMENT '机构停运时间', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='机构表'; + +-- ---------------------------- +-- Records of jsh_organization +-- ---------------------------- +INSERT INTO `jsh_organization` VALUES ('12', '001', '测试机构', '测试机构', null, '2', '-1', '001', '', '2019-12-28 12:13:01', '63', '2019-12-28 12:13:01', '63', null, null, '63'); +INSERT INTO `jsh_organization` VALUES ('13', 'jg1', '机构1', '机构1', null, '2', '001', '22', '', '2020-07-21 00:09:57', '63', '2020-07-21 00:10:22', '63', null, null, '63'); +INSERT INTO `jsh_organization` VALUES ('14', '12', '机构2', '机构2', null, '', 'jg1', '12', '', '2020-07-21 22:45:42', '63', '2020-07-21 22:45:51', '63', null, null, '63'); + +-- ---------------------------- +-- Table structure for jsh_orga_user_rel +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_orga_user_rel`; +CREATE TABLE `jsh_orga_user_rel` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `orga_id` bigint(20) NOT NULL COMMENT '机构id', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `user_blng_orga_dspl_seq` varchar(20) DEFAULT NULL COMMENT '用户在所属机构中显示顺序', + `delete_flag` char(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `creator` bigint(20) DEFAULT NULL COMMENT '创建人', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `updater` bigint(20) DEFAULT NULL COMMENT '更新人', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COMMENT='机构用户关系表'; + +-- ---------------------------- +-- Records of jsh_orga_user_rel +-- ---------------------------- +INSERT INTO `jsh_orga_user_rel` VALUES ('10', '13', '131', '2', '0', '2019-12-28 12:13:15', '63', '2020-09-13 18:42:52', '63', '63'); +INSERT INTO `jsh_orga_user_rel` VALUES ('11', '12', '63', '', '0', '2020-09-13 18:42:45', '63', '2020-09-13 18:42:45', '63', '63'); + +-- ---------------------------- +-- Table structure for jsh_person +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_person`; +CREATE TABLE `jsh_person` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `type` varchar(20) DEFAULT NULL COMMENT '类型', + `name` varchar(50) DEFAULT NULL COMMENT '姓名', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COMMENT='经手人表'; + +-- ---------------------------- +-- Records of jsh_person +-- ---------------------------- +INSERT INTO `jsh_person` VALUES ('14', '业务员', '小李', '63', '0'); +INSERT INTO `jsh_person` VALUES ('15', '仓管员', '小军', '63', '0'); +INSERT INTO `jsh_person` VALUES ('16', '财务员', '小夏', '63', '0'); + +-- ---------------------------- +-- Table structure for jsh_platform_config +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_platform_config`; +CREATE TABLE `jsh_platform_config` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `platform_key` varchar(100) DEFAULT NULL COMMENT '关键词', + `platform_key_info` varchar(100) DEFAULT NULL COMMENT '关键词名称', + `platform_value` varchar(200) DEFAULT NULL COMMENT '值', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='平台参数'; + +-- ---------------------------- +-- Records of jsh_platform_config +-- ---------------------------- +INSERT INTO `jsh_platform_config` VALUES ('1', 'platform_name', '平台名称', '华夏ERP'); +INSERT INTO `jsh_platform_config` VALUES ('2', 'activation_code', '激活码', null); + +-- ---------------------------- +-- Table structure for jsh_role +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_role`; +CREATE TABLE `jsh_role` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(50) DEFAULT NULL COMMENT '名称', + `type` varchar(50) DEFAULT NULL COMMENT '类型', + `value` varchar(200) DEFAULT NULL COMMENT '值', + `description` varchar(100) DEFAULT NULL COMMENT '描述', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COMMENT='角色表'; + +-- ---------------------------- +-- Records of jsh_role +-- ---------------------------- +INSERT INTO `jsh_role` VALUES ('4', '管理员', '全部数据', null, null, null, '0'); +INSERT INTO `jsh_role` VALUES ('10', '租户', '全部数据', null, '', null, '0'); +INSERT INTO `jsh_role` VALUES ('16', '销售经理', '全部数据', null, 'ddd', '63', '0'); +INSERT INTO `jsh_role` VALUES ('17', '销售代表', '个人数据', null, 'rrr', '63', '0'); +INSERT INTO `jsh_role` VALUES ('18', '角色abc', '本机构数据', null, '33333', '63', '0'); + +-- ---------------------------- +-- Table structure for jsh_sequence +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_sequence`; +CREATE TABLE `jsh_sequence` ( + `seq_name` varchar(50) NOT NULL COMMENT '序列名称', + `min_value` bigint(20) NOT NULL COMMENT '最小值', + `max_value` bigint(20) NOT NULL COMMENT '最大值', + `current_val` bigint(20) NOT NULL COMMENT '当前值', + `increment_val` int(11) NOT NULL DEFAULT '1' COMMENT '增长步数', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`seq_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='单据编号表'; + +-- ---------------------------- +-- Records of jsh_sequence +-- ---------------------------- +INSERT INTO `jsh_sequence` VALUES ('depot_number_seq', '1', '999999999999999999', '353', '1', '单据编号sequence'); + +-- ---------------------------- +-- Table structure for jsh_serial_number +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_serial_number`; +CREATE TABLE `jsh_serial_number` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `material_id` bigint(20) DEFAULT NULL COMMENT '产品表id', + `serial_number` varchar(64) DEFAULT NULL COMMENT '序列号', + `is_sell` varchar(1) DEFAULT '0' COMMENT '是否卖出,0未卖出,1卖出', + `remark` varchar(1024) DEFAULT NULL COMMENT '备注', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `creator` bigint(20) DEFAULT NULL COMMENT '创建人', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `updater` bigint(20) DEFAULT NULL COMMENT '更新人', + `depot_head_id` bigint(20) DEFAULT NULL COMMENT '单据主表id,用于跟踪序列号流向', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=110 DEFAULT CHARSET=utf8 COMMENT='序列号表'; + +-- ---------------------------- +-- Records of jsh_serial_number +-- ---------------------------- +INSERT INTO `jsh_serial_number` VALUES ('105', '586', '12312323423223', '0', 'abab', '0', '2019-12-28 12:14:39', '63', '2020-07-21 00:30:32', '63', null, '63'); +INSERT INTO `jsh_serial_number` VALUES ('106', '586', '143132415952626404571', '0', '', '1', '2020-07-21 00:30:40', '63', '2020-07-21 00:30:49', '63', null, '63'); +INSERT INTO `jsh_serial_number` VALUES ('107', '586', '143132415952626404572', '0', '', '1', '2020-07-21 00:30:40', '63', '2020-07-21 00:30:47', '63', null, '63'); +INSERT INTO `jsh_serial_number` VALUES ('108', '586', '3215952626621201', '0', '', '0', '2020-07-21 00:31:02', '63', '2020-07-21 00:31:02', '63', null, '63'); +INSERT INTO `jsh_serial_number` VALUES ('109', '586', '3215952626621202', '0', '', '0', '2020-07-21 00:31:02', '63', '2020-07-21 00:31:02', '63', null, '63'); + +-- ---------------------------- +-- Table structure for jsh_supplier +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_supplier`; +CREATE TABLE `jsh_supplier` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `supplier` varchar(255) NOT NULL COMMENT '供应商名称', + `contacts` varchar(100) DEFAULT NULL COMMENT '联系人', + `phone_num` varchar(30) DEFAULT NULL COMMENT '联系电话', + `email` varchar(50) DEFAULT NULL COMMENT '电子邮箱', + `description` varchar(500) DEFAULT NULL COMMENT '备注', + `isystem` tinyint(4) DEFAULT NULL COMMENT '是否系统自带 0==系统 1==非系统', + `type` varchar(20) DEFAULT NULL COMMENT '类型', + `enabled` bit(1) DEFAULT NULL COMMENT '启用', + `advance_in` decimal(24,6) DEFAULT '0.000000' COMMENT '预收款', + `begin_need_get` decimal(24,6) DEFAULT NULL COMMENT '期初应收', + `begin_need_pay` decimal(24,6) DEFAULT NULL COMMENT '期初应付', + `all_need_get` decimal(24,6) DEFAULT NULL COMMENT '累计应收', + `all_need_pay` decimal(24,6) DEFAULT NULL COMMENT '累计应付', + `fax` varchar(30) DEFAULT NULL COMMENT '传真', + `telephone` varchar(30) DEFAULT NULL COMMENT '手机', + `address` varchar(50) DEFAULT NULL COMMENT '地址', + `tax_num` varchar(50) DEFAULT NULL COMMENT '纳税人识别号', + `bank_name` varchar(50) DEFAULT NULL COMMENT '开户行', + `account_number` varchar(50) DEFAULT NULL COMMENT '账号', + `tax_rate` decimal(24,6) DEFAULT NULL COMMENT '税率', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=75 DEFAULT CHARSET=utf8 COMMENT='供应商/客户信息表'; + +-- ---------------------------- +-- Records of jsh_supplier +-- ---------------------------- +INSERT INTO `jsh_supplier` VALUES ('57', '供应商1', '小军', '12345678', '', '', null, '供应商', '', '0.000000', '0.000000', '0.000000', null, '0.000000', '', '', '地址1', '', '', '', '12.000000', '63', '0'); +INSERT INTO `jsh_supplier` VALUES ('58', '客户1', '小李', '12345678', '', '', null, '客户', '', '0.000000', '0.000000', '0.000000', '-100.000000', null, '', '', '', '', '', '', '12.000000', '63', '0'); +INSERT INTO `jsh_supplier` VALUES ('59', '客户2', '小陈', '', '', '', null, '客户', '', '0.000000', '0.000000', '0.000000', '0.000000', null, '', '', '', '', '', '', null, '63', '0'); +INSERT INTO `jsh_supplier` VALUES ('60', '12312666', '小曹', '', '', '', null, '会员', '', '970.000000', '0.000000', '0.000000', null, null, '', '13000000000', '', '', '', '', null, '63', '0'); +INSERT INTO `jsh_supplier` VALUES ('68', '供应商3', '晓丽', '', '', '', null, '供应商', '', '0.000000', '15.000000', '0.000000', null, '-15.000000', '', '13000000000', '', '1341324', '', '', '22.000000', '63', '0'); +INSERT INTO `jsh_supplier` VALUES ('71', '客户3', '小周', '', '', '', null, '客户', '', '0.000000', '0.000000', '0.000000', '0.000000', null, '', '', '', '', '', '', null, '63', '0'); +INSERT INTO `jsh_supplier` VALUES ('74', '供应商5', '小季', '', '', '', null, '供应商', '', '0.000000', '0.000000', '0.000000', null, null, '', '', '', '', '', '', null, '63', '0'); + +-- ---------------------------- +-- Table structure for jsh_system_config +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_system_config`; +CREATE TABLE `jsh_system_config` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `company_name` varchar(50) DEFAULT NULL COMMENT '公司名称', + `company_contacts` varchar(20) DEFAULT NULL COMMENT '公司联系人', + `company_address` varchar(50) DEFAULT NULL COMMENT '公司地址', + `company_tel` varchar(20) DEFAULT NULL COMMENT '公司电话', + `company_fax` varchar(20) DEFAULT NULL COMMENT '公司传真', + `company_post_code` varchar(20) DEFAULT NULL COMMENT '公司邮编', + `depot_flag` varchar(1) DEFAULT '0' COMMENT '仓库启用标记,0未启用,1启用', + `customer_flag` varchar(1) DEFAULT '0' COMMENT '客户启用标记,0未启用,1启用', + `minus_stock_flag` varchar(1) DEFAULT '0' COMMENT '负库存启用标记,0未启用,1启用', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='系统参数'; + +-- ---------------------------- +-- Records of jsh_system_config +-- ---------------------------- +INSERT INTO `jsh_system_config` VALUES ('9', '公司1', '小军', '地址1', '12313', '1233', '4231', '0', '0', '1', '63', '0'); + +-- ---------------------------- +-- Table structure for jsh_tenant +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_tenant`; +CREATE TABLE `jsh_tenant` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '用户id', + `login_name` varchar(255) DEFAULT NULL COMMENT '登录名', + `user_num_limit` int(11) DEFAULT NULL COMMENT '用户数量限制', + `bills_num_limit` int(11) DEFAULT NULL COMMENT '单据数量限制', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 COMMENT='租户'; + +-- ---------------------------- +-- Records of jsh_tenant +-- ---------------------------- +INSERT INTO `jsh_tenant` VALUES ('13', '63', 'jsh', '20', '2000', null); + +-- ---------------------------- +-- Table structure for jsh_unit +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_unit`; +CREATE TABLE `jsh_unit` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(50) DEFAULT NULL COMMENT '名称,支持多单位', + `basic_unit` varchar(50) DEFAULT NULL COMMENT '基础单位', + `other_unit` varchar(50) DEFAULT NULL COMMENT '副单位', + `ratio` int(11) DEFAULT NULL COMMENT '比例', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8 COMMENT='多单位表'; + +-- ---------------------------- +-- Records of jsh_unit +-- ---------------------------- +INSERT INTO `jsh_unit` VALUES ('15', '个,箱(1:12)', '个', '箱', '12', '63', '0'); +INSERT INTO `jsh_unit` VALUES ('16', '个,台(1:10)', '个', '台', '10', '63', '1'); +INSERT INTO `jsh_unit` VALUES ('17', '个,只(1:12)', '个', '只', '12', '63', '1'); + +-- ---------------------------- +-- Table structure for jsh_user +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_user`; +CREATE TABLE `jsh_user` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `username` varchar(255) NOT NULL COMMENT '用户姓名--例如张三', + `login_name` varchar(255) NOT NULL COMMENT '登录用户名', + `password` varchar(50) DEFAULT NULL COMMENT '登陆密码', + `position` varchar(200) DEFAULT NULL COMMENT '职位', + `department` varchar(255) DEFAULT NULL COMMENT '所属部门', + `email` varchar(100) DEFAULT NULL COMMENT '电子邮箱', + `phonenum` varchar(100) DEFAULT NULL COMMENT '手机号码', + `ismanager` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否为管理者 0==管理者 1==员工', + `isystem` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否系统自带数据 ', + `Status` tinyint(4) DEFAULT '0' COMMENT '状态,0:正常,1:删除,2封禁', + `description` varchar(500) DEFAULT NULL COMMENT '用户描述信息', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=132 DEFAULT CHARSET=utf8 COMMENT='用户表'; + +-- ---------------------------- +-- Records of jsh_user +-- ---------------------------- +INSERT INTO `jsh_user` VALUES ('63', '季圣华', 'jsh', 'e10adc3949ba59abbe56e057f20f883e', '', null, '', '', '1', '1', '0', '', null, '63'); +INSERT INTO `jsh_user` VALUES ('120', '管理员', 'admin', 'e10adc3949ba59abbe56e057f20f883e', null, null, null, null, '1', '0', '0', null, null, null); +INSERT INTO `jsh_user` VALUES ('131', '测试用户', 'test123', 'e10adc3949ba59abbe56e057f20f883e', '', null, '', '', '1', '0', '0', '', null, '63'); + +-- ---------------------------- +-- Table structure for jsh_user_business +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_user_business`; +CREATE TABLE `jsh_user_business` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `type` varchar(50) DEFAULT NULL COMMENT '类别', + `key_id` varchar(50) DEFAULT NULL COMMENT '主id', + `value` varchar(10000) DEFAULT NULL COMMENT '值', + `btn_str` varchar(2000) DEFAULT NULL COMMENT '按钮权限', + `delete_flag` varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=70 DEFAULT CHARSET=utf8 COMMENT='用户/角色/模块关系表'; + +-- ---------------------------- +-- Records of jsh_user_business +-- ---------------------------- +INSERT INTO `jsh_user_business` VALUES ('5', 'RoleFunctions', '4', '[210][211][241][33][199][242][41][200][201][202][40][232][233][197][203][204][205][206][212][59][207][208][209][226][227][228][229][235][237][244][246][22][23][220][240][25][217][218][26][194][195][31][13][16][243][14][15][234][236][245]', '[{\"funId\":\"13\",\"btnStr\":\"1\"},{\"funId\":\"16\",\"btnStr\":\"1\"},{\"funId\":\"243\",\"btnStr\":\"1\"},{\"funId\":\"14\",\"btnStr\":\"1\"},{\"funId\":\"234\",\"btnStr\":\"1\"},{\"funId\":\"236\",\"btnStr\":\"1\"},{\"funId\":\"245\",\"btnStr\":\"1\"},{\"funId\":\"22\",\"btnStr\":\"1\"},{\"funId\":\"23\",\"btnStr\":\"1\"},{\"funId\":\"220\",\"btnStr\":\"1\"},{\"funId\":\"240\",\"btnStr\":\"1\"},{\"funId\":\"25\",\"btnStr\":\"1\"},{\"funId\":\"217\",\"btnStr\":\"1\"},{\"funId\":\"218\",\"btnStr\":\"1\"},{\"funId\":\"26\",\"btnStr\":\"1\"},{\"funId\":\"194\",\"btnStr\":\"1\"},{\"funId\":\"195\",\"btnStr\":\"1\"},{\"funId\":\"31\",\"btnStr\":\"1\"},{\"funId\":\"241\",\"btnStr\":\"1,2\"},{\"funId\":\"33\",\"btnStr\":\"1,2\"},{\"funId\":\"199\",\"btnStr\":\"1,2\"},{\"funId\":\"242\",\"btnStr\":\"1,2\"},{\"funId\":\"41\",\"btnStr\":\"1,2\"},{\"funId\":\"200\",\"btnStr\":\"1,2\"},{\"funId\":\"210\",\"btnStr\":\"1,2\"},{\"funId\":\"211\",\"btnStr\":\"1,2\"},{\"funId\":\"197\",\"btnStr\":\"1\"},{\"funId\":\"203\",\"btnStr\":\"1\"},{\"funId\":\"204\",\"btnStr\":\"1\"},{\"funId\":\"205\",\"btnStr\":\"1\"},{\"funId\":\"206\",\"btnStr\":\"1\"},{\"funId\":\"212\",\"btnStr\":\"1\"},{\"funId\":\"201\",\"btnStr\":\"1,2\"},{\"funId\":\"202\",\"btnStr\":\"1,2\"},{\"funId\":\"40\",\"btnStr\":\"1,2\"},{\"funId\":\"232\",\"btnStr\":\"1,2\"},{\"funId\":\"233\",\"btnStr\":\"1,2\"}]', '0'); +INSERT INTO `jsh_user_business` VALUES ('6', 'RoleFunctions', '5', '[22][23][25][26][194][195][31][33][200][201][41][199][202]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('7', 'RoleFunctions', '6', '[22][23][220][240][25][217][218][26][194][195][31][59][207][208][209][226][227][228][229][235][237][210][211][241][33][199][242][41][200][201][202][40][232][233][197][203][204][205][206][212]', '[{\"funId\":\"33\",\"btnStr\":\"4\"}]', '0'); +INSERT INTO `jsh_user_business` VALUES ('9', 'RoleFunctions', '7', '[168][13][12][16][14][15][189][18][19][132]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('10', 'RoleFunctions', '8', '[168][13][12][16][14][15][189][18][19][132][22][23][25][26][27][157][158][155][156][125][31][127][126][128][33][34][35][36][37][39][40][41][42][43][46][47][48][49][50][51][52][53][54][55][56][57][192][59][60][61][62][63][65][66][68][69][70][71][73][74][76][77][79][191][81][82][83][85][89][161][86][176][165][160][28][134][91][92][29][94][95][97][104][99][100][101][102][105][107][108][110][111][113][114][116][117][118][120][121][131][135][123][122][20][130][146][147][138][148][149][153][140][145][184][152][143][170][171][169][166][167][163][164][172][173][179][178][181][182][183][186][187]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('11', 'RoleFunctions', '9', '[168][13][12][16][14][15][189][18][19][132][22][23][25][26][27][157][158][155][156][125][31][127][126][128][33][34][35][36][37][39][40][41][42][43][46][47][48][49][50][51][52][53][54][55][56][57][192][59][60][61][62][63][65][66][68][69][70][71][73][74][76][77][79][191][81][82][83][85][89][161][86][176][165][160][28][134][91][92][29][94][95][97][104][99][100][101][102][105][107][108][110][111][113][114][116][117][118][120][121][131][135][123][122][20][130][146][147][138][148][149][153][140][145][184][152][143][170][171][169][166][167][163][164][172][173][179][178][181][182][183][186][187][188]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('12', 'UserRole', '1', '[5]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('13', 'UserRole', '2', '[6][7]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('14', 'UserDepot', '2', '[1][2][6][7]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('15', 'UserDepot', '1', '[1][2][5][6][7][10][12][14][15][17]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('16', 'UserRole', '63', '[10]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('18', 'UserDepot', '63', '[14][15]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('19', 'UserDepot', '5', '[6][45][46][50]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('20', 'UserRole', '5', '[5]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('21', 'UserRole', '64', '[13]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('22', 'UserDepot', '64', '[1]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('23', 'UserRole', '65', '[5]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('24', 'UserDepot', '65', '[1]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('25', 'UserCustomer', '64', '[5][2]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('26', 'UserCustomer', '65', '[6]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('27', 'UserCustomer', '63', '[58]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('28', 'UserDepot', '96', '[7]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('29', 'UserRole', '96', '[6]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('30', 'UserRole', '113', '[10]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('32', 'RoleFunctions', '10', '[210][211][241][33][199][242][41][200][201][202][40][232][233][197][203][204][205][206][212][59][207][208][209][226][227][228][229][235][237][244][246][22][23][220][240][25][217][218][26][194][195][31][13][243][14][15][234]', '[{\"funId\":\"13\",\"btnStr\":\"1\"},{\"funId\":\"243\",\"btnStr\":\"1\"},{\"funId\":\"14\",\"btnStr\":\"1\"},{\"funId\":\"234\",\"btnStr\":\"1\"},{\"funId\":\"22\",\"btnStr\":\"1\"},{\"funId\":\"23\",\"btnStr\":\"1\"},{\"funId\":\"220\",\"btnStr\":\"1\"},{\"funId\":\"240\",\"btnStr\":\"1\"},{\"funId\":\"25\",\"btnStr\":\"1\"},{\"funId\":\"217\",\"btnStr\":\"1\"},{\"funId\":\"218\",\"btnStr\":\"1\"},{\"funId\":\"26\",\"btnStr\":\"1\"},{\"funId\":\"194\",\"btnStr\":\"1\"},{\"funId\":\"195\",\"btnStr\":\"1\"},{\"funId\":\"31\",\"btnStr\":\"1\"},{\"funId\":\"241\",\"btnStr\":\"1,2\"},{\"funId\":\"33\",\"btnStr\":\"1,2\"},{\"funId\":\"199\",\"btnStr\":\"1,2\"},{\"funId\":\"242\",\"btnStr\":\"1,2\"},{\"funId\":\"41\",\"btnStr\":\"1,2\"},{\"funId\":\"200\",\"btnStr\":\"1,2\"},{\"funId\":\"210\",\"btnStr\":\"1,2\"},{\"funId\":\"211\",\"btnStr\":\"1,2\"},{\"funId\":\"197\",\"btnStr\":\"1\"},{\"funId\":\"203\",\"btnStr\":\"1\"},{\"funId\":\"204\",\"btnStr\":\"1\"},{\"funId\":\"205\",\"btnStr\":\"1\"},{\"funId\":\"206\",\"btnStr\":\"1\"},{\"funId\":\"212\",\"btnStr\":\"1\"},{\"funId\":\"201\",\"btnStr\":\"1,2\"},{\"funId\":\"202\",\"btnStr\":\"1,2\"},{\"funId\":\"40\",\"btnStr\":\"1,2\"},{\"funId\":\"232\",\"btnStr\":\"1,2\"},{\"funId\":\"233\",\"btnStr\":\"1,2\"}]', '0'); +INSERT INTO `jsh_user_business` VALUES ('34', 'UserRole', '115', '[10]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('35', 'UserRole', '117', '[10]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('36', 'UserDepot', '117', '[8][9]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('37', 'UserCustomer', '117', '[52]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('38', 'UserRole', '120', '[4]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('39', 'UserDepot', '120', '[7][8][9][10][11][12][2][1][3]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('40', 'UserCustomer', '120', '[52][48][6][5][2]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('41', 'RoleFunctions', '12', '', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('48', 'RoleFunctions', '13', '[59][207][208][209][226][227][228][229][235][237][210][211][241][33][199][242][41][200]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('51', 'UserRole', '74', '[10]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('52', 'UserDepot', '121', '[13]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('54', 'UserDepot', '115', '[13]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('56', 'UserCustomer', '115', '[56]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('57', 'UserCustomer', '121', '[56]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('58', 'UserRole', '121', '[15]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('59', 'UserRole', '123', '[10]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('60', 'UserRole', '124', '[10]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('61', 'UserRole', '125', '[10]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('62', 'UserRole', '126', '[10]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('63', 'UserRole', '127', '[10]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('64', 'UserRole', '128', '[10]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('65', 'UserRole', '129', '[10]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('66', 'UserRole', '130', '[10]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('67', 'UserRole', '131', '[17]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('68', 'RoleFunctions', '16', '[210]', null, '0'); +INSERT INTO `jsh_user_business` VALUES ('69', 'RoleFunctions', '17', '[210][211][241][33][199][242][41][200][201][202][40][232][233][197][203][204][205][206][212]', '[{\"funId\":\"241\",\"btnStr\":\"1,2\"},{\"funId\":\"33\",\"btnStr\":\"1,2\"},{\"funId\":\"199\",\"btnStr\":\"1,2\"},{\"funId\":\"242\",\"btnStr\":\"1,2\"},{\"funId\":\"41\",\"btnStr\":\"1,2\"},{\"funId\":\"200\",\"btnStr\":\"1,2\"},{\"funId\":\"210\",\"btnStr\":\"1,2\"},{\"funId\":\"211\",\"btnStr\":\"1,2\"},{\"funId\":\"197\",\"btnStr\":\"1\"},{\"funId\":\"203\",\"btnStr\":\"1\"},{\"funId\":\"204\",\"btnStr\":\"1\"},{\"funId\":\"205\",\"btnStr\":\"1\"},{\"funId\":\"206\",\"btnStr\":\"1\"},{\"funId\":\"212\",\"btnStr\":\"1\"},{\"funId\":\"201\",\"btnStr\":\"1,2\"},{\"funId\":\"202\",\"btnStr\":\"1,2\"},{\"funId\":\"40\",\"btnStr\":\"1,2\"},{\"funId\":\"232\",\"btnStr\":\"1,2\"},{\"funId\":\"233\",\"btnStr\":\"1,2\"}]', '0'); diff --git a/jshERP-boot/docs/华夏ERP数据库设计汇总.xlsx b/jshERP-boot/docs/华夏ERP数据库设计汇总.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..68bafb845af8aa52677c166a310f38dc1386d740 GIT binary patch literal 67570 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%0AKkkWCq|@@!*! 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�gBm( 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 literal 0 HcmV?d00001 diff --git a/jshERP-boot/docs/数据库更新记录-首次安装请勿使用.txt b/jshERP-boot/docs/数据库更新记录-首次安装请勿使用.txt new file mode 100644 index 000000000..a6cc80593 --- /dev/null +++ b/jshERP-boot/docs/数据库更新记录-首次安装请勿使用.txt @@ -0,0 +1,1072 @@ +--------------------------------------------------------------------------------------------------- +****注意第一次初始化数据库不需要执行下面的内容,该文档会随着代码更新持续更新,方便大家手动升级数据库**** +****注意第一次初始化数据库不需要执行下面的内容,该文档会随着代码更新持续更新,方便大家手动升级数据库**** +****注意第一次初始化数据库不需要执行下面的内容,该文档会随着代码更新持续更新,方便大家手动升级数据库**** +--------------------------------------------------------------------------------------------------- + + +-- ---------------------------- +-- 时间:2019年1月21日 +-- version:1.0.0 +-- 此次更新添加序列号功能 +-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新 +-- ---------------------------- + +-- ---------------------------- +-- 添加序列号表 +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_serial_number`; +CREATE TABLE `jsh_serial_number` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `material_Id` bigint(20) DEFAULT NULL COMMENT '产品表id', + `serial_Number` varchar(64) DEFAULT NULL COMMENT '序列号', + `is_Sell` bit(1) DEFAULT 0 COMMENT '是否卖出,0未卖出,1卖出', + `remark` varchar(1024) DEFAULT NULL COMMENT '备注', + `delete_Flag` bit(1) DEFAULT 0 COMMENT '删除标记,0未删除,1删除', + `create_Time` datetime DEFAULT NULL COMMENT '创建时间', + `creator` bigint(20) DEFAULT NULL COMMENT '创建人', + `update_Time` datetime DEFAULT NULL COMMENT '更新时间', + `updater` bigint(20) DEFAULT NULL COMMENT '更新人', + PRIMARY KEY (`Id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='序列号表'; + +-- ---------------------------- +-- 产品表新增字段是否启用序列号 +-- ---------------------------- +alter table jsh_material add enableSerialNumber bit(1) DEFAULT 0 COMMENT '是否开启序列号,0否,1是'; +-- ---------------------------- +-- 时间:2019年1月24日 +-- version:1.0.1 +-- 此次更新添加序列号菜单 +-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新 +-- ---------------------------- +-- ---------------------------- +-- 添加序列号菜单 +-- ---------------------------- +delete from `jsh_functions` where Name='序列号'; +INSERT INTO `jsh_functions`(`Number`, `Name`, `PNumber`, `URL`, `State`, `Sort`, `Enabled`, `Type`, `PushBtn`) VALUES ('010104', '序列号', '0101', '../manage/serialNumber.html', b'0', '0246', b'1', '电脑版', ''); +-- ---------------------------- +-- 删除单据主表供应商id字段对应外键约束 +-- ---------------------------- +ALTER TABLE jsh_depot_head DROP FOREIGN KEY jsh_depot_head_ibfk_3; +-- ---------------------------- +-- 序列号表添加单据主表id字段,用于跟踪序列号流向 +-- ---------------------------- +alter table jsh_serial_number add depothead_Id bigint(20) DEFAULT null COMMENT '单据主表id,用于跟踪序列号流向'; +-- ---------------------------- +-- 修改商品表enableSerialNumber字段类型为varchar(1) +-- ---------------------------- +alter table jsh_material change enableSerialNumber enableSerialNumber varchar(1) DEFAULT '0' COMMENT '是否开启序列号,0否,1是'; +-- ---------------------------- +-- 修改序列号表is_Sell字段类型为varchar(1) +-- 修改序列号表delete_Flag字段类型为varchar(1) +-- ---------------------------- +alter table jsh_serial_number change is_Sell is_Sell varchar(1) DEFAULT '0' COMMENT '是否卖出,0未卖出,1卖出'; +alter table jsh_serial_number change delete_Flag delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- ---------------------------- +-- 删除单据子表单据主表id字段对应外键约束 +-- ---------------------------- +ALTER TABLE jsh_depot_item DROP FOREIGN KEY jsh_depot_item_ibfk_1; +-- ---------------------------- +-- 时间:2019年2月1日 +-- version:1.0.2 +-- 此次更新添加sequence表,用于获取一个唯一的数值 +-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新 +-- ---------------------------- +-- ---------------------------- +-- 添加表tbl_sequence +-- ---------------------------- +DROP TABLE IF EXISTS `tbl_sequence`; +CREATE TABLE tbl_sequence ( + seq_name VARCHAR(50) NOT NULL COMMENT '序列名称', + min_value bigint(20) NOT NULL COMMENT '最小值', + max_value bigint(20) NOT NULL COMMENT '最大值', + current_val bigint(20) NOT NULL COMMENT '当前值', + increment_val INT DEFAULT '1' NOT NULL COMMENT '增长步数', + remark VARCHAR(500) DEFAULT null COMMENT '备注', + PRIMARY KEY (seq_name) + )ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='sequence表'; + +-- ---------------------------- +-- 添加表单据编号sequence +-- 插入数据前判断,防止数据重复插入 +-- ---------------------------- +insert into tbl_sequence (seq_name, min_value, max_value, current_val, increment_val,remark) +select 'depot_number_seq', 1, 999999999999999999, 1, 1,'单据编号sequence' from dual where not exists +(select * from tbl_sequence where seq_name='depot_number_seq'); +-- ---------------------------- +-- 创建function _nextval() 用于获取当前序列号 +-- ---------------------------- +DROP FUNCTION IF EXISTS `_nextval`; +DELIMITER ;; +CREATE FUNCTION `_nextval`(name varchar(50)) RETURNS mediumtext CHARSET utf8 +begin +declare _cur bigint; +declare _maxvalue bigint; -- 接收最大值 +declare _increment int; -- 接收增长步数 +set _increment = (select increment_val from tbl_sequence where seq_name = name); +set _maxvalue = (select max_value from tbl_sequence where seq_name = name); +set _cur = (select current_val from tbl_sequence where seq_name = name for update); +update tbl_sequence -- 更新当前值 + set current_val = _cur + increment_val + where seq_name = name ; +if(_cur + _increment >= _maxvalue) then -- 判断是都达到最大值 + update tbl_sequence + set current_val = minvalue + where seq_name = name ; +end if; +return _cur; +end +;; +DELIMITER ; + +-- ---------------------------- +-- 时间:2019年2月18日 +-- version:1.0.3 +-- 此次更新修改产品类型表jsh_materialcategory,添加一些字段 +-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新 +-- ---------------------------- +-- ---------------------------- +-- 产品类型表添加字段sort,显示顺序 +-- ---------------------------- +alter table jsh_materialcategory add sort varchar(10) DEFAULT null COMMENT '显示顺序'; +-- ---------------------------- +-- 产品类型表添加字段status,状态,0系统默认,1启用,2删除 +-- ---------------------------- +alter table jsh_materialcategory add status varchar(1) DEFAULT '0' COMMENT '状态,0系统默认,1启用,2删除'; +-- ---------------------------- +-- 产品类型表添加字段serial_no,编号 +-- ---------------------------- +alter table jsh_materialcategory add serial_no varchar(100) DEFAULT null COMMENT '编号'; +-- ---------------------------- +-- 产品类型表添加字段remark,备注 +-- ---------------------------- +alter table jsh_materialcategory add remark varchar(1024) DEFAULT null COMMENT '备注'; +-- ---------------------------- +-- 产品类型表添加字段create_time,创建时间 +-- ---------------------------- +alter table jsh_materialcategory add create_time datetime DEFAULT null COMMENT '创建时间'; +-- ---------------------------- +-- 产品类型表添加字段creator,创建人 +-- ---------------------------- +alter table jsh_materialcategory add creator bigint(20) DEFAULT null COMMENT '创建人'; +-- ---------------------------- +-- 产品类型表添加字段update_time,更新时间 +-- ---------------------------- +alter table jsh_materialcategory add update_time datetime DEFAULT null COMMENT '更新时间'; +-- ---------------------------- +-- 产品类型表添加字段updater,更新人 +-- ---------------------------- +alter table jsh_materialcategory add updater bigint(20) DEFAULT null COMMENT '更新人'; + +-- ---------------------------- +-- 去掉jsh_materialcategory外键 +-- ---------------------------- +ALTER TABLE jsh_materialcategory DROP FOREIGN KEY FK3EE7F725237A77D8; + +-- ---------------------------- +-- 修改根目录父节点id为-1 +-- 设置根目录编号为1 +-- ---------------------------- +update jsh_materialcategory set ParentId='-1' where id='1'; + +-- ---------------------------- +-- 删除礼品卡管理、礼品充值、礼品销售、礼品卡统计的功能数据 +-- ---------------------------- +delete from jsh_functions where id in (213,214,215,216); + +-- ---------------------------- +-- 新增采购订单、销售订单的功能数据 +-- 主键自增长,直接指定主键插入数据的方式可能会和本地数据冲突 +-- 插入数据前判断,防止数据重复插入 +-- ---------------------------- +insert into `jsh_functions`(`Number`, `Name`, `PNumber`, `URL`, `State`, `Sort`, `Enabled`, `Type`, `PushBtn`) +select '050202', '采购订单', '0502', '../materials/purchase_orders_list.html', b'0', '0335',b'1', '电脑版', '' from dual where not exists +(select * from jsh_functions where Number='050202' and PNumber='0502'); +insert into `jsh_functions`(`Number`, `Name`, `PNumber`, `URL`, `State`, `Sort`, `Enabled`, `Type`, `PushBtn`) +select '060301', '销售订单', '0603', '../materials/sale_orders_list.html', b'0', '0392', b'1', '电脑版', '' from dual where not exists +(select * from jsh_functions where Number='060301' and PNumber='0603'); + +-- ---------------------------- +-- 改管理员的功能权限 +-- ---------------------------- +update jsh_userbusiness SET Type = 'RoleFunctions', KeyId = '4', +Value = '[13][12][16][14][15][234][236][22][23][220][240][25][217][218][26][194][195][31][59][207][208][209][226][227][228][229][235][237][210][211][242][33][199][243][41][200][201][202][40][232][233][197][203][204][205][206][212]' +where Id = 5; + +-- ---------------------------- +-- 时间:2019年2月25日 +-- version:1.0.4 +-- 此次更新仓库添加负责人信息,负责人信息从用户表获取 +-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新 +-- ---------------------------- +-- ---------------------------- +-- 仓库表添加字段principal,负责人 +-- ---------------------------- +alter table jsh_depot add principal bigint(20) DEFAULT null COMMENT '负责人'; + +-- ---------------------------- +-- 时间:2019年3月6日 +-- version:1.0.5 +-- 此次更新 +-- 1、添加机构表 +-- 2、添加机构用户关系表 +-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新 +-- ---------------------------- +-- ---------------------------- +-- 添加机构表 +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_organization`; +CREATE TABLE `jsh_organization` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `org_no` varchar(20) DEFAULT NULL COMMENT '机构编号', + `org_full_name` varchar(500) DEFAULT NULL COMMENT '机构全称', + `org_abr` varchar(20) DEFAULT NULL COMMENT '机构简称', + `org_tpcd` varchar(9) DEFAULT NULL COMMENT '机构类型', + `org_stcd` char(1) DEFAULT NULL COMMENT '机构状态,1未营业、2正常营业、3暂停营业、4终止营业、5已除名', + `org_parent_no` varchar(20) DEFAULT NULL COMMENT '机构父节点编号', + `sort` varchar(20) DEFAULT NULL COMMENT '机构显示顺序', + remark VARCHAR(500) DEFAULT null COMMENT '备注', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `creator` bigint(20) DEFAULT NULL COMMENT '创建人', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `updater` bigint(20) DEFAULT NULL COMMENT '更新人', + `org_create_time` datetime DEFAULT NULL COMMENT '机构创建时间', + `org_stop_time` datetime DEFAULT NULL COMMENT '机构停运时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='机构表'; +-- ---------------------------- +-- 添加机构用户关系表 +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_orga_user_rel`; +CREATE TABLE `jsh_orga_user_rel` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `orga_id` bigint(20) NOT NULL COMMENT '机构id', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `user_blng_orga_dspl_seq` varchar(20) DEFAULT NULL COMMENT '用户在所属机构中显示顺序', + `delete_flag` char(1) DEFAULT 0 COMMENT '删除标记,0未删除,1删除', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `creator` bigint(20) DEFAULT NULL COMMENT '创建人', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `updater` bigint(20) DEFAULT NULL COMMENT '更新人', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='机构用户关系表'; +-- ---------------------------- +-- 添加机构管理菜单 +-- 插入数据前判断,防止数据重复插入 +-- ---------------------------- +INSERT INTO `jsh_functions`(`Number`, `Name`, `PNumber`, `URL`, `State`, `Sort`, `Enabled`, `Type`, `PushBtn`) +select '000108', '机构管理', '0001', '../manage/organization.html', b'1', '0139', b'1', '电脑版', '' from dual where not exists +(select * from jsh_functions where Number='000108' and PNumber='0001'); +-- ---------------------------- +-- 添加根机构 +-- 插入时判断对应数据是否存在,防止多次执行产生重复数据 +-- ---------------------------- +INSERT INTO jsh_organization (org_no, org_full_name, org_abr, org_tpcd, org_stcd, org_parent_no, sort, remark, create_time, creator, update_time, updater, org_create_time, org_stop_time) +select '01', '根机构', '根机构', NULL, '2', '-1', '1', '根机构,初始化存在', NULL, NULL, NULL, NULL, NULL, NULL from dual where not exists +(select * from jsh_organization where org_no='01' and org_abr='根机构' and org_parent_no='-1' ); +-- ---------------------------- +-- 时间:2019年3月9日 +-- version:1.0.6 +-- 此次更新 +-- 整改jsh_systemconfig表的字段 +-- ---------------------------- +alter table jsh_systemconfig drop type; +alter table jsh_systemconfig drop name; +alter table jsh_systemconfig drop value; +alter table jsh_systemconfig drop description; +alter table jsh_systemconfig add company_name varchar(50) DEFAULT null COMMENT '公司名称'; +alter table jsh_systemconfig add company_contacts varchar(20) DEFAULT null COMMENT '公司联系人'; +alter table jsh_systemconfig add company_address varchar(50) DEFAULT null COMMENT '公司地址'; +alter table jsh_systemconfig add company_tel varchar(20) DEFAULT null COMMENT '公司电话'; +alter table jsh_systemconfig add company_fax varchar(20) DEFAULT null COMMENT '公司传真'; +alter table jsh_systemconfig add company_post_code varchar(20) DEFAULT null COMMENT '公司邮编'; +delete from jsh_systemconfig; +insert into jsh_systemconfig (`company_name`, `company_contacts`, `company_address`, `company_tel`, `company_fax`, `company_post_code`) values("南通jshERP公司","张三","南通市通州区某某路","0513-10101010","0513-18181818","226300"); + +-- ---------------------------- +-- 时间:2019年3月9日 +-- version:1.0.7 +-- 改管理员的功能权限 +-- ---------------------------- +update jsh_userbusiness SET +Value = '[13][12][16][243][14][15][234][236][22][23][220][240][25][217][218][26][194][195][31][59][207][208][209][226][227][228][229][235][237][210][211][241][33][199][242][41][200][201][202][40][232][233][197][203][204][205][206][212]' +where Id = 5; +-- ---------------------------- +-- 给订单功能加审核和反审核的功能按钮权限 +-- ---------------------------- +update jsh_functions SET PushBtn = '3' where Number = '050202' and PNumber = '0502'; +update jsh_functions SET PushBtn = '3' where Number = '060301' and PNumber = '0603'; +-- ---------------------------- +-- 改管理员的按钮权限 +-- ---------------------------- +update jsh_userbusiness SET +BtnStr = '[{"funId":"25","btnStr":"1"},{"funId":"217","btnStr":"1"},{"funId":"218","btnStr":"1"},{"funId":"241","btnStr":"3"},{"funId":"242","btnStr":"3"}]' +where Id = 5; + +-- ---------------------------- +-- 时间:2019年3月10日 +-- version:1.0.8 +-- 改状态字段的类型,增加关联单据字段 +-- ---------------------------- +alter table jsh_depot_head change Status Status varchar(1) DEFAULT '0' COMMENT '状态,0未审核、1已审核、2已转采购|销售'; +alter table jsh_depot_head add `LinkNumber` varchar(50) DEFAULT null COMMENT '关联订单号'; +-- ---------------------------- +-- 时间:2019年3月12日 +-- version:1.0.9 +-- 此次更新 +-- 1、根据本地用户表中现有部门生成机构表数据,同时重建机构和用户的关联关系 +-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新 +-- ---------------------------- +DROP FUNCTION IF EXISTS `_buildOrgAndOrgUserRel`; +DELIMITER ;; +CREATE FUNCTION `_buildOrgAndOrgUserRel` (name varchar(50)) RETURNS mediumtext CHARSET utf8 +begin + +declare _org_full_name varchar(500); -- 机构全称 +declare _org_abr varchar(20); -- 机构简称 +declare _sort int default 0; +declare _success_msg varchar(50) default '重建机构及机构用户关系成功'; -- 机构全称 + -- 遍历数据结束标志 +declare done int DEFAULT 0; +-- 获取用户表中唯一的部门信息列表 +declare orgCur cursor for select distinct department from jsh_user where department!='' and department is not null; + + -- 将结束标志绑定到游标 +declare continue handler for not found set done = 1; + -- 循环部门信息列表在机构表插入数据 + -- 打开游标 + open orgCur; + -- 开始循环 + read_loop: loop + -- 提取游标里的数据,这里只有一个,多个的话也一样; + fetch orgCur into _org_full_name; + -- 声明结束的时候 + if done=1 then + leave read_loop; + end if; + -- 这里做你想做的循环的事件 + if length(_org_full_name)<=20 then + set _org_abr=_org_full_name; + else + set _org_abr=left(_org_full_name,20); + end if; + set _sort=_sort+1; + insert into jsh_organization (org_full_name, org_abr, org_stcd, org_parent_no, sort, remark) + values (_org_full_name,_org_abr, '1', '01', _sort, '机构表初始化'); + begin + declare _userId bigint; + declare _orgId bigint; + -- 遍历数据结束标志 + declare ogrUserRelDone int DEFAULT 0; + -- 根据用户表和机构表部门关联关系,重建用户和机构关联关系 + declare ogrUserRelCur cursor for select user.id as userId,org.id as orgId from jsh_user user,jsh_organization org + where 1=1 and user.department=org.org_full_name and user.department =_org_full_name; + -- 将结束标志绑定到游标 + declare continue handler for not found set ogrUserRelDone = 1; + -- 打开游标 + open ogrUserRelCur; + -- 开始循环 + rel_read_loop: loop + -- 提取游标里的数据,这里只有一个,多个的话也一样; + fetch ogrUserRelCur into _userId,_orgId; + -- 声明结束的时候 + if ogrUserRelDone=1 then + leave rel_read_loop; + end if; + insert into `jsh_orga_user_rel`(`orga_id`, `user_id`, `delete_flag`) VALUES (_orgId,_userId,'0'); + + end loop rel_read_loop; + -- 关闭游标 + close ogrUserRelCur; + end; + + end loop read_loop; + -- 关闭游标 + close orgCur; + +-- 清空用户表中的部门信息 +update jsh_user set department=null; + +return _success_msg; +end +;; +DELIMITER ; +-- ---------------------------- +-- 初始化机构数据,重建机构用户关系 +-- ---------------------------- +select _buildOrgAndOrgUserRel('初始化机构数据,重建机构用户关系') from dual; +-- ---------------------------- +-- 删除一次性函数 +-- ---------------------------- +DROP FUNCTION _buildOrgAndOrgUserRel; + +-- ---------------------------- +-- 时间:2019年3月13日 +-- version:1.0.10 +-- 此次更新 +-- 1、设置用户表的用户状态status默认值为0 +-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新 +-- ---------------------------- + +alter table jsh_user change Status Status tinyint(4) DEFAULT '0' COMMENT '状态,0:正常,1:删除,2封禁'; +update jsh_user set status='0' where status is null; +-- ---------------------------- +-- 设置根目录编号为1 +-- ---------------------------- +update jsh_materialcategory set serial_no='1' where id='1'; + +-- ---------------------------- +-- 时间:2019年3月18日 +-- version:1.0.11 +-- 此次更新 +-- 1、批量增加大部分表的tenant_id租户字段 +-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新 +-- ---------------------------- +alter table jsh_account add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_accounthead add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_accountitem add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_asset add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_assetcategory add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_assetname add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_depot add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_depot_head add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_depot_item add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_inoutitem add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_log add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_material add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_materialcategory add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_orga_user_rel add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_organization add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_person add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_role add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_serial_number add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_supplier add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_systemconfig add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_unit add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; +alter table jsh_user add tenant_id bigint(20) DEFAULT null COMMENT '租户id'; + +-- ---------------------------- +-- 时间:2019年3月27日 +-- version:1.0.12 +-- 此次更新 +-- 添加删除标记,将物理删除修改为逻辑删除 +-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新 +-- ---------------------------- +-- 角色表 jsh_role +alter table jsh_role add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 用户 角色 模块关系表 jsh_userbusiness +alter table jsh_userbusiness add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 功能模块表 jsh_functions +alter table jsh_functions add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 应用表 jsh_app +alter table jsh_app add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 产品表 jsh_material +alter table jsh_material add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 产品扩展字段表 jsh_materialproperty +alter table jsh_materialproperty add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 经手人表 jsh_person +alter table jsh_person add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 供应商 客户信息表 jsh_supplier +alter table jsh_supplier add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 系统参数表 jsh_systemconfig +alter table jsh_systemconfig add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 多单位表 jsh_unit +alter table jsh_unit add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 仓库表 jsh_depot +alter table jsh_depot add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 账户信息表 jsh_account +alter table jsh_account add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 财务主表 jsh_accounthead +alter table jsh_accounthead add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 财务子表 jsh_accountitem +alter table jsh_accountitem add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 资产记录表 jsh_asset +alter table jsh_asset add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 资产类型表 jsh_assetcategory +alter table jsh_assetcategory add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 资产信息表 jsh_assetname +alter table jsh_assetname add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 单据主表 jsh_depot_head +alter table jsh_depot_head add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 单据子表 jsh_depot_item +alter table jsh_depot_item add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +-- 收支项目表 jsh_inoutitem +alter table jsh_inoutitem add delete_Flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; + +-- ---------------------------- +-- 时间:2019年4月11日 +-- version:1.0.13 +-- 此次更新 +-- 删除所有外键 +-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新 +-- ---------------------------- + +-- ---------------------------- +-- 删除财务主表对应外键约束 +-- ---------------------------- +ALTER TABLE jsh_accounthead DROP FOREIGN KEY FK9F4C0D8DAAE50527; +ALTER TABLE jsh_accounthead DROP FOREIGN KEY FK9F4C0D8DB610FC06; +ALTER TABLE jsh_accounthead DROP FOREIGN KEY FK9F4C0D8DC4170B37; +-- ---------------------------- +-- 删除财务子表对应外键约束 +-- ---------------------------- +ALTER TABLE jsh_accountitem DROP FOREIGN KEY FK9F4CBAC0AAE50527; +ALTER TABLE jsh_accountitem DROP FOREIGN KEY FK9F4CBAC0C5FE6007; +ALTER TABLE jsh_accountitem DROP FOREIGN KEY FK9F4CBAC0D203EDC5; +-- ---------------------------- +-- 删除资产记录表对应外键约束 +-- ---------------------------- +ALTER TABLE jsh_asset DROP FOREIGN KEY FK353690ED27D23FE4; +ALTER TABLE jsh_asset DROP FOREIGN KEY FK353690ED3E226853; +ALTER TABLE jsh_asset DROP FOREIGN KEY FK353690ED61FE182C; +ALTER TABLE jsh_asset DROP FOREIGN KEY FK353690ED9B6CB285; +ALTER TABLE jsh_asset DROP FOREIGN KEY FK353690EDAD45B659; +-- ---------------------------- +-- 删除资产信息表对应外键约束 +-- ---------------------------- +ALTER TABLE jsh_assetname DROP FOREIGN KEY FKA4ADCCF866BC8AD3; +-- ---------------------------- +-- 删除单据主表对应外键约束 +-- ---------------------------- +ALTER TABLE jsh_depot_head DROP FOREIGN KEY FK2A80F214AAE50527; +ALTER TABLE jsh_depot_head DROP FOREIGN KEY jsh_depot_head_ibfk_1; +ALTER TABLE jsh_depot_head DROP FOREIGN KEY jsh_depot_head_ibfk_4; +ALTER TABLE jsh_depot_head DROP FOREIGN KEY jsh_depot_head_ibfk_5; +-- ---------------------------- +-- 删除单据子表对应外键约束 +-- ---------------------------- +ALTER TABLE jsh_depot_item DROP FOREIGN KEY FK2A819F47729F5392; +ALTER TABLE jsh_depot_item DROP FOREIGN KEY FK2A819F479485B3F5; +ALTER TABLE jsh_depot_item DROP FOREIGN KEY jsh_depot_item_ibfk_2; +-- ---------------------------- +-- 删除操作日志表对应外键约束 +-- ---------------------------- +ALTER TABLE jsh_log DROP FOREIGN KEY FKF2696AA13E226853; +-- ---------------------------- +-- 删除产品表对应外键约束 +-- ---------------------------- +ALTER TABLE jsh_material DROP FOREIGN KEY FK675951272AB6672C; +ALTER TABLE jsh_material DROP FOREIGN KEY jsh_material_ibfk_1; + +-- ---------------------------- +-- 时间:2019年4月30日 +-- version:1.0.14 +-- 此次更新 +-- 增加仓库默认功能 增加库存预警功能 +-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新 +-- ---------------------------- +alter table jsh_depot add is_default bit(1) DEFAULT NULL COMMENT '是否默认'; +insert into `jsh_functions`(`Number`, `Name`, `PNumber`, `URL`, `State`, `Sort`, `Enabled`, `Type`, `PushBtn`) +select '030112', '库存预警', '0301', '../reports/stock_warning_report.html', b'0', '0670', b'1', '电脑版', '' from dual where not exists +(select * from jsh_functions where Number='030112' and PNumber='0301'); + +-- ---------------------------- +-- 改管理员的功能权限 +-- ---------------------------- +update jsh_userbusiness SET Type = 'RoleFunctions', KeyId = '4', +Value = '[13][12][16][243][14][15][234][236][22][23][220][240][25][217][218][26][194][195][31][59][207][208][209][226][227][228][229][235][237][244][210][211][241][33][199][242][41][200][201][202][40][232][233][197][203][204][205][206][212]' +where Id = 5; + +-- ---------------------------- +-- 给app的功能增加代号 在功能表增加个人信息 +-- ---------------------------- +update jsh_app SET Number = '02' where name='个人信息'; +insert into `jsh_functions`(`Number`, `Name`, `PNumber`, `URL`, `State`, `Sort`, `Enabled`, `Type`, `PushBtn`) +select '02', '个人信息', '0', '', b'1', '0005', b'1', '电脑版', '' from dual where not exists +(select * from jsh_functions where Number='02' and PNumber='0'); + +-- ---------------------------- +-- 时间:2019年6月23日 +-- 增加新手引导模块 +-- ---------------------------- +INSERT INTO `jsh_app` VALUES ('28', '09', '新手引导', 'app', 'userHelp.png', '../user/userHelp.html', '1000', '500', '\0', '\0', '\0', 'dock', '210', '', '', '0'); +INSERT INTO `jsh_functions` VALUES ('246', '09', '新手引导', '0', '', '', '0115', '', '电脑版', '', '0'); +update jsh_userbusiness SET Value = '[3][6][7][22][23][24][25][26][27][28]' +where Type = 'RoleAPP' and (KeyId = '4' or KeyId = '10'); +update jsh_userbusiness SET +Value = '[245][13][12][16][243][14][15][234][236][22][23][220][240][25][217][218][26][194][195][31][59][207][208][209][226][227][228][229][235][237][244][210][211][241][33][199][242][41][200][201][202][40][232][233][197][203][204][205][206][212][246]' +where Type = 'RoleFunctions' and KeyId = '4'; +update jsh_userbusiness SET +Value = '[245][13][243][14][15][234][22][23][220][240][25][217][218][26][194][195][31][59][207][208][209][226][227][228][229][235][237][244][210][211][241][33][199][242][41][200][201][202][40][232][233][197][203][204][205][206][212][246]' +where Type = 'RoleFunctions' and KeyId = '10'; + + +-- ---------------------------- +-- 时间:2019年6月26日 +-- 删除多余的资产相关表 +-- ---------------------------- +drop table jsh_asset; +drop table jsh_assetcategory; +drop table jsh_assetname; + + +-- ---------------------------- +-- 时间:2019年6月27日 +-- 增加租户表 +-- ---------------------------- +DROP TABLE IF EXISTS `jsh_tenant`; +CREATE TABLE `jsh_tenant` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `tenant_id` bigint(20) DEFAULT NULL COMMENT '用户id', + `login_name` varchar(255) DEFAULT NULL COMMENT '登录名', + `user_num_limit` int(11) DEFAULT NULL COMMENT '用户数量限制', + `bills_num_limit` int(11) DEFAULT NULL COMMENT '单据数量限制', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8 COMMENT='租户'; + +-- ---------------------------- +-- 时间:2019年6月27日 +-- 给租户表增加数据 +-- ---------------------------- +INSERT INTO `jsh_tenant` VALUES ('13', '63', 'jsh', '20', '2000', null); + +-- ---------------------------- +-- 时间:2019年7月10日 +-- 删除函数 +-- ---------------------------- +DROP FUNCTION IF EXISTS `_nextval`; + +-- ---------------------------- +-- 时间:2019年8月1日 +-- 增加仓库和客户的启用标记 +-- ---------------------------- +alter table jsh_systemconfig add customer_flag varchar(1) DEFAULT '0' COMMENT '客户启用标记,0未启用,1启用' after company_post_code; +alter table jsh_systemconfig add depot_flag varchar(1) DEFAULT '0' COMMENT '仓库启用标记,0未启用,1启用' after company_post_code; + +-- ---------------------------- +-- 时间:2019年9月13日 +-- 给功能表增加icon字段 +-- ---------------------------- +alter table jsh_functions add icon varchar(50) DEFAULT NULL COMMENT '图标' after PushBtn; + +-- ---------------------------- +-- 时间:2019年9月13日 +-- 创建消息表 +-- ---------------------------- +CREATE TABLE `jsh_msg` ( +`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键' , +`msg_title` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息标题' , +`msg_content` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息内容' , +`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间' , +`type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息类型' , +`status` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '状态,1未读 2已读' , +`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户id' , +`delete_Flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除' , +PRIMARY KEY (`id`) +) +ENGINE=InnoDB +DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci +COMMENT='消息表' +AUTO_INCREMENT=2 +ROW_FORMAT=COMPACT +; + +-- ---------------------------- +-- 时间:2019年9月13日 +-- 删除表 jsh_app databasechangelog databasechangeloglock +-- ---------------------------- +drop table databasechangelog; +drop table databasechangeloglock; +drop table jsh_app; + +-- ---------------------------- +-- 时间:2019年11月28日 +-- 单据编号表-改表名 +-- ---------------------------- +ALTER TABLE tbl_sequence RENAME TO jsh_sequence; + +-- ---------------------------- +-- 增加产品初始库存表 +-- 时间 2019-11-28 +-- by jishenghua +-- ---------------------------- +CREATE TABLE `jsh_material_stock` ( +`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键' , +`material_id` bigint(20) NULL DEFAULT NULL COMMENT '产品id' , +`depot_id` bigint(20) NULL DEFAULT NULL COMMENT '仓库id' , +`number` decimal(24,6) NULL DEFAULT NULL COMMENT '初始库存数量' , +`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户id' , +`delete_fag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除' , +PRIMARY KEY (`id`) +) +ENGINE=InnoDB +DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci +COMMENT='产品初始库存' +AUTO_INCREMENT=48 +ROW_FORMAT=COMPACT +; + +-- ---------------------------- +-- 增加商品扩展信息表 +-- 时间 2020-02-15 +-- by jishenghua +-- ---------------------------- +CREATE TABLE `jsh_material_extend` ( +`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键' , +`material_id` bigint(20) NULL DEFAULT NULL COMMENT '商品id' , +`bar_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品条码' , +`commodity_unit` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品单位' , +`purchase_decimal` decimal(24,6) NULL DEFAULT NULL COMMENT '采购价格' , +`commodity_decimal` decimal(24,6) NULL DEFAULT NULL COMMENT '零售价格' , +`wholesale_decimal` decimal(24,6) NULL DEFAULT NULL COMMENT '销售价格' , +`low_decimal` decimal(24,6) NULL DEFAULT NULL COMMENT '最低售价' , +`create_time` datetime NULL DEFAULT NULL COMMENT '创建日期' , +`create_serial` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人编码' , +`update_serial` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人编码' , +`update_time` bigint(20) NULL DEFAULT NULL COMMENT '更新时间戳' , +`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户id' , +`delete_Flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除' , +PRIMARY KEY (`id`) +) +ENGINE=InnoDB +DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci +COMMENT='产品价格扩展' +AUTO_INCREMENT=1 +ROW_FORMAT=COMPACT +; + +-- ---------------------------- +-- 给单据明细表增加商品扩展id +-- 时间 2020-02-16 +-- by jishenghua +-- ---------------------------- +alter table jsh_depot_item add material_extend_id bigint(20) DEFAULT NULL COMMENT '商品扩展id' after MaterialId; + +-- ---------------------------- +-- 给单据主表删除字段ProjectId 和 AllocationProjectId +-- 时间 2020-02-18 +-- by jishenghua +-- ---------------------------- +alter table jsh_depot_head drop column ProjectId; +alter table jsh_depot_head drop column AllocationProjectId; + +-- ---------------------------- +-- 给计量单位表增加基础单位、副单位、比例三个字段 +-- 时间 2020-03-24 +-- by jishenghua +-- ---------------------------- +alter table jsh_unit add basic_unit varchar(50) DEFAULT NULL COMMENT '基础单位' after UName; +alter table jsh_unit add other_unit varchar(50) DEFAULT NULL COMMENT '副单位' after basic_unit; +alter table jsh_unit add ratio INT DEFAULT NULL COMMENT '比例' after other_unit; + +-- ---------------------------- +-- 时间:2020年03月31日 +-- by jishenghua +-- 给用户表增加 登录用户名 字段 +-- ---------------------------- +alter table jsh_user change loginame login_name varchar(255) NOT NULL COMMENT '登录用户名'; + +-- ---------------------------- +-- 时间:2020年04月12日 +-- by jishenghua +-- 给功能表增加插件管理 +-- ---------------------------- +INSERT INTO `jsh_functions` VALUES (245,'000107', '插件管理', '0001', '/pages/manage/plugin.html', '\0', '0170', '', '电脑版', '', 'icon-notebook', '0'); + +-- ---------------------------- +-- 时间:2020年04月25日 +-- by jishenghua +-- 给商品扩展表增加 是否默认基础单位 字段 +-- ---------------------------- +alter table jsh_material_extend add default_flag VARCHAR(1) DEFAULT 1 COMMENT '是否为默认单位,1是,0否' after low_decimal; + +-- ---------------------------- +-- 时间:2020年05月04日 +-- by jishenghua +-- 删除商品表的多价格相关的字段 +-- ---------------------------- +alter table jsh_material drop Packing; +alter table jsh_material drop RetailPrice; +alter table jsh_material drop LowPrice; +alter table jsh_material drop PresetPriceOne; +alter table jsh_material drop PresetPriceTwo; +alter table jsh_material drop FirstOutUnit; +alter table jsh_material drop FirstInUnit; +alter table jsh_material drop PriceStrategy; + +-- ---------------------------- +-- 时间:2020年6月18日 +-- 增加负库存的启用标记 +-- ---------------------------- +alter table jsh_systemconfig add minus_stock_flag varchar(1) DEFAULT '0' COMMENT '负库存启用标记,0未启用,1启用' after customer_flag; + +-- ---------------------------- +-- 时间 2020年07月13日 +-- by jishenghua +-- 增加产品当前库存表 +-- ---------------------------- +CREATE TABLE `jsh_material_current_stock` ( +`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键' , +`material_id` bigint(20) NULL DEFAULT NULL COMMENT '产品id' , +`depot_id` bigint(20) NULL DEFAULT NULL COMMENT '仓库id' , +`current_number` decimal(24,6) NULL DEFAULT NULL COMMENT '当前库存数量' , +`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户id' , +`delete_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除' , +PRIMARY KEY (`id`) +) +ENGINE=InnoDB +DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci +COMMENT='产品当前库存' +AUTO_INCREMENT=1 +ROW_FORMAT=COMPACT +; + +-- -------------------------------------------------------- +-- 时间 2020年07月13日 +-- by jishenghua +-- 修改jsh_material_stock的表名为jsh_material_initial_stock +-- 修改jsh_material_initial_stock表的删除字段 +-- -------------------------------------------------------- +alter table jsh_material_stock rename to jsh_material_initial_stock; +alter table jsh_material_initial_stock change delete_fag delete_flag varchar(1) NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; + +-- -------------------------------------------------------- +-- 时间 2020年07月20日 +-- by jishenghua +-- 优化表和字段的格式 +-- -------------------------------------------------------- +alter table jsh_log change userID user_id bigint(20) DEFAULT NULL COMMENT '用户id'; +alter table jsh_log change clientIP client_ip varchar(50) DEFAULT NULL COMMENT '客户端IP'; +alter table jsh_log change createtime create_time datetime DEFAULT NULL COMMENT '创建时间'; +alter table jsh_log change contentdetails content varchar(1000) DEFAULT NULL COMMENT '详情'; +alter table jsh_log drop column remark; + +alter table jsh_materialcategory rename to jsh_material_category; +alter table jsh_material_category change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'; +alter table jsh_material_category change Name name varchar(50) DEFAULT NULL COMMENT '名称'; +alter table jsh_material_category change CategoryLevel category_level smallint(6) DEFAULT NULL COMMENT '等级'; +alter table jsh_material_category change ParentId parent_id bigint(20) DEFAULT NULL COMMENT '上级id'; + +alter table jsh_materialproperty rename to jsh_material_property; +alter table jsh_material_property change nativeName native_name varchar(50) DEFAULT NULL COMMENT '原始名称'; +alter table jsh_material_property change anotherName another_name varchar(50) DEFAULT NULL COMMENT '别名'; +alter table jsh_material_property change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; + +alter table jsh_role change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'; +alter table jsh_role change Name name varchar(50) DEFAULT NULL COMMENT '名称'; +alter table jsh_role change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; + +alter table jsh_person change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'; +alter table jsh_person change Type type varchar(20) DEFAULT NULL COMMENT '类型'; +alter table jsh_person change Name name varchar(50) DEFAULT NULL COMMENT '姓名'; +alter table jsh_person change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; + +alter table jsh_systemconfig rename to jsh_system_config; +alter table jsh_system_config change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; + +alter table jsh_account change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'; +alter table jsh_account change Name name varchar(50) DEFAULT NULL COMMENT '名称'; +alter table jsh_account change SerialNo serial_no varchar(50) DEFAULT NULL COMMENT '编号'; +alter table jsh_account change InitialAmount initial_amount decimal(24,6) DEFAULT NULL COMMENT '期初金额'; +alter table jsh_account change CurrentAmount current_amount decimal(24,6) DEFAULT NULL COMMENT '当前余额'; +alter table jsh_account change Remark remark varchar(100) DEFAULT NULL COMMENT '备注'; +alter table jsh_account change IsDefault is_default bit(1) DEFAULT NULL COMMENT '是否默认'; +alter table jsh_account change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; + +alter table jsh_functions rename to jsh_function; +alter table jsh_function change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'; +alter table jsh_function change Number number varchar(50) DEFAULT NULL COMMENT '编号'; +alter table jsh_function change Name name varchar(50) DEFAULT NULL COMMENT '名称'; +alter table jsh_function change PNumber parent_number varchar(50) DEFAULT NULL COMMENT '上级编号'; +alter table jsh_function change URL url varchar(100) DEFAULT NULL COMMENT '链接'; +alter table jsh_function change State state bit(1) DEFAULT NULL COMMENT '收缩'; +alter table jsh_function change Sort sort varchar(50) DEFAULT NULL COMMENT '排序'; +alter table jsh_function change Enabled enabled bit(1) DEFAULT NULL COMMENT '启用'; +alter table jsh_function change Type type varchar(50) DEFAULT NULL COMMENT '类型'; +alter table jsh_function change PushBtn push_btn varchar(50) DEFAULT NULL COMMENT '功能按钮'; +alter table jsh_function change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; + +alter table jsh_userbusiness rename to jsh_user_business; +alter table jsh_user_business change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'; +alter table jsh_user_business change Type type varchar(50) DEFAULT NULL COMMENT '类别'; +alter table jsh_user_business change KeyId key_id varchar(50) DEFAULT NULL COMMENT '主id'; +alter table jsh_user_business change Value value varchar(10000) DEFAULT NULL COMMENT '值'; +alter table jsh_user_business change BtnStr btn_str varchar(2000) DEFAULT NULL COMMENT '按钮权限'; +alter table jsh_user_business change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; + +alter table jsh_unit change UName name varchar(50) DEFAULT NULL COMMENT '名称,支持多单位'; +alter table jsh_unit change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; + +alter table jsh_inoutitem rename to jsh_in_out_item; +alter table jsh_in_out_item change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'; +alter table jsh_in_out_item change Name name varchar(50) DEFAULT NULL COMMENT '名称'; +alter table jsh_in_out_item change Type type varchar(20) DEFAULT NULL COMMENT '类型'; +alter table jsh_in_out_item change Remark remark varchar(100) DEFAULT NULL COMMENT '备注'; +alter table jsh_in_out_item change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; + +alter table jsh_serial_number change material_Id material_id bigint(20) DEFAULT NULL COMMENT '产品表id'; +alter table jsh_serial_number change serial_Number serial_number varchar(64) DEFAULT NULL COMMENT '序列号'; +alter table jsh_serial_number change is_Sell is_sell varchar(1) DEFAULT '0' COMMENT '是否卖出,0未卖出,1卖出'; +alter table jsh_serial_number change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +alter table jsh_serial_number change create_Time create_time datetime DEFAULT NULL COMMENT '创建时间'; +alter table jsh_serial_number change update_Time update_time datetime DEFAULT NULL COMMENT '更新时间'; +alter table jsh_serial_number change depothead_Id depot_head_id bigint(20) DEFAULT NULL COMMENT '单据主表id,用于跟踪序列号流向'; + +alter table jsh_supplier change phonenum phone_num varchar(30) DEFAULT NULL COMMENT '联系电话'; +alter table jsh_supplier change AdvanceIn advance_in decimal(24,6) DEFAULT '0.000000' COMMENT '预收款'; +alter table jsh_supplier change BeginNeedGet begin_need_get decimal(24,6) DEFAULT NULL COMMENT '期初应收'; +alter table jsh_supplier change BeginNeedPay begin_need_pay decimal(24,6) DEFAULT NULL COMMENT '期初应付'; +alter table jsh_supplier change AllNeedGet all_need_get decimal(24,6) DEFAULT NULL COMMENT '累计应收'; +alter table jsh_supplier change AllNeedPay all_need_pay decimal(24,6) DEFAULT NULL COMMENT '累计应付'; +alter table jsh_supplier change taxNum tax_num varchar(50) DEFAULT NULL COMMENT '纳税人识别号'; +alter table jsh_supplier change bankName bank_name varchar(50) DEFAULT NULL COMMENT '开户行'; +alter table jsh_supplier change accountNumber account_number varchar(50) DEFAULT NULL COMMENT '账号'; +alter table jsh_supplier change taxRate tax_rate decimal(24,6) DEFAULT NULL COMMENT '税率'; +alter table jsh_supplier change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; + +alter table jsh_accounthead rename to jsh_account_head; +alter table jsh_account_head change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'; +alter table jsh_account_head change Type type varchar(50) DEFAULT NULL COMMENT '类型(支出/收入/收款/付款/转账)'; +alter table jsh_account_head change OrganId organ_id bigint(20) DEFAULT NULL COMMENT '单位Id(收款/付款单位)'; +alter table jsh_account_head change HandsPersonId hands_person_id bigint(20) DEFAULT NULL COMMENT '经手人id'; +alter table jsh_account_head change ChangeAmount change_amount decimal(24,6) DEFAULT NULL COMMENT '变动金额(优惠/收款/付款/实付)'; +alter table jsh_account_head change TotalPrice total_price decimal(24,6) DEFAULT NULL COMMENT '合计金额'; +alter table jsh_account_head change AccountId account_id bigint(20) DEFAULT NULL COMMENT '账户(收款/付款)'; +alter table jsh_account_head change BillNo bill_no varchar(50) DEFAULT NULL COMMENT '单据编号'; +alter table jsh_account_head change BillTime bill_time datetime DEFAULT NULL COMMENT '单据日期'; +alter table jsh_account_head change Remark remark varchar(100) DEFAULT NULL COMMENT '备注'; +alter table jsh_account_head change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; + +alter table jsh_accountitem rename to jsh_account_item; +alter table jsh_account_item change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'; +alter table jsh_account_item change HeaderId header_id bigint(20) NOT NULL COMMENT '表头Id'; +alter table jsh_account_item change AccountId account_id bigint(20) DEFAULT NULL COMMENT '账户Id'; +alter table jsh_account_item change InOutItemId in_out_item_id bigint(20) DEFAULT NULL COMMENT '收支项目Id'; +alter table jsh_account_item change EachAmount each_amount decimal(24,6) DEFAULT NULL COMMENT '单项金额'; +alter table jsh_account_item change Remark remark varchar(100) DEFAULT NULL COMMENT '单据备注'; +alter table jsh_account_item change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; + +alter table jsh_material change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'; +alter table jsh_material change CategoryId category_id bigint(20) DEFAULT NULL COMMENT '产品类型id'; +alter table jsh_material change Name name varchar(50) DEFAULT NULL COMMENT '名称'; +alter table jsh_material change Mfrs mfrs varchar(50) DEFAULT NULL COMMENT '制造商'; +alter table jsh_material change SafetyStock safety_stock decimal(24,6) DEFAULT NULL COMMENT '安全存量(KG)'; +alter table jsh_material change Model model varchar(50) DEFAULT NULL COMMENT '型号'; +alter table jsh_material change Standard standard varchar(50) DEFAULT NULL COMMENT '规格'; +alter table jsh_material change Color color varchar(50) DEFAULT NULL COMMENT '颜色'; +alter table jsh_material change Unit unit varchar(50) DEFAULT NULL COMMENT '单位-单个'; +alter table jsh_material change Remark remark varchar(100) DEFAULT NULL COMMENT '备注'; +alter table jsh_material change UnitId unit_id bigint(20) DEFAULT NULL COMMENT '计量单位Id'; +alter table jsh_material change Enabled enabled bit(1) DEFAULT NULL COMMENT '启用 0-禁用 1-启用'; +alter table jsh_material change OtherField1 other_field1 varchar(50) DEFAULT NULL COMMENT '自定义1'; +alter table jsh_material change OtherField2 other_field2 varchar(50) DEFAULT NULL COMMENT '自定义2'; +alter table jsh_material change OtherField3 other_field3 varchar(50) DEFAULT NULL COMMENT '自定义3'; +alter table jsh_material change enableSerialNumber enable_serial_number varchar(1) DEFAULT '0' COMMENT '是否开启序列号,0否,1是'; +alter table jsh_material change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; + +alter table jsh_depothead rename to jsh_depot_head; +alter table jsh_depot_head change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'; +alter table jsh_depot_head change Type type varchar(50) DEFAULT NULL COMMENT '类型(出库/入库)'; +alter table jsh_depot_head change SubType sub_type varchar(50) DEFAULT NULL COMMENT '出入库分类'; +alter table jsh_depot_head change DefaultNumber default_number varchar(50) DEFAULT NULL COMMENT '初始票据号'; +alter table jsh_depot_head change Number number varchar(50) DEFAULT NULL COMMENT '票据号'; +alter table jsh_depot_head change OperPersonName oper_person_name varchar(50) DEFAULT NULL COMMENT '操作员名字'; +alter table jsh_depot_head change CreateTime create_time datetime DEFAULT NULL COMMENT '创建时间'; +alter table jsh_depot_head change OperTime oper_time datetime DEFAULT NULL COMMENT '出入库时间'; +alter table jsh_depot_head change OrganId organ_id bigint(20) DEFAULT NULL COMMENT '供应商id'; +alter table jsh_depot_head change HandsPersonId hands_person_id bigint(20) DEFAULT NULL COMMENT '采购/领料-经手人id'; +alter table jsh_depot_head change AccountId account_id bigint(20) DEFAULT NULL COMMENT '账户id'; +alter table jsh_depot_head change ChangeAmount change_amount decimal(24,6) DEFAULT NULL COMMENT '变动金额(收款/付款)'; +alter table jsh_depot_head change TotalPrice total_price decimal(24,6) DEFAULT NULL COMMENT '合计金额'; +alter table jsh_depot_head change PayType pay_type varchar(50) DEFAULT NULL COMMENT '付款类型(现金、记账等)'; +alter table jsh_depot_head change Remark remark varchar(1000) DEFAULT NULL COMMENT '备注'; +alter table jsh_depot_head change Salesman sales_man varchar(50) DEFAULT NULL COMMENT '业务员(可以多个)'; +alter table jsh_depot_head change AccountIdList account_id_list varchar(50) DEFAULT NULL COMMENT '多账户ID列表'; +alter table jsh_depot_head change AccountMoneyList account_money_list varchar(200) DEFAULT NULL COMMENT '多账户金额列表'; +alter table jsh_depot_head change Discount discount decimal(24,6) DEFAULT NULL COMMENT '优惠率'; +alter table jsh_depot_head change DiscountMoney discount_money decimal(24,6) DEFAULT NULL COMMENT '优惠金额'; +alter table jsh_depot_head change DiscountLastMoney discount_last_money decimal(24,6) DEFAULT NULL COMMENT '优惠后金额'; +alter table jsh_depot_head change OtherMoney other_money decimal(24,6) DEFAULT NULL COMMENT '销售或采购费用合计'; +alter table jsh_depot_head change OtherMoneyList other_money_list varchar(200) DEFAULT NULL COMMENT '销售或采购费用涉及项目Id数组(包括快递、招待等)'; +alter table jsh_depot_head change OtherMoneyItem other_money_item varchar(200) DEFAULT NULL COMMENT '销售或采购费用涉及项目(包括快递、招待等)'; +alter table jsh_depot_head change AccountDay account_day int(10) DEFAULT NULL COMMENT '结算天数'; +alter table jsh_depot_head change Status status varchar(1) DEFAULT NULL COMMENT '状态,0未审核、1已审核、2已转采购|销售'; +alter table jsh_depot_head change LinkNumber link_number varchar(50) DEFAULT NULL COMMENT '关联订单号'; +alter table jsh_depot_head change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; + +alter table jsh_depotitem rename to jsh_depot_item; +alter table jsh_depot_item change Id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键'; +alter table jsh_depot_item change HeaderId header_id bigint(20) NOT NULL COMMENT '表头Id'; +alter table jsh_depot_item change MaterialId material_id bigint(20) NOT NULL COMMENT '商品Id'; +alter table jsh_depot_item change MUnit material_unit varchar(20) DEFAULT NULL COMMENT '商品计量单位'; +alter table jsh_depot_item change OperNumber oper_number decimal(24,6) DEFAULT NULL COMMENT '数量'; +alter table jsh_depot_item change BasicNumber basic_number decimal(24,6) DEFAULT NULL COMMENT '基础数量,如kg、瓶'; +alter table jsh_depot_item change UnitPrice unit_price decimal(24,6) DEFAULT NULL COMMENT '单价'; +alter table jsh_depot_item change TaxUnitPrice tax_unit_price decimal(24,6) DEFAULT NULL COMMENT '含税单价'; +alter table jsh_depot_item change AllPrice all_price decimal(24,6) DEFAULT NULL COMMENT '金额'; +alter table jsh_depot_item change Remark remark varchar(200) DEFAULT NULL COMMENT '备注'; +alter table jsh_depot_item change Img img varchar(50) DEFAULT NULL COMMENT '图片'; +alter table jsh_depot_item change Incidentals incidentals decimal(24,6) DEFAULT NULL COMMENT '运杂费'; +alter table jsh_depot_item change DepotId depot_id bigint(20) DEFAULT NULL COMMENT '仓库ID'; +alter table jsh_depot_item change AnotherDepotId another_depot_id bigint(20) DEFAULT NULL COMMENT '调拨时,对方仓库Id'; +alter table jsh_depot_item change TaxRate tax_rate decimal(24,6) DEFAULT NULL COMMENT '税率'; +alter table jsh_depot_item change TaxMoney tax_money decimal(24,6) DEFAULT NULL COMMENT '税额'; +alter table jsh_depot_item change TaxLastMoney tax_last_money decimal(24,6) DEFAULT NULL COMMENT '价税合计'; +alter table jsh_depot_item change OtherField1 other_field1 varchar(50) DEFAULT NULL COMMENT '自定义字段1-名称'; +alter table jsh_depot_item change OtherField2 other_field2 varchar(50) DEFAULT NULL COMMENT '自定义字段2-型号'; +alter table jsh_depot_item change OtherField3 other_field3 varchar(50) DEFAULT NULL COMMENT '自定义字段3-制造商'; +alter table jsh_depot_item change OtherField4 other_field4 varchar(50) DEFAULT NULL COMMENT '自定义字段4-名称'; +alter table jsh_depot_item change OtherField5 other_field5 varchar(50) DEFAULT NULL COMMENT '自定义字段5-名称'; +alter table jsh_depot_item change MType material_type varchar(20) DEFAULT NULL COMMENT '商品类型'; +alter table jsh_depot_item change delete_Flag delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; + +-- -------------------------------------------------------- +-- 时间 2020年09月13日 +-- by jishenghua +-- 给单据表增加操作员字段,去掉经手头姓名字段 +-- -------------------------------------------------------- +alter table jsh_depot_head add creator bigint(20) DEFAULT NULL COMMENT '操作员' after hands_person_id; +alter table jsh_account_head add creator bigint(20) DEFAULT NULL COMMENT '操作员' after hands_person_id; +alter table jsh_depot_head drop column oper_person_name; +update jsh_depot_head set creator=hands_person_id; + + +-- -------------------------------------------------------- +-- 时间 2020年10月17日 +-- by jishenghua +-- 增加平台表 +-- -------------------------------------------------------- +DROP TABLE IF EXISTS `jsh_platform_config`; +CREATE TABLE `jsh_platform_config` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `platform_key` varchar(100) DEFAULT NULL COMMENT '关键词', + `platform_key_info` varchar(100) DEFAULT NULL COMMENT '关键词名称', + `platform_value` varchar(200) DEFAULT NULL COMMENT '值', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='平台参数'; + +INSERT INTO `jsh_platform_config` VALUES ('1', 'platform_name', '平台名称', '华夏ERP'); +INSERT INTO `jsh_platform_config` VALUES ('2', 'activation_code', '激活码', null); + +-- -------------------------------------------------------- +-- 时间 2020年11月24日 +-- by jishenghua +-- 给单据主表增加单据类型字段bill_type +-- -------------------------------------------------------- +alter table jsh_depot_head add bill_type varchar(50) DEFAULT NULL COMMENT '单据类型' after pay_type; + +-- -------------------------------------------------------- +-- 时间 2021年1月19日 +-- by jishenghua +-- 给功能表增加组件字段component +-- -------------------------------------------------------- +alter table jsh_function add component varchar(100) DEFAULT NULL COMMENT '组件' after url; + +-- -------------------------------------------------------- +-- 时间 2021年2月13日 +-- by jishenghua +-- 优化机构和商品类型表的字段 +-- -------------------------------------------------------- +alter table jsh_organization change org_parent_no parent_id bigint(20) DEFAULT NULL COMMENT '父机构id'; +alter table jsh_organization change org_stcd delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +alter table jsh_organization drop column org_tpcd; +alter table jsh_organization drop column org_create_time; +alter table jsh_organization drop column org_stop_time; +alter table jsh_organization drop column creator; +alter table jsh_organization drop column updater; +alter table jsh_material_category drop column creator; +alter table jsh_material_category drop column updater; +alter table jsh_material_category change status delete_flag varchar(1) DEFAULT '0' COMMENT '删除标记,0未删除,1删除'; +update jsh_material_category set delete_flag='0'; \ No newline at end of file diff --git a/jshERP-boot/pom.xml b/jshERP-boot/pom.xml new file mode 100644 index 000000000..1372af326 --- /dev/null +++ b/jshERP-boot/pom.xml @@ -0,0 +1,178 @@ + + + 4.0.0 + com.jsh + jshERP-boot + 2.3-SNAPSHOT + jar + + jshERP-boot + 华夏ERP + + + org.springframework.boot + spring-boot-starter-parent + 2.0.0.RELEASE + + + + UTF-8 + UTF-8 + 1.8 + + + + + com.gitee.starblues + springboot-plugin-framework + 2.2.1-RELEASE + + + com.gitee.starblues + springboot-plugin-framework-extension-mybatis + 2.2.1-RELEASE + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + com.alibaba + fastjson + 1.2.55 + + + mysql + mysql-connector-java + 5.1.30 + + + + org.apache.httpcomponents + httpclient + 4.5.2 + + + net.sourceforge.jexcelapi + jxl + 2.6.12 + + + + org.projectlombok + lombok + 1.18.12 + + + + org.apache.logging.log4j + log4j-to-slf4j + 2.10.0 + compile + + + org.slf4j + jul-to-slf4j + 1.7.25 + compile + + + com.baomidou + mybatis-plus-boot-starter + 3.0.7.1 + + + org.springframework.boot + spring-boot-starter-redis + 1.4.1.RELEASE + + + io.springfox + springfox-swagger2 + 2.7.0 + compile + + + com.github.xiaoymin + swagger-bootstrap-ui + 1.6 + + + + + jshERP3.0 + + + org.springframework.boot + spring-boot-maven-plugin + 2.0.3.RELEASE + + + build-info + generate-sources + + build-info + + + + repackage + package + + repackage + + + com.jsh.erp.ErpApplication + JAR + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 2.5.1 + + + make-zip + package + + single + + + + src/main/assembly/assembly.xml + + ./dist + + + + + + org.mybatis.generator + mybatis-generator-maven-plugin + 1.4.0 + + ${basedir}/src/test/resources/generatorConfig.xml + true + true + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.7.0 + + 1.8 + 1.8 + true + + + + + diff --git a/jshERP-boot/src/main/assembly/assembly.xml b/jshERP-boot/src/main/assembly/assembly.xml new file mode 100644 index 000000000..eadda257a --- /dev/null +++ b/jshERP-boot/src/main/assembly/assembly.xml @@ -0,0 +1,71 @@ + + + + bin + + + zip + + + true + + + + erp_web + /erp_web + + + ${project.basedir}/target + + *.jar + + /lib + + + ${project.basedir}/src/main/resources + + *.properties + *.yml + *.yaml + *.xml + + /config + + + ${project.basedir}/src/main/bin + /bin + + run-manage.sh + + unix + + + ${project.basedir}/src/main/bin/ + / + + start.bat + restart.sh + start.sh + stop.sh + status.sh + + + + docs + /docs + + + ${project.basedir} + + *.md + *.txt + + / + + + \ No newline at end of file diff --git a/jshERP-boot/src/main/bin/restart.sh b/jshERP-boot/src/main/bin/restart.sh new file mode 100644 index 000000000..70c0be158 --- /dev/null +++ b/jshERP-boot/src/main/bin/restart.sh @@ -0,0 +1 @@ +./bin/run-manage.sh restart \ No newline at end of file diff --git a/jshERP-boot/src/main/bin/run-manage.sh b/jshERP-boot/src/main/bin/run-manage.sh new file mode 100644 index 000000000..fb86505f4 --- /dev/null +++ b/jshERP-boot/src/main/bin/run-manage.sh @@ -0,0 +1,146 @@ +SERVER_NAME=jshERP +readonly APP_HOME=${FILE_PATH:-$(dirname $(cd `dirname $0`; pwd))} + +#readonly JAVA_HOME="" + +readonly CONFIG_HOME="$APP_HOME/config/" +readonly LIB_HOME="$APP_HOME/lib" +readonly LOGS_HOME="$APP_HOME/logs" + +readonly PID_FILE="$LOGS_HOME/application.pid" +readonly APP_MAIN_CLASS="jshERP3.0.jar" +readonly LOG_CONFIG="$CONFIG_HOME/logback-spring.xml" + +readonly JAVA_RUN="-Dlogs.home=$LOGS_HOME -Dlogging.config=$LOG_CONFIG -Dspring.config.location=file:$CONFIG_HOME -Dspring.pid.file=$PID_FILE -Dspring.pid.fail-on-write-error=true" +readonly JAVA_OPTS="-server -Xms128m -Xmx320m -XX:PermSize=128M -XX:MaxPermSize=256M $JAVA_RUN" + +readonly JAVA="java" + +PID=0 + + +if [ ! -x "$LOGS_HOME" ] +then + mkdir $LOGS_HOME +fi +chmod +x -R "$JAVA_HOME/bin/" + +functions="/etc/functions.sh" +if test -f $functions ; then + . $functions +else + success() + { + echo " SUCCESS! $@" + } + failure() + { + echo " ERROR! $@" + } + warning() + { + echo "WARNING! $@" + } +fi + +function checkpid() { + PID=$(ps -ef | grep $APP_MAIN_CLASS | grep -v 'grep' | awk '{print int($2)}') + if [[ -n "$PID" ]] + then + return 0 + else + return 1 + fi +} + +function start() { + checkpid + if [[ $? -eq 0 ]] + then + warning "[$APP_MAIN_CLASS]: already started! (PID=$PID)" + else + echo -n "[$APP_MAIN_CLASS]: Starting ..." + JAVA_CMD="nohup $JAVA $JAVA_OPTS -jar $LIB_HOME/$APP_MAIN_CLASS > /dev/null 2>&1 &" + # echo "Exec cmmand : $JAVA_CMD" + sh -c "$JAVA_CMD" + sleep 3 + checkpid + if [[ $? -eq 0 ]] + then + success "(PID=$PID) " + else + failure " " + fi + fi +} + +function stop() { + checkpid + if [[ $? -eq 0 ]]; + then + echo -n "[$APP_MAIN_CLASS]: Shutting down ...(PID=$PID) " + kill -9 $PID + if [[ $? -eq 0 ]]; + then + echo 0 > $PID_FILE + success " " + else + failure " " + fi + else + warning "[$APP_MAIN_CLASS]: is not running ..." + fi +} + +function status() { + checkpid + if [[ $? -eq 0 ]] + then + success "[$APP_MAIN_CLASS]: is running! (PID=$PID)" + return 0 + else + failure "[$APP_MAIN_CLASS]: is not running" + return 1 + fi +} + +function info() { + echo "System Information:" + echo + echo "****************************" + echo `head -n 1 /etc/issue` + echo `uname -a` + echo + echo "JAVA_HOME=$JAVA_HOME" + echo + echo "JAVA Environment Information:" + echo `$JAVA -version` + echo + echo "APP_HOME=$APP_HOME" + echo "APP_MAIN_CLASS=$APP_MAIN_CLASS" + echo + echo "****************************" +} + +case "$1" in + 'start') + start + ;; + 'stop') + stop + ;; + 'restart') + stop + start + ;; + 'status') + status + ;; + 'info') + info + ;; + *) + echo "Usage: $0 {help|start|stop|restart|status|info}" + ;; +esac +exit 0 diff --git a/jshERP-boot/src/main/bin/start.bat b/jshERP-boot/src/main/bin/start.bat new file mode 100644 index 000000000..94ce4f469 --- /dev/null +++ b/jshERP-boot/src/main/bin/start.bat @@ -0,0 +1,6 @@ +@echo off + +title jshERP + +java -Xms1000m -Xmx2000m -jar .\lib\jshERP.jar +pause over \ No newline at end of file diff --git a/jshERP-boot/src/main/bin/start.sh b/jshERP-boot/src/main/bin/start.sh new file mode 100644 index 000000000..d0bf0677c --- /dev/null +++ b/jshERP-boot/src/main/bin/start.sh @@ -0,0 +1 @@ +./bin/run-manage.sh start \ No newline at end of file diff --git a/jshERP-boot/src/main/bin/status.sh b/jshERP-boot/src/main/bin/status.sh new file mode 100644 index 000000000..46d65372b --- /dev/null +++ b/jshERP-boot/src/main/bin/status.sh @@ -0,0 +1 @@ +./bin/run-manage.sh status \ No newline at end of file diff --git a/jshERP-boot/src/main/bin/stop.sh b/jshERP-boot/src/main/bin/stop.sh new file mode 100644 index 000000000..8f3414e79 --- /dev/null +++ b/jshERP-boot/src/main/bin/stop.sh @@ -0,0 +1 @@ +./bin/run-manage.sh stop \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/ErpApplication.java b/jshERP-boot/src/main/java/com/jsh/erp/ErpApplication.java new file mode 100644 index 000000000..2f3d82853 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/ErpApplication.java @@ -0,0 +1,27 @@ +package com.jsh.erp; + +import com.jsh.erp.utils.ComputerInfo; +import org.mybatis.spring.annotation.MapperScan; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.core.env.Environment; +import org.springframework.scheduling.annotation.EnableScheduling; + +import java.io.IOException; + +@SpringBootApplication +@MapperScan("com.jsh.erp.datasource.mappers") +@ServletComponentScan +@EnableScheduling +public class ErpApplication{ + public static void main(String[] args) throws IOException { + ConfigurableApplicationContext context = SpringApplication.run(ErpApplication.class, args); + Environment environment = context.getBean(Environment.class); + System.out.println("启动成功,访问地址:http://" + ComputerInfo.getIpAddr() + ":" + + environment.getProperty("server.port") + ",测试用户:jsh,密码:123456"); + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/config/PluginBeanConfig.java b/jshERP-boot/src/main/java/com/jsh/erp/config/PluginBeanConfig.java new file mode 100644 index 000000000..301b1bfc3 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/config/PluginBeanConfig.java @@ -0,0 +1,24 @@ +package com.jsh.erp.config; + +import com.gitee.starblues.extension.mybatis.SpringBootMybatisExtension; +import com.gitee.starblues.integration.application.AutoPluginApplication; +import com.gitee.starblues.integration.application.PluginApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Author: jishenghua + * @Version: 1.0 + * @Create Date Time: 2019-05-30 15:53 + * @Update Date Time: + * @see + */ +@Configuration +public class PluginBeanConfig { + @Bean + public PluginApplication pluginApplication(){ + PluginApplication pluginApplication = new AutoPluginApplication(); + pluginApplication.addExtension(new SpringBootMybatisExtension()); + return pluginApplication; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/config/PluginConfiguration.java b/jshERP-boot/src/main/java/com/jsh/erp/config/PluginConfiguration.java new file mode 100644 index 000000000..4c3bf4645 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/config/PluginConfiguration.java @@ -0,0 +1,104 @@ +package com.jsh.erp.config; + +import com.gitee.starblues.integration.DefaultIntegrationConfiguration; +import org.pf4j.RuntimeMode; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + + +/** + * @Description: + * @Author: jishenghua + * @Version: 1.0 + * @Create Date Time: 2019-05-25 12:36 + * @Update Date Time: + * @see + */ +@Component +@ConfigurationProperties(prefix = "plugin") +public class PluginConfiguration extends DefaultIntegrationConfiguration { + + /** + * 运行模式 + * 开发环境: development、dev + * 生产/部署 环境: deployment、prod + */ + @Value("${runMode:dev}") + private String runMode; + + @Value("${pluginPath:plugins}") + private String pluginPath; + + @Value("${pluginConfigFilePath:pluginConfigs}") + private String pluginConfigFilePath; + + @Override + public RuntimeMode environment() { + return RuntimeMode.byName(runMode); + } + + @Override + public String pluginPath() { + return pluginPath; + } + + @Override + public String pluginConfigFilePath() { + return pluginConfigFilePath; + } + + @Override + public String uploadTempPath() { + return "temp"; + } + + @Override + public String backupPath() { + return "backupPlugin"; + } + + @Override + public String pluginRestControllerPathPrefix() { + return "/api/plugin"; + } + + @Override + public boolean enablePluginIdRestControllerPathPrefix() { + return true; + } + + public String getRunMode() { + return runMode; + } + + public void setRunMode(String runMode) { + this.runMode = runMode; + } + + + public String getPluginPath() { + return pluginPath; + } + + public void setPluginPath(String pluginPath) { + this.pluginPath = pluginPath; + } + + public String getPluginConfigFilePath() { + return pluginConfigFilePath; + } + + public void setPluginConfigFilePath(String pluginConfigFilePath) { + this.pluginConfigFilePath = pluginConfigFilePath; + } + + @Override + public String toString() { + return "PluginArgConfiguration{" + + "runMode='" + runMode + '\'' + + ", pluginPath='" + pluginPath + '\'' + + ", pluginConfigFilePath='" + pluginConfigFilePath + '\'' + + '}'; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/config/Swagger2Config.java b/jshERP-boot/src/main/java/com/jsh/erp/config/Swagger2Config.java new file mode 100644 index 000000000..0aec51c7a --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/config/Swagger2Config.java @@ -0,0 +1,44 @@ +package com.jsh.erp.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Contact; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +/** + * 插件集成配置 + * + * @author jishenghua + * @version 1.0 + */ +@Configuration +@EnableSwagger2 +public class Swagger2Config { + + @Bean + public Docket createRestApi() { + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(this.apiInfo()) + .select() + .apis(RequestHandlerSelectors.any()) + .paths(PathSelectors.any()) + .build(); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("Mybatis-Plus Plugin Example RESTful APIs") + .description("集成Mybatis-Plus模块接口描述") + .termsOfServiceUrl("http://127.0.0.1") + .contact(new Contact("jishenghua", "", "")) + .version("2.1.1") + .build(); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/config/TenantConfig.java b/jshERP-boot/src/main/java/com/jsh/erp/config/TenantConfig.java new file mode 100644 index 000000000..0e51583c6 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/config/TenantConfig.java @@ -0,0 +1,107 @@ +package com.jsh.erp.config; + +import com.baomidou.mybatisplus.core.parser.ISqlParser; +import com.baomidou.mybatisplus.core.parser.ISqlParserFilter; +import com.baomidou.mybatisplus.core.parser.SqlParserHelper; +import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; +import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor; +import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler; +import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser; +import com.jsh.erp.utils.Tools; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.LongValue; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.reflection.MetaObject; +import org.mybatis.spring.mapper.MapperScannerConfigurer; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; + +@Service +public class TenantConfig { + + @Bean + public PaginationInterceptor paginationInterceptor(HttpServletRequest request) { + PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); + List sqlParserList = new ArrayList<>(); + TenantSqlParser tenantSqlParser = new TenantSqlParser(); + tenantSqlParser.setTenantHandler(new TenantHandler() { + @Override + public Expression getTenantId() { + String token = request.getHeader("X-Access-Token"); + Long tenantId = Tools.getTenantIdByToken(token); + if (tenantId!=0L) { + return new LongValue(tenantId); + } else { + //超管 + return null; + } + } + + @Override + public String getTenantIdColumn() { + return "tenant_id"; + } + + @Override + public boolean doTableFilter(String tableName) { + //获取开启状态 + Boolean res = true; + String token = request.getHeader("X-Access-Token"); + Long tenantId = Tools.getTenantIdByToken(token); + if (tenantId!=0L) { + // 这里可以判断是否过滤表 + if ("jsh_material_property".equals(tableName) || "jsh_sequence".equals(tableName) + || "jsh_user_business".equals(tableName) || "jsh_function".equals(tableName) + || "jsh_platform_config".equals(tableName) || "jsh_tenant".equals(tableName)) { + res = true; + } else { + res = false; + } + } + return res; + } + }); + + sqlParserList.add(tenantSqlParser); + paginationInterceptor.setSqlParserList(sqlParserList); + paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() { + @Override + public boolean doFilter(MetaObject metaObject) { + MappedStatement ms = SqlParserHelper.getMappedStatement(metaObject); + // 过滤自定义查询此时无租户信息约束出现 + if ("com.jsh.erp.datasource.mappers.UserMapperEx.getUserListByUserNameOrLoginName".equals(ms.getId())|| + "com.jsh.erp.datasource.mappers.DepotItemMapperEx.getStockByParam".equals(ms.getId())) { + return true; + } + return false; + } + }); + return paginationInterceptor; + } + + /** + * 相当于顶部的: + * {@code @MapperScan("com.jsh.erp.datasource.mappers*")} + * 这里可以扩展,比如使用配置文件来配置扫描Mapper的路径 + */ + @Bean + public MapperScannerConfigurer mapperScannerConfigurer() { + MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer(); + scannerConfigurer.setBasePackage("com.jsh.erp.datasource.mappers*"); + return scannerConfigurer; + } + + /** + * 性能分析拦截器,不建议生产使用 + */ + @Bean + public PerformanceInterceptor performanceInterceptor(){ + return new PerformanceInterceptor(); + } + + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/constants/BusinessConstants.java b/jshERP-boot/src/main/java/com/jsh/erp/constants/BusinessConstants.java new file mode 100644 index 000000000..cb4a09ffc --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/constants/BusinessConstants.java @@ -0,0 +1,177 @@ +package com.jsh.erp.constants; + +/** + * @ClassName:BusinessConstants + * @Description 业务字典类 + * @Author qiankunpingtai + * @Date 2019-3-6 17:58 + * @Version 1.0 + **/ +public class BusinessConstants { + + /** + * 默认的日期格式 + */ + public static final String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; + /** + * 默认的分页起始页页码 + */ + public static final Integer DEFAULT_PAGINATION_PAGE_NUMBER = 1; + /** + * 无数据时列表返回的默认数据条数 + */ + public static final Long DEFAULT_LIST_NULL_NUMBER = 0L; + /** + * 默认的分页条数 + */ + public static final Integer DEFAULT_PAGINATION_PAGE_SIZE = 10; + /** + * 单据主表出入库类型 type 入库 出库 + * depothead + * */ + public static final String DEPOTHEAD_TYPE_STORAGE = "入库"; + public static final String DEPOTHEAD_TYPE_OUT = "出库"; + /** + * 付款类型 payType //现付/预付款 + * */ + public static final String PAY_TYPE_PREPAID = "预付款"; + public static final String PAY_TYPE_BY_CASH = "现付"; + /** + * 删除标记 deleteFlag '0'未删除 '1'已删除 + * */ + public static final String DELETE_FLAG_DELETED = "1"; + public static final String DELETE_FLAG_EXISTS = "0"; + /** + * 是否卖出 isSell '0'未卖出 '1'已卖出 + * */ + public static final String IS_SELL_SELLED = "1"; + public static final String IS_SELL_HOLD = "0"; + /** + * 商品是否开启序列号标识enableSerialNumber '0'未启用 '1'启用 + * */ + public static final String ENABLE_SERIAL_NUMBER_ENABLED = "1"; + public static final String ENABLE_SERIAL_NUMBER_NOT_ENABLED = "0"; + /** + * 单据状态 billsStatus '0'未审核 '1'审核 '2'已转采购|销售 + * */ + public static final String BILLS_STATUS_UN_AUDIT = "0"; + public static final String BILLS_STATUS_AUDIT = "1"; + public static final String BILLS_STATUS_SKIP = "2"; + /** + * 出入库分类 + *采购、采购退货、其它、零售、销售、调拨 + * */ + public static final String SUB_TYPE_PURCHASE = "采购"; + public static final String SUB_TYPE_PURCHASE_TETURNS = "采购退货"; + public static final String SUB_TYPE_OTHER = "其它"; + public static final String SUB_TYPE_RETAIL = "零售"; + public static final String SUB_TYPE_SALES = "销售"; + public static final String SUB_TYPE_TRANSFER = "调拨"; + /** + * 批量插入sql时最大的数据条数 + * */ + public static final int BATCH_INSERT_MAX_NUMBER = 500; + /** + * sequence名称 + * */ + //sequence返回字符串的最小长度 + public static final Long SEQ_TO_STRING_MIN_LENGTH = 10000000000L; + //sequence长度小于基准长度时前追加基础值 + public static final String SEQ_TO_STRING_LESS_INSERT = "0"; + //单据编号 + public static final String DEPOT_NUMBER_SEQ = "depot_number_seq"; + /** + * 商品类别根目录id + * */ + /** + * create by: qiankunpingtai + * create time: 2019/3/14 11:41 + * description: + * 为了使用户可以自己建初始目录,设定根目录的父级目录id为-1 + * + */ + public static final Long MATERIAL_CATEGORY_ROOT_PARENT_ID = -1L; + /** + * 商品类别状态 + * 0系统默认,1启用,2删除 + * */ + public static final String MATERIAL_CATEGORY_STATUS_DEFAULT = "0"; + public static final String MATERIAL_CATEGORY_STATUS_ENABLE = "1"; + public static final String MATERIAL_CATEGORY_STATUS_DELETE = "2"; + /** + * 机构状态 + * 1未营业、2正常营业、3暂停营业、4终止营业,5已除名 + * */ + public static final String ORGANIZATION_STCD_NOT_OPEN = "1"; + public static final String ORGANIZATION_STCD_OPEN = "2"; + public static final String ORGANIZATION_STCD_BUSINESS_SUSPENDED = "3"; + public static final String ORGANIZATION_STCD_BUSINESS_TERMINATED = "4"; + public static final String ORGANIZATION_STCD_REMOVED = "5"; + /** + * 根机构父级编号 + * 根机父级构编号默认为-1 + * */ + public static final String ORGANIZATION_ROOT_PARENT_NO = "-1"; + /** + * 新增用户默认密码 + * */ + public static final String USER_DEFAULT_PASSWORD = "123456"; + /** + * 用户是否系统自带 + * 0、非系统自带,1系统自带 + * */ + public static final byte USER_NOT_SYSTEM = 0; + public static final byte USER_IS_SYSTEM = 1; + /** + * 用户是否为管理者 + * 0、管理者,1员工 + * */ + public static final byte USER_IS_MANAGER = 0; + public static final byte USER_NOT_MANAGER = 1; + /** + * 用户状态 + * 0:正常,1:删除,2封禁 + * */ + public static final byte USER_STATUS_NORMAL = 0; + public static final byte USER_STATUS_DELETE = 1; + public static final byte USER_STATUS_BANNED = 2; + /** + * 日志操作 + * 新增、修改、删除、登录、导入 + * */ + public static final String LOG_OPERATION_TYPE_ADD = "新增"; + public static final String LOG_OPERATION_TYPE_BATCH_ADD = "批量新增"; + public static final String LOG_OPERATION_TYPE_EDIT = "修改"; + public static final String LOG_OPERATION_TYPE_DELETE = "删除"; + public static final String LOG_OPERATION_TYPE_LOGIN = "登录"; + public static final String LOG_OPERATION_TYPE_IMPORT = "导入"; + + /** + * 数据数量单位 + * 条 + * */ + public static final String LOG_DATA_UNIT = "条"; + + /** + * 删除类型 + * 1正常删除 + * 2强制删除 + * */ + public static final String DELETE_TYPE_NORMAL = "1"; + public static final String DELETE_TYPE_FORCE = "2"; + + /** + * 默认管理员账号 + */ + public static final String DEFAULT_MANAGER = "admin"; + + public static final String ROLE_TYPE_PRIVATE = "个人数据"; + + public static final String ROLE_TYPE_THIS_ORG = "本机构数据"; + + /** + * redis相关 + * */ + //session的生命周期,秒 + public static final Long MAX_SESSION_IN_SECONDS=60*60*24L; +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/constants/ExceptionConstants.java b/jshERP-boot/src/main/java/com/jsh/erp/constants/ExceptionConstants.java new file mode 100644 index 000000000..47bd7ebdb --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/constants/ExceptionConstants.java @@ -0,0 +1,416 @@ +package com.jsh.erp.constants; + +import com.alibaba.fastjson.JSONObject; + +public class ExceptionConstants { + /** + * code 格式 type+五位数字,例如3500000 + * ResourceInfo(value = "inOutItem", type = 35) + * + * */ + + public static final String GLOBAL_RETURNS_CODE = "code"; + public static final String GLOBAL_RETURNS_MESSAGE = "msg"; + public static final String GLOBAL_RETURNS_DATA = "data"; + + /** + * 正常返回/操作成功 + **/ + public static final int SERVICE_SUCCESS_CODE = 200; + public static final String SERVICE_SUCCESS_MSG = "操作成功"; + /** + * 数据查询异常 + */ + public static final int DATA_READ_FAIL_CODE = 300; + public static final String DATA_READ_FAIL_MSG = "数据查询异常"; + /** + * 数据写入异常 + */ + public static final int DATA_WRITE_FAIL_CODE = 301; + public static final String DATA_WRITE_FAIL_MSG = "数据写入异常"; + + /** + * 系统运行时未知错误 + **/ + public static final int SERVICE_SYSTEM_ERROR_CODE = 500; + public static final String SERVICE_SYSTEM_ERROR_MSG = "未知异常"; + + /** + * 删除操作被拒绝,请联系管理员 + **/ + public static final int DELETE_REFUSED_CODE = 600; + public static final String DELETE_REFUSED_MSG = "删除操作被拒绝,请联系管理员"; + /** + * 检测到存在依赖数据,是否强制删除? + **/ + public static final int DELETE_FORCE_CONFIRM_CODE = 601; + public static final String DELETE_FORCE_CONFIRM_MSG = "检测到存在依赖数据,不能删除!"; + /** + * 用户信息 + * type = 5 + * */ + //添加用户信息失败 + public static final int USER_ADD_FAILED_CODE = 500000; + public static final String USER_ADD_FAILED_MSG = "添加用户信息失败"; + //删除用户信息失败 + public static final int USER_DELETE_FAILED_CODE = 500001; + public static final String USER_DELETE_FAILED_MSG = "删除用户信息失败"; + //修改用户信息失败 + public static final int USER_EDIT_FAILED_CODE = 500002; + public static final String USER_EDIT_FAILED_MSG = "修改用户信息失败"; + //用户名已存在 + public static final int USER_USER_NAME_ALREADY_EXISTS_CODE = 500003; + public static final String USER_USER_NAME_ALREADY_EXISTS_MSG = "用户名在本系统已存在"; + //登录名已存在 + public static final int USER_LOGIN_NAME_ALREADY_EXISTS_CODE = 500003; + public static final String USER_LOGIN_NAME_ALREADY_EXISTS_MSG = "登录名在本系统已存在"; + //用户录入数量超出限制 + public static final int USER_OVER_LIMIT_FAILED_CODE = 500004; + public static final String USER_OVER_LIMIT_FAILED_MSG = "用户录入数量超出限制,请联系管理员"; + //此用户名限制使用 + public static final int USER_NAME_LIMIT_USE_CODE = 500004; + public static final String USER_NAME_LIMIT_USE_MSG = "此用户名限制使用"; + + /** + * 角色信息 + * type = 10 + * */ + //添加角色信息失败 + public static final int ROLE_ADD_FAILED_CODE = 1000000; + public static final String ROLE_ADD_FAILED_MSG = "添加角色信息失败"; + //删除角色信息失败 + public static final int ROLE_DELETE_FAILED_CODE = 1000001; + public static final String ROLE_DELETE_FAILED_MSG = "删除角色信息失败"; + //修改角色信息失败 + public static final int ROLE_EDIT_FAILED_CODE = 1000002; + public static final String ROLE_EDIT_FAILED_MSG = "修改角色信息失败"; + /** + * 应用信息 + * type = 15 + * */ + //添加角色信息失败 + public static final int APP_ADD_FAILED_CODE = 1500000; + public static final String APP_ADD_FAILED_MSG = "添加应用信息失败"; + //删除角色信息失败 + public static final int APP_DELETE_FAILED_CODE = 1500001; + public static final String APP_DELETE_FAILED_MSG = "删除应用信息失败"; + //修改角色信息失败 + public static final int APP_EDIT_FAILED_CODE = 1500002; + public static final String APP_EDIT_FAILED_MSG = "修改应用信息失败"; + /** + * 仓库信息 + * type = 20 + * */ + //添加仓库信息失败 + public static final int DEPOT_ADD_FAILED_CODE = 2000000; + public static final String DEPOT_ADD_FAILED_MSG = "添加仓库信息失败"; + //删除仓库信息失败 + public static final int DEPOT_DELETE_FAILED_CODE = 2000001; + public static final String DEPOT_DELETE_FAILED_MSG = "删除仓库信息失败"; + //修改仓库信息失败 + public static final int DEPOT_EDIT_FAILED_CODE = 2000002; + public static final String DEPOT_EDIT_FAILED_MSG = "修改仓库信息失败"; + + /** + * 功能模块信息 + * type = 30 + * */ + //添加角色信息失败 + public static final int FUNCTIONS_ADD_FAILED_CODE = 3000000; + public static final String FUNCTIONS_ADD_FAILED_MSG = "添加功能模块信息失败"; + //删除角色信息失败 + public static final int FUNCTIONS_DELETE_FAILED_CODE = 3000001; + public static final String FUNCTIONS_DELETE_FAILED_MSG = "删除功能模块信息失败"; + //修改角色信息失败 + public static final int FUNCTIONS_EDIT_FAILED_CODE = 3000002; + public static final String FUNCTIONS_EDIT_FAILED_MSG = "修改功能模块信息失败"; + /** + * 收支项目信息 + * type = 35 + * */ + //添加收支项目信息失败 + public static final int IN_OUT_ITEM_ADD_FAILED_CODE = 3500000; + public static final String IN_OUT_ITEM_ADD_FAILED_MSG = "添加收支项目信息失败"; + //删除收支项目信息失败 + public static final int IN_OUT_ITEM_DELETE_FAILED_CODE = 3500001; + public static final String IN_OUT_ITEM_DELETE_FAILED_MSG = "删除收支项目信息失败"; + //修改收支项目信息失败 + public static final int IN_OUT_ITEM_EDIT_FAILED_CODE = 3500002; + public static final String IN_OUT_ITEM_EDIT_FAILED_MSG = "修改收支项目信息失败"; + /** + * 多单位信息 + * type = 40 + * */ + //添加多单位信息失败 + public static final int UNIT_ADD_FAILED_CODE = 4000000; + public static final String UNIT_ADD_FAILED_MSG = "添加多单位信息失败"; + //删除多单位信息失败 + public static final int UNIT_DELETE_FAILED_CODE = 4000001; + public static final String UNIT_DELETE_FAILED_MSG = "删除多单位信息失败"; + //修改多单位信息失败 + public static final int UNIT_EDIT_FAILED_CODE = 4000002; + public static final String UNIT_EDIT_FAILED_MSG = "修改多单位信息失败"; + /** + * 经手人信息 + * type = 45 + * */ + //添加经手人信息失败 + public static final int PERSON_ADD_FAILED_CODE = 4500000; + public static final String PERSON_ADD_FAILED_MSG = "添加经手人信息失败"; + //删除经手人信息失败 + public static final int PERSON_DELETE_FAILED_CODE = 4500001; + public static final String PERSON_DELETE_FAILED_MSG = "删除经手人信息失败"; + //修改经手人信息失败 + public static final int PERSON_EDIT_FAILED_CODE = 4500002; + public static final String PERSON_EDIT_FAILED_MSG = "修改经手人信息失败"; + /** + * 用户角色模块关系信息 + * type = 50 + * */ + //添加用户角色模块关系信息失败 + public static final int USER_BUSINESS_ADD_FAILED_CODE = 5000000; + public static final String USER_BUSINESS_ADD_FAILED_MSG = "添加用户角色模块关系信息失败"; + //删除用户角色模块关系信息失败 + public static final int USER_BUSINESS_DELETE_FAILED_CODE = 5000001; + public static final String USER_BUSINESS_DELETE_FAILED_MSG = "删除用户角色模块关系信息失败"; + //修改用户角色模块关系信息失败 + public static final int USER_BUSINESS_EDIT_FAILED_CODE = 5000002; + public static final String USER_BUSINESS_EDIT_FAILED_MSG = "修改用户角色模块关系信息失败"; + /** + * 系统参数信息 + * type = 55 + * */ + //添加系统参数信息失败 + public static final int SYSTEM_CONFIG_ADD_FAILED_CODE = 5500000; + public static final String SYSTEM_CONFIG_ADD_FAILED_MSG = "添加系统参数信息失败"; + //删除系统参数信息失败 + public static final int SYSTEM_CONFIG_DELETE_FAILED_CODE = 5500001; + public static final String SYSTEM_CONFIG_DELETE_FAILED_MSG = "删除系统参数信息失败"; + //修改系统参数信息失败 + public static final int SYSTEM_CONFIG_EDIT_FAILED_CODE = 5500002; + public static final String SYSTEM_CONFIG_EDIT_FAILED_MSG = "修改系统参数信息失败"; + /** + * 商品扩展信息 + * type = 60 + * */ + //添加商品扩展信息失败 + public static final int MATERIAL_PROPERTY_ADD_FAILED_CODE = 6000000; + public static final String MATERIAL_PROPERTY_ADD_FAILED_MSG = "添加商品扩展信息失败"; + //删除商品扩展信息失败 + public static final int MATERIAL_PROPERTY_DELETE_FAILED_CODE = 6000001; + public static final String MATERIAL_PROPERTY_DELETE_FAILED_MSG = "删除商品扩展信息失败"; + //修改商品扩展信息失败 + public static final int MATERIAL_PROPERTY_EDIT_FAILED_CODE = 6000002; + public static final String MATERIAL_PROPERTY_EDIT_FAILED_MSG = "修改商品扩展信息失败"; + /** + * 账户信息 + * type = 65 + * */ + //添加账户信息失败 + public static final int ACCOUNT_ADD_FAILED_CODE = 6500000; + public static final String ACCOUNT_ADD_FAILED_MSG = "添加账户信息失败"; + //删除账户信息失败 + public static final int ACCOUNT_DELETE_FAILED_CODE = 6500001; + public static final String ACCOUNT_DELETE_FAILED_MSG = "删除账户信息失败"; + //修改账户信息失败 + public static final int ACCOUNT_EDIT_FAILED_CODE = 6500002; + public static final String ACCOUNT_EDIT_FAILED_MSG = "修改账户信息失败"; + /** + * 供应商信息 + * type = 70 + * */ + //添加供应商信息失败 + public static final int SUPPLIER_ADD_FAILED_CODE = 7000000; + public static final String SUPPLIER_ADD_FAILED_MSG = "添加供应商信息失败"; + //删除供应商信息失败 + public static final int SUPPLIER_DELETE_FAILED_CODE = 7000001; + public static final String SUPPLIER_DELETE_FAILED_MSG = "删除供应商信息失败"; + //修改供应商信息失败 + public static final int SUPPLIER_EDIT_FAILED_CODE = 7000002; + public static final String SUPPLIER_EDIT_FAILED_MSG = "修改供应商信息失败"; + /** + * 商品类别信息 + * type = 75 + * */ + //添加商品类别信息失败 + public static final int MATERIAL_CATEGORY_ADD_FAILED_CODE = 7500000; + public static final String MATERIAL_CATEGORY_ADD_FAILED_MSG = "添加商品类别信息失败"; + //删除商品类别信息失败 + public static final int MATERIAL_CATEGORY_DELETE_FAILED_CODE = 7500001; + public static final String MATERIAL_CATEGORY_DELETE_FAILED_MSG = "删除商品类别信息失败"; + //修改商品类别信息失败 + public static final int MATERIAL_CATEGORY_EDIT_FAILED_CODE = 7500002; + public static final String MATERIAL_CATEGORY_EDIT_FAILED_MSG = "修改商品类别信息失败"; + //商品类别编号已存在 + public static final int MATERIAL_CATEGORY_SERIAL_ALREADY_EXISTS_CODE = 7500003; + public static final String MATERIAL_CATEGORY_SERIAL_ALREADY_EXISTS_MSG = "商品类别编号已存在"; + //根目录不支持修改 + public static final int MATERIAL_CATEGORY_ROOT_NOT_SUPPORT_EDIT_CODE = 7500004; + public static final String MATERIAL_CATEGORY_ROOT_NOT_SUPPORT_EDIT_MSG = "根目录不支持修改"; + //根目录不支持删除 + public static final int MATERIAL_CATEGORY_ROOT_NOT_SUPPORT_DELETE_CODE = 7500005; + public static final String MATERIAL_CATEGORY_ROOT_NOT_SUPPORT_DELETE_MSG = "根目录不支持删除"; + /** + * 商品信息 + * type = 80 + * */ + //添加商品信息信息失败 + public static final int MATERIAL_ADD_FAILED_CODE = 7500000; + public static final String MATERIAL_ADD_FAILED_MSG = "添加商品信息失败"; + //删除商品信息失败 + public static final int MATERIAL_DELETE_FAILED_CODE = 7500001; + public static final String MATERIAL_DELETE_FAILED_MSG = "删除商品信息失败"; + //修改商品信息失败 + public static final int MATERIAL_EDIT_FAILED_CODE = 7500002; + public static final String MATERIAL_EDIT_FAILED_MSG = "修改商品信息失败"; + //商品信息不存在 + public static final int MATERIAL_NOT_EXISTS_CODE = 8000000; + public static final String MATERIAL_NOT_EXISTS_MSG = "商品信息不存在"; + //商品信息不唯一 + public static final int MATERIAL_NOT_ONLY_CODE = 8000001; + public static final String MATERIAL_NOT_ONLY_MSG = "商品信息不唯一"; + //该商品未开启序列号 + public static final int MATERIAL_NOT_ENABLE_SERIAL_NUMBER_CODE = 8000002; + public static final String MATERIAL_NOT_ENABLE_SERIAL_NUMBER_MSG = "该商品未开启序列号功能"; + //该商品已绑定序列号数量小于等于商品现有库存 + public static final int MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_CODE = 8000003; + public static final String MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_MSG = "该商品已绑定序列号数量大于等于商品现有库存"; + //商品库存不足 + public static final int MATERIAL_STOCK_NOT_ENOUGH_CODE = 8000004; + public static final String MATERIAL_STOCK_NOT_ENOUGH_MSG = "商品:%s库存不足"; + /** + * 单据信息 + * type = 85 + * */ + //添加单据信息失败 + public static final int DEPOT_HEAD_ADD_FAILED_CODE = 8500000; + public static final String DEPOT_HEAD_ADD_FAILED_MSG = "添加单据信息失败"; + //删除单据信息失败 + public static final int DEPOT_HEAD_DELETE_FAILED_CODE = 8500001; + public static final String DEPOT_HEAD_DELETE_FAILED_MSG = "删除单据信息失败"; + //修改单据信息失败 + public static final int DEPOT_HEAD_EDIT_FAILED_CODE = 8500002; + public static final String DEPOT_HEAD_EDIT_FAILED_MSG = "修改单据信息失败"; + //单据录入数量超出限制 + public static final int DEPOT_HEAD_OVER_LIMIT_FAILED_CODE = 8500003; + public static final String DEPOT_HEAD_OVER_LIMIT_FAILED_MSG = "单据录入数量超出限制,请联系管理员"; + //单据录入-仓库不能为空 + public static final int DEPOT_HEAD_DEPOT_FAILED_CODE = 8500004; + public static final String DEPOT_HEAD_DEPOT_FAILED_MSG = "仓库不能为空"; + //单据录入-调入仓库不能为空 + public static final int DEPOT_HEAD_ANOTHER_DEPOT_FAILED_CODE = 8500005; + public static final String DEPOT_HEAD_ANOTHER_DEPOT_FAILED_MSG = "调入仓库不能为空"; + /** + * 单据明细信息 + * type = 90 + * */ + //添加单据明细信息失败 + public static final int DEPOT_ITEM_ADD_FAILED_CODE = 9000000; + public static final String DEPOT_ITEM_ADD_FAILED_MSG = "添加单据明细信息失败"; + //删除单据明细信息失败 + public static final int DEPOT_ITEM_DELETE_FAILED_CODE = 9000001; + public static final String DEPOT_ITEM_DELETE_FAILED_MSG = "删除单据明细信息失败"; + //修改单据明细信息失败 + public static final int DEPOT_ITEM_EDIT_FAILED_CODE = 9000002; + public static final String DEPOT_ITEM_EDIT_FAILED_MSG = "修改单据明细信息失败"; + /** + * 财务信息 + * type = 95 + * */ + //添加财务信息失败 + public static final int ACCOUNT_HEAD_ADD_FAILED_CODE = 9500000; + public static final String ACCOUNT_HEAD_ADD_FAILED_MSG = "添加财务信息失败"; + //删除财务信息失败 + public static final int ACCOUNT_HEAD_DELETE_FAILED_CODE = 9500001; + public static final String ACCOUNT_HEAD_DELETE_FAILED_MSG = "删除财务信息失败"; + //修改财务信息失败 + public static final int ACCOUNT_HEAD_EDIT_FAILED_CODE = 9500002; + public static final String ACCOUNT_HEAD_EDIT_FAILED_MSG = "修改财务信息失败"; + /** + * 财务明细信息 + * type = 100 + * */ + //添加财务明细信息失败 + public static final int ACCOUNT_ITEM_ADD_FAILED_CODE = 10000000; + public static final String ACCOUNT_ITEM_ADD_FAILED_MSG = "添加财务明细信息失败"; + //删除财务明细信息失败 + public static final int ACCOUNT_ITEM_DELETE_FAILED_CODE = 10000001; + public static final String ACCOUNT_ITEM_DELETE_FAILED_MSG = "删除财务明细信息失败"; + //修改财务明细信息失败 + public static final int ACCOUNT_ITEM_EDIT_FAILED_CODE = 10000002; + public static final String ACCOUNT_ITEM_EDIT_FAILED_MSG = "修改财务明细信息失败"; + /** + * 序列号 + * type = 105 + * */ + /**序列号已存在*/ + public static final int SERIAL_NUMBERE_ALREADY_EXISTS_CODE = 10500000; + public static final String SERIAL_NUMBERE_ALREADY_EXISTS_MSG = "序列号已存在"; + /**序列号不能为为空*/ + public static final int SERIAL_NUMBERE_NOT_BE_EMPTY_CODE = 10500001; + public static final String SERIAL_NUMBERE_NOT_BE_EMPTY_MSG = "序列号不能为为空"; + /**商品%s下序列号不充足,请补充后重试*/ + public static final int MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_CODE = 10500002; + public static final String MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_MSG = "商品:%s下序列号不充足,请补充后重试"; + /**删序列号信息失败*/ + public static final int SERIAL_NUMBERE_DELETE_FAILED_CODE = 10500003; + public static final String SERIAL_NUMBERE_DELETE_FAILED_MSG = "删序列号信息失败"; + /** + * 机构信息 + * type = 110 + * */ + //添加机构信息失败 + public static final int ORGANIZATION_ADD_FAILED_CODE = 11000000; + public static final String ORGANIZATION_ADD_FAILED_MSG = "添加机构信息失败"; + //删除机构信息失败 + public static final int ORGANIZATION_DELETE_FAILED_CODE = 11000001; + public static final String ORGANIZATION_DELETE_FAILED_MSG = "删除机构信息失败"; + //修改机构信息失败 + public static final int ORGANIZATION_EDIT_FAILED_CODE = 11000002; + public static final String ORGANIZATION_EDIT_FAILED_MSG = "修改机构信息失败"; + //机构编号已存在 + public static final int ORGANIZATION_NO_ALREADY_EXISTS_CODE = 11000003; + public static final String ORGANIZATION_NO_ALREADY_EXISTS_MSG = "机构编号已存在"; + //根机构不允许删除 + public static final int ORGANIZATION_ROOT_NOT_ALLOWED_DELETE_CODE = 11000004; + public static final String ORGANIZATION_ROOT_NOT_ALLOWED_DELETE_MSG = "根机构不允许删除"; + //根机构不允许修改 + public static final int ORGANIZATION_ROOT_NOT_ALLOWED_EDIT_CODE = 11000005; + public static final String ORGANIZATION_ROOT_NOT_ALLOWED_EDIT_MSG = "根机构不允许修改"; + /** + * 机构用户关联关系 + * type = 115 + * */ + //添加机构用户关联关系失败 + public static final int ORGA_USER_REL_ADD_FAILED_CODE = 11500000; + public static final String ORGA_USER_REL_ADD_FAILED_MSG = "添加机构用户关联关系失败"; + //删除机构用户关联关系失败 + public static final int ORGA_USER_REL_DELETE_FAILED_CODE = 11500001; + public static final String ORGA_USER_REL_DELETE_FAILED_MSG = "删除机构用户关联关系失败"; + //修改机构用户关联关系失败 + public static final int ORGA_USER_REL_EDIT_FAILED_CODE = 11500002; + public static final String ORGA_USER_REL_EDIT_FAILED_MSG = "修改机构用户关联关系失败"; + + //演示用户禁止操作 + public static final int SYSTEM_CONFIG_TEST_USER_CODE = -1; + public static final String SYSTEM_CONFIG_TEST_USER_MSG = "演示用户禁止操作"; + + + /** + * 标准正常返回/操作成功返回 + * @return + */ + public static JSONObject standardSuccess () { + JSONObject success = new JSONObject(); + success.put(GLOBAL_RETURNS_CODE, SERVICE_SUCCESS_CODE); + success.put(GLOBAL_RETURNS_MESSAGE, SERVICE_SUCCESS_MSG); + return success; + } + + public static JSONObject standardErrorUserOver () { + JSONObject success = new JSONObject(); + success.put(GLOBAL_RETURNS_CODE, USER_OVER_LIMIT_FAILED_CODE); + success.put(GLOBAL_RETURNS_MESSAGE, USER_OVER_LIMIT_FAILED_MSG); + return success; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/AccountController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/AccountController.java new file mode 100644 index 000000000..996454c06 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/AccountController.java @@ -0,0 +1,166 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.Account; +import com.jsh.erp.datasource.vo.AccountVo4InOutList; +import com.jsh.erp.datasource.vo.AccountVo4List; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.account.AccountService; +import com.jsh.erp.utils.BaseResponseInfo; +import com.jsh.erp.utils.ErpInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.jsh.erp.utils.ResponseJsonUtil.returnJson; + +/** + * @author jishenghua 75271*8920 + */ +@RestController +@RequestMapping(value = "/account") +public class AccountController { + private Logger logger = LoggerFactory.getLogger(AccountController.class); + + @Resource + private AccountService accountService; + + /** + * 查找结算账户信息-下拉框 + * @param request + * @return + */ + @GetMapping(value = "/findBySelect") + public String findBySelect(HttpServletRequest request) throws Exception { + String res = null; + try { + List dataList = accountService.findBySelect(); + //存放数据json数组 + JSONArray dataArray = new JSONArray(); + if (null != dataList) { + for (Account account : dataList) { + JSONObject item = new JSONObject(); + item.put("Id", account.getId()); + //结算账户名称 + item.put("AccountName", account.getName()); + dataArray.add(item); + } + } + res = dataArray.toJSONString(); + } catch(Exception e){ + e.printStackTrace(); + res = "获取数据失败"; + } + return res; + } + + /** + * 获取所有结算账户 + * @param request + * @return + */ + @GetMapping(value = "/getAccount") + public BaseResponseInfo getAccount(HttpServletRequest request) throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + List accountList = accountService.getAccount(); + map.put("accountList", accountList); + res.code = 200; + res.data = map; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 账户流水信息 + * @param currentPage + * @param pageSize + * @param accountId + * @param initialAmount + * @param request + * @return + */ + @GetMapping(value = "/findAccountInOutList") + public BaseResponseInfo findAccountInOutList(@RequestParam("currentPage") Integer currentPage, + @RequestParam("pageSize") Integer pageSize, + @RequestParam("accountId") Long accountId, + @RequestParam("initialAmount") BigDecimal initialAmount, + HttpServletRequest request) throws Exception{ + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + List dataList = accountService.findAccountInOutList(accountId, (currentPage-1)*pageSize, pageSize); + int total = accountService.findAccountInOutListCount(accountId); + map.put("total", total); + //存放数据json数组 + JSONArray dataArray = new JSONArray(); + if (null != dataList) { + for (AccountVo4InOutList aEx : dataList) { + String timeStr = aEx.getOperTime().toString(); + BigDecimal balance = accountService.getAccountSum(accountId, timeStr, "date").add(accountService.getAccountSumByHead(accountId, timeStr, "date")) + .add(accountService.getAccountSumByDetail(accountId, timeStr, "date")).add(accountService.getManyAccountSum(accountId, timeStr, "date")).add(initialAmount); + aEx.setBalance(balance); + dataArray.add(aEx); + } + } + map.put("rows", dataArray); + res.code = 200; + res.data = map; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + @PostMapping(value = "/updateIsDefault") + public String updateIsDefault(@RequestBody JSONObject object, + HttpServletRequest request) throws Exception{ + Long accountId = object.getLong("id"); + Map objectMap = new HashMap<>(); + int res = accountService.updateIsDefault(accountId); + if(res > 0) { + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } else { + return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code); + } + } + + /** + * 结算账户的统计 + * @param request + * @return + */ + @GetMapping(value = "/getStatistics") + public BaseResponseInfo getStatistics(@RequestParam("name") String name, + @RequestParam("serialNo") String serialNo, + HttpServletRequest request) throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + try { + Map map = accountService.getStatistics(name, serialNo); + res.code = 200; + res.data = map; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/AccountHeadController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/AccountHeadController.java new file mode 100644 index 000000000..1573967f8 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/AccountHeadController.java @@ -0,0 +1,117 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.AccountHeadVo4Body; +import com.jsh.erp.datasource.entities.AccountHeadVo4ListEx; +import com.jsh.erp.service.accountHead.AccountHeadService; +import com.jsh.erp.utils.BaseResponseInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author jishenghua 752*718*920 + */ +@RestController +@RequestMapping(value = "/accountHead") +public class AccountHeadController { + private Logger logger = LoggerFactory.getLogger(AccountHeadController.class); + + @Resource + private AccountHeadService accountHeadService; + + /** + * 新增财务主表及财务子表信息 + * @param body + * @param request + * @return + * @throws Exception + */ + @PostMapping(value = "/addAccountHeadAndDetail") + public Object addAccountHeadAndDetail(@RequestBody AccountHeadVo4Body body, HttpServletRequest request) throws Exception{ + JSONObject result = ExceptionConstants.standardSuccess(); + String beanJson = body.getInfo(); + String rows = body.getRows(); + accountHeadService.addAccountHeadAndDetail(beanJson,rows, request); + return result; + } + + /** + * 更新财务主表及财务子表信息 + * @param body + * @param request + * @return + * @throws Exception + */ + @PutMapping(value = "/updateAccountHeadAndDetail") + public Object updateAccountHeadAndDetail(@RequestBody AccountHeadVo4Body body, HttpServletRequest request) throws Exception{ + JSONObject result = ExceptionConstants.standardSuccess(); + String beanJson = body.getInfo(); + String rows = body.getRows(); + accountHeadService.updateAccountHeadAndDetail(beanJson,rows,request); + return result; + } + + /** + * 查询单位的累计应收和累计应付,收预付款不计入此处 + * @param supplierId + * @param endTime + * @param supType + * @param request + * @return + */ + @GetMapping(value = "/findTotalPay") + public BaseResponseInfo findTotalPay(@RequestParam("supplierId") Integer supplierId, + @RequestParam("endTime") String endTime, + @RequestParam("supType") String supType, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + JSONObject outer = new JSONObject(); + BigDecimal sum = accountHeadService.findTotalPay(supplierId, endTime, supType); + outer.put("getAllMoney", sum); + map.put("rows", outer); + res.code = 200; + res.data = map; + } catch (Exception e) { + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 根据编号查询单据信息 + * @param billNo + * @param request + * @return + */ + @GetMapping(value = "/getDetailByNumber") + public BaseResponseInfo getDetailByNumber(@RequestParam("billNo") String billNo, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + AccountHeadVo4ListEx ahl = new AccountHeadVo4ListEx(); + try { + List list = accountHeadService.getDetailByNumber(billNo); + if(list.size() == 1) { + ahl = list.get(0); + } + res.code = 200; + res.data = ahl; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/AccountItemController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/AccountItemController.java new file mode 100644 index 000000000..2e6e22c62 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/AccountItemController.java @@ -0,0 +1,70 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.datasource.vo.AccountItemVo4List; +import com.jsh.erp.service.accountItem.AccountItemService; +import com.jsh.erp.utils.BaseResponseInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author ji sheng hua 752*718*920 + */ +@RestController +@RequestMapping(value = "/accountItem") +public class AccountItemController { + private Logger logger = LoggerFactory.getLogger(AccountItemController.class); + + @Resource + private AccountItemService accountItemService; + + @GetMapping(value = "/getDetailList") + public BaseResponseInfo getDetailList(@RequestParam("headerId") Long headerId, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + try { + List dataList = new ArrayList<>(); + if(headerId != 0) { + dataList = accountItemService.getDetailList(headerId); + } + JSONObject outer = new JSONObject(); + outer.put("total", dataList.size()); + //存放数据json数组 + JSONArray dataArray = new JSONArray(); + if (null != dataList) { + for (AccountItemVo4List ai : dataList) { + JSONObject item = new JSONObject(); + item.put("accountId", ai.getAccountId()); + item.put("accountName", ai.getAccountName()); + item.put("inOutItemId", ai.getInOutItemId()); + item.put("inOutItemName", ai.getInOutItemName()); + BigDecimal eachAmount = ai.getEachAmount(); + item.put("eachAmount", (eachAmount.compareTo(BigDecimal.ZERO))==-1 ? BigDecimal.ZERO.subtract(eachAmount): eachAmount); + item.put("remark", ai.getRemark()); + dataArray.add(item); + } + } + outer.put("rows", dataArray); + res.code = 200; + res.data = outer; + } catch (Exception e) { + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/DepotController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/DepotController.java new file mode 100644 index 000000000..195fdbd86 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/DepotController.java @@ -0,0 +1,193 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.Depot; +import com.jsh.erp.datasource.entities.DepotEx; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.depot.DepotService; +import com.jsh.erp.service.material.MaterialService; +import com.jsh.erp.service.systemConfig.SystemConfigService; +import com.jsh.erp.service.userBusiness.UserBusinessService; +import com.jsh.erp.utils.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.dao.DataAccessException; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.*; + +import static com.jsh.erp.utils.ResponseJsonUtil.returnJson; + +/** + * @author ji sheng hua 752*718*920 + */ +@RestController +@RequestMapping(value = "/depot") +public class DepotController { + private Logger logger = LoggerFactory.getLogger(DepotController.class); + + @Resource + private DepotService depotService; + + @Resource + private UserBusinessService userBusinessService; + + @Resource + private SystemConfigService systemConfigService; + + @Resource + private MaterialService materialService; + + @GetMapping(value = "/getAllList") + public BaseResponseInfo getAllList(HttpServletRequest request) throws Exception{ + BaseResponseInfo res = new BaseResponseInfo(); + try { + List depotList = depotService.getAllList(); + res.code = 200; + res.data = depotList; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 用户对应仓库显示 + * @param type + * @param keyId + * @param request + * @return + */ + @PostMapping(value = "/findUserDepot") + public JSONArray findUserDepot(@RequestParam("UBType") String type, @RequestParam("UBKeyId") String keyId, + HttpServletRequest request) throws Exception{ + JSONArray arr = new JSONArray(); + try { + List dataList = depotService.findUserDepot(); + //开始拼接json数据 + JSONObject outer = new JSONObject(); + outer.put("id", 1); + outer.put("text", "仓库列表"); + outer.put("state", "open"); + //存放数据json数组 + JSONArray dataArray = new JSONArray(); + if (null != dataList) { + for (Depot depot : dataList) { + JSONObject item = new JSONObject(); + item.put("id", depot.getId()); + item.put("text", depot.getName()); + //勾选判断1 + Boolean flag = false; + try { + flag = userBusinessService.checkIsUserBusinessExist(type, keyId, "[" + depot.getId().toString() + "]"); + } catch (Exception e) { + logger.error(">>>>>>>>>>>>>>>>>设置用户对应的仓库:类型" + type + " KeyId为: " + keyId + " 存在异常!"); + } + if (flag == true) { + item.put("checked", true); + } + //结束 + dataArray.add(item); + } + } + outer.put("children", dataArray); + arr.add(outer); + } catch (Exception e) { + e.printStackTrace(); + } + return arr; + } + + /** + * 获取用户拥有权限的仓库列表 + * @param type + * @param keyId + * @param request + * @return + * @throws Exception + */ + @GetMapping(value = "/findDepotByUserId") + public JSONArray findDepotByUserId(@RequestParam("UBType") String type, @RequestParam("UBKeyId") String keyId, + HttpServletRequest request) throws Exception{ + JSONArray arr = new JSONArray(); + try { + List dataList = depotService.findUserDepot(); + //开始拼接json数据 + if (null != dataList) { + boolean depotFlag = systemConfigService.getDepotFlag(); + for (Depot depot : dataList) { + JSONObject item = new JSONObject(); + //勾选判断1 + Boolean flag = false; + try { + flag = userBusinessService.checkIsUserBusinessExist(type, keyId, "[" + depot.getId().toString() + "]"); + } catch (DataAccessException e) { + logger.error(">>>>>>>>>>>>>>>>>查询用户对应的仓库:类型" + type + " KeyId为: " + keyId + " 存在异常!"); + } + if (!depotFlag || flag) { + item.put("id", depot.getId()); + item.put("depotName", depot.getName()); + arr.add(item); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return arr; + } + + @PostMapping(value = "/updateIsDefault") + public String updateIsDefault(@RequestBody JSONObject object, + HttpServletRequest request) throws Exception{ + Long depotId = object.getLong("id"); + Map objectMap = new HashMap<>(); + int res = depotService.updateIsDefault(depotId); + if(res > 0) { + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } else { + return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code); + } + } + + @GetMapping(value = "/getAllListWithStock") + public BaseResponseInfo getAllList(@RequestParam("mId") Long mId, + HttpServletRequest request) { + BaseResponseInfo res = new BaseResponseInfo(); + try { + List list = depotService.getAllList(); + List depotList = new ArrayList(); + for(Depot depot: list) { + DepotEx de = new DepotEx(); + if(mId!=0) { + BigDecimal initStock = materialService.getInitStock(mId, depot.getId()); + BigDecimal currentStock = materialService.getCurrentStock(mId, depot.getId()); + de.setInitStock(initStock); + de.setCurrentStock(currentStock); + } else { + de.setInitStock(BigDecimal.ZERO); + de.setCurrentStock(BigDecimal.ZERO); + } + de.setId(depot.getId()); + de.setName(depot.getName()); + depotList.add(de); + } + res.code = 200; + res.data = depotList; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/DepotHeadController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/DepotHeadController.java new file mode 100644 index 000000000..7beb23944 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/DepotHeadController.java @@ -0,0 +1,420 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.DepotHead; +import com.jsh.erp.datasource.entities.DepotHeadVo4Body; +import com.jsh.erp.datasource.vo.DepotHeadVo4InDetail; +import com.jsh.erp.datasource.vo.DepotHeadVo4InOutMCount; +import com.jsh.erp.datasource.vo.DepotHeadVo4List; +import com.jsh.erp.datasource.vo.DepotHeadVo4StatementAccount; +import com.jsh.erp.exception.BusinessParamCheckingException; +import com.jsh.erp.service.depotHead.DepotHeadService; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.redis.RedisService; +import com.jsh.erp.utils.BaseResponseInfo; +import com.jsh.erp.utils.ErpInfo; +import com.jsh.erp.utils.StringUtil; +import com.jsh.erp.utils.Tools; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.sql.Date; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.jsh.erp.utils.ResponseJsonUtil.returnJson; +import static com.jsh.erp.utils.Tools.getNow3; + +/** + * @author ji-sheng-hua 752*718*920 + */ +@RestController +@RequestMapping(value = "/depotHead") +public class DepotHeadController { + private Logger logger = LoggerFactory.getLogger(DepotHeadController.class); + + @Resource + private DepotHeadService depotHeadService; + + @Resource + private RedisService redisService; + + /** + * 批量设置状态-审核或者反审核 + * @param jsonObject + * @param request + * @return + */ + @PostMapping(value = "/batchSetStatus") + public String batchSetStatus(@RequestBody JSONObject jsonObject, + HttpServletRequest request) throws Exception{ + Map objectMap = new HashMap<>(); + String status = jsonObject.getString("status"); + String ids = jsonObject.getString("ids"); + int res = depotHeadService.batchSetStatus(status, ids); + if(res > 0) { + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } else { + return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code); + } + } + + /** + * 入库出库明细接口 + * @param currentPage + * @param pageSize + * @param oId + * @param materialParam + * @param depotId + * @param beginTime + * @param endTime + * @param type + * @param request + * @return + */ + @GetMapping(value = "/findInDetail") + public BaseResponseInfo findInDetail(@RequestParam("currentPage") Integer currentPage, + @RequestParam("pageSize") Integer pageSize, + @RequestParam("organId") Integer oId, + @RequestParam("materialParam") String materialParam, + @RequestParam("depotId") Integer depotId, + @RequestParam("beginTime") String beginTime, + @RequestParam("endTime") String endTime, + @RequestParam("type") String type, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + List resList = new ArrayList(); + List list = depotHeadService.findByAll(beginTime, endTime, type, materialParam, depotId, oId, (currentPage-1)*pageSize, pageSize); + int total = depotHeadService.findByAllCount(beginTime, endTime, type, materialParam, depotId, oId); + map.put("total", total); + //存放数据json数组 + if (null != list) { + for (DepotHeadVo4InDetail dhd : list) { + resList.add(dhd); + } + } + map.put("rows", resList); + res.code = 200; + res.data = map; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 入库出库统计接口 + * @param currentPage + * @param pageSize + * @param oId + * @param materialParam + * @param depotId + * @param beginTime + * @param endTime + * @param type + * @param request + * @return + */ + @GetMapping(value = "/findInOutMaterialCount") + public BaseResponseInfo findInOutMaterialCount(@RequestParam("currentPage") Integer currentPage, + @RequestParam("pageSize") Integer pageSize, + @RequestParam("organId") Integer oId, + @RequestParam("materialParam") String materialParam, + @RequestParam("depotId") Integer depotId, + @RequestParam("beginTime") String beginTime, + @RequestParam("endTime") String endTime, + @RequestParam("type") String type, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + List resList = new ArrayList<>(); + List list = depotHeadService.findInOutMaterialCount(beginTime, endTime, type, materialParam, depotId, oId, (currentPage-1)*pageSize, pageSize); + int total = depotHeadService.findInOutMaterialCountTotal(beginTime, endTime, type, materialParam, depotId, oId); + map.put("total", total); + //存放数据json数组 + if (null != list) { + for (DepotHeadVo4InOutMCount dhc : list) { + resList.add(dhc); + } + } + map.put("rows", resList); + res.code = 200; + res.data = map; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 对账单接口 + * @param currentPage + * @param pageSize + * @param beginTime + * @param endTime + * @param organId + * @param supType + * @param request + * @return + */ + @GetMapping(value = "/findStatementAccount") + public BaseResponseInfo findStatementAccount(@RequestParam("currentPage") Integer currentPage, + @RequestParam("pageSize") Integer pageSize, + @RequestParam("beginTime") String beginTime, + @RequestParam("endTime") String endTime, + @RequestParam("organId") Integer organId, + @RequestParam("supType") String supType, + HttpServletRequest request) throws Exception{ + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + int j = 1; + if (supType.equals("客户")) { //客户 + j = 1; + } else if (supType.equals("供应商")) { //供应商 + j = -1; + } + List resList = new ArrayList(); + List list = depotHeadService.findStatementAccount(beginTime, endTime, organId, supType, (currentPage-1)*pageSize, pageSize); + int total = depotHeadService.findStatementAccountCount(beginTime, endTime, organId, supType); + map.put("total", total); + //存放数据json数组 + if (null != list) { + for (DepotHeadVo4StatementAccount dha : list) { + dha.setNumber(dha.getNumber()); //单据编号 + dha.setType(dha.getType()); //类型 + String type = dha.getType(); + BigDecimal p1 = BigDecimal.ZERO ; + BigDecimal p2 = BigDecimal.ZERO; + if (dha.getDiscountLastMoney() != null) { + p1 = dha.getDiscountLastMoney(); + } + if (dha.getChangeAmount() != null) { + p2 = dha.getChangeAmount(); + } + BigDecimal allPrice = BigDecimal.ZERO; + if ((p1.compareTo(BigDecimal.ZERO))==-1) { + p1 = p1.abs(); + } + if(dha.getOtherMoney()!=null) { + p1 = p1.add(dha.getOtherMoney()); //与其它费用相加 + } + if ((p2 .compareTo(BigDecimal.ZERO))==-1) { + p2 = p2.abs(); + } + if (type.equals("采购入库")) { + allPrice = p2.subtract(p1); + } else if (type.equals("销售退货入库")) { + allPrice = p2.subtract(p1); + } else if (type.equals("销售出库")) { + allPrice = p1.subtract(p2); + } else if (type.equals("采购退货出库")) { + allPrice = p1.subtract(p2); + } else if (type.equals("付款")) { + allPrice = p1.add(p2); + } else if (type.equals("收款")) { + allPrice = BigDecimal.ZERO.subtract(p1.add(p2)); + } else if (type.equals("收入")) { + allPrice = p1.subtract(p2); + } else if (type.equals("支出")) { + allPrice = p2.subtract(p1); + } + dha.setBillMoney(p1); //单据金额 + dha.setChangeAmount(p2); //实际支付 + DecimalFormat df = new DecimalFormat(".##"); + dha.setAllPrice(new BigDecimal(df.format(allPrice.multiply(new BigDecimal(j))))); //本期变化 + dha.setSupplierName(dha.getSupplierName()); //单位名称 + dha.setoTime(dha.getoTime()); //单据日期 + resList.add(dha); + } + } + map.put("rows", resList); + res.code = 200; + res.data = map; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 查询单位的累计应收和累计应付,零售不能计入 + * @param supplierId + * @param endTime + * @param supType + * @param request + * @return + */ + @GetMapping(value = "/findTotalPay") + public BaseResponseInfo findTotalPay(@RequestParam("supplierId") Integer supplierId, + @RequestParam("endTime") String endTime, + @RequestParam("supType") String supType, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + JSONObject outer = new JSONObject(); + BigDecimal sum = depotHeadService.findTotalPay(supplierId, endTime, supType); + outer.put("getAllMoney", sum); + map.put("rows", outer); + res.code = 200; + res.data = map; + } catch (Exception e) { + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 根据编号查询单据信息 + * @param number + * @param request + * @return + */ + @GetMapping(value = "/getDetailByNumber") + public BaseResponseInfo getDetailByNumber(@RequestParam("number") String number, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + DepotHeadVo4List dhl = new DepotHeadVo4List(); + try { + List list = depotHeadService.getDetailByNumber(number); + if(list.size() == 1) { + dhl = list.get(0); + } + res.code = 200; + res.data = dhl; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 新增单据主表及单据子表信息 + * @param body + * @param request + * @return + * @throws Exception + */ + @PostMapping(value = "/addDepotHeadAndDetail") + public Object addDepotHeadAndDetail(@RequestBody DepotHeadVo4Body body, HttpServletRequest request) throws Exception{ + JSONObject result = ExceptionConstants.standardSuccess(); + String beanJson = body.getInfo(); + String rows = body.getRows(); + Long billsNumLimit = Long.parseLong(redisService.getObjectFromSessionByKey(request,"billsNumLimit").toString()); + Long tenantId = Long.parseLong(redisService.getObjectFromSessionByKey(request,"tenantId").toString()); + Long count = depotHeadService.countDepotHead(null,null,null,null,null,null,null,null,null); + if(count>= billsNumLimit) { + throw new BusinessParamCheckingException(ExceptionConstants.DEPOT_HEAD_OVER_LIMIT_FAILED_CODE, + ExceptionConstants.DEPOT_HEAD_OVER_LIMIT_FAILED_MSG); + } else { + depotHeadService.addDepotHeadAndDetail(beanJson,rows,tenantId, request); + } + return result; + } + + /** + * 更新单据主表及单据子表信息 + * @param body + * @param request + * @return + * @throws Exception + */ + @PutMapping(value = "/updateDepotHeadAndDetail") + public Object updateDepotHeadAndDetail(@RequestBody DepotHeadVo4Body body, HttpServletRequest request) throws Exception{ + Long tenantId = Long.parseLong(redisService.getObjectFromSessionByKey(request,"tenantId").toString()); + JSONObject result = ExceptionConstants.standardSuccess(); + String beanJson = body.getInfo(); + String rows = body.getRows(); + BigDecimal preTotalPrice = body.getPreTotalPrice(); + depotHeadService.updateDepotHeadAndDetail(beanJson,rows,preTotalPrice,tenantId,request); + return result; + } + + /** + * 统计今日销售额、今日进货额、本月销售额、本月进货额 + * @param request + * @return + */ + @GetMapping(value = "/getBuyAndSaleStatistics") + public BaseResponseInfo getBuyAndSaleStatistics(HttpServletRequest request) { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + String today = Tools.getNow() + " 00:00:00"; + String firstDay = Tools.getCurrentMonth() + "-01 00:00:00"; + BigDecimal todaySale = depotHeadService.getBuyAndSaleStatistics("出库", "销售", + 1, today, getNow3()); //今日销售出库 + BigDecimal todayRetailSale = depotHeadService.getBuyAndSaleRetailStatistics("出库", "零售", + 0, today, getNow3()); //今日零售出库 + BigDecimal todayBuy = depotHeadService.getBuyAndSaleStatistics("入库", "采购", + 1, today, getNow3()); //今日采购入库 + BigDecimal monthSale = depotHeadService.getBuyAndSaleStatistics("出库", "销售", + 1,firstDay, getNow3()); //本月销售出库 + BigDecimal monthRetailSale = depotHeadService.getBuyAndSaleRetailStatistics("出库", "零售", + 0,firstDay, getNow3()); //本月零售出库 + BigDecimal monthBuy = depotHeadService.getBuyAndSaleStatistics("入库", "采购", + 1, firstDay, getNow3()); //本月采购入库 + map.put("todaySale", todaySale.add(todayRetailSale)); + map.put("todayBuy", todayBuy); + map.put("thisMonthSale", monthSale.add(monthRetailSale)); + map.put("thisMonthBuy", monthBuy); + res.code = 200; + res.data = map; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 根据当前用户获取操作员数组,用于控制当前用户的数据权限,限制可以看到的单据范围 + * 注意:该接口提供给部分插件使用,勿删 + * @param request + * @return + */ + @GetMapping(value = "/getCreatorByCurrentUser") + public BaseResponseInfo getCreatorByRoleType(HttpServletRequest request) { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + String creator = ""; + String roleType = redisService.getObjectFromSessionByKey(request,"roleType").toString(); + if(StringUtil.isNotEmpty(roleType)) { + creator = depotHeadService.getCreatorByRoleType(roleType); + } + res.code = 200; + res.data = creator; + } catch (Exception e) { + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/DepotItemController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/DepotItemController.java new file mode 100644 index 000000000..fbc006bf4 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/DepotItemController.java @@ -0,0 +1,698 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.vo.DepotItemStockWarningCount; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.materialExtend.MaterialExtendService; +import com.jsh.erp.service.depotItem.DepotItemService; +import com.jsh.erp.service.material.MaterialService; +import com.jsh.erp.service.redis.RedisService; +import com.jsh.erp.service.unit.UnitService; +import com.jsh.erp.utils.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +import static com.jsh.erp.utils.ResponseJsonUtil.returnJson; + +/** + * @author ji-sheng-hua 华夏erp + */ +@RestController +@RequestMapping(value = "/depotItem") +public class DepotItemController { + private Logger logger = LoggerFactory.getLogger(DepotItemController.class); + + @Resource + private DepotItemService depotItemService; + + @Resource + private MaterialService materialService; + + @Resource + private MaterialExtendService materialExtendService; + + @Resource + private UnitService unitService; + + @Resource + private RedisService redisService; + + /** + * 只根据商品id查询单据列表 + * @param mId + * @param request + * @return + */ + @GetMapping(value = "/findDetailByTypeAndMaterialId") + public String findDetailByTypeAndMaterialId( + @RequestParam(value = Constants.PAGE_SIZE, required = false) Integer pageSize, + @RequestParam(value = Constants.CURRENT_PAGE, required = false) Integer currentPage, + @RequestParam("materialId") String mId, HttpServletRequest request)throws Exception { + Map parameterMap = ParamUtils.requestToMap(request); + parameterMap.put("mId", mId); + PageQueryInfo queryInfo = new PageQueryInfo(); + Map objectMap = new HashMap(); + if (pageSize != null && pageSize <= 0) { + pageSize = 10; + } + String offset = ParamUtils.getPageOffset(currentPage, pageSize); + if (StringUtil.isNotEmpty(offset)) { + parameterMap.put(Constants.OFFSET, offset); + } + List list = depotItemService.findDetailByTypeAndMaterialIdList(parameterMap); + JSONArray dataArray = new JSONArray(); + if (list != null) { + for (DepotItemVo4DetailByTypeAndMId d: list) { + JSONObject item = new JSONObject(); + item.put("Number", d.getNumber()); //商品编号 + String type = d.getType(); + String subType = d.getSubType(); + if(("其它").equals(type)) { + item.put("Type", subType); //进出类型 + } else { + item.put("Type", subType + type); //进出类型 + } + item.put("depotName", d.getDepotName()); //仓库名称 + item.put("BasicNumber", d.getBnum()); //数量 + item.put("OperTime", d.getOtime().getTime()); //时间 + dataArray.add(item); + } + } + objectMap.put("page", queryInfo); + if (list == null) { + queryInfo.setRows(new ArrayList()); + queryInfo.setTotal(BusinessConstants.DEFAULT_LIST_NULL_NUMBER); + return returnJson(objectMap, "查找不到数据", ErpInfo.OK.code); + } + queryInfo.setRows(dataArray); + queryInfo.setTotal(depotItemService.findDetailByTypeAndMaterialIdCounts(parameterMap)); + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } + + /** + * 根据商品条码和仓库id查询库存数量 + * @param depotId + * @param barCode + * @param request + * @return + * @throws Exception + */ + @GetMapping(value = "/findStockByDepotAndBarCode") + public BaseResponseInfo findStockByDepotAndBarCode( + @RequestParam("depotId") Long depotId, + @RequestParam("barCode") String barCode, + HttpServletRequest request) throws Exception{ + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + BigDecimal stock = BigDecimal.ZERO; + Long tenantId = Long.parseLong(redisService.getObjectFromSessionByKey(request,"tenantId").toString()); + List list = materialService.getMaterialByBarCode(barCode); + if(list!=null && list.size()>0) { + MaterialVo4Unit materialVo4Unit = list.get(0); + stock = depotItemService.getStockByParam(depotId,materialVo4Unit.getId(),null,null,tenantId); + String commodityUnit = materialVo4Unit.getCommodityUnit(); + Long unitId = materialVo4Unit.getUnitId(); + if(unitId!=null) { + Integer ratio = 1; + Unit unit = unitService.getUnit(unitId); + if(commodityUnit.equals(unit.getOtherUnit())){ + ratio = unit.getRatio(); + if(ratio!=0) { + stock = stock.divide(BigDecimal.valueOf(ratio),2,BigDecimal.ROUND_HALF_UP); //两位小数 + } + } + } + } + map.put("stock", stock); + res.code = 200; + res.data = map; + } catch (Exception e) { + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + @GetMapping(value = "/getDetailList") + public BaseResponseInfo getDetailList(@RequestParam("headerId") Long headerId, + @RequestParam("mpList") String mpList, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Long tenantId = Long.parseLong(redisService.getObjectFromSessionByKey(request,"tenantId").toString()); + try { + List dataList = new ArrayList(); + if(headerId != 0) { + dataList = depotItemService.getDetailList(headerId); + } + String[] mpArr = mpList.split(","); + JSONObject outer = new JSONObject(); + outer.put("total", dataList.size()); + //存放数据json数组 + JSONArray dataArray = new JSONArray(); + if (null != dataList) { + for (DepotItemVo4WithInfoEx diEx : dataList) { + JSONObject item = new JSONObject(); + item.put("materialExtendId", diEx.getMaterialExtendId() == null ? "" : diEx.getMaterialExtendId()); + item.put("barCode", diEx.getBarCode()); + item.put("name", diEx.getMName()); + item.put("standard", diEx.getMStandard()); + item.put("model", diEx.getMModel()); + item.put("materialOther", getOtherInfo(mpArr, diEx)); + Integer ratio = diEx.getRatio(); + BigDecimal stock = depotItemService.getStockByParam(diEx.getDepotId(),diEx.getMaterialId(),null,null,tenantId); + if(ratio!=null){ + BigDecimal ratioDecimal = new BigDecimal(ratio.toString()); + if(ratioDecimal.compareTo(BigDecimal.ZERO)!=0){ + String otherUnit = diEx.getOtherUnit(); + if(otherUnit.equals(diEx.getMaterialUnit())) { + stock = stock.divide(ratioDecimal,2,BigDecimal.ROUND_HALF_UP); //两位小数 + } + } + } + item.put("stock", stock); + item.put("unit", diEx.getMaterialUnit()); + item.put("operNumber", diEx.getOperNumber()); + item.put("basicNumber", diEx.getBasicNumber()); + item.put("unitPrice", diEx.getUnitPrice()); + item.put("taxUnitPrice", diEx.getTaxUnitPrice()); + item.put("allPrice", diEx.getAllPrice()); + item.put("remark", diEx.getRemark()); + item.put("img", diEx.getImg()); + item.put("depotId", diEx.getDepotId() == null ? "" : diEx.getDepotId()); + item.put("depotName", diEx.getDepotId() == null ? "" : diEx.getDepotName()); + item.put("anotherDepotId", diEx.getAnotherDepotId() == null ? "" : diEx.getAnotherDepotId()); + item.put("anotherDepotName", diEx.getAnotherDepotId() == null ? "" : diEx.getAnotherDepotName()); + item.put("taxRate", diEx.getTaxRate()); + item.put("taxMoney", diEx.getTaxMoney()); + item.put("taxLastMoney", diEx.getTaxLastMoney()); + item.put("mType", diEx.getMaterialType()); + item.put("op", 1); + dataArray.add(item); + } + } + outer.put("rows", dataArray); + res.code = 200; + res.data = outer; + } catch (Exception e) { + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + + /** + * 获取扩展信息 + * + * @return + */ + public String getOtherInfo(String[] mpArr, DepotItemVo4WithInfoEx diEx)throws Exception { + String materialOther = ""; + for (int i = 0; i < mpArr.length; i++) { + if (mpArr[i].equals("制造商")) { + materialOther = materialOther + ((diEx.getMMfrs() == null || diEx.getMMfrs().equals("")) ? "" : "(" + diEx.getMMfrs() + ")"); + } + if (mpArr[i].equals("自定义1")) { + materialOther = materialOther + ((diEx.getMOtherField1() == null || diEx.getMOtherField1().equals("")) ? "" : "(" + diEx.getMOtherField1() + ")"); + } + if (mpArr[i].equals("自定义2")) { + materialOther = materialOther + ((diEx.getMOtherField2() == null || diEx.getMOtherField2().equals("")) ? "" : "(" + diEx.getMOtherField2() + ")"); + } + if (mpArr[i].equals("自定义3")) { + materialOther = materialOther + ((diEx.getMOtherField3() == null || diEx.getMOtherField3().equals("")) ? "" : "(" + diEx.getMOtherField3() + ")"); + } + } + return materialOther; + } + + /** + * 查找所有的明细 + * @param currentPage + * @param pageSize + * @param depotId + * @param monthTime + * @param materialParam + * @param mpList + * @param request + * @return + * @throws Exception + */ + @GetMapping(value = "/findByAll") + public BaseResponseInfo findByAll(@RequestParam("currentPage") Integer currentPage, + @RequestParam("pageSize") Integer pageSize, + @RequestParam("depotId") Long depotId, + @RequestParam("monthTime") String monthTime, + @RequestParam("materialParam") String materialParam, + @RequestParam("mpList") String mpList, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + Long tenantId = Long.parseLong(redisService.getObjectFromSessionByKey(request,"tenantId").toString()); + String timeA = monthTime+"-01 00:00:00"; + String timeB = Tools.lastDayOfMonth(monthTime)+" 23:59:59"; + try { + List dataList = depotItemService.findByAll(StringUtil.toNull(materialParam), + timeB,(currentPage-1)*pageSize, pageSize); + String[] mpArr = mpList.split(","); + int total = depotItemService.findByAllCount(StringUtil.toNull(materialParam), timeB); + map.put("total", total); + //存放数据json数组 + JSONArray dataArray = new JSONArray(); + if (null != dataList) { + List idList = new ArrayList(); + for (DepotItemVo4WithInfoEx m : dataList) { + idList.add(m.getMId()); + } + List meList = materialExtendService.getListByMIds(idList); + for (DepotItemVo4WithInfoEx diEx : dataList) { + JSONObject item = new JSONObject(); + Long mId = diEx.getMId(); + item.put("materialName", diEx.getMName()); + item.put("materialModel", diEx.getMModel()); + item.put("materialStandard", diEx.getMStandard()); + //扩展信息 + String materialOther = getOtherInfo(mpArr, diEx); + item.put("materialOther", materialOther); + item.put("materialColor", diEx.getMColor()); + item.put("unitName", getUName(diEx.getMaterialUnit(), diEx.getUnitName())); + + item.put("prevSum", depotItemService.getStockByParam(depotId,mId,null,timeA,tenantId)); + item.put("inSum", depotItemService.getInNumByParam(depotId,mId,timeA,timeB,tenantId)); + item.put("outSum", depotItemService.getOutNumByParam(depotId,mId,timeA,timeB,tenantId)); + BigDecimal thisSum = depotItemService.getStockByParam(depotId,mId,null,timeB,tenantId); + item.put("thisSum", thisSum); + for(MaterialExtend me:meList) { + if(me.getMaterialId().longValue() == diEx.getMId().longValue()) { + if(me.getPurchaseDecimal()!=null) { + item.put("unitPrice", me.getPurchaseDecimal()); + item.put("thisAllPrice", thisSum.multiply(me.getPurchaseDecimal())); + } + } + } + dataArray.add(item); + } + } + map.put("rows", dataArray); + res.code = 200; + res.data = map; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 导出excel表格 + * @param depotId + * @param monthTime + * @param materialParam + * @param request + * @param response + * @return + */ + @GetMapping(value = "/exportExcel") + public void exportExcel(@RequestParam("depotId") Long depotId, + @RequestParam("monthTime") String monthTime, + @RequestParam("materialParam") String materialParam, + HttpServletRequest request, HttpServletResponse response) throws Exception { + Long tenantId = Long.parseLong(redisService.getObjectFromSessionByKey(request,"tenantId").toString()); + String timeA = monthTime+"-01 00:00:00"; + String timeB = Tools.lastDayOfMonth(monthTime)+" 23:59:59"; + try { + List dataList = depotItemService.findByAll(StringUtil.toNull(materialParam), + timeB, null, null); + //存放数据json数组 + String[] names = {"名称", "规格", "型号", "单位", "单价", "上月结存数量", "入库数量", "出库数量", "本月结存数量", "结存金额"}; + String title = "库存报表"; + List objects = new ArrayList(); + if (null != dataList) { + for (DepotItemVo4WithInfoEx diEx : dataList) { + Long mId = diEx.getMId(); + String[] objs = new String[10]; + objs[0] = diEx.getMName(); + objs[1] = diEx.getMStandard(); + objs[2] = diEx.getMModel(); + objs[3] = diEx.getMaterialUnit(); + objs[4] = diEx.getPurchaseDecimal().toString(); + objs[5] = depotItemService.getStockByParam(depotId,mId,null,timeA,tenantId).toString(); + objs[6] = depotItemService.getInNumByParam(depotId,mId,timeA,timeB,tenantId).toString(); + objs[7] = depotItemService.getOutNumByParam(depotId,mId,timeA,timeB,tenantId).toString(); + BigDecimal thisSum = depotItemService.getStockByParam(depotId,mId,null,timeB,tenantId); + objs[8] = thisSum.toString(); + objs[9] = thisSum.multiply(diEx.getPurchaseDecimal()).toString(); + objects.add(objs); + } + } + File file = ExcelUtils.exportObjectsWithoutTitle(title, names, title, objects); + ExportExecUtil.showExec(file, file.getName() + "-" + monthTime, response); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 统计总计金额 + * @param depotId + * @param monthTime + * @param materialParam + * @param request + * @return + */ + @GetMapping(value = "/totalCountMoney") + public BaseResponseInfo totalCountMoney(@RequestParam("depotId") Long depotId, + @RequestParam("monthTime") String monthTime, + @RequestParam("materialParam") String materialParam, + HttpServletRequest request) throws Exception{ + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + Long tenantId = Long.parseLong(redisService.getObjectFromSessionByKey(request,"tenantId").toString()); + String endTime = Tools.lastDayOfMonth(monthTime)+" 23:59:59"; + try { + List dataList = depotItemService.findByAll(StringUtil.toNull(materialParam), + endTime, null, null); + BigDecimal thisAllPrice = BigDecimal.ZERO; + if (null != dataList) { + for (DepotItemVo4WithInfoEx diEx : dataList) { + Long mId = diEx.getMId(); + BigDecimal thisSum = depotItemService.getStockByParam(depotId,mId,null,endTime,tenantId); + BigDecimal unitPrice = diEx.getPurchaseDecimal(); + thisAllPrice = thisAllPrice.add(thisSum.multiply(unitPrice)); + } + } + map.put("totalCount", thisAllPrice); + res.code = 200; + res.data = map; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 进货统计 + * @param currentPage + * @param pageSize + * @param monthTime + * @param materialParam + * @param mpList + * @param request + * @return + */ + @GetMapping(value = "/buyIn") + public BaseResponseInfo buyIn(@RequestParam("currentPage") Integer currentPage, + @RequestParam("pageSize") Integer pageSize, + @RequestParam("monthTime") String monthTime, + @RequestParam("materialParam") String materialParam, + @RequestParam("mpList") String mpList, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + String endTime = Tools.lastDayOfMonth(monthTime)+" 23:59:59"; + try { + List dataList = depotItemService.findByAll(StringUtil.toNull(materialParam), + endTime, (currentPage-1)*pageSize, pageSize); + String[] mpArr = mpList.split(","); + int total = depotItemService.findByAllCount(StringUtil.toNull(materialParam), endTime); + map.put("total", total); + //存放数据json数组 + JSONArray dataArray = new JSONArray(); + if (null != dataList) { + for (DepotItemVo4WithInfoEx diEx : dataList) { + JSONObject item = new JSONObject(); + BigDecimal InSum = depotItemService.buyOrSale("入库", "采购", diEx.getMId(), monthTime, "number"); + BigDecimal OutSum = depotItemService.buyOrSale("出库", "采购退货", diEx.getMId(), monthTime, "number"); + BigDecimal InSumPrice = depotItemService.buyOrSale("入库", "采购", diEx.getMId(), monthTime, "price"); + BigDecimal OutSumPrice = depotItemService.buyOrSale("出库", "采购退货", diEx.getMId(), monthTime, "price"); + item.put("materialName", diEx.getMName()); + item.put("materialModel", diEx.getMModel()); + item.put("materialStandard", diEx.getMStandard()); + //扩展信息 + String materialOther = getOtherInfo(mpArr, diEx); + item.put("materialOther", materialOther); + item.put("materialColor", diEx.getMColor()); + item.put("materialUnit", diEx.getMaterialUnit()); + item.put("unitName", diEx.getUnitName()); + item.put("inSum", InSum); + item.put("outSum", OutSum); + item.put("inSumPrice", InSumPrice); + item.put("outSumPrice", OutSumPrice); + dataArray.add(item); + } + } + map.put("rows", dataArray); + res.code = 200; + res.data = map; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 销售统计 + * @param currentPage + * @param pageSize + * @param monthTime + * @param materialParam + * @param mpList + * @param request + * @return + */ + @GetMapping(value = "/saleOut") + public BaseResponseInfo saleOut(@RequestParam("currentPage") Integer currentPage, + @RequestParam("pageSize") Integer pageSize, + @RequestParam("monthTime") String monthTime, + @RequestParam("materialParam") String materialParam, + @RequestParam("mpList") String mpList, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + String endTime = Tools.lastDayOfMonth(monthTime)+" 23:59:59"; + try { + List dataList = depotItemService.findByAll(StringUtil.toNull(materialParam), + endTime,(currentPage-1)*pageSize, pageSize); + String[] mpArr = mpList.split(","); + int total = depotItemService.findByAllCount(StringUtil.toNull(materialParam), endTime); + map.put("total", total); + //存放数据json数组 + JSONArray dataArray = new JSONArray(); + if (null != dataList) { + for (DepotItemVo4WithInfoEx diEx : dataList) { + JSONObject item = new JSONObject(); + BigDecimal OutSumRetail = depotItemService.buyOrSale("出库", "零售", diEx.getMId(), monthTime,"number"); + BigDecimal OutSum = depotItemService.buyOrSale("出库", "销售", diEx.getMId(), monthTime,"number"); + BigDecimal InSumRetail = depotItemService.buyOrSale("入库", "零售退货", diEx.getMId(), monthTime,"number"); + BigDecimal InSum = depotItemService.buyOrSale("入库", "销售退货", diEx.getMId(), monthTime,"number"); + BigDecimal OutSumRetailPrice = depotItemService.buyOrSale("出库", "零售", diEx.getMId(), monthTime,"price"); + BigDecimal OutSumPrice = depotItemService.buyOrSale("出库", "销售", diEx.getMId(), monthTime,"price"); + BigDecimal InSumRetailPrice = depotItemService.buyOrSale("入库", "零售退货", diEx.getMId(), monthTime,"price"); + BigDecimal InSumPrice = depotItemService.buyOrSale("入库", "销售退货", diEx.getMId(), monthTime,"price"); + BigDecimal OutInSumPrice = (OutSumRetailPrice.add(OutSumPrice)).subtract(InSumRetailPrice.add(InSumPrice)); + item.put("materialName", diEx.getMName()); + item.put("materialModel", diEx.getMModel()); + item.put("materialStandard", diEx.getMStandard()); + //扩展信息 + String materialOther = getOtherInfo(mpArr, diEx); + item.put("materialOther", materialOther); + item.put("materialColor", diEx.getMColor()); + item.put("materialUnit", diEx.getMaterialUnit()); + item.put("unitName", diEx.getUnitName()); + item.put("outSum", OutSumRetail.add(OutSum)); + item.put("inSum", InSumRetail.add(InSum)); + item.put("outSumPrice", OutSumRetailPrice.add(OutSumPrice)); + item.put("inSumPrice", InSumRetailPrice.add(InSumPrice)); + item.put("outInSumPrice",OutInSumPrice);//实际销售金额 + dataArray.add(item); + } + } + map.put("rows", dataArray); + res.code = 200; + res.data = map; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 获取单位 + * @param materialUnit + * @param uName + * @return + */ + public String getUName(String materialUnit, String uName) { + String unitName = null; + if(!StringUtil.isEmpty(materialUnit)) { + unitName = materialUnit; + } else if(!StringUtil.isEmpty(uName)) { + unitName = uName.substring(0,uName.indexOf(",")); + } + return unitName; + } + + /** + * 库存预警报表 + * @param currentPage + * @param pageSize + * @return + */ + @GetMapping(value = "/findStockWarningCount") + public BaseResponseInfo findStockWarningCount(@RequestParam("currentPage") Integer currentPage, + @RequestParam("pageSize") Integer pageSize, + @RequestParam("materialParam") String materialParam, + @RequestParam("depotId") Long depotId, + @RequestParam("mpList") String mpList)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + String[] mpArr = mpList.split(","); + List list = depotItemService.findStockWarningCount((currentPage-1)*pageSize, pageSize,materialParam,depotId); + //存放数据json数组 + if (null != list) { + for (DepotItemStockWarningCount disw : list) { + DepotItemVo4WithInfoEx diEx = new DepotItemVo4WithInfoEx(); + diEx.setMMfrs(disw.getMMfrs()); + diEx.setMOtherField1(disw.getMOtherField1()); + diEx.setMOtherField2(disw.getMOtherField2()); + diEx.setMOtherField3(disw.getMOtherField3()); + disw.setMaterialOther(getOtherInfo(mpArr, diEx)); + disw.setMaterialUnit(getUName(disw.getMaterialUnit(), disw.getUnitName())); + } + } + int total = depotItemService.findStockWarningCountTotal(materialParam,depotId); + map.put("total", total); + map.put("rows", list); + res.code = 200; + res.data = map; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + /** + * 导出库存预警excel表格 + * @param depotId + * @param request + * @param response + * @return + */ + @GetMapping(value = "/exportWarningExcel") + public BaseResponseInfo exportWarningExcel( + @RequestParam("depotId") Long depotId, + @RequestParam("materialParam") String materialParam, + @RequestParam("mpList") String mpList, + HttpServletRequest request, HttpServletResponse response)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + String message = "成功"; + try { + String[] mpArr = mpList.split(","); + List dataList = depotItemService.findStockWarningCount(null, null, materialParam, depotId); + //存放数据json数组 + Long pid = depotId; + String[] names = {"名称", "规格", "型号", "扩展信息", "单位", "安全存量", "当前库存", "建议入库量"}; + String title = "库存预警报表"; + List objects = new ArrayList(); + if (null != dataList) { + for (DepotItemStockWarningCount diEx : dataList) { + DepotItemVo4WithInfoEx diVI = new DepotItemVo4WithInfoEx(); + diVI.setMMfrs(diEx.getMMfrs()); + diVI.setMOtherField1(diEx.getMOtherField1()); + diVI.setMOtherField2(diEx.getMOtherField2()); + diVI.setMOtherField3(diEx.getMOtherField3()); + String materialOther = getOtherInfo(mpArr, diVI); + String unitName = getUName(diEx.getMaterialUnit(), diEx.getUnitName()); + String[] objs = new String[8]; + objs[0] = diEx.getMName(); + objs[1] = diEx.getMStandard(); + objs[2] = diEx.getMModel(); + objs[3] = materialOther; + objs[4] = unitName; + objs[5] = diEx.getSafetystock() == null ? "0" : diEx.getSafetystock().toString(); + objs[6] = diEx.getCurrentNumber() == null ? "0" : diEx.getCurrentNumber().toString(); + objs[7] = diEx.getLinjieNumber() == null ? "0" : diEx.getLinjieNumber().toString(); + objects.add(objs); + } + } + File file = ExcelUtils.exportObjectsWithoutTitle(title+pid, names, title, objects); + ExportExecUtil.showExec(file, file.getName(), response); + res.code = 200; + } catch (Exception e) { + e.printStackTrace(); + message = "导出失败"; + res.code = 500; + } + return res; + } + + /** + * 统计采购或销售的总金额 + * @param request + * @param response + * @return + * @throws Exception + */ + @GetMapping(value = "/buyOrSalePrice") + public BaseResponseInfo buyOrSalePrice(HttpServletRequest request, HttpServletResponse response)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + String message = "成功"; + try { + List list = Tools.getLastMonths(6); + JSONArray buyPriceList = new JSONArray(); + for(String month: list) { + JSONObject obj = new JSONObject(); + BigDecimal outPrice = depotItemService.inOrOutPrice("入库", "采购", month); + BigDecimal inPrice = depotItemService.inOrOutPrice("出库", "采购退货", month); + obj.put("x", month); + obj.put("y", outPrice.subtract(inPrice)); + buyPriceList.add(obj); + } + map.put("buyPriceList", buyPriceList); + JSONArray salePriceList = new JSONArray(); + for(String month: list) { + JSONObject obj = new JSONObject(); + BigDecimal outPrice = depotItemService.inOrOutPrice("出库", "销售", month); + BigDecimal inPrice = depotItemService.inOrOutPrice("入库", "销售退货", month); + obj.put("x", month); + obj.put("y", outPrice.subtract(inPrice)); + salePriceList.add(obj); + } + map.put("salePriceList", salePriceList); + res.code = 200; + res.data = map; + } catch (Exception e) { + e.printStackTrace(); + message = "统计失败"; + res.code = 500; + } + return res; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/FunctionController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/FunctionController.java new file mode 100644 index 000000000..f4f98c4f8 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/FunctionController.java @@ -0,0 +1,234 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.Function; +import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.entities.UserBusiness; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.functions.FunctionService; +import com.jsh.erp.service.userBusiness.UserBusinessService; +import com.jsh.erp.utils.BaseResponseInfo; +import com.jsh.erp.utils.StringUtil; +import com.jsh.erp.utils.Tools; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.dao.DataAccessException; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; + +/** + * @author ji-sheng-hua jshERP + */ +@RestController +@RequestMapping(value = "/function") +public class FunctionController { + private Logger logger = LoggerFactory.getLogger(FunctionController.class); + + @Resource + private FunctionService functionService; + + @Resource + private UserBusinessService userBusinessService; + + @PostMapping(value = "/findMenu") + public JSONArray findMenu(@RequestParam(value="pNumber") String pNumber, + @RequestParam(value="hasFunction") String hasFunction, + HttpServletRequest request)throws Exception { + //存放数据json数组 + JSONArray dataArray = new JSONArray(); + try { + //当前用户所拥有的功能列表,格式如:[1][2][5] + String fc = hasFunction; + List dataList = functionService.getRoleFunction(pNumber); + if (dataList.size() != 0) { + dataArray = getMenuByFunction(dataList, fc); + } + } catch (DataAccessException e) { + logger.error(">>>>>>>>>>>>>>>>>>>查找异常", e); + } + return dataArray; + } + + public JSONArray getMenuByFunction(List dataList, String fc) throws Exception { + JSONArray dataArray = new JSONArray(); + for (Function function : dataList) { + JSONObject item = new JSONObject(); + List newList = functionService.getRoleFunction(function.getNumber()); + item.put("id", function.getId()); + item.put("text", function.getName()); + item.put("icon", function.getIcon()); + item.put("url", function.getUrl()); + //if (Tools.isPluginUrl(function.getUrl())) { + // item.put("path", Tools.md5Encryp(function.getUrl())); + //} else { + // item.put("path", function.getUrl()); + //} + item.put("component", function.getComponent()); + if (newList.size()>0) { + JSONArray childrenArr = getMenuByFunction(newList, fc); + if(childrenArr.size()>0) { + item.put("children", childrenArr); + dataArray.add(item); + } + } else { + if (fc.indexOf("[" + function.getId().toString() + "]") != -1) { + dataArray.add(item); + } + } + } + return dataArray; + } + + @PostMapping(value = "/findMenuByPNumber") + public JSONArray findMenuByPNumber(@RequestBody JSONObject jsonObject, + HttpServletRequest request)throws Exception { + String pNumber = jsonObject.getString("pNumber"); + String userId = jsonObject.getString("userId"); + //存放数据json数组 + JSONArray dataArray = new JSONArray(); + try { + Long roleId = 0L; + String fc = ""; + List roleList = userBusinessService.getBasicData(userId, "UserRole"); + if(roleList!=null && roleList.size()>0){ + String value = roleList.get(0).getValue(); + if(StringUtil.isNotEmpty(value)){ + String roleIdStr = value.replace("[", "").replace("]", ""); + roleId = Long.parseLong(roleIdStr); + } + } + //当前用户所拥有的功能列表,格式如:[1][2][5] + List funList = userBusinessService.getBasicData(roleId.toString(), "RoleFunctions"); + if(funList!=null && funList.size()>0){ + fc = funList.get(0).getValue(); + } + List dataList = functionService.getRoleFunction(pNumber); + if (dataList.size() != 0) { + dataArray = getMenuByFunction(dataList, fc); + } + } catch (DataAccessException e) { + logger.error(">>>>>>>>>>>>>>>>>>>查找异常", e); + } + return dataArray; + } + + /** + * 角色对应功能显示 + * @param request + * @return + */ + @GetMapping(value = "/findRoleFunction") + public JSONArray findRoleFunction(@RequestParam("UBType") String type, @RequestParam("UBKeyId") String keyId, + HttpServletRequest request)throws Exception { + JSONArray arr = new JSONArray(); + try { + List dataListFun = functionService.findRoleFunction("0"); + //开始拼接json数据 + JSONObject outer = new JSONObject(); + outer.put("id", 1); + outer.put("key", 1); + outer.put("value", 1); + outer.put("title", "功能列表"); + outer.put("attributes", "功能列表"); + //存放数据json数组 + JSONArray dataArray = new JSONArray(); + if (null != dataListFun) { + //根据条件从列表里面移除"系统管理" + List dataList = new ArrayList<>(); + for (Function fun : dataListFun) { + String token = request.getHeader("X-Access-Token"); + Long tenantId = Tools.getTenantIdByToken(token); + if (tenantId!=0L) { + if(!("系统管理").equals(fun.getName())) { + dataList.add(fun); + } + } else { + //超管 + dataList.add(fun); + } + } + dataArray = getFunctionList(dataList, type, keyId); + outer.put("children", dataArray); + } + arr.add(outer); + } catch (Exception e) { + e.printStackTrace(); + } + return arr; + } + + public JSONArray getFunctionList(List dataList, String type, String keyId) throws Exception { + JSONArray dataArray = new JSONArray(); + if (null != dataList) { + for (Function function : dataList) { + JSONObject item = new JSONObject(); + item.put("id", function.getId()); + item.put("key", function.getId()); + item.put("value", function.getId()); + item.put("title", function.getName()); + item.put("attributes", function.getName()); + Boolean flag = false; + try { + flag = userBusinessService.checkIsUserBusinessExist(type, keyId, "[" + function.getId().toString() + "]"); + } catch (Exception e) { + logger.error(">>>>>>>>>>>>>>>>>设置角色对应的功能:类型" + type + " KeyId为: " + keyId + " 存在异常!"); + } + if (flag == true) { + item.put("checked", true); + } + List funList = functionService.findRoleFunction(function.getNumber()); + if(funList.size()>0) { + JSONArray funArr = getFunctionList(funList, type, keyId); + item.put("children", funArr); + dataArray.add(item); + } else { + dataArray.add(item); + } + } + } + return dataArray; + } + + /** + * 根据id列表查找功能信息 + * @param functionsIds + * @param request + * @return + */ + @GetMapping(value = "/findByIds") + public BaseResponseInfo findByIds(@RequestParam("functionsIds") String functionsIds, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + try { + List dataList = functionService.findByIds(functionsIds); + JSONObject outer = new JSONObject(); + outer.put("total", dataList.size()); + //存放数据json数组 + JSONArray dataArray = new JSONArray(); + if (null != dataList) { + for (Function function : dataList) { + JSONObject item = new JSONObject(); + item.put("Id", function.getId()); + item.put("Name", function.getName()); + item.put("PushBtn", function.getPushBtn()); + item.put("op", 1); + dataArray.add(item); + } + } + outer.put("rows", dataArray); + res.code = 200; + res.data = outer; + } catch (Exception e) { + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/InOutItemController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/InOutItemController.java new file mode 100644 index 000000000..20a9e3010 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/InOutItemController.java @@ -0,0 +1,60 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.InOutItem; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.inOutItem.InOutItemService; +import com.jsh.erp.utils.BaseResponseInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author jishenghua jshERP 2018年12月25日14:38:08 + */ +@RestController +@RequestMapping(value = "/inOutItem") +public class InOutItemController { + private Logger logger = LoggerFactory.getLogger(InOutItemController.class); + + @Resource + private InOutItemService inOutItemService; + + /** + * 查找收支项目信息-下拉框 + * @param request + * @return + */ + @GetMapping(value = "/findBySelect") + public String findBySelect(@RequestParam("type") String type, HttpServletRequest request) throws Exception{ + String res = null; + try { + List dataList = inOutItemService.findBySelect(type); + //存放数据json数组 + JSONArray dataArray = new JSONArray(); + if (null != dataList) { + for (InOutItem inOutItem : dataList) { + JSONObject item = new JSONObject(); + item.put("id", inOutItem.getId()); + //收支项目名称 + item.put("name", inOutItem.getName()); + dataArray.add(item); + } + } + res = dataArray.toJSONString(); + } catch(Exception e){ + e.printStackTrace(); + res = "获取数据失败"; + } + return res; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialCategoryController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialCategoryController.java new file mode 100644 index 000000000..94e757842 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialCategoryController.java @@ -0,0 +1,142 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.MaterialCategory; +import com.jsh.erp.datasource.entities.SerialNumberEx; +import com.jsh.erp.datasource.vo.TreeNode; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.materialCategory.MaterialCategoryService; +import com.jsh.erp.utils.BaseResponseInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * @author ji—sheng—hua jshERP + */ +@RestController +@RequestMapping(value = "/materialCategory") +public class MaterialCategoryController { + private Logger logger = LoggerFactory.getLogger(MaterialCategoryController.class); + + @Resource + private MaterialCategoryService materialCategoryService; + + @GetMapping(value = "/getAllList") + public BaseResponseInfo getAllList(@RequestParam("parentId") Long parentId, HttpServletRequest request) throws Exception{ + BaseResponseInfo res = new BaseResponseInfo(); + try { + List materialCategoryList = materialCategoryService.getAllList(parentId); + res.code = 200; + res.data = materialCategoryList; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 根据id来查询商品名称 + * @param id + * @param request + * @return + */ + @GetMapping(value = "/findById") + public BaseResponseInfo findById(@RequestParam("id") Long id, HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + try { + List dataList = materialCategoryService.findById(id); + JSONObject outer = new JSONObject(); + if (null != dataList) { + for (MaterialCategory mc : dataList) { + outer.put("id", mc.getId()); + outer.put("name", mc.getName()); + outer.put("parentId", mc.getParentId()); + List dataParentList = materialCategoryService.findById(mc.getParentId()); + if(dataParentList!=null&&dataParentList.size()>0){ + outer.put("parentName", dataParentList.get(0).getName()); + } + outer.put("sort", mc.getSort()); + outer.put("serialNo", mc.getSerialNo()); + outer.put("remark", mc.getRemark()); + } + } + res.code = 200; + res.data = outer; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + /** + * create by: cjl + * description: + * 获取商品类别树数据 + * create time: 2019/2/19 11:49 + * @Param: + * @return com.alibaba.fastjson.JSONArray + */ + @RequestMapping(value = "/getMaterialCategoryTree") + public JSONArray getMaterialCategoryTree(@RequestParam("id") Long id) throws Exception{ + JSONArray arr=new JSONArray(); + List materialCategoryTree = materialCategoryService.getMaterialCategoryTree(id); + if(materialCategoryTree!=null&&materialCategoryTree.size()>0){ + for(TreeNode node:materialCategoryTree){ + String str=JSON.toJSONString(node); + JSONObject obj=JSON.parseObject(str); + arr.add(obj) ; + } + } + return arr; + } + /** + * create by: cjl + * description: + * 新增商品类别数据 + * create time: 2019/2/19 17:17 + * @Param: beanJson + * @return java.lang.Object + */ + @RequestMapping(value = "/addMaterialCategory") + public Object addMaterialCategory(@RequestParam("info") String beanJson) throws Exception { + JSONObject result = ExceptionConstants.standardSuccess(); + MaterialCategory mc= JSON.parseObject(beanJson, MaterialCategory.class); + int i= materialCategoryService.addMaterialCategory(mc); + if(i<1){ + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_CATEGORY_ADD_FAILED_CODE, + ExceptionConstants.MATERIAL_CATEGORY_ADD_FAILED_MSG); + } + return result; + } + /** + * create by: cjl + * description: + * 修改商品类别数据 + * create time: 2019/2/20 9:30 + * @Param: beanJson + * @return java.lang.Object + */ + @RequestMapping(value = "/editMaterialCategory") + public Object editMaterialCategory(@RequestParam("info") String beanJson) throws Exception { + JSONObject result = ExceptionConstants.standardSuccess(); + MaterialCategory mc= JSON.parseObject(beanJson, MaterialCategory.class); + int i= materialCategoryService.editMaterialCategory(mc); + if(i<1){ + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_CATEGORY_EDIT_FAILED_CODE, + ExceptionConstants.MATERIAL_CATEGORY_EDIT_FAILED_MSG); + } + return result; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialController.java new file mode 100644 index 000000000..ef40cb007 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialController.java @@ -0,0 +1,476 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.DepotEx; +import com.jsh.erp.datasource.entities.Material; +import com.jsh.erp.datasource.entities.MaterialVo4Unit; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.depotItem.DepotItemService; +import com.jsh.erp.service.material.MaterialService; +import com.jsh.erp.service.redis.RedisService; +import com.jsh.erp.utils.*; +import jxl.Sheet; +import jxl.Workbook; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.math.BigDecimal; +import java.util.*; + +import static com.jsh.erp.utils.ResponseJsonUtil.returnJson; + +/** + * @author ji|sheng|hua jshERP + */ +@RestController +@RequestMapping(value = "/material") +public class MaterialController { + private Logger logger = LoggerFactory.getLogger(MaterialController.class); + + @Resource + private MaterialService materialService; + + @Resource + private DepotItemService depotItemService; + + @Resource + private RedisService redisService; + + @GetMapping(value = "/checkIsExist") + public String checkIsExist(@RequestParam("id") Long id, @RequestParam("name") String name, + @RequestParam("model") String model, @RequestParam("color") String color, + @RequestParam("standard") String standard, @RequestParam("mfrs") String mfrs, + @RequestParam("otherField1") String otherField1, @RequestParam("otherField2") String otherField2, + @RequestParam("otherField3") String otherField3, @RequestParam("unit") String unit,@RequestParam("unitId") Long unitId, + HttpServletRequest request)throws Exception { + Map objectMap = new HashMap(); + int exist = materialService.checkIsExist(id, name, model, color, standard, mfrs, + otherField1, otherField2, otherField3, unit, unitId); + if(exist > 0) { + objectMap.put("status", true); + } else { + objectMap.put("status", false); + } + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } + + /** + * 批量设置状态-启用或者禁用 + * @param jsonObject + * @param request + * @return + * @throws Exception + */ + @PostMapping(value = "/batchSetStatus") + public String batchSetStatus(@RequestBody JSONObject jsonObject, + HttpServletRequest request)throws Exception { + Boolean status = jsonObject.getBoolean("status"); + String ids = jsonObject.getString("ids"); + Map objectMap = new HashMap<>(); + int res = materialService.batchSetStatus(status, ids); + if(res > 0) { + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } else { + return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code); + } + } + + /** + * 根据id来查询商品名称 + * @param id + * @param request + * @return + */ + @GetMapping(value = "/findById") + public BaseResponseInfo findById(@RequestParam("id") Long id, HttpServletRequest request) throws Exception{ + BaseResponseInfo res = new BaseResponseInfo(); + try { + List list = materialService.findById(id); + res.code = 200; + res.data = list; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 根据meId来查询商品名称 + * @param meId + * @param request + * @return + */ + @GetMapping(value = "/findByIdWithBarCode") + public BaseResponseInfo findByIdWithBarCode(@RequestParam("meId") Long meId, + @RequestParam("mpList") String mpList, + HttpServletRequest request) throws Exception{ + BaseResponseInfo res = new BaseResponseInfo(); + try { + String[] mpArr = mpList.split(","); + MaterialVo4Unit mu = new MaterialVo4Unit(); + List list = materialService.findByIdWithBarCode(meId); + if(list!=null && list.size()>0) { + mu = list.get(0); + String expand = ""; //扩展信息 + for (int i = 0; i < mpArr.length; i++) { + if (mpArr[i].equals("制造商")) { + expand = expand + ((mu.getMfrs() == null || mu.getMfrs().equals("")) ? "" : "(" + mu.getMfrs() + ")"); + } + if (mpArr[i].equals("自定义1")) { + expand = expand + ((mu.getOtherField1() == null || mu.getOtherField1().equals("")) ? "" : "(" + mu.getOtherField1() + ")"); + } + if (mpArr[i].equals("自定义2")) { + expand = expand + ((mu.getOtherField2() == null || mu.getOtherField2().equals("")) ? "" : "(" + mu.getOtherField2() + ")"); + } + if (mpArr[i].equals("自定义3")) { + expand = expand + ((mu.getOtherField3() == null || mu.getOtherField3().equals("")) ? "" : "(" + mu.getOtherField3() + ")"); + } + } + mu.setMaterialOther(expand); + } + res.code = 200; + res.data = mu; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 查找商品信息-下拉框 + * @param mpList + * @param request + * @return + */ + @GetMapping(value = "/findBySelect") + public JSONObject findBySelect(@RequestParam(value = "categoryId", required = false) Long categoryId, + @RequestParam(value = "q", required = false) String q, + @RequestParam("mpList") String mpList, + @RequestParam(value = "depotId", required = false) Long depotId, + @RequestParam("page") Integer currentPage, + @RequestParam("rows") Integer pageSize, + HttpServletRequest request) throws Exception{ + JSONObject object = new JSONObject(); + try { + Long tenantId = Long.parseLong(redisService.getObjectFromSessionByKey(request,"tenantId").toString()); + List dataList = materialService.findBySelectWithBarCode(categoryId, q, (currentPage-1)*pageSize, pageSize); + String[] mpArr = mpList.split(","); + int total = materialService.findBySelectWithBarCodeCount(categoryId, q); + object.put("total", total); + JSONArray dataArray = new JSONArray(); + //存放数据json数组 + if (null != dataList) { + for (MaterialVo4Unit material : dataList) { + JSONObject item = new JSONObject(); + item.put("id", material.getMeId()); //商品扩展表的id + String ratio; //比例 + if (material.getUnitId() == null || material.getUnitId().equals("")) { + ratio = ""; + } else { + ratio = material.getUnitName(); + if(ratio!=null) { + ratio = ratio.substring(ratio.indexOf("(")); + } + } + //名称/型号/扩展信息/包装 + String MaterialName = ""; + String mBarCode = ""; + if(material.getmBarCode()!=null) { + mBarCode = material.getmBarCode(); + MaterialName = MaterialName + mBarCode + "_"; + } + item.put("mBarCode", mBarCode); + MaterialName = MaterialName + " " + material.getName() + + ((material.getStandard() == null || material.getStandard().equals("")) ? "" : "(" + material.getStandard() + ")") + + ((material.getModel() == null || material.getModel().equals("")) ? "" : "(" + material.getModel() + ")"); + String expand = ""; //扩展信息 + for (int i = 0; i < mpArr.length; i++) { + if (mpArr[i].equals("制造商")) { + expand = expand + ((material.getMfrs() == null || material.getMfrs().equals("")) ? "" : "(" + material.getMfrs() + ")"); + } + if (mpArr[i].equals("自定义1")) { + expand = expand + ((material.getOtherField1() == null || material.getOtherField1().equals("")) ? "" : "(" + material.getOtherField1() + ")"); + } + if (mpArr[i].equals("自定义2")) { + expand = expand + ((material.getOtherField2() == null || material.getOtherField2().equals("")) ? "" : "(" + material.getOtherField2() + ")"); + } + if (mpArr[i].equals("自定义3")) { + expand = expand + ((material.getOtherField3() == null || material.getOtherField3().equals("")) ? "" : "(" + material.getOtherField3() + ")"); + } + } + MaterialName = MaterialName + expand + ((material.getCommodityUnit() == null || material.getCommodityUnit().equals("")) ? "" : "(" + material.getCommodityUnit() + ")") + ratio; + item.put("materialName", MaterialName); + item.put("categoryName", material.getCategoryName()); + item.put("name", material.getName()); + item.put("expand", expand); + item.put("model", material.getModel()); + item.put("standard", material.getStandard()); + item.put("unit", material.getCommodityUnit() + ratio); + if(depotId!=null) { + BigDecimal stock = depotItemService.getStockByParam(depotId,material.getId(),null,null,tenantId); + item.put("stock", stock); + } + dataArray.add(item); + } + } + object.put("rows", dataArray); + } catch (Exception e) { + e.printStackTrace(); + } + return object; + } + + /** + * 根据商品id查找商品信息 + * @param meId + * @param request + * @return + * @throws Exception + */ + @GetMapping(value = "/getMaterialByMeId") + public JSONObject getMaterialByMeId(@RequestParam(value = "meId", required = false) Long meId, + @RequestParam("mpList") String mpList, + HttpServletRequest request) throws Exception{ + JSONObject item = new JSONObject(); + try { + String[] mpArr = mpList.split(","); + List materialList = materialService.getMaterialByMeId(meId); + if(materialList!=null && materialList.size()!=1) { + return item; + } else if(materialList.size() == 1) { + MaterialVo4Unit material = materialList.get(0); + item.put("Id", material.getMeId()); //商品扩展表的id + String ratio; //比例 + if (material.getUnitId() == null || material.getUnitId().equals("")) { + ratio = ""; + } else { + ratio = material.getUnitName(); + ratio = ratio.substring(ratio.indexOf("(")); + } + //名称/型号/扩展信息/包装 + String MaterialName = ""; + MaterialName = MaterialName + material.getmBarCode() + "_" + material.getName() + + ((material.getStandard() == null || material.getStandard().equals("")) ? "" : "(" + material.getStandard() + ")"); + String expand = ""; //扩展信息 + for (int i = 0; i < mpArr.length; i++) { + if (mpArr[i].equals("颜色")) { + expand = expand + ((material.getColor() == null || material.getColor().equals("")) ? "" : "(" + material.getColor() + ")"); + } + if (mpArr[i].equals("制造商")) { + expand = expand + ((material.getMfrs() == null || material.getMfrs().equals("")) ? "" : "(" + material.getMfrs() + ")"); + } + if (mpArr[i].equals("自定义1")) { + expand = expand + ((material.getOtherField1() == null || material.getOtherField1().equals("")) ? "" : "(" + material.getOtherField1() + ")"); + } + if (mpArr[i].equals("自定义2")) { + expand = expand + ((material.getOtherField2() == null || material.getOtherField2().equals("")) ? "" : "(" + material.getOtherField2() + ")"); + } + if (mpArr[i].equals("自定义3")) { + expand = expand + ((material.getOtherField3() == null || material.getOtherField3().equals("")) ? "" : "(" + material.getOtherField3() + ")"); + } + } + MaterialName = MaterialName + expand + ((material.getUnit() == null || material.getUnit().equals("")) ? "" : "(" + material.getUnit() + ")") + ratio; + item.put("MaterialName", MaterialName); + item.put("name", material.getName()); + item.put("expand", expand); + item.put("model", material.getModel()); + item.put("standard", material.getStandard()); + item.put("unit", material.getUnit() + ratio); + } + } catch (Exception e) { + e.printStackTrace(); + } + return item; + } + + /** + * 生成excel表格 + * @param barCode + * @param name + * @param standard + * @param model + * @param categoryId + * @param request + * @param response + */ + @GetMapping(value = "/exportExcel") + public void exportExcel(@RequestParam("categoryId") String categoryId, + @RequestParam("barCode") String barCode, + @RequestParam("name") String name, + @RequestParam("standard") String standard, + @RequestParam("model") String model, + @RequestParam("mpList") String mpList, + HttpServletRequest request, HttpServletResponse response) { + try { + List dataList = materialService.findByAll(StringUtil.toNull(barCode), StringUtil.toNull(name), + StringUtil.toNull(standard), StringUtil.toNull(model), StringUtil.toNull(categoryId)); + String[] names = {"名称", "类型", "型号", "安全存量", "单位", "零售价", "最低售价", "采购价", "销售价", "备注", "状态"}; + String title = "商品信息"; + List objects = new ArrayList(); + if (null != dataList) { + for (MaterialVo4Unit m : dataList) { + String[] objs = new String[11]; + objs[0] = m.getName(); + objs[1] = m.getCategoryName(); + objs[2] = m.getModel(); + objs[3] = m.getSafetyStock() == null? "" : m.getSafetyStock().toString(); + objs[4] = m.getCommodityUnit(); + objs[5] = m.getCommodityDecimal() == null? "" : m.getCommodityDecimal().toString(); + objs[6] = m.getLowDecimal() == null? "" : m.getLowDecimal().toString(); + objs[7] = m.getPurchaseDecimal() == null? "" : m.getPurchaseDecimal().toString(); + objs[8] = m.getWholesaleDecimal() == null? "" : m.getWholesaleDecimal().toString(); + objs[9] = m.getRemark(); + objs[10] = m.getEnabled() ? "启用" : "禁用"; + objects.add(objs); + } + } + File file = ExcelUtils.exportObjectsWithoutTitle(title, names, title, objects); + ExportExecUtil.showExec(file, file.getName(), response); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * excel表格导入产品(含初始库存) + * @param file + * @param request + * @param response + * @return + */ + @PostMapping(value = "/importExcel") + public BaseResponseInfo importExcel(MultipartFile file, + HttpServletRequest request, HttpServletResponse response) throws Exception{ + BaseResponseInfo res = new BaseResponseInfo(); + String message = "成功"; + try { + Sheet src = null; + //文件合法性校验 + try { + Workbook workbook = Workbook.getWorkbook(file.getInputStream()); + src = workbook.getSheet(0); + } catch (Exception e) { + } + res = materialService.importExcel(src); + } catch (Exception e) { + e.printStackTrace(); + } + return res; + } + + public BigDecimal parseBigDecimalEx(String str)throws Exception{ + if(!StringUtil.isEmpty(str)) { + return new BigDecimal(str); + } else { + return null; + } + } + @GetMapping(value = "/getMaterialEnableSerialNumberList") + public JSONObject getMaterialEnableSerialNumberList( + @RequestParam(value = "q", required = false) String q, + @RequestParam("page") Integer currentPage, + @RequestParam("rows") Integer pageSize, + HttpServletRequest request, + HttpServletResponse response)throws Exception { + JSONObject object= new JSONObject(); + try { + List list = materialService.getMaterialEnableSerialNumberList(q, (currentPage-1)*pageSize, pageSize); + Long count = materialService.getMaterialEnableSerialNumberCount(q); + object.put("rows", list); + object.put("total", count); + } catch (Exception e) { + e.printStackTrace(); + } + return object; + } + + @GetMapping(value = "/getMaxBarCode") + public BaseResponseInfo getMaxBarCode() throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + String barCode = materialService.getMaxBarCode(); + map.put("barCode", barCode); + res.code = 200; + res.data = map; + return res; + } + + /** + * 商品名称模糊匹配 + * @return + * @throws Exception + */ + @GetMapping(value = "/getMaterialNameList") + public JSONArray getMaterialNameList() throws Exception { + JSONArray arr = new JSONArray(); + try { + List list = materialService.getMaterialNameList(); + for (String s : list) { + JSONObject item = new JSONObject(); + item.put("value", s); + item.put("text", s); + arr.add(item); + } + } catch (Exception e) { + e.printStackTrace(); + } + return arr; + } + + /** + * 根据条码查询商品信息 + * @return + * @throws Exception + */ + @GetMapping(value = "/getMaterialByBarCode") + public BaseResponseInfo getMaterialByBarCode(@RequestParam("barCode") String barCode, + @RequestParam("mpList") String mpList, + HttpServletRequest request) throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + try { + String[] mpArr = mpList.split(","); + MaterialVo4Unit mu = new MaterialVo4Unit(); + List list = materialService.getMaterialByBarCode(barCode); + if(list!=null && list.size()>0) { + mu = list.get(0); + String expand = ""; //扩展信息 + for (int i = 0; i < mpArr.length; i++) { + if (mpArr[i].equals("制造商")) { + expand = expand + ((mu.getMfrs() == null || mu.getMfrs().equals("")) ? "" : "(" + mu.getMfrs() + ")"); + } + if (mpArr[i].equals("自定义1")) { + expand = expand + ((mu.getOtherField1() == null || mu.getOtherField1().equals("")) ? "" : "(" + mu.getOtherField1() + ")"); + } + if (mpArr[i].equals("自定义2")) { + expand = expand + ((mu.getOtherField2() == null || mu.getOtherField2().equals("")) ? "" : "(" + mu.getOtherField2() + ")"); + } + if (mpArr[i].equals("自定义3")) { + expand = expand + ((mu.getOtherField3() == null || mu.getOtherField3().equals("")) ? "" : "(" + mu.getOtherField3() + ")"); + } + } + mu.setMaterialOther(expand); + } + res.code = 200; + res.data = mu; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialExtendController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialExtendController.java new file mode 100644 index 000000000..abd28d857 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialExtendController.java @@ -0,0 +1,84 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.datasource.entities.MaterialExtend; +import com.jsh.erp.datasource.vo.MaterialExtendVo4List; +import com.jsh.erp.service.materialExtend.MaterialExtendService; +import com.jsh.erp.utils.BaseResponseInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author jijiaqing + */ +@RestController +@RequestMapping(value = "/materialsExtend") +public class MaterialExtendController { + private Logger logger = LoggerFactory.getLogger(MaterialExtendController.class); + @Resource + private MaterialExtendService materialExtendService; + + @GetMapping(value = "/getDetailList") + public BaseResponseInfo getDetailList(@RequestParam("materialId") Long materialId, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + List dataList = new ArrayList(); + if(materialId!=0) { + dataList = materialExtendService.getDetailList(materialId); + } + JSONObject outer = new JSONObject(); + outer.put("total", dataList.size()); + //存放数据json数组 + JSONArray dataArray = new JSONArray(); + if (null != dataList) { + for (MaterialExtendVo4List md : dataList) { + JSONObject item = new JSONObject(); + item.put("id", md.getId()); + item.put("barCode", md.getBarCode()); + item.put("commodityUnit", md.getCommodityUnit()); + item.put("purchaseDecimal", md.getPurchaseDecimal()); + item.put("commodityDecimal", md.getCommodityDecimal()); + item.put("wholesaleDecimal", md.getWholesaleDecimal()); + item.put("lowDecimal", md.getLowDecimal()); + dataArray.add(item); + } + } + outer.put("rows", dataArray); + res.code = 200; + res.data = outer; + } catch (Exception e) { + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + @GetMapping(value = "/getInfoByBarCode") + public BaseResponseInfo getInfoByBarCode(@RequestParam("barCode") String barCode, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + MaterialExtend materialExtend = materialExtendService.getInfoByBarCode(barCode); + res.code = 200; + res.data = materialExtend; + } catch (Exception e) { + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialPropertyController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialPropertyController.java new file mode 100644 index 000000000..d44dbe731 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialPropertyController.java @@ -0,0 +1,28 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.material.MaterialService; +import com.jsh.erp.service.materialProperty.MaterialPropertyService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * Description + * + * @Author: qiankunpingtai + * @Date: 2019/3/29 15:24 + */ +@RestController +@RequestMapping(value = "/materialProperty") +public class MaterialPropertyController { + + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/MsgController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/MsgController.java new file mode 100644 index 000000000..5574ea9d2 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/MsgController.java @@ -0,0 +1,77 @@ +package com.jsh.erp.controller; + +import com.jsh.erp.datasource.entities.Msg; +import com.jsh.erp.service.msg.MsgService; +import com.jsh.erp.utils.BaseResponseInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author ji sheng hua jshERP + */ +@RestController +@RequestMapping(value = "/msg") +public class MsgController { + private Logger logger = LoggerFactory.getLogger(MsgController.class); + + @Resource + private MsgService msgService; + + @GetMapping("/getMsgByStatus") + public BaseResponseInfo getMsgByStatus(@RequestParam("status") String status, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + try { + List list = msgService.getMsgByStatus(status); + res.code = 200; + res.data = list; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + @PostMapping("/batchUpdateStatus") + public BaseResponseInfo batchUpdateStatus(@RequestParam("ids") String ids, + @RequestParam("status") String status, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + try { + msgService.batchUpdateStatus(ids, status); + res.code = 200; + res.data = "更新成功"; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + @GetMapping("/getMsgCountByStatus") + public BaseResponseInfo getMsgCountByStatus(@RequestParam("status") String status, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + try { + Map map = new HashMap(); + Long count = msgService.getMsgCountByStatus(status); + map.put("count", count); + res.code = 200; + res.data = map; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/OrganizationController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/OrganizationController.java new file mode 100644 index 000000000..42153604b --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/OrganizationController.java @@ -0,0 +1,134 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.MaterialCategory; +import com.jsh.erp.datasource.entities.Organization; +import com.jsh.erp.datasource.vo.TreeNode; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.materialCategory.MaterialCategoryService; +import com.jsh.erp.service.organization.OrganizationService; +import com.jsh.erp.utils.BaseResponseInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.text.SimpleDateFormat; +import java.util.List; + +/** + * create by: cjl + * description: + * + * create time: 2019/3/6 10:54 + */ +@RestController +@RequestMapping(value = "/organization") +public class OrganizationController { + private Logger logger = LoggerFactory.getLogger(OrganizationController.class); + + @Resource + private OrganizationService organizationService; + /** + * 根据id来查询机构信息 + * @param id + * @param request + * @return + */ + @GetMapping(value = "/findById") + public BaseResponseInfo findById(@RequestParam("id") Long id, HttpServletRequest request) throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + try { + List dataList = organizationService.findById(id); + JSONObject outer = new JSONObject(); + if (null != dataList) { + for (Organization org : dataList) { + outer.put("id", org.getId()); + outer.put("orgFullName", org.getOrgFullName()); + outer.put("orgAbr", org.getOrgAbr()); + outer.put("parentId", org.getParentId()); + List dataParentList = organizationService.findByParentId(org.getParentId()); + if(dataParentList!=null&&dataParentList.size()>0){ + //父级机构名称显示简称 + outer.put("orgParentName", dataParentList.get(0).getOrgAbr()); + } + outer.put("orgNo", org.getOrgNo()); + outer.put("sort", org.getSort()); + outer.put("remark", org.getRemark()); + } + } + res.code = 200; + res.data = outer; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * create by: cjl + * description: + * 获取机构树数据 + * create time: 2019/2/19 11:49 + * @Param: + * @return com.alibaba.fastjson.JSONArray + */ + @RequestMapping(value = "/getOrganizationTree") + public JSONArray getOrganizationTree(@RequestParam("id") Long id) throws Exception{ + JSONArray arr=new JSONArray(); + List organizationTree= organizationService.getOrganizationTree(id); + if(organizationTree!=null&&organizationTree.size()>0){ + for(TreeNode node:organizationTree){ + String str=JSON.toJSONString(node); + JSONObject obj=JSON.parseObject(str); + arr.add(obj); + } + } + return arr; + } + /** + * create by: cjl + * description: + * 新增机构信息 + * create time: 2019/2/19 17:17 + * @Param: beanJson + * @return java.lang.Object + */ + @PostMapping(value = "/addOrganization") + public Object addOrganization(@RequestParam("info") String beanJson) throws Exception { + JSONObject result = ExceptionConstants.standardSuccess(); + Organization org= JSON.parseObject(beanJson, Organization.class); + int i= organizationService.addOrganization(org); + if(i<1){ + throw new BusinessRunTimeException(ExceptionConstants.ORGANIZATION_ADD_FAILED_CODE, + ExceptionConstants.ORGANIZATION_ADD_FAILED_MSG); + } + return result; + } + /** + * create by: cjl + * description: + * 修改机构信息 + * create time: 2019/2/20 9:30 + * @Param: beanJson + * @return java.lang.Object + */ + @PostMapping(value = "/editOrganization") + public Object editOrganization(@RequestParam("info") String beanJson) throws Exception { + JSONObject result = ExceptionConstants.standardSuccess(); + Organization org= JSON.parseObject(beanJson, Organization.class); + int i= organizationService.editOrganization(org); + if(i<1){ + throw new BusinessRunTimeException(ExceptionConstants.ORGANIZATION_EDIT_FAILED_CODE, + ExceptionConstants.ORGANIZATION_EDIT_FAILED_MSG); + } + return result; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/PersonController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/PersonController.java new file mode 100644 index 000000000..740de44f9 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/PersonController.java @@ -0,0 +1,130 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.Person; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.person.PersonService; +import com.jsh.erp.utils.BaseResponseInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author ji|sheng|hua 华夏erp + */ +@RestController +@RequestMapping(value = "/person") +public class PersonController { + private Logger logger = LoggerFactory.getLogger(PersonController.class); + + @Resource + private PersonService personService; + + @GetMapping(value = "/getAllList") + public BaseResponseInfo getAllList(HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + List personList = personService.getPerson(); + map.put("personList", personList); + res.code = 200; + res.data = personList; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 根据Id获取经手人信息 + * @param personIDs + * @param request + * @return + */ + @GetMapping(value = "/getPersonByIds") + public BaseResponseInfo getPersonByIds(@RequestParam("personIDs") String personIDs, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + String names = personService.getPersonByIds(personIDs); + map.put("names", names); + res.code = 200; + res.data = map; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 根据类型获取经手人信息 + * @param type + * @param request + * @return + */ + @GetMapping(value = "/getPersonByType") + public BaseResponseInfo getPersonByType(@RequestParam("type") String type, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + List personList = personService.getPersonByType(type); + map.put("personList", personList); + res.code = 200; + res.data = map; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 根据类型获取经手人信息 1-业务员,2-仓管员,3-财务员 + * @param typeNum + * @param request + * @return + */ + @PostMapping(value = "/getPersonByNumType") + public JSONArray getPersonByNumType(@RequestParam("type") String typeNum, + HttpServletRequest request)throws Exception { + JSONArray dataArray = new JSONArray(); + try { + String type = ""; + if (typeNum.equals("1")) { + type = "业务员"; + } else if (typeNum.equals("2")) { + type = "仓管员"; + } else if (typeNum.equals("3")) { + type = "财务员"; + } + List personList = personService.getPersonByType(type); + if (null != personList) { + for (Person person : personList) { + JSONObject item = new JSONObject(); + item.put("id", person.getId()); + item.put("name", person.getName()); + dataArray.add(item); + } + } + } catch(Exception e){ + e.printStackTrace(); + } + return dataArray; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/PlatformConfigController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/PlatformConfigController.java new file mode 100644 index 000000000..883a8904d --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/PlatformConfigController.java @@ -0,0 +1,90 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.datasource.entities.PlatformConfig; +import com.jsh.erp.service.platformConfig.PlatformConfigService; +import com.jsh.erp.utils.BaseResponseInfo; +import com.jsh.erp.utils.ErpInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; + +import static com.jsh.erp.utils.ResponseJsonUtil.returnJson; + +/** + * @author ji|sheng|hua 华夏erp QQ7827-18920 + */ +@RestController +@RequestMapping(value = "/platformConfig") +public class PlatformConfigController { + private Logger logger = LoggerFactory.getLogger(PlatformConfigController.class); + + @Resource + private PlatformConfigService platformConfigService; + + /** + * 获取平台名称 + * @param request + * @return + */ + @GetMapping(value = "/getPlatformName") + public String getPlatformName(HttpServletRequest request)throws Exception { + String res; + try { + String platformKey = "platform_name"; + PlatformConfig platformConfig = platformConfigService.getPlatformConfigByKey(platformKey); + res = platformConfig.getPlatformValue(); + } catch(Exception e){ + e.printStackTrace(); + res = "ERP系统"; + } + return res; + } + + /** + * 根据platformKey更新platformValue + * @param object + * @param request + * @return + */ + @PostMapping(value = "/updatePlatformConfigByKey") + public String updatePlatformConfigByKey(@RequestBody JSONObject object, + HttpServletRequest request)throws Exception { + Map objectMap = new HashMap<>(); + String platformKey = object.getString("platformKey"); + String platformValue = object.getString("platformValue"); + int res = platformConfigService.updatePlatformConfigByKey(platformKey, platformValue); + if(res > 0) { + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } else { + return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code); + } + } + + /** + * 根据platformKey查询信息 + * @param platformKey + * @param request + * @return + */ + @GetMapping(value = "/getPlatformConfigByKey") + public BaseResponseInfo getPlatformConfigByKey(@RequestParam("platformKey") String platformKey, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + try { + PlatformConfig platformConfig = platformConfigService.getPlatformConfigByKey(platformKey); + res.code = 200; + res.data = platformConfig; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/PluginController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/PluginController.java new file mode 100644 index 000000000..8cf2a7a22 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/PluginController.java @@ -0,0 +1,269 @@ +package com.jsh.erp.controller; + +import com.gitee.starblues.integration.application.PluginApplication; +import com.gitee.starblues.integration.operator.PluginOperator; +import com.gitee.starblues.integration.operator.module.PluginInfo; +import com.jsh.erp.utils.BaseResponseInfo; +import com.jsh.erp.utils.ComputerInfo; +import com.jsh.erp.utils.StringUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.DigestUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.nio.file.Paths; +import java.util.*; + +/** + * 插件jar 包测试功能 + * @author jishenghua + * @version 1.0 + */ +@RestController +@RequestMapping("/plugin") +public class PluginController { + + + private final PluginOperator pluginOperator; + + @Autowired + public PluginController(PluginApplication pluginApplication) { + this.pluginOperator = pluginApplication.getPluginOperator(); + } + /** + * 获取插件信息 + * @return 返回插件信息 + */ + @GetMapping(value = "/list") + public BaseResponseInfo getPluginInfo(@RequestParam(value = "name",required = false) String name, + @RequestParam("currentPage") Integer currentPage, + @RequestParam("pageSize") Integer pageSize, + HttpServletRequest request) throws Exception{ + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + List resList = new ArrayList<>(); + List list = pluginOperator.getPluginInfo(); + if(StringUtil.isEmpty(name)) { + resList = list; + } else { + for(PluginInfo pi : list) { + String desc = pi.getPluginDescriptor().getPluginDescription(); + if(desc.contains(name)) { + resList.add(pi); + } + } + } + map.put("rows", resList); + map.put("total", resList.size()); + res.code = 200; + res.data = map; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 获取插件jar文件名 + * @return 获取插件文件名。只在生产环境显示 + */ + @GetMapping("/files") + public Set getPluginFilePaths(){ + try { + return pluginOperator.getPluginFilePaths(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + + /** + * 根据插件id停止插件 + * @param id 插件id + * @return 返回操作结果 + */ + @PostMapping("/stop/{id}") + public BaseResponseInfo stop(@PathVariable("id") String id){ + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + String message = ""; + try { + if(pluginOperator.stop(id)){ + message = "plugin '" + id +"' stop success"; + } else { + message = "plugin '" + id +"' stop failure"; + } + map.put("message", message); + res.code = 200; + res.data = map; + } catch (Exception e) { + e.printStackTrace(); + map.put("message", "plugin '" + id +"' stop failure. " + e.getMessage()); + res.code = 500; + res.data = map; + } + return res; + } + + /** + * 根据插件id启动插件 + * @param id 插件id + * @return 返回操作结果 + */ + @PostMapping("/start/{id}") + public BaseResponseInfo start(@PathVariable("id") String id){ + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + String message = ""; + try { + if(pluginOperator.start(id)){ + message = "plugin '" + id +"' start success"; + } else { + message = "plugin '" + id +"' start failure"; + } + map.put("message", message); + res.code = 200; + res.data = map; + } catch (Exception e) { + e.printStackTrace(); + map.put("message", "plugin '" + id +"' start failure. " + e.getMessage()); + res.code = 500; + res.data = map; + } + return res; + } + + + /** + * 根据插件id卸载插件 + * @param id 插件id + * @return 返回操作结果 + */ + @PostMapping("/uninstall/{id}") + public BaseResponseInfo uninstall(@PathVariable("id") String id){ + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + String message = ""; + try { + if(pluginOperator.uninstall(id, true)){ + message = "plugin '" + id +"' uninstall success"; + } else { + message = "plugin '" + id +"' uninstall failure"; + } + map.put("message", message); + res.code = 200; + res.data = map; + } catch (Exception e) { + e.printStackTrace(); + map.put("message", "plugin '" + id +"' uninstall failure. " + e.getMessage()); + res.code = 500; + res.data = map; + } + return res; + } + + + /** + * 根据插件路径安装插件。该插件jar必须在服务器上存在。注意: 该操作只适用于生产环境 + * @param path 插件路径名称 + * @return 操作结果 + */ + @PostMapping("/installByPath") + public String install(@RequestParam("path") String path){ + try { + if(pluginOperator.install(Paths.get(path))){ + return "installByPath success"; + } else { + return "installByPath failure"; + } + } catch (Exception e) { + e.printStackTrace(); + return "installByPath failure : " + e.getMessage(); + } + } + + + /** + * 上传并安装插件。注意: 该操作只适用于生产环境 + * @param file 上传文件 multipartFile + * @return 操作结果 + */ + @PostMapping("/uploadInstallPluginJar") + public BaseResponseInfo install(MultipartFile file, HttpServletRequest request, HttpServletResponse response){ + BaseResponseInfo res = new BaseResponseInfo(); + try { + pluginOperator.uploadPluginAndStart(file); + res.code = 200; + res.data = "导入成功"; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "导入失败"; + } + return res; + } + + /** + * 上传插件的配置文件。注意: 该操作只适用于生产环境 + * @param multipartFile 上传文件 multipartFile + * @return 操作结果 + */ + @PostMapping("/uploadPluginConfigFile") + public String uploadConfig(@RequestParam("configFile") MultipartFile multipartFile){ + try { + if(pluginOperator.uploadConfigFile(multipartFile)){ + return "uploadConfig success"; + } else { + return "uploadConfig failure"; + } + } catch (Exception e) { + e.printStackTrace(); + return "uploadConfig failure : " + e.getMessage(); + } + } + + + /** + * 备份插件。注意: 该操作只适用于生产环境 + * @param pluginId 插件id + * @return 操作结果 + */ + @PostMapping("/back/{pluginId}") + public String backupPlugin(@PathVariable("pluginId") String pluginId){ + try { + if(pluginOperator.backupPlugin(pluginId, "testBack")){ + return "backupPlugin success"; + } else { + return "backupPlugin failure"; + } + } catch (Exception e) { + e.printStackTrace(); + return "backupPlugin failure : " + e.getMessage(); + } + } + + /** + * 获取加密后的mac + * @return + */ + @GetMapping("/getMacWithSecret") + public BaseResponseInfo getMacWithSecret(){ + BaseResponseInfo res = new BaseResponseInfo(); + try { + String mac = ComputerInfo.getMacAddress(); + res.code = 200; + res.data = DigestUtils.md5DigestAsHex(mac.getBytes()); + } catch (Exception e) { + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/ResourceController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/ResourceController.java new file mode 100644 index 000000000..e39777cac --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/ResourceController.java @@ -0,0 +1,138 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.service.CommonQueryManager; +import com.jsh.erp.utils.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.jsh.erp.utils.ResponseJsonUtil.returnJson; + +/** + * by jishenghua 2018-9-12 23:58:10 华夏erp + */ +@RestController +public class ResourceController { + + @Resource + private CommonQueryManager configResourceManager; + + @GetMapping(value = "/{apiName}/info") + public String getList(@PathVariable("apiName") String apiName, + @RequestParam("id") Long id, + HttpServletRequest request) throws Exception { + Object obj = configResourceManager.selectOne(apiName, id); + Map objectMap = new HashMap(); + if(obj != null) { + objectMap.put("info", obj); + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } else { + return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code); + } + } + + @GetMapping(value = "/{apiName}/list") + public String getList(@PathVariable("apiName") String apiName, + @RequestParam(value = Constants.PAGE_SIZE, required = false) Integer pageSize, + @RequestParam(value = Constants.CURRENT_PAGE, required = false) Integer currentPage, + @RequestParam(value = Constants.SEARCH, required = false) String search, + HttpServletRequest request)throws Exception { + Map parameterMap = ParamUtils.requestToMap(request); + parameterMap.put(Constants.SEARCH, search); + Map objectMap = new HashMap(); + if (pageSize != null && pageSize <= 0) { + pageSize = 10; + } + String offset = ParamUtils.getPageOffset(currentPage, pageSize); + if (StringUtil.isNotEmpty(offset)) { + parameterMap.put(Constants.OFFSET, offset); + } + List list = configResourceManager.select(apiName, parameterMap); + if (list != null) { + objectMap.put("total", configResourceManager.counts(apiName, parameterMap)); + objectMap.put("rows", list); + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } else { + objectMap.put("total", BusinessConstants.DEFAULT_LIST_NULL_NUMBER); + objectMap.put("rows", new ArrayList()); + return returnJson(objectMap, "查找不到数据", ErpInfo.OK.code); + } + } + + @PostMapping(value = "/{apiName}/add", produces = {"application/javascript", "application/json"}) + public String addResource(@PathVariable("apiName") String apiName, + @RequestBody JSONObject obj, HttpServletRequest request)throws Exception { + Map objectMap = new HashMap(); + int insert = configResourceManager.insert(apiName, obj, request); + if(insert > 0) { + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } else if(insert == -1) { + return returnJson(objectMap, ErpInfo.TEST_USER.name, ErpInfo.TEST_USER.code); + } else { + return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code); + } + } + + @PutMapping(value = "/{apiName}/update", produces = {"application/javascript", "application/json"}) + public String updateResource(@PathVariable("apiName") String apiName, + @RequestBody JSONObject obj, HttpServletRequest request)throws Exception { + Map objectMap = new HashMap(); + int update = configResourceManager.update(apiName, obj, request); + if(update > 0) { + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } else if(update == -1) { + return returnJson(objectMap, ErpInfo.TEST_USER.name, ErpInfo.TEST_USER.code); + } else { + return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code); + } + } + + @DeleteMapping(value = "/{apiName}/delete", produces = {"application/javascript", "application/json"}) + public String deleteResource(@PathVariable("apiName") String apiName, + @RequestParam("id") Long id, HttpServletRequest request)throws Exception { + Map objectMap = new HashMap(); + int delete = configResourceManager.delete(apiName, id, request); + if(delete > 0) { + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } else { + return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code); + } + } + + @DeleteMapping(value = "/{apiName}/deleteBatch", produces = {"application/javascript", "application/json"}) + public String batchDeleteResource(@PathVariable("apiName") String apiName, + @RequestParam("ids") String ids, HttpServletRequest request)throws Exception { + Map objectMap = new HashMap(); + int delete = configResourceManager.deleteBatch(apiName, ids, request); + if(delete > 0) { + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } else { + return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code); + } + } + + @GetMapping(value = "/{apiName}/checkIsNameExist") + public String checkIsNameExist(@PathVariable("apiName") String apiName, + @RequestParam Long id, @RequestParam(value ="name", required = false) String name, + HttpServletRequest request)throws Exception { + Map objectMap = new HashMap(); + int exist = configResourceManager.checkIsNameExist(apiName, id, name); + if(exist > 0) { + objectMap.put("status", true); + } else { + objectMap.put("status", false); + } + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } + + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/RoleController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/RoleController.java new file mode 100644 index 000000000..3bd7cc1bb --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/RoleController.java @@ -0,0 +1,72 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.Role; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.role.RoleService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.service.userBusiness.UserBusinessService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * @author ji sheng hua jshERP + */ +@RestController +@RequestMapping(value = "/role") +public class RoleController { + private Logger logger = LoggerFactory.getLogger(RoleController.class); + + @Resource + private RoleService roleService; + + @Resource + private UserBusinessService userBusinessService; + + /** + * 角色对应应用显示 + * @param request + * @return + */ + @GetMapping(value = "/findUserRole") + public JSONArray findUserRole(@RequestParam("UBType") String type, @RequestParam("UBKeyId") String keyId, + HttpServletRequest request)throws Exception { + JSONArray arr = new JSONArray(); + try { + List dataList = roleService.findUserRole(); + if (null != dataList) { + for (Role role : dataList) { + JSONObject item = new JSONObject(); + item.put("id", role.getId()); + item.put("text", role.getName()); + //勾选判断1 + Boolean flag = false; + try { + flag = userBusinessService.checkIsUserBusinessExist(type, keyId, "[" + role.getId().toString() + "]"); + } catch (Exception e) { + logger.error(">>>>>>>>>>>>>>>>>设置用户对应的角色:类型" + type + " KeyId为: " + keyId + " 存在异常!"); + } + if (flag == true) { + item.put("checked", true); + } + arr.add(item); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return arr; + } + + @PostMapping(value = "/list") + public List list(HttpServletRequest request)throws Exception { + return roleService.getRole(); + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/SequenceController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/SequenceController.java new file mode 100644 index 000000000..bd97c9c62 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/SequenceController.java @@ -0,0 +1,50 @@ +package com.jsh.erp.controller; + +import com.jsh.erp.service.depotHead.DepotHeadService; +import com.jsh.erp.service.sequence.SequenceService; +import com.jsh.erp.utils.BaseResponseInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ji-sheng-hua 752*718*920 + */ +@RestController +@RequestMapping(value = "/sequence") +public class SequenceController { + private Logger logger = LoggerFactory.getLogger(SequenceController.class); + + @Resource + private SequenceService sequenceService; + + /** + * 单据编号生成接口 + * @param request + * @return + */ + @GetMapping(value = "/buildNumber") + public BaseResponseInfo buildNumber(HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + Map map = new HashMap(); + try { + String number = sequenceService.buildOnlyNumber(); + map.put("defaultNumber", number); + res.code = 200; + res.data = map; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/SerialNumberController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/SerialNumberController.java new file mode 100644 index 000000000..046c50704 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/SerialNumberController.java @@ -0,0 +1,87 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.SerialNumberEx; +import com.jsh.erp.exception.BusinessParamCheckingException; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.serialNumber.SerialNumberService; +import com.jsh.erp.utils.ErpInfo; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; + +import static com.jsh.erp.utils.ResponseJsonUtil.returnJson; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/1/22 10:29 + */ +@RestController +public class SerialNumberController { + private Logger logger = LoggerFactory.getLogger(SerialNumberController.class); + + @Resource + private SerialNumberService serialNumberService; + /** + * create by: cjl + * description: + * 检查序列号是否存在 + * create time: 2019/1/22 11:02 + * @Param: id +  * @Param: materialName +  * @Param: serialNumber +  * @Param: request + * @return java.lang.Object + */ + @PostMapping("/serialNumber/checkIsExist") + @ResponseBody + public Object checkIsExist(@RequestParam("id") Long id, @RequestParam("materialName") String materialName, + @RequestParam("serialNumber") String serialNumber, HttpServletRequest request) throws Exception{ + JSONObject result = ExceptionConstants.standardSuccess(); + if(StringUtil.isEmpty(serialNumber)){ + throw new BusinessParamCheckingException(ExceptionConstants.SERIAL_NUMBERE_NOT_BE_EMPTY_CODE, + ExceptionConstants.SERIAL_NUMBERE_NOT_BE_EMPTY_MSG); + } + serialNumberService.checkIsExist(id, materialName, serialNumber); + return result; + } + + /** + * create by: cjl + * description: + *批量添加序列号 + * create time: 2019/1/29 15:11 + * @Param: materialName +  * @Param: serialNumberPrefix +  * @Param: batAddTotal +  * @Param: remark + * @return java.lang.Object + */ + @PostMapping("/serialNumber/batAddSerialNumber") + @ResponseBody + public String batAddSerialNumber(@RequestBody JSONObject jsonObject, HttpServletRequest request)throws Exception{ + Map objectMap = new HashMap<>(); + String materialCode = jsonObject.getString("materialCode"); + String serialNumberPrefix = jsonObject.getString("serialNumberPrefix"); + Integer batAddTotal = jsonObject.getInteger("batAddTotal"); + String remark = jsonObject.getString("remark"); + int insert = serialNumberService.batAddSerialNumber(materialCode,serialNumberPrefix,batAddTotal,remark); + if(insert > 0) { + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } else if(insert == -1) { + return returnJson(objectMap, ErpInfo.TEST_USER.name, ErpInfo.TEST_USER.code); + } else { + return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code); + } + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/SupplierController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/SupplierController.java new file mode 100644 index 000000000..05847826e --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/SupplierController.java @@ -0,0 +1,422 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.Supplier; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.supplier.SupplierService; +import com.jsh.erp.service.systemConfig.SystemConfigService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.service.userBusiness.UserBusinessService; +import com.jsh.erp.utils.*; +import jxl.Sheet; +import jxl.Workbook; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.dao.DataAccessException; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.jsh.erp.utils.ResponseJsonUtil.returnJson; + +/** + * @author ji|sheng|hua 华夏erp + */ +@RestController +@RequestMapping(value = "/supplier") +public class SupplierController { + private Logger logger = LoggerFactory.getLogger(SupplierController.class); + + @Resource + private SupplierService supplierService; + + @Resource + private UserBusinessService userBusinessService; + + @Resource + private SystemConfigService systemConfigService; + + @Resource + private UserService userService; + + /** + * 更新供应商-只更新预付款,其余用原来的值 + * @param supplierId + * @param advanceIn + * @param request + * @return + */ + @PostMapping(value = "/updateAdvanceIn") + public String updateAdvanceIn(@RequestParam("supplierId") Long supplierId, + @RequestParam("advanceIn") BigDecimal advanceIn, + HttpServletRequest request)throws Exception { + Map objectMap = new HashMap(); + int res = supplierService.updateAdvanceIn(supplierId, advanceIn); + if(res > 0) { + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } else { + return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code); + } + } + + /** + * 查找客户信息-下拉框 + * @param request + * @return + */ + @PostMapping(value = "/findBySelect_cus") + public JSONArray findBySelectCus(@RequestParam(value = "UBType", required = false) String ubType, + @RequestParam(value = "UBKeyId", required = false) String ubKeyId, + HttpServletRequest request) { + JSONArray arr = new JSONArray(); + try { + List supplierList = supplierService.findBySelectCus(); + JSONArray dataArray = new JSONArray(); + if (null != supplierList) { + boolean customerFlag = systemConfigService.getCustomerFlag(); + for (Supplier supplier : supplierList) { + JSONObject item = new JSONObject(); + //勾选判断1 + Boolean flag = false; + try { + flag = userBusinessService.checkIsUserBusinessExist(ubType, ubKeyId, "[" + supplier.getId().toString() + "]"); + } catch (DataAccessException e) { + logger.error(">>>>>>>>>>>>>>>>>查询用户对应的客户:存在异常!"); + } + if (!customerFlag || flag) { + item.put("id", supplier.getId()); + item.put("supplier", supplier.getSupplier()); //客户名称 + dataArray.add(item); + } + } + } + arr = dataArray; + } catch(Exception e){ + e.printStackTrace(); + } + return arr; + } + + /** + * 查找供应商信息-下拉框 + * @param request + * @return + */ + @PostMapping(value = "/findBySelect_sup") + public JSONArray findBySelectSup(HttpServletRequest request) throws Exception{ + JSONArray arr = new JSONArray(); + try { + List supplierList = supplierService.findBySelectSup(); + JSONArray dataArray = new JSONArray(); + if (null != supplierList) { + for (Supplier supplier : supplierList) { + JSONObject item = new JSONObject(); + item.put("id", supplier.getId()); + //供应商名称 + item.put("supplier", supplier.getSupplier()); + dataArray.add(item); + } + } + arr = dataArray; + } catch(Exception e){ + e.printStackTrace(); + } + return arr; + } + + /** + * 查找会员信息-下拉框 + * @param request + * @return + */ + @PostMapping(value = "/findBySelect_retail") + public JSONArray findBySelectRetail(HttpServletRequest request)throws Exception { + JSONArray arr = new JSONArray(); + try { + List supplierList = supplierService.findBySelectRetail(); + JSONArray dataArray = new JSONArray(); + if (null != supplierList) { + for (Supplier supplier : supplierList) { + JSONObject item = new JSONObject(); + item.put("id", supplier.getId()); + //客户名称 + item.put("supplier", supplier.getSupplier()); + item.put("advanceIn", supplier.getAdvanceIn()); //预付款金额 + dataArray.add(item); + } + } + arr = dataArray; + } catch(Exception e){ + e.printStackTrace(); + } + return arr; + } + + /** + * 根据id查找信息 + * @param supplierId + * @param request + * @return + */ + @GetMapping(value = "/findById") + public BaseResponseInfo findById(@RequestParam("supplierId") Long supplierId, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + try { + JSONArray dataArray = new JSONArray(); + List dataList = supplierService.findById(supplierId); + if (null != dataList) { + for (Supplier supplier : dataList) { + JSONObject item = new JSONObject(); + item.put("id", supplier.getId()); + //名称 + item.put("supplier", supplier.getSupplier()); + item.put("type", supplier.getType()); + item.put("contacts", supplier.getContacts()); + item.put("phonenum", supplier.getPhoneNum()); + item.put("email", supplier.getEmail()); + item.put("AdvanceIn", supplier.getAdvanceIn()); + item.put("BeginNeedGet", supplier.getBeginNeedGet()); + item.put("BeginNeedPay", supplier.getBeginNeedPay()); + /** + * 2018-01-28这里会有空指针异常 + * */ + if(supplier.getIsystem()!=null){ + item.put("isystem", supplier.getIsystem() == (short) 0 ? "是" : "否"); + } + item.put("description", supplier.getDescription()); + item.put("fax", supplier.getFax()); + item.put("telephone", supplier.getTelephone()); + item.put("address", supplier.getAddress()); + item.put("taxNum", supplier.getTaxNum()); + item.put("bankName", supplier.getBankName()); + item.put("accountNumber", supplier.getAccountNumber()); + item.put("taxRate", supplier.getTaxRate()); + item.put("enabled", supplier.getEnabled()); + dataArray.add(item); + } + res.code = 200; + res.data = dataArray; + } + } catch (Exception e) { + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } + + /** + * 批量设置状态-启用或者禁用 + * @param jsonObject + * @param request + * @return + */ + @PostMapping(value = "/batchSetStatus") + public String batchSetStatus(@RequestBody JSONObject jsonObject, + HttpServletRequest request)throws Exception { + Boolean status = jsonObject.getBoolean("status"); + String ids = jsonObject.getString("ids"); + Map objectMap = new HashMap<>(); + int res = supplierService.batchSetStatus(status, ids); + if(res > 0) { + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } else { + return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code); + } + } + + /** + * 用户对应客户显示 + * @param type + * @param keyId + * @param request + * @return + */ + @PostMapping(value = "/findUserCustomer") + public JSONArray findUserCustomer(@RequestParam("UBType") String type, @RequestParam("UBKeyId") String keyId, + HttpServletRequest request) throws Exception{ + JSONArray arr = new JSONArray(); + try { + List dataList = supplierService.findUserCustomer(); + //开始拼接json数据 + JSONObject outer = new JSONObject(); + outer.put("id", 1); + outer.put("text", "客户列表"); + outer.put("state", "open"); + //存放数据json数组 + JSONArray dataArray = new JSONArray(); + if (null != dataList) { + for (Supplier supplier : dataList) { + JSONObject item = new JSONObject(); + item.put("id", supplier.getId()); + item.put("text", supplier.getSupplier()); + //勾选判断1 + Boolean flag = false; + try { + flag = userBusinessService.checkIsUserBusinessExist(type, keyId, "[" + supplier.getId().toString() + "]"); + } catch (Exception e) { + logger.error(">>>>>>>>>>>>>>>>>设置用户对应的客户:类型" + type + " KeyId为: " + keyId + " 存在异常!"); + } + if (flag == true) { + item.put("checked", true); + } + //结束 + dataArray.add(item); + } + } + outer.put("children", dataArray); + arr.add(outer); + } catch (Exception e) { + e.printStackTrace(); + } + return arr; + } + + /** + * 生成excel表格 + * @param supplier + * @param type + * @param phonenum + * @param telephone + * @param request + * @param response + * @return + */ + @GetMapping(value = "/exportExcel") + public void exportExcel(@RequestParam("supplier") String supplier, + @RequestParam("type") String type, + @RequestParam("phonenum") String phonenum, + @RequestParam("telephone") String telephone, + HttpServletRequest request, HttpServletResponse response) { + try { + List dataList = supplierService.findByAll(supplier, type, phonenum, telephone); + String[] names = {"名称", "类型", "联系人", "电话", "电子邮箱", "预收款", "期初应收", "期初应付", "备注", "传真", "手机", "地址", "纳税人识别号", "开户行", "账号", "税率", "状态"}; + String title = "信息报表"; + List objects = new ArrayList(); + if (null != dataList) { + for (Supplier s : dataList) { + String[] objs = new String[17]; + objs[0] = s.getSupplier(); + objs[1] = s.getType(); + objs[2] = s.getContacts(); + objs[3] = s.getPhoneNum(); + objs[4] = s.getEmail(); + objs[5] = s.getAdvanceIn() == null? "" : s.getAdvanceIn().toString(); + objs[6] = s.getBeginNeedGet() == null? "" : s.getBeginNeedGet().toString(); + objs[7] = s.getBeginNeedPay() == null? "" : s.getBeginNeedPay().toString(); + objs[8] = s.getDescription(); + objs[9] = s.getFax(); + objs[10] = s.getTelephone(); + objs[11] = s.getAddress(); + objs[12] = s.getTaxNum(); + objs[13] = s.getBankName(); + objs[14] = s.getAccountNumber(); + objs[15] = s.getTaxRate() == null? "" : s.getTaxRate().toString(); + objs[16] = s.getEnabled() ? "启用" : "禁用"; + objects.add(objs); + } + } + File file = ExcelUtils.exportObjectsWithoutTitle(title, names, title, objects); + ExportExecUtil.showExec(file, file.getName(), response); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 导入excel表格 + * @param file + * @param request + * @param response + * @return + */ + @PostMapping(value = "/importExcel") + public BaseResponseInfo importExcel(MultipartFile file, + HttpServletRequest request, HttpServletResponse response) throws Exception{ + BaseResponseInfo res = new BaseResponseInfo(); + try { + importFun(file); + res.code = 200; + res.data = "导入成功"; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "导入失败"; + } + return res; + } + + public String importFun(MultipartFile file)throws Exception{ + BaseResponseInfo info = new BaseResponseInfo(); + Map data = new HashMap(); + String message = "成功"; + try { + Sheet src = null; + //文件合法性校验 + try { + Workbook workbook = Workbook.getWorkbook(file.getInputStream()); + src = workbook.getSheet(0); + } catch (Exception e) { + message = "导入文件不合法,请检查"; + data.put("message", message); + info.code = 400; + info.data = data; + } + //每行中数据顺序 "名称","类型","联系人","电话","电子邮箱","预收款","期初应收","期初应付","备注","传真","手机","地址","纳税人识别号","开户行","账号","税率","状态" + List sList = new ArrayList(); + for (int i = 1; i < src.getRows(); i++) { + Supplier s = new Supplier(); + s.setSupplier(ExcelUtils.getContent(src, i, 0)); + s.setType(ExcelUtils.getContent(src, i, 1)); + s.setContacts(ExcelUtils.getContent(src, i, 2)); + s.setPhoneNum(ExcelUtils.getContent(src, i, 3)); + s.setEmail(ExcelUtils.getContent(src, i, 4)); + s.setAdvanceIn(parseBigDecimalEx(ExcelUtils.getContent(src, i, 5))); + s.setBeginNeedGet(parseBigDecimalEx(ExcelUtils.getContent(src, i, 6))); + s.setBeginNeedPay(parseBigDecimalEx(ExcelUtils.getContent(src, i, 7))); + s.setDescription(ExcelUtils.getContent(src, i, 8)); + s.setFax(ExcelUtils.getContent(src, i, 9)); + s.setTelephone(ExcelUtils.getContent(src, i, 10)); + s.setAddress(ExcelUtils.getContent(src, i, 11)); + s.setTaxNum(ExcelUtils.getContent(src, i, 12)); + s.setBankName(ExcelUtils.getContent(src, i, 13)); + s.setAccountNumber(ExcelUtils.getContent(src, i, 14)); + s.setTaxRate(parseBigDecimalEx(ExcelUtils.getContent(src, i, 15))); + String enabled = ExcelUtils.getContent(src, i, 16); + s.setEnabled(enabled.equals("启用")? true: false); + s.setIsystem(Byte.parseByte("1")); + sList.add(s); + } + info = supplierService.importExcel(sList); + } catch (Exception e) { + e.printStackTrace(); + message = "导入失败"; + info.code = 500; + data.put("message", message); + info.data = data; + } + return null; + } + + public BigDecimal parseBigDecimalEx(String str)throws Exception{ + if(!StringUtil.isEmpty(str)) { + return new BigDecimal(str); + } else { + return null; + } + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/SystemConfigController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/SystemConfigController.java new file mode 100644 index 000000000..fd5ee1777 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/SystemConfigController.java @@ -0,0 +1,87 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.Depot; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.depot.DepotService; +import com.jsh.erp.service.systemConfig.SystemConfigService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.service.userBusiness.UserBusinessService; +import com.jsh.erp.utils.BaseResponseInfo; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.dao.DataAccessException; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * Description + * @Author: jishenghua + * @Date: 2021-3-13 0:01 + */ +@RestController +@RequestMapping(value = "/systemConfig") +public class SystemConfigController { + private Logger logger = LoggerFactory.getLogger(SystemConfigController.class); + + @Resource + private UserService userService; + + @Resource + private DepotService depotService; + + @Resource + private UserBusinessService userBusinessService; + + @Resource + private SystemConfigService systemConfigService; + + @GetMapping(value = "/getDictItems/{dictCode}") + public BaseResponseInfo getDictItems(@PathVariable String dictCode, + HttpServletRequest request) { + BaseResponseInfo res = new BaseResponseInfo(); + try { + Long userId = userService.getUserId(request); + JSONArray arr = new JSONArray(); + if(StringUtil.isNotEmpty(dictCode)) { + if (dictCode.equals("depotDict")) { + List dataList = depotService.findUserDepot(); + //开始拼接json数据 + if (null != dataList) { + boolean depotFlag = systemConfigService.getDepotFlag(); + for (Depot depot : dataList) { + JSONObject item = new JSONObject(); + //勾选判断1 + Boolean flag = false; + String type = "UserDepot"; + try { + flag = userBusinessService.checkIsUserBusinessExist(type, userId.toString(), "[" + depot.getId().toString() + "]"); + } catch (DataAccessException e) { + logger.error(">>>>>>>>>>>>>>>>>查询用户对应的仓库:类型" + type + " KeyId为: " + userId + " 存在异常!"); + } + if (!depotFlag || flag) { + item.put("value", depot.getId().toString()); + item.put("text", depot.getName()); + item.put("title", depot.getName()); + arr.add(item); + } + } + } + } + } + res.code = 200; + res.data = arr; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取数据失败"; + } + return res; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/UnitController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/UnitController.java new file mode 100644 index 000000000..033e52d94 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/UnitController.java @@ -0,0 +1,27 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.unit.UnitService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * Description + * + * @Author: qiankunpingtai + * @Date: 2019/4/1 15:38 + */ +@RestController +@RequestMapping(value = "/unit") +public class UnitController { + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/UserBusinessController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/UserBusinessController.java new file mode 100644 index 000000000..5f40e081f --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/UserBusinessController.java @@ -0,0 +1,94 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.UserBusiness; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.service.userBusiness.UserBusinessService; +import com.jsh.erp.utils.BaseResponseInfo; +import com.jsh.erp.utils.ErpInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.jsh.erp.utils.ResponseJsonUtil.returnJson; + +/** + * @author ji_sheng_hua jshERP + */ +@RestController +@RequestMapping(value = "/userBusiness") +public class UserBusinessController { + private Logger logger = LoggerFactory.getLogger(UserBusinessController.class); + + @Resource + private UserBusinessService userBusinessService; + @Resource + private UserService userService; + + @GetMapping(value = "/getBasicData") + public BaseResponseInfo getBasicData(@RequestParam(value = "KeyId") String keyId, + @RequestParam(value = "Type") String type, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + try { + List list = userBusinessService.getBasicData(keyId, type); + Map mapData = new HashMap(); + mapData.put("userBusinessList", list); + res.code = 200; + res.data = mapData; + } catch (Exception e) { + e.printStackTrace(); + res.code = 500; + res.data = "查询权限失败"; + } + return res; + } + + @GetMapping(value = "/checkIsValueExist") + public String checkIsValueExist(@RequestParam(value ="type", required = false) String type, + @RequestParam(value ="keyId", required = false) String keyId, + HttpServletRequest request)throws Exception { + Map objectMap = new HashMap(); + Long id = userBusinessService.checkIsValueExist(type, keyId); + if(id != null) { + objectMap.put("id", id); + } else { + objectMap.put("id", null); + } + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } + + /** + * 更新角色的按钮权限 + * @param userBusinessId + * @param btnStr + * @param request + * @return + */ + @PostMapping(value = "/updateBtnStr") + public BaseResponseInfo updateBtnStr(@RequestParam(value ="userBusinessId", required = false) Long userBusinessId, + @RequestParam(value ="btnStr", required = false) String btnStr, + HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + try { + int back = userBusinessService.updateBtnStr(userBusinessId, btnStr); + if(back > 0) { + res.code = 200; + res.data = "成功"; + } + } catch (Exception e) { + e.printStackTrace(); + res.code = 500; + res.data = "查询权限失败"; + } + return res; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/UserController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/UserController.java new file mode 100644 index 000000000..9bd5d3c94 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/UserController.java @@ -0,0 +1,401 @@ +package com.jsh.erp.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.SysLoginModel; +import com.jsh.erp.datasource.entities.Tenant; +import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.entities.UserEx; +import com.jsh.erp.datasource.vo.TreeNodeEx; +import com.jsh.erp.exception.BusinessParamCheckingException; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.redis.RedisService; +import com.jsh.erp.service.tenant.TenantService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.net.URLEncoder; +import java.security.NoSuchAlgorithmException; +import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import static com.jsh.erp.utils.ResponseJsonUtil.returnJson; + +/** + * @author ji_sheng_hua 华夏erp + */ +@RestController +@RequestMapping(value = "/user") +public class UserController { + private Logger logger = LoggerFactory.getLogger(UserController.class); + + @Value("${manage.roleId}") + private Integer manageRoleId; + + @Resource + private UserService userService; + + @Resource + private TenantService tenantService; + + @Resource + private LogService logService; + + @Resource + private RedisService redisService; + + private static String SUCCESS = "操作成功"; + private static String ERROR = "操作失败"; + private static final String HTTP = "http://"; + private static final String CODE_OK = "200"; + private static final String BASE_CHECK_CODES = "qwertyuiplkjhgfdsazxcvbnmQWERTYUPLKJHGFDSAZXCVBNM1234567890"; + + @PostMapping(value = "/login") + public BaseResponseInfo login(@RequestBody User userParam, + HttpServletRequest request)throws Exception { + logger.info("============用户登录 login 方法调用开始=============="); + String msgTip = ""; + User user=null; + BaseResponseInfo res = new BaseResponseInfo(); + try { + String loginName = userParam.getLoginName().trim(); + String password = userParam.getPassword().trim(); + //判断用户是否已经登录过,登录过不再处理 + Object userId = redisService.getObjectFromSessionByKey(request,"userId"); + if (userId != null) { + logger.info("====用户已经登录过, login 方法调用结束===="); + msgTip = "user already login"; + } + //获取用户状态 + int userStatus = -1; + try { + redisService.deleteObjectBySession(request,"tenantId"); + userStatus = userService.validateUser(loginName, password); + } catch (Exception e) { + e.printStackTrace(); + logger.error(">>>>>>>>>>>>>用户 " + loginName + " 登录 login 方法 访问服务层异常====", e); + msgTip = "access service exception"; + } + String token = UUID.randomUUID().toString().replaceAll("-", "") + ""; + switch (userStatus) { + case ExceptionCodeConstants.UserExceptionCode.USER_NOT_EXIST: + msgTip = "user is not exist"; + break; + case ExceptionCodeConstants.UserExceptionCode.USER_PASSWORD_ERROR: + msgTip = "user password error"; + break; + case ExceptionCodeConstants.UserExceptionCode.BLACK_USER: + msgTip = "user is black"; + break; + case ExceptionCodeConstants.UserExceptionCode.USER_ACCESS_EXCEPTION: + msgTip = "access service error"; + break; + default: + try { + msgTip = "user can login"; + //验证通过 ,可以登录,放入session,记录登录日志 + user = userService.getUserByLoginName(loginName); + if(user.getTenantId()!=null) { + token = token + "_" + user.getTenantId(); + } + redisService.storageObjectBySession(token,"userId",user.getId()); + String roleType = userService.getRoleTypeByUserId(user.getId()); //角色类型 + redisService.storageObjectBySession(token,"roleType",roleType); + if(user.getTenantId()!=null) { + Tenant tenant = tenantService.getTenantByTenantId(user.getTenantId()); + if(tenant!=null) { + Long tenantId = tenant.getTenantId(); + Integer userNumLimit = tenant.getUserNumLimit(); + Integer billsNumLimit = tenant.getBillsNumLimit(); + if(tenantId!=null) { + redisService.storageObjectBySession(token,"tenantId",tenantId); //租户tenantId + redisService.storageObjectBySession(token,"userNumLimit",userNumLimit); //用户限制数 + redisService.storageObjectBySession(token,"billsNumLimit",billsNumLimit); //单据限制数 + } + } + } + } catch (Exception e) { + e.printStackTrace(); + logger.error(">>>>>>>>>>>>>>>查询用户名为:" + loginName + " ,用户信息异常", e); + } + break; + } + Map data = new HashMap(); + data.put("msgTip", msgTip); + if(user!=null){ + redisService.storageObjectBySession(token,"token", token); + logService.insertLogWithUserId(user.getId(), user.getTenantId(), "用户", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_LOGIN).append(user.getLoginName()).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + data.put("token", token); + data.put("user", user); + } + res.code = 200; + res.data = data; + logger.info("===============用户登录 login 方法调用结束==============="); + } catch(Exception e){ + e.printStackTrace(); + logger.error(e.getMessage()); + res.code = 500; + res.data = "用户登录失败"; + } + return res; + } + + @GetMapping(value = "/getUserSession") + public BaseResponseInfo getSessionUser(HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + try { + Map data = new HashMap<>(); + Long userId = Long.parseLong(redisService.getObjectFromSessionByKey(request,"userId").toString()); + User user = userService.getUser(userId); + user.setPassword(null); + data.put("user", user); + res.code = 200; + res.data = data; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取session失败"; + } + return res; + } + + @GetMapping(value = "/logout") + public BaseResponseInfo logout(HttpServletRequest request, HttpServletResponse response)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + try { + redisService.deleteObjectBySession(request,"user"); + redisService.deleteObjectBySession(request,"tenantId"); + redisService.deleteObjectBySession(request,"userNumLimit"); + redisService.deleteObjectBySession(request,"billsNumLimit"); + response.sendRedirect("/login.html"); + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "退出失败"; + } + return res; + } + + @PostMapping(value = "/resetPwd") + public String resetPwd(@RequestBody JSONObject jsonObject, + HttpServletRequest request) throws Exception { + Map objectMap = new HashMap<>(); + Long id = jsonObject.getLong("id"); + String password = "123456"; + String md5Pwd = Tools.md5Encryp(password); + int update = userService.resetPwd(md5Pwd, id); + if(update > 0) { + return returnJson(objectMap, SUCCESS, ErpInfo.OK.code); + } else { + return returnJson(objectMap, ERROR, ErpInfo.ERROR.code); + } + } + + @PutMapping(value = "/updatePwd") + public String updatePwd(@RequestBody JSONObject jsonObject, HttpServletRequest request)throws Exception { + Integer flag = 0; + Map objectMap = new HashMap(); + try { + String info = ""; + Long userId = jsonObject.getLong("userId"); + String oldpwd = jsonObject.getString("oldpassword"); + String password = jsonObject.getString("password"); + User user = userService.getUser(userId); + String oldPassword = Tools.md5Encryp(oldpwd); + String md5Pwd = Tools.md5Encryp(password); + //必须和原始密码一致才可以更新密码 + if(user.getLoginName().equals("jsh")){ + flag = 3; //jsh用户不能修改密码 + info = "jsh用户不能修改密码"; + } else if (oldPassword.equalsIgnoreCase(user.getPassword())) { + user.setPassword(md5Pwd); + flag = userService.updateUserByObj(user); //1-成功 + info = "修改成功"; + } else { + flag = 2; //原始密码输入错误 + info = "原始密码输入错误"; + } + objectMap.put("status", flag); + if(flag > 0) { + return returnJson(objectMap, info, ErpInfo.OK.code); + } else { + return returnJson(objectMap, ERROR, ErpInfo.ERROR.code); + } + } catch (Exception e) { + logger.error(">>>>>>>>>>>>>修改用户ID为 : " + jsonObject.getLong("userId") + "密码信息失败", e); + flag = 3; + objectMap.put("status", flag); + return returnJson(objectMap, ERROR, ErpInfo.ERROR.code); + } + } + + /** + * 获取全部用户数据列表 + * @param request + * @return + */ + @GetMapping(value = "/getAllList") + public BaseResponseInfo getAllList(HttpServletRequest request)throws Exception { + BaseResponseInfo res = new BaseResponseInfo(); + try { + Map data = new HashMap(); + List dataList = userService.getUser(); + if(dataList!=null) { + data.put("userList", dataList); + } + res.code = 200; + res.data = data; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取失败"; + } + return res; + } + + /** + * 用户列表,用于用户下拉框 + * @param request + * @return + * @throws Exception + */ + @GetMapping(value = "/getUserList") + public JSONArray getUserList(HttpServletRequest request)throws Exception { + JSONArray dataArray = new JSONArray(); + try { + List dataList = userService.getUser(); + if (null != dataList) { + for (User user : dataList) { + JSONObject item = new JSONObject(); + item.put("id", user.getId()); + item.put("userName", user.getUsername()); + dataArray.add(item); + } + } + } catch(Exception e){ + e.printStackTrace(); + } + return dataArray; + } + + /** + * create by: cjl + * description: + * 新增用户及机构和用户关系 + * create time: 2019/3/8 16:06 + * @Param: beanJson + * @return java.lang.Object + */ + @PostMapping("/addUser") + @ResponseBody + public Object addUser(@RequestBody JSONObject obj, HttpServletRequest request)throws Exception{ + JSONObject result = ExceptionConstants.standardSuccess(); + Long userNumLimit = Long.parseLong(redisService.getObjectFromSessionByKey(request,"userNumLimit").toString()); + Long count = userService.countUser(null,null); + if(count>= userNumLimit) { + throw new BusinessParamCheckingException(ExceptionConstants.USER_OVER_LIMIT_FAILED_CODE, + ExceptionConstants.USER_OVER_LIMIT_FAILED_MSG); + } else { + UserEx ue= JSONObject.parseObject(obj.toJSONString(), UserEx.class); + userService.addUserAndOrgUserRel(ue); + } + return result; + } + + /** + * create by: cjl + * description: + * 修改用户及机构和用户关系 + * create time: 2019/3/8 16:06 + * @Param: beanJson + * @return java.lang.Object + */ + @PutMapping("/updateUser") + @ResponseBody + public Object updateUser(@RequestBody JSONObject obj)throws Exception{ + JSONObject result = ExceptionConstants.standardSuccess(); + UserEx ue= JSONObject.parseObject(obj.toJSONString(), UserEx.class); + userService.updateUserAndOrgUserRel(ue); + return result; + } + + /** + * 注册用户 + * @param ue + * @return + * @throws Exception + */ + @PostMapping(value = "/registerUser") + public Object registerUser(@RequestBody UserEx ue, + HttpServletRequest request)throws Exception{ + JSONObject result = ExceptionConstants.standardSuccess(); + ue.setUsername(ue.getLoginName()); + userService.checkUserNameAndLoginName(ue); //检查用户名和登录名 + ue = userService.registerUser(ue,manageRoleId,request); + return result; + } + + @RequestMapping("/getOrganizationUserTree") + public JSONArray getOrganizationUserTree()throws Exception{ + JSONArray arr=new JSONArray(); + List organizationUserTree= userService.getOrganizationUserTree(); + if(organizationUserTree!=null&&organizationUserTree.size()>0){ + for(TreeNodeEx node:organizationUserTree){ + String str=JSON.toJSONString(node); + JSONObject obj=JSON.parseObject(str); + arr.add(obj) ; + } + } + return arr; + } + @GetMapping("/getRoleTypeByUserId") + public BaseResponseInfo getRoleTypeByUserId(HttpServletRequest request) { + BaseResponseInfo res = new BaseResponseInfo(); + try { + Map data = new HashMap(); + String roleType = redisService.getObjectFromSessionByKey(request,"roleType").toString(); + data.put("roleType", roleType); + res.code = 200; + res.data = data; + } catch(Exception e){ + e.printStackTrace(); + res.code = 500; + res.data = "获取失败"; + } + return res; + } + + @GetMapping(value = "/randomImage/{key}") + public BaseResponseInfo randomImage(HttpServletResponse response,@PathVariable String key){ + BaseResponseInfo res = new BaseResponseInfo(); + try { + Map data = new HashMap<>(); + String codeNum = Tools.getCharAndNum(4); + String base64 = RandImageUtil.generate(codeNum); + data.put("codeNum", codeNum); + data.put("base64", base64); + res.code = 200; + res.data = data; + } catch (Exception e) { + e.printStackTrace(); + res.code = 500; + res.data = "获取失败"; + } + return res; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Account.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Account.java new file mode 100644 index 000000000..8327926c8 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Account.java @@ -0,0 +1,95 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; + +public class Account { + private Long id; + + private String name; + + private String serialNo; + + private BigDecimal initialAmount; + + private BigDecimal currentAmount; + + private String remark; + + private Boolean isDefault; + + private Long tenantId; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + public String getSerialNo() { + return serialNo; + } + + public void setSerialNo(String serialNo) { + this.serialNo = serialNo == null ? null : serialNo.trim(); + } + + public BigDecimal getInitialAmount() { + return initialAmount; + } + + public void setInitialAmount(BigDecimal initialAmount) { + this.initialAmount = initialAmount; + } + + public BigDecimal getCurrentAmount() { + return currentAmount; + } + + public void setCurrentAmount(BigDecimal currentAmount) { + this.currentAmount = currentAmount; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + public Boolean getIsDefault() { + return isDefault; + } + + public void setIsDefault(Boolean isDefault) { + this.isDefault = isDefault; + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountExample.java new file mode 100644 index 000000000..9f7515406 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountExample.java @@ -0,0 +1,780 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +public class AccountExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public AccountExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("name is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("name is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("name =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("name <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("name >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("name >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("name <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("name <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("name like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("name not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("name in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("name not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("name between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("name not between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andSerialNoIsNull() { + addCriterion("serial_no is null"); + return (Criteria) this; + } + + public Criteria andSerialNoIsNotNull() { + addCriterion("serial_no is not null"); + return (Criteria) this; + } + + public Criteria andSerialNoEqualTo(String value) { + addCriterion("serial_no =", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoNotEqualTo(String value) { + addCriterion("serial_no <>", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoGreaterThan(String value) { + addCriterion("serial_no >", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoGreaterThanOrEqualTo(String value) { + addCriterion("serial_no >=", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoLessThan(String value) { + addCriterion("serial_no <", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoLessThanOrEqualTo(String value) { + addCriterion("serial_no <=", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoLike(String value) { + addCriterion("serial_no like", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoNotLike(String value) { + addCriterion("serial_no not like", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoIn(List values) { + addCriterion("serial_no in", values, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoNotIn(List values) { + addCriterion("serial_no not in", values, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoBetween(String value1, String value2) { + addCriterion("serial_no between", value1, value2, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoNotBetween(String value1, String value2) { + addCriterion("serial_no not between", value1, value2, "serialNo"); + return (Criteria) this; + } + + public Criteria andInitialAmountIsNull() { + addCriterion("initial_amount is null"); + return (Criteria) this; + } + + public Criteria andInitialAmountIsNotNull() { + addCriterion("initial_amount is not null"); + return (Criteria) this; + } + + public Criteria andInitialAmountEqualTo(BigDecimal value) { + addCriterion("initial_amount =", value, "initialAmount"); + return (Criteria) this; + } + + public Criteria andInitialAmountNotEqualTo(BigDecimal value) { + addCriterion("initial_amount <>", value, "initialAmount"); + return (Criteria) this; + } + + public Criteria andInitialAmountGreaterThan(BigDecimal value) { + addCriterion("initial_amount >", value, "initialAmount"); + return (Criteria) this; + } + + public Criteria andInitialAmountGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("initial_amount >=", value, "initialAmount"); + return (Criteria) this; + } + + public Criteria andInitialAmountLessThan(BigDecimal value) { + addCriterion("initial_amount <", value, "initialAmount"); + return (Criteria) this; + } + + public Criteria andInitialAmountLessThanOrEqualTo(BigDecimal value) { + addCriterion("initial_amount <=", value, "initialAmount"); + return (Criteria) this; + } + + public Criteria andInitialAmountIn(List values) { + addCriterion("initial_amount in", values, "initialAmount"); + return (Criteria) this; + } + + public Criteria andInitialAmountNotIn(List values) { + addCriterion("initial_amount not in", values, "initialAmount"); + return (Criteria) this; + } + + public Criteria andInitialAmountBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("initial_amount between", value1, value2, "initialAmount"); + return (Criteria) this; + } + + public Criteria andInitialAmountNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("initial_amount not between", value1, value2, "initialAmount"); + return (Criteria) this; + } + + public Criteria andCurrentAmountIsNull() { + addCriterion("current_amount is null"); + return (Criteria) this; + } + + public Criteria andCurrentAmountIsNotNull() { + addCriterion("current_amount is not null"); + return (Criteria) this; + } + + public Criteria andCurrentAmountEqualTo(BigDecimal value) { + addCriterion("current_amount =", value, "currentAmount"); + return (Criteria) this; + } + + public Criteria andCurrentAmountNotEqualTo(BigDecimal value) { + addCriterion("current_amount <>", value, "currentAmount"); + return (Criteria) this; + } + + public Criteria andCurrentAmountGreaterThan(BigDecimal value) { + addCriterion("current_amount >", value, "currentAmount"); + return (Criteria) this; + } + + public Criteria andCurrentAmountGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("current_amount >=", value, "currentAmount"); + return (Criteria) this; + } + + public Criteria andCurrentAmountLessThan(BigDecimal value) { + addCriterion("current_amount <", value, "currentAmount"); + return (Criteria) this; + } + + public Criteria andCurrentAmountLessThanOrEqualTo(BigDecimal value) { + addCriterion("current_amount <=", value, "currentAmount"); + return (Criteria) this; + } + + public Criteria andCurrentAmountIn(List values) { + addCriterion("current_amount in", values, "currentAmount"); + return (Criteria) this; + } + + public Criteria andCurrentAmountNotIn(List values) { + addCriterion("current_amount not in", values, "currentAmount"); + return (Criteria) this; + } + + public Criteria andCurrentAmountBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("current_amount between", value1, value2, "currentAmount"); + return (Criteria) this; + } + + public Criteria andCurrentAmountNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("current_amount not between", value1, value2, "currentAmount"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andIsDefaultIsNull() { + addCriterion("is_default is null"); + return (Criteria) this; + } + + public Criteria andIsDefaultIsNotNull() { + addCriterion("is_default is not null"); + return (Criteria) this; + } + + public Criteria andIsDefaultEqualTo(Boolean value) { + addCriterion("is_default =", value, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultNotEqualTo(Boolean value) { + addCriterion("is_default <>", value, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultGreaterThan(Boolean value) { + addCriterion("is_default >", value, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultGreaterThanOrEqualTo(Boolean value) { + addCriterion("is_default >=", value, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultLessThan(Boolean value) { + addCriterion("is_default <", value, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultLessThanOrEqualTo(Boolean value) { + addCriterion("is_default <=", value, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultIn(List values) { + addCriterion("is_default in", values, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultNotIn(List values) { + addCriterion("is_default not in", values, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultBetween(Boolean value1, Boolean value2) { + addCriterion("is_default between", value1, value2, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultNotBetween(Boolean value1, Boolean value2) { + addCriterion("is_default not between", value1, value2, "isDefault"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountHead.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountHead.java new file mode 100644 index 000000000..f47c3234b --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountHead.java @@ -0,0 +1,136 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; +import java.util.Date; + +public class AccountHead { + private Long id; + + private String type; + + private Long organId; + + private Long handsPersonId; + + private Long creator; + + private BigDecimal changeAmount; + + private BigDecimal totalPrice; + + private Long accountId; + + private String billNo; + + private Date billTime; + + private String remark; + + private Long tenantId; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type == null ? null : type.trim(); + } + + public Long getOrganId() { + return organId; + } + + public void setOrganId(Long organId) { + this.organId = organId; + } + + public Long getHandsPersonId() { + return handsPersonId; + } + + public void setHandsPersonId(Long handsPersonId) { + this.handsPersonId = handsPersonId; + } + + public Long getCreator() { + return creator; + } + + public void setCreator(Long creator) { + this.creator = creator; + } + + public BigDecimal getChangeAmount() { + return changeAmount; + } + + public void setChangeAmount(BigDecimal changeAmount) { + this.changeAmount = changeAmount; + } + + public BigDecimal getTotalPrice() { + return totalPrice; + } + + public void setTotalPrice(BigDecimal totalPrice) { + this.totalPrice = totalPrice; + } + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + public String getBillNo() { + return billNo; + } + + public void setBillNo(String billNo) { + this.billNo = billNo == null ? null : billNo.trim(); + } + + public Date getBillTime() { + return billTime; + } + + public void setBillTime(Date billTime) { + this.billTime = billTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountHeadExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountHeadExample.java new file mode 100644 index 000000000..933509ea4 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountHeadExample.java @@ -0,0 +1,1021 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class AccountHeadExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public AccountHeadExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andTypeIsNull() { + addCriterion("type is null"); + return (Criteria) this; + } + + public Criteria andTypeIsNotNull() { + addCriterion("type is not null"); + return (Criteria) this; + } + + public Criteria andTypeEqualTo(String value) { + addCriterion("type =", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotEqualTo(String value) { + addCriterion("type <>", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThan(String value) { + addCriterion("type >", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThanOrEqualTo(String value) { + addCriterion("type >=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThan(String value) { + addCriterion("type <", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThanOrEqualTo(String value) { + addCriterion("type <=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLike(String value) { + addCriterion("type like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotLike(String value) { + addCriterion("type not like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeIn(List values) { + addCriterion("type in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotIn(List values) { + addCriterion("type not in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeBetween(String value1, String value2) { + addCriterion("type between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotBetween(String value1, String value2) { + addCriterion("type not between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andOrganIdIsNull() { + addCriterion("organ_id is null"); + return (Criteria) this; + } + + public Criteria andOrganIdIsNotNull() { + addCriterion("organ_id is not null"); + return (Criteria) this; + } + + public Criteria andOrganIdEqualTo(Long value) { + addCriterion("organ_id =", value, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdNotEqualTo(Long value) { + addCriterion("organ_id <>", value, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdGreaterThan(Long value) { + addCriterion("organ_id >", value, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdGreaterThanOrEqualTo(Long value) { + addCriterion("organ_id >=", value, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdLessThan(Long value) { + addCriterion("organ_id <", value, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdLessThanOrEqualTo(Long value) { + addCriterion("organ_id <=", value, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdIn(List values) { + addCriterion("organ_id in", values, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdNotIn(List values) { + addCriterion("organ_id not in", values, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdBetween(Long value1, Long value2) { + addCriterion("organ_id between", value1, value2, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdNotBetween(Long value1, Long value2) { + addCriterion("organ_id not between", value1, value2, "organId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdIsNull() { + addCriterion("hands_person_id is null"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdIsNotNull() { + addCriterion("hands_person_id is not null"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdEqualTo(Long value) { + addCriterion("hands_person_id =", value, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdNotEqualTo(Long value) { + addCriterion("hands_person_id <>", value, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdGreaterThan(Long value) { + addCriterion("hands_person_id >", value, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdGreaterThanOrEqualTo(Long value) { + addCriterion("hands_person_id >=", value, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdLessThan(Long value) { + addCriterion("hands_person_id <", value, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdLessThanOrEqualTo(Long value) { + addCriterion("hands_person_id <=", value, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdIn(List values) { + addCriterion("hands_person_id in", values, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdNotIn(List values) { + addCriterion("hands_person_id not in", values, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdBetween(Long value1, Long value2) { + addCriterion("hands_person_id between", value1, value2, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdNotBetween(Long value1, Long value2) { + addCriterion("hands_person_id not between", value1, value2, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andCreatorIsNull() { + addCriterion("creator is null"); + return (Criteria) this; + } + + public Criteria andCreatorIsNotNull() { + addCriterion("creator is not null"); + return (Criteria) this; + } + + public Criteria andCreatorEqualTo(Long value) { + addCriterion("creator =", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorNotEqualTo(Long value) { + addCriterion("creator <>", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorGreaterThan(Long value) { + addCriterion("creator >", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorGreaterThanOrEqualTo(Long value) { + addCriterion("creator >=", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorLessThan(Long value) { + addCriterion("creator <", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorLessThanOrEqualTo(Long value) { + addCriterion("creator <=", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorIn(List values) { + addCriterion("creator in", values, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorNotIn(List values) { + addCriterion("creator not in", values, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorBetween(Long value1, Long value2) { + addCriterion("creator between", value1, value2, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorNotBetween(Long value1, Long value2) { + addCriterion("creator not between", value1, value2, "creator"); + return (Criteria) this; + } + + public Criteria andChangeAmountIsNull() { + addCriterion("change_amount is null"); + return (Criteria) this; + } + + public Criteria andChangeAmountIsNotNull() { + addCriterion("change_amount is not null"); + return (Criteria) this; + } + + public Criteria andChangeAmountEqualTo(BigDecimal value) { + addCriterion("change_amount =", value, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountNotEqualTo(BigDecimal value) { + addCriterion("change_amount <>", value, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountGreaterThan(BigDecimal value) { + addCriterion("change_amount >", value, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("change_amount >=", value, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountLessThan(BigDecimal value) { + addCriterion("change_amount <", value, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountLessThanOrEqualTo(BigDecimal value) { + addCriterion("change_amount <=", value, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountIn(List values) { + addCriterion("change_amount in", values, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountNotIn(List values) { + addCriterion("change_amount not in", values, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("change_amount between", value1, value2, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("change_amount not between", value1, value2, "changeAmount"); + return (Criteria) this; + } + + public Criteria andTotalPriceIsNull() { + addCriterion("total_price is null"); + return (Criteria) this; + } + + public Criteria andTotalPriceIsNotNull() { + addCriterion("total_price is not null"); + return (Criteria) this; + } + + public Criteria andTotalPriceEqualTo(BigDecimal value) { + addCriterion("total_price =", value, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceNotEqualTo(BigDecimal value) { + addCriterion("total_price <>", value, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceGreaterThan(BigDecimal value) { + addCriterion("total_price >", value, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("total_price >=", value, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceLessThan(BigDecimal value) { + addCriterion("total_price <", value, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceLessThanOrEqualTo(BigDecimal value) { + addCriterion("total_price <=", value, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceIn(List values) { + addCriterion("total_price in", values, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceNotIn(List values) { + addCriterion("total_price not in", values, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("total_price between", value1, value2, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("total_price not between", value1, value2, "totalPrice"); + return (Criteria) this; + } + + public Criteria andAccountIdIsNull() { + addCriterion("account_id is null"); + return (Criteria) this; + } + + public Criteria andAccountIdIsNotNull() { + addCriterion("account_id is not null"); + return (Criteria) this; + } + + public Criteria andAccountIdEqualTo(Long value) { + addCriterion("account_id =", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdNotEqualTo(Long value) { + addCriterion("account_id <>", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdGreaterThan(Long value) { + addCriterion("account_id >", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdGreaterThanOrEqualTo(Long value) { + addCriterion("account_id >=", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdLessThan(Long value) { + addCriterion("account_id <", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdLessThanOrEqualTo(Long value) { + addCriterion("account_id <=", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdIn(List values) { + addCriterion("account_id in", values, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdNotIn(List values) { + addCriterion("account_id not in", values, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdBetween(Long value1, Long value2) { + addCriterion("account_id between", value1, value2, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdNotBetween(Long value1, Long value2) { + addCriterion("account_id not between", value1, value2, "accountId"); + return (Criteria) this; + } + + public Criteria andBillNoIsNull() { + addCriterion("bill_no is null"); + return (Criteria) this; + } + + public Criteria andBillNoIsNotNull() { + addCriterion("bill_no is not null"); + return (Criteria) this; + } + + public Criteria andBillNoEqualTo(String value) { + addCriterion("bill_no =", value, "billNo"); + return (Criteria) this; + } + + public Criteria andBillNoNotEqualTo(String value) { + addCriterion("bill_no <>", value, "billNo"); + return (Criteria) this; + } + + public Criteria andBillNoGreaterThan(String value) { + addCriterion("bill_no >", value, "billNo"); + return (Criteria) this; + } + + public Criteria andBillNoGreaterThanOrEqualTo(String value) { + addCriterion("bill_no >=", value, "billNo"); + return (Criteria) this; + } + + public Criteria andBillNoLessThan(String value) { + addCriterion("bill_no <", value, "billNo"); + return (Criteria) this; + } + + public Criteria andBillNoLessThanOrEqualTo(String value) { + addCriterion("bill_no <=", value, "billNo"); + return (Criteria) this; + } + + public Criteria andBillNoLike(String value) { + addCriterion("bill_no like", value, "billNo"); + return (Criteria) this; + } + + public Criteria andBillNoNotLike(String value) { + addCriterion("bill_no not like", value, "billNo"); + return (Criteria) this; + } + + public Criteria andBillNoIn(List values) { + addCriterion("bill_no in", values, "billNo"); + return (Criteria) this; + } + + public Criteria andBillNoNotIn(List values) { + addCriterion("bill_no not in", values, "billNo"); + return (Criteria) this; + } + + public Criteria andBillNoBetween(String value1, String value2) { + addCriterion("bill_no between", value1, value2, "billNo"); + return (Criteria) this; + } + + public Criteria andBillNoNotBetween(String value1, String value2) { + addCriterion("bill_no not between", value1, value2, "billNo"); + return (Criteria) this; + } + + public Criteria andBillTimeIsNull() { + addCriterion("bill_time is null"); + return (Criteria) this; + } + + public Criteria andBillTimeIsNotNull() { + addCriterion("bill_time is not null"); + return (Criteria) this; + } + + public Criteria andBillTimeEqualTo(Date value) { + addCriterion("bill_time =", value, "billTime"); + return (Criteria) this; + } + + public Criteria andBillTimeNotEqualTo(Date value) { + addCriterion("bill_time <>", value, "billTime"); + return (Criteria) this; + } + + public Criteria andBillTimeGreaterThan(Date value) { + addCriterion("bill_time >", value, "billTime"); + return (Criteria) this; + } + + public Criteria andBillTimeGreaterThanOrEqualTo(Date value) { + addCriterion("bill_time >=", value, "billTime"); + return (Criteria) this; + } + + public Criteria andBillTimeLessThan(Date value) { + addCriterion("bill_time <", value, "billTime"); + return (Criteria) this; + } + + public Criteria andBillTimeLessThanOrEqualTo(Date value) { + addCriterion("bill_time <=", value, "billTime"); + return (Criteria) this; + } + + public Criteria andBillTimeIn(List values) { + addCriterion("bill_time in", values, "billTime"); + return (Criteria) this; + } + + public Criteria andBillTimeNotIn(List values) { + addCriterion("bill_time not in", values, "billTime"); + return (Criteria) this; + } + + public Criteria andBillTimeBetween(Date value1, Date value2) { + addCriterion("bill_time between", value1, value2, "billTime"); + return (Criteria) this; + } + + public Criteria andBillTimeNotBetween(Date value1, Date value2) { + addCriterion("bill_time not between", value1, value2, "billTime"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountHeadVo4Body.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountHeadVo4Body.java new file mode 100644 index 000000000..fd3c9b700 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountHeadVo4Body.java @@ -0,0 +1,34 @@ +package com.jsh.erp.datasource.entities; + +public class AccountHeadVo4Body { + + private Long id; + + private String info; + + private String rows; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getRows() { + return rows; + } + + public void setRows(String rows) { + this.rows = rows; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountHeadVo4ListEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountHeadVo4ListEx.java new file mode 100644 index 000000000..df5f8dc09 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountHeadVo4ListEx.java @@ -0,0 +1,187 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; +import java.util.Date; + +public class AccountHeadVo4ListEx { + + private Long id; + + private String type; + + private Long organId; + + private Long handsPersonId; + + private BigDecimal changeAmount; + + private BigDecimal totalPrice; + + private Long accountId; + + private String billNo; + + private Date billTime; + + private String remark; + + private Long tenantId; + + private String deleteFlag; + + private String organName; + + private String handsPersonName; + + private Long creator; + + private String userName; + + private String accountName; + + private String billTimeStr; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public Long getOrganId() { + return organId; + } + + public void setOrganId(Long organId) { + this.organId = organId; + } + + public Long getHandsPersonId() { + return handsPersonId; + } + + public void setHandsPersonId(Long handsPersonId) { + this.handsPersonId = handsPersonId; + } + + public BigDecimal getChangeAmount() { + return changeAmount; + } + + public void setChangeAmount(BigDecimal changeAmount) { + this.changeAmount = changeAmount; + } + + public BigDecimal getTotalPrice() { + return totalPrice; + } + + public void setTotalPrice(BigDecimal totalPrice) { + this.totalPrice = totalPrice; + } + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + public String getBillNo() { + return billNo; + } + + public void setBillNo(String billNo) { + this.billNo = billNo; + } + + public Date getBillTime() { + return billTime; + } + + public void setBillTime(Date billTime) { + this.billTime = billTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag; + } + + public String getOrganName() { + return organName; + } + + public void setOrganName(String organName) { + this.organName = organName; + } + + public String getHandsPersonName() { + return handsPersonName; + } + + public void setHandsPersonName(String handsPersonName) { + this.handsPersonName = handsPersonName; + } + + public Long getCreator() { + return creator; + } + + public void setCreator(Long creator) { + this.creator = creator; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getAccountName() { + return accountName; + } + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + public String getBillTimeStr() { + return billTimeStr; + } + + public void setBillTimeStr(String billTimeStr) { + this.billTimeStr = billTimeStr; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountItem.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountItem.java new file mode 100644 index 000000000..2ef4550e1 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountItem.java @@ -0,0 +1,85 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; + +public class AccountItem { + private Long id; + + private Long headerId; + + private Long accountId; + + private Long inOutItemId; + + private BigDecimal eachAmount; + + private String remark; + + private Long tenantId; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getHeaderId() { + return headerId; + } + + public void setHeaderId(Long headerId) { + this.headerId = headerId; + } + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + public Long getInOutItemId() { + return inOutItemId; + } + + public void setInOutItemId(Long inOutItemId) { + this.inOutItemId = inOutItemId; + } + + public BigDecimal getEachAmount() { + return eachAmount; + } + + public void setEachAmount(BigDecimal eachAmount) { + this.eachAmount = eachAmount; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountItemExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountItemExample.java new file mode 100644 index 000000000..f45dc2c0d --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountItemExample.java @@ -0,0 +1,700 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +public class AccountItemExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public AccountItemExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andHeaderIdIsNull() { + addCriterion("header_id is null"); + return (Criteria) this; + } + + public Criteria andHeaderIdIsNotNull() { + addCriterion("header_id is not null"); + return (Criteria) this; + } + + public Criteria andHeaderIdEqualTo(Long value) { + addCriterion("header_id =", value, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdNotEqualTo(Long value) { + addCriterion("header_id <>", value, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdGreaterThan(Long value) { + addCriterion("header_id >", value, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdGreaterThanOrEqualTo(Long value) { + addCriterion("header_id >=", value, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdLessThan(Long value) { + addCriterion("header_id <", value, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdLessThanOrEqualTo(Long value) { + addCriterion("header_id <=", value, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdIn(List values) { + addCriterion("header_id in", values, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdNotIn(List values) { + addCriterion("header_id not in", values, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdBetween(Long value1, Long value2) { + addCriterion("header_id between", value1, value2, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdNotBetween(Long value1, Long value2) { + addCriterion("header_id not between", value1, value2, "headerId"); + return (Criteria) this; + } + + public Criteria andAccountIdIsNull() { + addCriterion("account_id is null"); + return (Criteria) this; + } + + public Criteria andAccountIdIsNotNull() { + addCriterion("account_id is not null"); + return (Criteria) this; + } + + public Criteria andAccountIdEqualTo(Long value) { + addCriterion("account_id =", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdNotEqualTo(Long value) { + addCriterion("account_id <>", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdGreaterThan(Long value) { + addCriterion("account_id >", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdGreaterThanOrEqualTo(Long value) { + addCriterion("account_id >=", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdLessThan(Long value) { + addCriterion("account_id <", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdLessThanOrEqualTo(Long value) { + addCriterion("account_id <=", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdIn(List values) { + addCriterion("account_id in", values, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdNotIn(List values) { + addCriterion("account_id not in", values, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdBetween(Long value1, Long value2) { + addCriterion("account_id between", value1, value2, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdNotBetween(Long value1, Long value2) { + addCriterion("account_id not between", value1, value2, "accountId"); + return (Criteria) this; + } + + public Criteria andInOutItemIdIsNull() { + addCriterion("in_out_item_id is null"); + return (Criteria) this; + } + + public Criteria andInOutItemIdIsNotNull() { + addCriterion("in_out_item_id is not null"); + return (Criteria) this; + } + + public Criteria andInOutItemIdEqualTo(Long value) { + addCriterion("in_out_item_id =", value, "inOutItemId"); + return (Criteria) this; + } + + public Criteria andInOutItemIdNotEqualTo(Long value) { + addCriterion("in_out_item_id <>", value, "inOutItemId"); + return (Criteria) this; + } + + public Criteria andInOutItemIdGreaterThan(Long value) { + addCriterion("in_out_item_id >", value, "inOutItemId"); + return (Criteria) this; + } + + public Criteria andInOutItemIdGreaterThanOrEqualTo(Long value) { + addCriterion("in_out_item_id >=", value, "inOutItemId"); + return (Criteria) this; + } + + public Criteria andInOutItemIdLessThan(Long value) { + addCriterion("in_out_item_id <", value, "inOutItemId"); + return (Criteria) this; + } + + public Criteria andInOutItemIdLessThanOrEqualTo(Long value) { + addCriterion("in_out_item_id <=", value, "inOutItemId"); + return (Criteria) this; + } + + public Criteria andInOutItemIdIn(List values) { + addCriterion("in_out_item_id in", values, "inOutItemId"); + return (Criteria) this; + } + + public Criteria andInOutItemIdNotIn(List values) { + addCriterion("in_out_item_id not in", values, "inOutItemId"); + return (Criteria) this; + } + + public Criteria andInOutItemIdBetween(Long value1, Long value2) { + addCriterion("in_out_item_id between", value1, value2, "inOutItemId"); + return (Criteria) this; + } + + public Criteria andInOutItemIdNotBetween(Long value1, Long value2) { + addCriterion("in_out_item_id not between", value1, value2, "inOutItemId"); + return (Criteria) this; + } + + public Criteria andEachAmountIsNull() { + addCriterion("each_amount is null"); + return (Criteria) this; + } + + public Criteria andEachAmountIsNotNull() { + addCriterion("each_amount is not null"); + return (Criteria) this; + } + + public Criteria andEachAmountEqualTo(BigDecimal value) { + addCriterion("each_amount =", value, "eachAmount"); + return (Criteria) this; + } + + public Criteria andEachAmountNotEqualTo(BigDecimal value) { + addCriterion("each_amount <>", value, "eachAmount"); + return (Criteria) this; + } + + public Criteria andEachAmountGreaterThan(BigDecimal value) { + addCriterion("each_amount >", value, "eachAmount"); + return (Criteria) this; + } + + public Criteria andEachAmountGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("each_amount >=", value, "eachAmount"); + return (Criteria) this; + } + + public Criteria andEachAmountLessThan(BigDecimal value) { + addCriterion("each_amount <", value, "eachAmount"); + return (Criteria) this; + } + + public Criteria andEachAmountLessThanOrEqualTo(BigDecimal value) { + addCriterion("each_amount <=", value, "eachAmount"); + return (Criteria) this; + } + + public Criteria andEachAmountIn(List values) { + addCriterion("each_amount in", values, "eachAmount"); + return (Criteria) this; + } + + public Criteria andEachAmountNotIn(List values) { + addCriterion("each_amount not in", values, "eachAmount"); + return (Criteria) this; + } + + public Criteria andEachAmountBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("each_amount between", value1, value2, "eachAmount"); + return (Criteria) this; + } + + public Criteria andEachAmountNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("each_amount not between", value1, value2, "eachAmount"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Depot.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Depot.java new file mode 100644 index 000000000..9001dff29 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Depot.java @@ -0,0 +1,389 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; + +public class Depot { + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_depot.id + * + * @mbggenerated + */ + private Long id; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_depot.name + * + * @mbggenerated + */ + private String name; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_depot.address + * + * @mbggenerated + */ + private String address; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_depot.warehousing + * + * @mbggenerated + */ + private BigDecimal warehousing; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_depot.truckage + * + * @mbggenerated + */ + private BigDecimal truckage; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_depot.type + * + * @mbggenerated + */ + private Integer type; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_depot.sort + * + * @mbggenerated + */ + private String sort; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_depot.remark + * + * @mbggenerated + */ + private String remark; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_depot.principal + * + * @mbggenerated + */ + private Long principal; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_depot.tenant_id + * + * @mbggenerated + */ + private Long tenantId; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_depot.delete_Flag + * + * @mbggenerated + */ + private String deleteFlag; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_depot.is_default + * + * @mbggenerated + */ + private Boolean isDefault; + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_depot.id + * + * @return the value of jsh_depot.id + * + * @mbggenerated + */ + public Long getId() { + return id; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_depot.id + * + * @param id the value for jsh_depot.id + * + * @mbggenerated + */ + public void setId(Long id) { + this.id = id; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_depot.name + * + * @return the value of jsh_depot.name + * + * @mbggenerated + */ + public String getName() { + return name; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_depot.name + * + * @param name the value for jsh_depot.name + * + * @mbggenerated + */ + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_depot.address + * + * @return the value of jsh_depot.address + * + * @mbggenerated + */ + public String getAddress() { + return address; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_depot.address + * + * @param address the value for jsh_depot.address + * + * @mbggenerated + */ + public void setAddress(String address) { + this.address = address == null ? null : address.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_depot.warehousing + * + * @return the value of jsh_depot.warehousing + * + * @mbggenerated + */ + public BigDecimal getWarehousing() { + return warehousing; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_depot.warehousing + * + * @param warehousing the value for jsh_depot.warehousing + * + * @mbggenerated + */ + public void setWarehousing(BigDecimal warehousing) { + this.warehousing = warehousing; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_depot.truckage + * + * @return the value of jsh_depot.truckage + * + * @mbggenerated + */ + public BigDecimal getTruckage() { + return truckage; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_depot.truckage + * + * @param truckage the value for jsh_depot.truckage + * + * @mbggenerated + */ + public void setTruckage(BigDecimal truckage) { + this.truckage = truckage; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_depot.type + * + * @return the value of jsh_depot.type + * + * @mbggenerated + */ + public Integer getType() { + return type; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_depot.type + * + * @param type the value for jsh_depot.type + * + * @mbggenerated + */ + public void setType(Integer type) { + this.type = type; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_depot.sort + * + * @return the value of jsh_depot.sort + * + * @mbggenerated + */ + public String getSort() { + return sort; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_depot.sort + * + * @param sort the value for jsh_depot.sort + * + * @mbggenerated + */ + public void setSort(String sort) { + this.sort = sort == null ? null : sort.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_depot.remark + * + * @return the value of jsh_depot.remark + * + * @mbggenerated + */ + public String getRemark() { + return remark; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_depot.remark + * + * @param remark the value for jsh_depot.remark + * + * @mbggenerated + */ + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_depot.principal + * + * @return the value of jsh_depot.principal + * + * @mbggenerated + */ + public Long getPrincipal() { + return principal; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_depot.principal + * + * @param principal the value for jsh_depot.principal + * + * @mbggenerated + */ + public void setPrincipal(Long principal) { + this.principal = principal; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_depot.tenant_id + * + * @return the value of jsh_depot.tenant_id + * + * @mbggenerated + */ + public Long getTenantId() { + return tenantId; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_depot.tenant_id + * + * @param tenantId the value for jsh_depot.tenant_id + * + * @mbggenerated + */ + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_depot.delete_Flag + * + * @return the value of jsh_depot.delete_Flag + * + * @mbggenerated + */ + public String getDeleteFlag() { + return deleteFlag; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_depot.delete_Flag + * + * @param deleteFlag the value for jsh_depot.delete_Flag + * + * @mbggenerated + */ + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_depot.is_default + * + * @return the value of jsh_depot.is_default + * + * @mbggenerated + */ + public Boolean getIsDefault() { + return isDefault; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_depot.is_default + * + * @param isDefault the value for jsh_depot.is_default + * + * @mbggenerated + */ + public void setIsDefault(Boolean isDefault) { + this.isDefault = isDefault; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotEx.java new file mode 100644 index 000000000..42f4ab561 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotEx.java @@ -0,0 +1,22 @@ +package com.jsh.erp.datasource.entities; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/2/25 11:40 + */ +@Data +public class DepotEx extends Depot{ + //负责人名字 + private String principalName; + + private BigDecimal initStock; + + private BigDecimal currentStock; + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotExample.java new file mode 100644 index 000000000..0c542e827 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotExample.java @@ -0,0 +1,1073 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +public class DepotExample { + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table jsh_depot + * + * @mbggenerated + */ + protected String orderByClause; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table jsh_depot + * + * @mbggenerated + */ + protected boolean distinct; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table jsh_depot + * + * @mbggenerated + */ + protected List oredCriteria; + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + public DepotExample() { + oredCriteria = new ArrayList(); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + public String getOrderByClause() { + return orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + public boolean isDistinct() { + return distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + public List getOredCriteria() { + return oredCriteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table jsh_depot + * + * @mbggenerated + */ + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("name is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("name is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("name =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("name <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("name >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("name >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("name <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("name <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("name like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("name not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("name in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("name not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("name between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("name not between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andAddressIsNull() { + addCriterion("address is null"); + return (Criteria) this; + } + + public Criteria andAddressIsNotNull() { + addCriterion("address is not null"); + return (Criteria) this; + } + + public Criteria andAddressEqualTo(String value) { + addCriterion("address =", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressNotEqualTo(String value) { + addCriterion("address <>", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressGreaterThan(String value) { + addCriterion("address >", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressGreaterThanOrEqualTo(String value) { + addCriterion("address >=", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressLessThan(String value) { + addCriterion("address <", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressLessThanOrEqualTo(String value) { + addCriterion("address <=", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressLike(String value) { + addCriterion("address like", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressNotLike(String value) { + addCriterion("address not like", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressIn(List values) { + addCriterion("address in", values, "address"); + return (Criteria) this; + } + + public Criteria andAddressNotIn(List values) { + addCriterion("address not in", values, "address"); + return (Criteria) this; + } + + public Criteria andAddressBetween(String value1, String value2) { + addCriterion("address between", value1, value2, "address"); + return (Criteria) this; + } + + public Criteria andAddressNotBetween(String value1, String value2) { + addCriterion("address not between", value1, value2, "address"); + return (Criteria) this; + } + + public Criteria andWarehousingIsNull() { + addCriterion("warehousing is null"); + return (Criteria) this; + } + + public Criteria andWarehousingIsNotNull() { + addCriterion("warehousing is not null"); + return (Criteria) this; + } + + public Criteria andWarehousingEqualTo(BigDecimal value) { + addCriterion("warehousing =", value, "warehousing"); + return (Criteria) this; + } + + public Criteria andWarehousingNotEqualTo(BigDecimal value) { + addCriterion("warehousing <>", value, "warehousing"); + return (Criteria) this; + } + + public Criteria andWarehousingGreaterThan(BigDecimal value) { + addCriterion("warehousing >", value, "warehousing"); + return (Criteria) this; + } + + public Criteria andWarehousingGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("warehousing >=", value, "warehousing"); + return (Criteria) this; + } + + public Criteria andWarehousingLessThan(BigDecimal value) { + addCriterion("warehousing <", value, "warehousing"); + return (Criteria) this; + } + + public Criteria andWarehousingLessThanOrEqualTo(BigDecimal value) { + addCriterion("warehousing <=", value, "warehousing"); + return (Criteria) this; + } + + public Criteria andWarehousingIn(List values) { + addCriterion("warehousing in", values, "warehousing"); + return (Criteria) this; + } + + public Criteria andWarehousingNotIn(List values) { + addCriterion("warehousing not in", values, "warehousing"); + return (Criteria) this; + } + + public Criteria andWarehousingBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("warehousing between", value1, value2, "warehousing"); + return (Criteria) this; + } + + public Criteria andWarehousingNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("warehousing not between", value1, value2, "warehousing"); + return (Criteria) this; + } + + public Criteria andTruckageIsNull() { + addCriterion("truckage is null"); + return (Criteria) this; + } + + public Criteria andTruckageIsNotNull() { + addCriterion("truckage is not null"); + return (Criteria) this; + } + + public Criteria andTruckageEqualTo(BigDecimal value) { + addCriterion("truckage =", value, "truckage"); + return (Criteria) this; + } + + public Criteria andTruckageNotEqualTo(BigDecimal value) { + addCriterion("truckage <>", value, "truckage"); + return (Criteria) this; + } + + public Criteria andTruckageGreaterThan(BigDecimal value) { + addCriterion("truckage >", value, "truckage"); + return (Criteria) this; + } + + public Criteria andTruckageGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("truckage >=", value, "truckage"); + return (Criteria) this; + } + + public Criteria andTruckageLessThan(BigDecimal value) { + addCriterion("truckage <", value, "truckage"); + return (Criteria) this; + } + + public Criteria andTruckageLessThanOrEqualTo(BigDecimal value) { + addCriterion("truckage <=", value, "truckage"); + return (Criteria) this; + } + + public Criteria andTruckageIn(List values) { + addCriterion("truckage in", values, "truckage"); + return (Criteria) this; + } + + public Criteria andTruckageNotIn(List values) { + addCriterion("truckage not in", values, "truckage"); + return (Criteria) this; + } + + public Criteria andTruckageBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("truckage between", value1, value2, "truckage"); + return (Criteria) this; + } + + public Criteria andTruckageNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("truckage not between", value1, value2, "truckage"); + return (Criteria) this; + } + + public Criteria andTypeIsNull() { + addCriterion("type is null"); + return (Criteria) this; + } + + public Criteria andTypeIsNotNull() { + addCriterion("type is not null"); + return (Criteria) this; + } + + public Criteria andTypeEqualTo(Integer value) { + addCriterion("type =", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotEqualTo(Integer value) { + addCriterion("type <>", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThan(Integer value) { + addCriterion("type >", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThanOrEqualTo(Integer value) { + addCriterion("type >=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThan(Integer value) { + addCriterion("type <", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThanOrEqualTo(Integer value) { + addCriterion("type <=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeIn(List values) { + addCriterion("type in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotIn(List values) { + addCriterion("type not in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeBetween(Integer value1, Integer value2) { + addCriterion("type between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotBetween(Integer value1, Integer value2) { + addCriterion("type not between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andSortIsNull() { + addCriterion("sort is null"); + return (Criteria) this; + } + + public Criteria andSortIsNotNull() { + addCriterion("sort is not null"); + return (Criteria) this; + } + + public Criteria andSortEqualTo(String value) { + addCriterion("sort =", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotEqualTo(String value) { + addCriterion("sort <>", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortGreaterThan(String value) { + addCriterion("sort >", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortGreaterThanOrEqualTo(String value) { + addCriterion("sort >=", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLessThan(String value) { + addCriterion("sort <", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLessThanOrEqualTo(String value) { + addCriterion("sort <=", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLike(String value) { + addCriterion("sort like", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotLike(String value) { + addCriterion("sort not like", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortIn(List values) { + addCriterion("sort in", values, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotIn(List values) { + addCriterion("sort not in", values, "sort"); + return (Criteria) this; + } + + public Criteria andSortBetween(String value1, String value2) { + addCriterion("sort between", value1, value2, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotBetween(String value1, String value2) { + addCriterion("sort not between", value1, value2, "sort"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andPrincipalIsNull() { + addCriterion("principal is null"); + return (Criteria) this; + } + + public Criteria andPrincipalIsNotNull() { + addCriterion("principal is not null"); + return (Criteria) this; + } + + public Criteria andPrincipalEqualTo(Long value) { + addCriterion("principal =", value, "principal"); + return (Criteria) this; + } + + public Criteria andPrincipalNotEqualTo(Long value) { + addCriterion("principal <>", value, "principal"); + return (Criteria) this; + } + + public Criteria andPrincipalGreaterThan(Long value) { + addCriterion("principal >", value, "principal"); + return (Criteria) this; + } + + public Criteria andPrincipalGreaterThanOrEqualTo(Long value) { + addCriterion("principal >=", value, "principal"); + return (Criteria) this; + } + + public Criteria andPrincipalLessThan(Long value) { + addCriterion("principal <", value, "principal"); + return (Criteria) this; + } + + public Criteria andPrincipalLessThanOrEqualTo(Long value) { + addCriterion("principal <=", value, "principal"); + return (Criteria) this; + } + + public Criteria andPrincipalIn(List values) { + addCriterion("principal in", values, "principal"); + return (Criteria) this; + } + + public Criteria andPrincipalNotIn(List values) { + addCriterion("principal not in", values, "principal"); + return (Criteria) this; + } + + public Criteria andPrincipalBetween(Long value1, Long value2) { + addCriterion("principal between", value1, value2, "principal"); + return (Criteria) this; + } + + public Criteria andPrincipalNotBetween(Long value1, Long value2) { + addCriterion("principal not between", value1, value2, "principal"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_Flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_Flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_Flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_Flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_Flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_Flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_Flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_Flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_Flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_Flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_Flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_Flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_Flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_Flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andIsDefaultIsNull() { + addCriterion("is_default is null"); + return (Criteria) this; + } + + public Criteria andIsDefaultIsNotNull() { + addCriterion("is_default is not null"); + return (Criteria) this; + } + + public Criteria andIsDefaultEqualTo(Boolean value) { + addCriterion("is_default =", value, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultNotEqualTo(Boolean value) { + addCriterion("is_default <>", value, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultGreaterThan(Boolean value) { + addCriterion("is_default >", value, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultGreaterThanOrEqualTo(Boolean value) { + addCriterion("is_default >=", value, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultLessThan(Boolean value) { + addCriterion("is_default <", value, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultLessThanOrEqualTo(Boolean value) { + addCriterion("is_default <=", value, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultIn(List values) { + addCriterion("is_default in", values, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultNotIn(List values) { + addCriterion("is_default not in", values, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultBetween(Boolean value1, Boolean value2) { + addCriterion("is_default between", value1, value2, "isDefault"); + return (Criteria) this; + } + + public Criteria andIsDefaultNotBetween(Boolean value1, Boolean value2) { + addCriterion("is_default not between", value1, value2, "isDefault"); + return (Criteria) this; + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table jsh_depot + * + * @mbggenerated do_not_delete_during_merge + */ + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table jsh_depot + * + * @mbggenerated + */ + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotHead.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotHead.java new file mode 100644 index 000000000..1d06bbdf1 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotHead.java @@ -0,0 +1,306 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; +import java.util.Date; + +public class DepotHead { + private Long id; + + private String type; + + private String subType; + + private String defaultNumber; + + private String number; + + private Date createTime; + + private Date operTime; + + private Long organId; + + private Long handsPersonId; + + private Long creator; + + private Long accountId; + + private BigDecimal changeAmount; + + private BigDecimal totalPrice; + + private String payType; + + private String billType; + + private String remark; + + private String salesMan; + + private String accountIdList; + + private String accountMoneyList; + + private BigDecimal discount; + + private BigDecimal discountMoney; + + private BigDecimal discountLastMoney; + + private BigDecimal otherMoney; + + private String otherMoneyList; + + private String otherMoneyItem; + + private Integer accountDay; + + private String status; + + private String linkNumber; + + private Long tenantId; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type == null ? null : type.trim(); + } + + public String getSubType() { + return subType; + } + + public void setSubType(String subType) { + this.subType = subType == null ? null : subType.trim(); + } + + public String getDefaultNumber() { + return defaultNumber; + } + + public void setDefaultNumber(String defaultNumber) { + this.defaultNumber = defaultNumber == null ? null : defaultNumber.trim(); + } + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number == null ? null : number.trim(); + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getOperTime() { + return operTime; + } + + public void setOperTime(Date operTime) { + this.operTime = operTime; + } + + public Long getOrganId() { + return organId; + } + + public void setOrganId(Long organId) { + this.organId = organId; + } + + public Long getHandsPersonId() { + return handsPersonId; + } + + public void setHandsPersonId(Long handsPersonId) { + this.handsPersonId = handsPersonId; + } + + public Long getCreator() { + return creator; + } + + public void setCreator(Long creator) { + this.creator = creator; + } + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + public BigDecimal getChangeAmount() { + return changeAmount; + } + + public void setChangeAmount(BigDecimal changeAmount) { + this.changeAmount = changeAmount; + } + + public BigDecimal getTotalPrice() { + return totalPrice; + } + + public void setTotalPrice(BigDecimal totalPrice) { + this.totalPrice = totalPrice; + } + + public String getPayType() { + return payType; + } + + public void setPayType(String payType) { + this.payType = payType == null ? null : payType.trim(); + } + + public String getBillType() { + return billType; + } + + public void setBillType(String billType) { + this.billType = billType == null ? null : billType.trim(); + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + public String getSalesMan() { + return salesMan; + } + + public void setSalesMan(String salesMan) { + this.salesMan = salesMan == null ? null : salesMan.trim(); + } + + public String getAccountIdList() { + return accountIdList; + } + + public void setAccountIdList(String accountIdList) { + this.accountIdList = accountIdList == null ? null : accountIdList.trim(); + } + + public String getAccountMoneyList() { + return accountMoneyList; + } + + public void setAccountMoneyList(String accountMoneyList) { + this.accountMoneyList = accountMoneyList == null ? null : accountMoneyList.trim(); + } + + public BigDecimal getDiscount() { + return discount; + } + + public void setDiscount(BigDecimal discount) { + this.discount = discount; + } + + public BigDecimal getDiscountMoney() { + return discountMoney; + } + + public void setDiscountMoney(BigDecimal discountMoney) { + this.discountMoney = discountMoney; + } + + public BigDecimal getDiscountLastMoney() { + return discountLastMoney; + } + + public void setDiscountLastMoney(BigDecimal discountLastMoney) { + this.discountLastMoney = discountLastMoney; + } + + public BigDecimal getOtherMoney() { + return otherMoney; + } + + public void setOtherMoney(BigDecimal otherMoney) { + this.otherMoney = otherMoney; + } + + public String getOtherMoneyList() { + return otherMoneyList; + } + + public void setOtherMoneyList(String otherMoneyList) { + this.otherMoneyList = otherMoneyList == null ? null : otherMoneyList.trim(); + } + + public String getOtherMoneyItem() { + return otherMoneyItem; + } + + public void setOtherMoneyItem(String otherMoneyItem) { + this.otherMoneyItem = otherMoneyItem == null ? null : otherMoneyItem.trim(); + } + + public Integer getAccountDay() { + return accountDay; + } + + public void setAccountDay(Integer accountDay) { + this.accountDay = accountDay; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status == null ? null : status.trim(); + } + + public String getLinkNumber() { + return linkNumber; + } + + public void setLinkNumber(String linkNumber) { + this.linkNumber = linkNumber == null ? null : linkNumber.trim(); + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotHeadExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotHeadExample.java new file mode 100644 index 000000000..e3ae76fae --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotHeadExample.java @@ -0,0 +1,2151 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class DepotHeadExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public DepotHeadExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andTypeIsNull() { + addCriterion("type is null"); + return (Criteria) this; + } + + public Criteria andTypeIsNotNull() { + addCriterion("type is not null"); + return (Criteria) this; + } + + public Criteria andTypeEqualTo(String value) { + addCriterion("type =", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotEqualTo(String value) { + addCriterion("type <>", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThan(String value) { + addCriterion("type >", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThanOrEqualTo(String value) { + addCriterion("type >=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThan(String value) { + addCriterion("type <", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThanOrEqualTo(String value) { + addCriterion("type <=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLike(String value) { + addCriterion("type like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotLike(String value) { + addCriterion("type not like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeIn(List values) { + addCriterion("type in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotIn(List values) { + addCriterion("type not in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeBetween(String value1, String value2) { + addCriterion("type between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotBetween(String value1, String value2) { + addCriterion("type not between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andSubTypeIsNull() { + addCriterion("sub_type is null"); + return (Criteria) this; + } + + public Criteria andSubTypeIsNotNull() { + addCriterion("sub_type is not null"); + return (Criteria) this; + } + + public Criteria andSubTypeEqualTo(String value) { + addCriterion("sub_type =", value, "subType"); + return (Criteria) this; + } + + public Criteria andSubTypeNotEqualTo(String value) { + addCriterion("sub_type <>", value, "subType"); + return (Criteria) this; + } + + public Criteria andSubTypeGreaterThan(String value) { + addCriterion("sub_type >", value, "subType"); + return (Criteria) this; + } + + public Criteria andSubTypeGreaterThanOrEqualTo(String value) { + addCriterion("sub_type >=", value, "subType"); + return (Criteria) this; + } + + public Criteria andSubTypeLessThan(String value) { + addCriterion("sub_type <", value, "subType"); + return (Criteria) this; + } + + public Criteria andSubTypeLessThanOrEqualTo(String value) { + addCriterion("sub_type <=", value, "subType"); + return (Criteria) this; + } + + public Criteria andSubTypeLike(String value) { + addCriterion("sub_type like", value, "subType"); + return (Criteria) this; + } + + public Criteria andSubTypeNotLike(String value) { + addCriterion("sub_type not like", value, "subType"); + return (Criteria) this; + } + + public Criteria andSubTypeIn(List values) { + addCriterion("sub_type in", values, "subType"); + return (Criteria) this; + } + + public Criteria andSubTypeNotIn(List values) { + addCriterion("sub_type not in", values, "subType"); + return (Criteria) this; + } + + public Criteria andSubTypeBetween(String value1, String value2) { + addCriterion("sub_type between", value1, value2, "subType"); + return (Criteria) this; + } + + public Criteria andSubTypeNotBetween(String value1, String value2) { + addCriterion("sub_type not between", value1, value2, "subType"); + return (Criteria) this; + } + + public Criteria andDefaultNumberIsNull() { + addCriterion("default_number is null"); + return (Criteria) this; + } + + public Criteria andDefaultNumberIsNotNull() { + addCriterion("default_number is not null"); + return (Criteria) this; + } + + public Criteria andDefaultNumberEqualTo(String value) { + addCriterion("default_number =", value, "defaultNumber"); + return (Criteria) this; + } + + public Criteria andDefaultNumberNotEqualTo(String value) { + addCriterion("default_number <>", value, "defaultNumber"); + return (Criteria) this; + } + + public Criteria andDefaultNumberGreaterThan(String value) { + addCriterion("default_number >", value, "defaultNumber"); + return (Criteria) this; + } + + public Criteria andDefaultNumberGreaterThanOrEqualTo(String value) { + addCriterion("default_number >=", value, "defaultNumber"); + return (Criteria) this; + } + + public Criteria andDefaultNumberLessThan(String value) { + addCriterion("default_number <", value, "defaultNumber"); + return (Criteria) this; + } + + public Criteria andDefaultNumberLessThanOrEqualTo(String value) { + addCriterion("default_number <=", value, "defaultNumber"); + return (Criteria) this; + } + + public Criteria andDefaultNumberLike(String value) { + addCriterion("default_number like", value, "defaultNumber"); + return (Criteria) this; + } + + public Criteria andDefaultNumberNotLike(String value) { + addCriterion("default_number not like", value, "defaultNumber"); + return (Criteria) this; + } + + public Criteria andDefaultNumberIn(List values) { + addCriterion("default_number in", values, "defaultNumber"); + return (Criteria) this; + } + + public Criteria andDefaultNumberNotIn(List values) { + addCriterion("default_number not in", values, "defaultNumber"); + return (Criteria) this; + } + + public Criteria andDefaultNumberBetween(String value1, String value2) { + addCriterion("default_number between", value1, value2, "defaultNumber"); + return (Criteria) this; + } + + public Criteria andDefaultNumberNotBetween(String value1, String value2) { + addCriterion("default_number not between", value1, value2, "defaultNumber"); + return (Criteria) this; + } + + public Criteria andNumberIsNull() { + addCriterion("number is null"); + return (Criteria) this; + } + + public Criteria andNumberIsNotNull() { + addCriterion("number is not null"); + return (Criteria) this; + } + + public Criteria andNumberEqualTo(String value) { + addCriterion("number =", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberNotEqualTo(String value) { + addCriterion("number <>", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberGreaterThan(String value) { + addCriterion("number >", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberGreaterThanOrEqualTo(String value) { + addCriterion("number >=", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberLessThan(String value) { + addCriterion("number <", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberLessThanOrEqualTo(String value) { + addCriterion("number <=", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberLike(String value) { + addCriterion("number like", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberNotLike(String value) { + addCriterion("number not like", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberIn(List values) { + addCriterion("number in", values, "number"); + return (Criteria) this; + } + + public Criteria andNumberNotIn(List values) { + addCriterion("number not in", values, "number"); + return (Criteria) this; + } + + public Criteria andNumberBetween(String value1, String value2) { + addCriterion("number between", value1, value2, "number"); + return (Criteria) this; + } + + public Criteria andNumberNotBetween(String value1, String value2) { + addCriterion("number not between", value1, value2, "number"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andOperTimeIsNull() { + addCriterion("oper_time is null"); + return (Criteria) this; + } + + public Criteria andOperTimeIsNotNull() { + addCriterion("oper_time is not null"); + return (Criteria) this; + } + + public Criteria andOperTimeEqualTo(Date value) { + addCriterion("oper_time =", value, "operTime"); + return (Criteria) this; + } + + public Criteria andOperTimeNotEqualTo(Date value) { + addCriterion("oper_time <>", value, "operTime"); + return (Criteria) this; + } + + public Criteria andOperTimeGreaterThan(Date value) { + addCriterion("oper_time >", value, "operTime"); + return (Criteria) this; + } + + public Criteria andOperTimeGreaterThanOrEqualTo(Date value) { + addCriterion("oper_time >=", value, "operTime"); + return (Criteria) this; + } + + public Criteria andOperTimeLessThan(Date value) { + addCriterion("oper_time <", value, "operTime"); + return (Criteria) this; + } + + public Criteria andOperTimeLessThanOrEqualTo(Date value) { + addCriterion("oper_time <=", value, "operTime"); + return (Criteria) this; + } + + public Criteria andOperTimeIn(List values) { + addCriterion("oper_time in", values, "operTime"); + return (Criteria) this; + } + + public Criteria andOperTimeNotIn(List values) { + addCriterion("oper_time not in", values, "operTime"); + return (Criteria) this; + } + + public Criteria andOperTimeBetween(Date value1, Date value2) { + addCriterion("oper_time between", value1, value2, "operTime"); + return (Criteria) this; + } + + public Criteria andOperTimeNotBetween(Date value1, Date value2) { + addCriterion("oper_time not between", value1, value2, "operTime"); + return (Criteria) this; + } + + public Criteria andOrganIdIsNull() { + addCriterion("organ_id is null"); + return (Criteria) this; + } + + public Criteria andOrganIdIsNotNull() { + addCriterion("organ_id is not null"); + return (Criteria) this; + } + + public Criteria andOrganIdEqualTo(Long value) { + addCriterion("organ_id =", value, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdNotEqualTo(Long value) { + addCriterion("organ_id <>", value, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdGreaterThan(Long value) { + addCriterion("organ_id >", value, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdGreaterThanOrEqualTo(Long value) { + addCriterion("organ_id >=", value, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdLessThan(Long value) { + addCriterion("organ_id <", value, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdLessThanOrEqualTo(Long value) { + addCriterion("organ_id <=", value, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdIn(List values) { + addCriterion("organ_id in", values, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdNotIn(List values) { + addCriterion("organ_id not in", values, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdBetween(Long value1, Long value2) { + addCriterion("organ_id between", value1, value2, "organId"); + return (Criteria) this; + } + + public Criteria andOrganIdNotBetween(Long value1, Long value2) { + addCriterion("organ_id not between", value1, value2, "organId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdIsNull() { + addCriterion("hands_person_id is null"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdIsNotNull() { + addCriterion("hands_person_id is not null"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdEqualTo(Long value) { + addCriterion("hands_person_id =", value, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdNotEqualTo(Long value) { + addCriterion("hands_person_id <>", value, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdGreaterThan(Long value) { + addCriterion("hands_person_id >", value, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdGreaterThanOrEqualTo(Long value) { + addCriterion("hands_person_id >=", value, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdLessThan(Long value) { + addCriterion("hands_person_id <", value, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdLessThanOrEqualTo(Long value) { + addCriterion("hands_person_id <=", value, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdIn(List values) { + addCriterion("hands_person_id in", values, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdNotIn(List values) { + addCriterion("hands_person_id not in", values, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdBetween(Long value1, Long value2) { + addCriterion("hands_person_id between", value1, value2, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andHandsPersonIdNotBetween(Long value1, Long value2) { + addCriterion("hands_person_id not between", value1, value2, "handsPersonId"); + return (Criteria) this; + } + + public Criteria andCreatorIsNull() { + addCriterion("creator is null"); + return (Criteria) this; + } + + public Criteria andCreatorIsNotNull() { + addCriterion("creator is not null"); + return (Criteria) this; + } + + public Criteria andCreatorEqualTo(Long value) { + addCriterion("creator =", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorNotEqualTo(Long value) { + addCriterion("creator <>", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorGreaterThan(Long value) { + addCriterion("creator >", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorGreaterThanOrEqualTo(Long value) { + addCriterion("creator >=", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorLessThan(Long value) { + addCriterion("creator <", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorLessThanOrEqualTo(Long value) { + addCriterion("creator <=", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorIn(List values) { + addCriterion("creator in", values, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorNotIn(List values) { + addCriterion("creator not in", values, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorBetween(Long value1, Long value2) { + addCriterion("creator between", value1, value2, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorNotBetween(Long value1, Long value2) { + addCriterion("creator not between", value1, value2, "creator"); + return (Criteria) this; + } + + public Criteria andAccountIdIsNull() { + addCriterion("account_id is null"); + return (Criteria) this; + } + + public Criteria andAccountIdIsNotNull() { + addCriterion("account_id is not null"); + return (Criteria) this; + } + + public Criteria andAccountIdEqualTo(Long value) { + addCriterion("account_id =", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdNotEqualTo(Long value) { + addCriterion("account_id <>", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdGreaterThan(Long value) { + addCriterion("account_id >", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdGreaterThanOrEqualTo(Long value) { + addCriterion("account_id >=", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdLessThan(Long value) { + addCriterion("account_id <", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdLessThanOrEqualTo(Long value) { + addCriterion("account_id <=", value, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdIn(List values) { + addCriterion("account_id in", values, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdNotIn(List values) { + addCriterion("account_id not in", values, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdBetween(Long value1, Long value2) { + addCriterion("account_id between", value1, value2, "accountId"); + return (Criteria) this; + } + + public Criteria andAccountIdNotBetween(Long value1, Long value2) { + addCriterion("account_id not between", value1, value2, "accountId"); + return (Criteria) this; + } + + public Criteria andChangeAmountIsNull() { + addCriterion("change_amount is null"); + return (Criteria) this; + } + + public Criteria andChangeAmountIsNotNull() { + addCriterion("change_amount is not null"); + return (Criteria) this; + } + + public Criteria andChangeAmountEqualTo(BigDecimal value) { + addCriterion("change_amount =", value, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountNotEqualTo(BigDecimal value) { + addCriterion("change_amount <>", value, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountGreaterThan(BigDecimal value) { + addCriterion("change_amount >", value, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("change_amount >=", value, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountLessThan(BigDecimal value) { + addCriterion("change_amount <", value, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountLessThanOrEqualTo(BigDecimal value) { + addCriterion("change_amount <=", value, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountIn(List values) { + addCriterion("change_amount in", values, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountNotIn(List values) { + addCriterion("change_amount not in", values, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("change_amount between", value1, value2, "changeAmount"); + return (Criteria) this; + } + + public Criteria andChangeAmountNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("change_amount not between", value1, value2, "changeAmount"); + return (Criteria) this; + } + + public Criteria andTotalPriceIsNull() { + addCriterion("total_price is null"); + return (Criteria) this; + } + + public Criteria andTotalPriceIsNotNull() { + addCriterion("total_price is not null"); + return (Criteria) this; + } + + public Criteria andTotalPriceEqualTo(BigDecimal value) { + addCriterion("total_price =", value, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceNotEqualTo(BigDecimal value) { + addCriterion("total_price <>", value, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceGreaterThan(BigDecimal value) { + addCriterion("total_price >", value, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("total_price >=", value, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceLessThan(BigDecimal value) { + addCriterion("total_price <", value, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceLessThanOrEqualTo(BigDecimal value) { + addCriterion("total_price <=", value, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceIn(List values) { + addCriterion("total_price in", values, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceNotIn(List values) { + addCriterion("total_price not in", values, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("total_price between", value1, value2, "totalPrice"); + return (Criteria) this; + } + + public Criteria andTotalPriceNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("total_price not between", value1, value2, "totalPrice"); + return (Criteria) this; + } + + public Criteria andPayTypeIsNull() { + addCriterion("pay_type is null"); + return (Criteria) this; + } + + public Criteria andPayTypeIsNotNull() { + addCriterion("pay_type is not null"); + return (Criteria) this; + } + + public Criteria andPayTypeEqualTo(String value) { + addCriterion("pay_type =", value, "payType"); + return (Criteria) this; + } + + public Criteria andPayTypeNotEqualTo(String value) { + addCriterion("pay_type <>", value, "payType"); + return (Criteria) this; + } + + public Criteria andPayTypeGreaterThan(String value) { + addCriterion("pay_type >", value, "payType"); + return (Criteria) this; + } + + public Criteria andPayTypeGreaterThanOrEqualTo(String value) { + addCriterion("pay_type >=", value, "payType"); + return (Criteria) this; + } + + public Criteria andPayTypeLessThan(String value) { + addCriterion("pay_type <", value, "payType"); + return (Criteria) this; + } + + public Criteria andPayTypeLessThanOrEqualTo(String value) { + addCriterion("pay_type <=", value, "payType"); + return (Criteria) this; + } + + public Criteria andPayTypeLike(String value) { + addCriterion("pay_type like", value, "payType"); + return (Criteria) this; + } + + public Criteria andPayTypeNotLike(String value) { + addCriterion("pay_type not like", value, "payType"); + return (Criteria) this; + } + + public Criteria andPayTypeIn(List values) { + addCriterion("pay_type in", values, "payType"); + return (Criteria) this; + } + + public Criteria andPayTypeNotIn(List values) { + addCriterion("pay_type not in", values, "payType"); + return (Criteria) this; + } + + public Criteria andPayTypeBetween(String value1, String value2) { + addCriterion("pay_type between", value1, value2, "payType"); + return (Criteria) this; + } + + public Criteria andPayTypeNotBetween(String value1, String value2) { + addCriterion("pay_type not between", value1, value2, "payType"); + return (Criteria) this; + } + + public Criteria andBillTypeIsNull() { + addCriterion("bill_type is null"); + return (Criteria) this; + } + + public Criteria andBillTypeIsNotNull() { + addCriterion("bill_type is not null"); + return (Criteria) this; + } + + public Criteria andBillTypeEqualTo(String value) { + addCriterion("bill_type =", value, "billType"); + return (Criteria) this; + } + + public Criteria andBillTypeNotEqualTo(String value) { + addCriterion("bill_type <>", value, "billType"); + return (Criteria) this; + } + + public Criteria andBillTypeGreaterThan(String value) { + addCriterion("bill_type >", value, "billType"); + return (Criteria) this; + } + + public Criteria andBillTypeGreaterThanOrEqualTo(String value) { + addCriterion("bill_type >=", value, "billType"); + return (Criteria) this; + } + + public Criteria andBillTypeLessThan(String value) { + addCriterion("bill_type <", value, "billType"); + return (Criteria) this; + } + + public Criteria andBillTypeLessThanOrEqualTo(String value) { + addCriterion("bill_type <=", value, "billType"); + return (Criteria) this; + } + + public Criteria andBillTypeLike(String value) { + addCriterion("bill_type like", value, "billType"); + return (Criteria) this; + } + + public Criteria andBillTypeNotLike(String value) { + addCriterion("bill_type not like", value, "billType"); + return (Criteria) this; + } + + public Criteria andBillTypeIn(List values) { + addCriterion("bill_type in", values, "billType"); + return (Criteria) this; + } + + public Criteria andBillTypeNotIn(List values) { + addCriterion("bill_type not in", values, "billType"); + return (Criteria) this; + } + + public Criteria andBillTypeBetween(String value1, String value2) { + addCriterion("bill_type between", value1, value2, "billType"); + return (Criteria) this; + } + + public Criteria andBillTypeNotBetween(String value1, String value2) { + addCriterion("bill_type not between", value1, value2, "billType"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andSalesManIsNull() { + addCriterion("sales_man is null"); + return (Criteria) this; + } + + public Criteria andSalesManIsNotNull() { + addCriterion("sales_man is not null"); + return (Criteria) this; + } + + public Criteria andSalesManEqualTo(String value) { + addCriterion("sales_man =", value, "salesMan"); + return (Criteria) this; + } + + public Criteria andSalesManNotEqualTo(String value) { + addCriterion("sales_man <>", value, "salesMan"); + return (Criteria) this; + } + + public Criteria andSalesManGreaterThan(String value) { + addCriterion("sales_man >", value, "salesMan"); + return (Criteria) this; + } + + public Criteria andSalesManGreaterThanOrEqualTo(String value) { + addCriterion("sales_man >=", value, "salesMan"); + return (Criteria) this; + } + + public Criteria andSalesManLessThan(String value) { + addCriterion("sales_man <", value, "salesMan"); + return (Criteria) this; + } + + public Criteria andSalesManLessThanOrEqualTo(String value) { + addCriterion("sales_man <=", value, "salesMan"); + return (Criteria) this; + } + + public Criteria andSalesManLike(String value) { + addCriterion("sales_man like", value, "salesMan"); + return (Criteria) this; + } + + public Criteria andSalesManNotLike(String value) { + addCriterion("sales_man not like", value, "salesMan"); + return (Criteria) this; + } + + public Criteria andSalesManIn(List values) { + addCriterion("sales_man in", values, "salesMan"); + return (Criteria) this; + } + + public Criteria andSalesManNotIn(List values) { + addCriterion("sales_man not in", values, "salesMan"); + return (Criteria) this; + } + + public Criteria andSalesManBetween(String value1, String value2) { + addCriterion("sales_man between", value1, value2, "salesMan"); + return (Criteria) this; + } + + public Criteria andSalesManNotBetween(String value1, String value2) { + addCriterion("sales_man not between", value1, value2, "salesMan"); + return (Criteria) this; + } + + public Criteria andAccountIdListIsNull() { + addCriterion("account_id_list is null"); + return (Criteria) this; + } + + public Criteria andAccountIdListIsNotNull() { + addCriterion("account_id_list is not null"); + return (Criteria) this; + } + + public Criteria andAccountIdListEqualTo(String value) { + addCriterion("account_id_list =", value, "accountIdList"); + return (Criteria) this; + } + + public Criteria andAccountIdListNotEqualTo(String value) { + addCriterion("account_id_list <>", value, "accountIdList"); + return (Criteria) this; + } + + public Criteria andAccountIdListGreaterThan(String value) { + addCriterion("account_id_list >", value, "accountIdList"); + return (Criteria) this; + } + + public Criteria andAccountIdListGreaterThanOrEqualTo(String value) { + addCriterion("account_id_list >=", value, "accountIdList"); + return (Criteria) this; + } + + public Criteria andAccountIdListLessThan(String value) { + addCriterion("account_id_list <", value, "accountIdList"); + return (Criteria) this; + } + + public Criteria andAccountIdListLessThanOrEqualTo(String value) { + addCriterion("account_id_list <=", value, "accountIdList"); + return (Criteria) this; + } + + public Criteria andAccountIdListLike(String value) { + addCriterion("account_id_list like", value, "accountIdList"); + return (Criteria) this; + } + + public Criteria andAccountIdListNotLike(String value) { + addCriterion("account_id_list not like", value, "accountIdList"); + return (Criteria) this; + } + + public Criteria andAccountIdListIn(List values) { + addCriterion("account_id_list in", values, "accountIdList"); + return (Criteria) this; + } + + public Criteria andAccountIdListNotIn(List values) { + addCriterion("account_id_list not in", values, "accountIdList"); + return (Criteria) this; + } + + public Criteria andAccountIdListBetween(String value1, String value2) { + addCriterion("account_id_list between", value1, value2, "accountIdList"); + return (Criteria) this; + } + + public Criteria andAccountIdListNotBetween(String value1, String value2) { + addCriterion("account_id_list not between", value1, value2, "accountIdList"); + return (Criteria) this; + } + + public Criteria andAccountMoneyListIsNull() { + addCriterion("account_money_list is null"); + return (Criteria) this; + } + + public Criteria andAccountMoneyListIsNotNull() { + addCriterion("account_money_list is not null"); + return (Criteria) this; + } + + public Criteria andAccountMoneyListEqualTo(String value) { + addCriterion("account_money_list =", value, "accountMoneyList"); + return (Criteria) this; + } + + public Criteria andAccountMoneyListNotEqualTo(String value) { + addCriterion("account_money_list <>", value, "accountMoneyList"); + return (Criteria) this; + } + + public Criteria andAccountMoneyListGreaterThan(String value) { + addCriterion("account_money_list >", value, "accountMoneyList"); + return (Criteria) this; + } + + public Criteria andAccountMoneyListGreaterThanOrEqualTo(String value) { + addCriterion("account_money_list >=", value, "accountMoneyList"); + return (Criteria) this; + } + + public Criteria andAccountMoneyListLessThan(String value) { + addCriterion("account_money_list <", value, "accountMoneyList"); + return (Criteria) this; + } + + public Criteria andAccountMoneyListLessThanOrEqualTo(String value) { + addCriterion("account_money_list <=", value, "accountMoneyList"); + return (Criteria) this; + } + + public Criteria andAccountMoneyListLike(String value) { + addCriterion("account_money_list like", value, "accountMoneyList"); + return (Criteria) this; + } + + public Criteria andAccountMoneyListNotLike(String value) { + addCriterion("account_money_list not like", value, "accountMoneyList"); + return (Criteria) this; + } + + public Criteria andAccountMoneyListIn(List values) { + addCriterion("account_money_list in", values, "accountMoneyList"); + return (Criteria) this; + } + + public Criteria andAccountMoneyListNotIn(List values) { + addCriterion("account_money_list not in", values, "accountMoneyList"); + return (Criteria) this; + } + + public Criteria andAccountMoneyListBetween(String value1, String value2) { + addCriterion("account_money_list between", value1, value2, "accountMoneyList"); + return (Criteria) this; + } + + public Criteria andAccountMoneyListNotBetween(String value1, String value2) { + addCriterion("account_money_list not between", value1, value2, "accountMoneyList"); + return (Criteria) this; + } + + public Criteria andDiscountIsNull() { + addCriterion("discount is null"); + return (Criteria) this; + } + + public Criteria andDiscountIsNotNull() { + addCriterion("discount is not null"); + return (Criteria) this; + } + + public Criteria andDiscountEqualTo(BigDecimal value) { + addCriterion("discount =", value, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountNotEqualTo(BigDecimal value) { + addCriterion("discount <>", value, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountGreaterThan(BigDecimal value) { + addCriterion("discount >", value, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("discount >=", value, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountLessThan(BigDecimal value) { + addCriterion("discount <", value, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountLessThanOrEqualTo(BigDecimal value) { + addCriterion("discount <=", value, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountIn(List values) { + addCriterion("discount in", values, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountNotIn(List values) { + addCriterion("discount not in", values, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("discount between", value1, value2, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("discount not between", value1, value2, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountMoneyIsNull() { + addCriterion("discount_money is null"); + return (Criteria) this; + } + + public Criteria andDiscountMoneyIsNotNull() { + addCriterion("discount_money is not null"); + return (Criteria) this; + } + + public Criteria andDiscountMoneyEqualTo(BigDecimal value) { + addCriterion("discount_money =", value, "discountMoney"); + return (Criteria) this; + } + + public Criteria andDiscountMoneyNotEqualTo(BigDecimal value) { + addCriterion("discount_money <>", value, "discountMoney"); + return (Criteria) this; + } + + public Criteria andDiscountMoneyGreaterThan(BigDecimal value) { + addCriterion("discount_money >", value, "discountMoney"); + return (Criteria) this; + } + + public Criteria andDiscountMoneyGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("discount_money >=", value, "discountMoney"); + return (Criteria) this; + } + + public Criteria andDiscountMoneyLessThan(BigDecimal value) { + addCriterion("discount_money <", value, "discountMoney"); + return (Criteria) this; + } + + public Criteria andDiscountMoneyLessThanOrEqualTo(BigDecimal value) { + addCriterion("discount_money <=", value, "discountMoney"); + return (Criteria) this; + } + + public Criteria andDiscountMoneyIn(List values) { + addCriterion("discount_money in", values, "discountMoney"); + return (Criteria) this; + } + + public Criteria andDiscountMoneyNotIn(List values) { + addCriterion("discount_money not in", values, "discountMoney"); + return (Criteria) this; + } + + public Criteria andDiscountMoneyBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("discount_money between", value1, value2, "discountMoney"); + return (Criteria) this; + } + + public Criteria andDiscountMoneyNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("discount_money not between", value1, value2, "discountMoney"); + return (Criteria) this; + } + + public Criteria andDiscountLastMoneyIsNull() { + addCriterion("discount_last_money is null"); + return (Criteria) this; + } + + public Criteria andDiscountLastMoneyIsNotNull() { + addCriterion("discount_last_money is not null"); + return (Criteria) this; + } + + public Criteria andDiscountLastMoneyEqualTo(BigDecimal value) { + addCriterion("discount_last_money =", value, "discountLastMoney"); + return (Criteria) this; + } + + public Criteria andDiscountLastMoneyNotEqualTo(BigDecimal value) { + addCriterion("discount_last_money <>", value, "discountLastMoney"); + return (Criteria) this; + } + + public Criteria andDiscountLastMoneyGreaterThan(BigDecimal value) { + addCriterion("discount_last_money >", value, "discountLastMoney"); + return (Criteria) this; + } + + public Criteria andDiscountLastMoneyGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("discount_last_money >=", value, "discountLastMoney"); + return (Criteria) this; + } + + public Criteria andDiscountLastMoneyLessThan(BigDecimal value) { + addCriterion("discount_last_money <", value, "discountLastMoney"); + return (Criteria) this; + } + + public Criteria andDiscountLastMoneyLessThanOrEqualTo(BigDecimal value) { + addCriterion("discount_last_money <=", value, "discountLastMoney"); + return (Criteria) this; + } + + public Criteria andDiscountLastMoneyIn(List values) { + addCriterion("discount_last_money in", values, "discountLastMoney"); + return (Criteria) this; + } + + public Criteria andDiscountLastMoneyNotIn(List values) { + addCriterion("discount_last_money not in", values, "discountLastMoney"); + return (Criteria) this; + } + + public Criteria andDiscountLastMoneyBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("discount_last_money between", value1, value2, "discountLastMoney"); + return (Criteria) this; + } + + public Criteria andDiscountLastMoneyNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("discount_last_money not between", value1, value2, "discountLastMoney"); + return (Criteria) this; + } + + public Criteria andOtherMoneyIsNull() { + addCriterion("other_money is null"); + return (Criteria) this; + } + + public Criteria andOtherMoneyIsNotNull() { + addCriterion("other_money is not null"); + return (Criteria) this; + } + + public Criteria andOtherMoneyEqualTo(BigDecimal value) { + addCriterion("other_money =", value, "otherMoney"); + return (Criteria) this; + } + + public Criteria andOtherMoneyNotEqualTo(BigDecimal value) { + addCriterion("other_money <>", value, "otherMoney"); + return (Criteria) this; + } + + public Criteria andOtherMoneyGreaterThan(BigDecimal value) { + addCriterion("other_money >", value, "otherMoney"); + return (Criteria) this; + } + + public Criteria andOtherMoneyGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("other_money >=", value, "otherMoney"); + return (Criteria) this; + } + + public Criteria andOtherMoneyLessThan(BigDecimal value) { + addCriterion("other_money <", value, "otherMoney"); + return (Criteria) this; + } + + public Criteria andOtherMoneyLessThanOrEqualTo(BigDecimal value) { + addCriterion("other_money <=", value, "otherMoney"); + return (Criteria) this; + } + + public Criteria andOtherMoneyIn(List values) { + addCriterion("other_money in", values, "otherMoney"); + return (Criteria) this; + } + + public Criteria andOtherMoneyNotIn(List values) { + addCriterion("other_money not in", values, "otherMoney"); + return (Criteria) this; + } + + public Criteria andOtherMoneyBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("other_money between", value1, value2, "otherMoney"); + return (Criteria) this; + } + + public Criteria andOtherMoneyNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("other_money not between", value1, value2, "otherMoney"); + return (Criteria) this; + } + + public Criteria andOtherMoneyListIsNull() { + addCriterion("other_money_list is null"); + return (Criteria) this; + } + + public Criteria andOtherMoneyListIsNotNull() { + addCriterion("other_money_list is not null"); + return (Criteria) this; + } + + public Criteria andOtherMoneyListEqualTo(String value) { + addCriterion("other_money_list =", value, "otherMoneyList"); + return (Criteria) this; + } + + public Criteria andOtherMoneyListNotEqualTo(String value) { + addCriterion("other_money_list <>", value, "otherMoneyList"); + return (Criteria) this; + } + + public Criteria andOtherMoneyListGreaterThan(String value) { + addCriterion("other_money_list >", value, "otherMoneyList"); + return (Criteria) this; + } + + public Criteria andOtherMoneyListGreaterThanOrEqualTo(String value) { + addCriterion("other_money_list >=", value, "otherMoneyList"); + return (Criteria) this; + } + + public Criteria andOtherMoneyListLessThan(String value) { + addCriterion("other_money_list <", value, "otherMoneyList"); + return (Criteria) this; + } + + public Criteria andOtherMoneyListLessThanOrEqualTo(String value) { + addCriterion("other_money_list <=", value, "otherMoneyList"); + return (Criteria) this; + } + + public Criteria andOtherMoneyListLike(String value) { + addCriterion("other_money_list like", value, "otherMoneyList"); + return (Criteria) this; + } + + public Criteria andOtherMoneyListNotLike(String value) { + addCriterion("other_money_list not like", value, "otherMoneyList"); + return (Criteria) this; + } + + public Criteria andOtherMoneyListIn(List values) { + addCriterion("other_money_list in", values, "otherMoneyList"); + return (Criteria) this; + } + + public Criteria andOtherMoneyListNotIn(List values) { + addCriterion("other_money_list not in", values, "otherMoneyList"); + return (Criteria) this; + } + + public Criteria andOtherMoneyListBetween(String value1, String value2) { + addCriterion("other_money_list between", value1, value2, "otherMoneyList"); + return (Criteria) this; + } + + public Criteria andOtherMoneyListNotBetween(String value1, String value2) { + addCriterion("other_money_list not between", value1, value2, "otherMoneyList"); + return (Criteria) this; + } + + public Criteria andOtherMoneyItemIsNull() { + addCriterion("other_money_item is null"); + return (Criteria) this; + } + + public Criteria andOtherMoneyItemIsNotNull() { + addCriterion("other_money_item is not null"); + return (Criteria) this; + } + + public Criteria andOtherMoneyItemEqualTo(String value) { + addCriterion("other_money_item =", value, "otherMoneyItem"); + return (Criteria) this; + } + + public Criteria andOtherMoneyItemNotEqualTo(String value) { + addCriterion("other_money_item <>", value, "otherMoneyItem"); + return (Criteria) this; + } + + public Criteria andOtherMoneyItemGreaterThan(String value) { + addCriterion("other_money_item >", value, "otherMoneyItem"); + return (Criteria) this; + } + + public Criteria andOtherMoneyItemGreaterThanOrEqualTo(String value) { + addCriterion("other_money_item >=", value, "otherMoneyItem"); + return (Criteria) this; + } + + public Criteria andOtherMoneyItemLessThan(String value) { + addCriterion("other_money_item <", value, "otherMoneyItem"); + return (Criteria) this; + } + + public Criteria andOtherMoneyItemLessThanOrEqualTo(String value) { + addCriterion("other_money_item <=", value, "otherMoneyItem"); + return (Criteria) this; + } + + public Criteria andOtherMoneyItemLike(String value) { + addCriterion("other_money_item like", value, "otherMoneyItem"); + return (Criteria) this; + } + + public Criteria andOtherMoneyItemNotLike(String value) { + addCriterion("other_money_item not like", value, "otherMoneyItem"); + return (Criteria) this; + } + + public Criteria andOtherMoneyItemIn(List values) { + addCriterion("other_money_item in", values, "otherMoneyItem"); + return (Criteria) this; + } + + public Criteria andOtherMoneyItemNotIn(List values) { + addCriterion("other_money_item not in", values, "otherMoneyItem"); + return (Criteria) this; + } + + public Criteria andOtherMoneyItemBetween(String value1, String value2) { + addCriterion("other_money_item between", value1, value2, "otherMoneyItem"); + return (Criteria) this; + } + + public Criteria andOtherMoneyItemNotBetween(String value1, String value2) { + addCriterion("other_money_item not between", value1, value2, "otherMoneyItem"); + return (Criteria) this; + } + + public Criteria andAccountDayIsNull() { + addCriterion("account_day is null"); + return (Criteria) this; + } + + public Criteria andAccountDayIsNotNull() { + addCriterion("account_day is not null"); + return (Criteria) this; + } + + public Criteria andAccountDayEqualTo(Integer value) { + addCriterion("account_day =", value, "accountDay"); + return (Criteria) this; + } + + public Criteria andAccountDayNotEqualTo(Integer value) { + addCriterion("account_day <>", value, "accountDay"); + return (Criteria) this; + } + + public Criteria andAccountDayGreaterThan(Integer value) { + addCriterion("account_day >", value, "accountDay"); + return (Criteria) this; + } + + public Criteria andAccountDayGreaterThanOrEqualTo(Integer value) { + addCriterion("account_day >=", value, "accountDay"); + return (Criteria) this; + } + + public Criteria andAccountDayLessThan(Integer value) { + addCriterion("account_day <", value, "accountDay"); + return (Criteria) this; + } + + public Criteria andAccountDayLessThanOrEqualTo(Integer value) { + addCriterion("account_day <=", value, "accountDay"); + return (Criteria) this; + } + + public Criteria andAccountDayIn(List values) { + addCriterion("account_day in", values, "accountDay"); + return (Criteria) this; + } + + public Criteria andAccountDayNotIn(List values) { + addCriterion("account_day not in", values, "accountDay"); + return (Criteria) this; + } + + public Criteria andAccountDayBetween(Integer value1, Integer value2) { + addCriterion("account_day between", value1, value2, "accountDay"); + return (Criteria) this; + } + + public Criteria andAccountDayNotBetween(Integer value1, Integer value2) { + addCriterion("account_day not between", value1, value2, "accountDay"); + return (Criteria) this; + } + + public Criteria andStatusIsNull() { + addCriterion("status is null"); + return (Criteria) this; + } + + public Criteria andStatusIsNotNull() { + addCriterion("status is not null"); + return (Criteria) this; + } + + public Criteria andStatusEqualTo(String value) { + addCriterion("status =", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotEqualTo(String value) { + addCriterion("status <>", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusGreaterThan(String value) { + addCriterion("status >", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusGreaterThanOrEqualTo(String value) { + addCriterion("status >=", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLessThan(String value) { + addCriterion("status <", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLessThanOrEqualTo(String value) { + addCriterion("status <=", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLike(String value) { + addCriterion("status like", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotLike(String value) { + addCriterion("status not like", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusIn(List values) { + addCriterion("status in", values, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotIn(List values) { + addCriterion("status not in", values, "status"); + return (Criteria) this; + } + + public Criteria andStatusBetween(String value1, String value2) { + addCriterion("status between", value1, value2, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotBetween(String value1, String value2) { + addCriterion("status not between", value1, value2, "status"); + return (Criteria) this; + } + + public Criteria andLinkNumberIsNull() { + addCriterion("link_number is null"); + return (Criteria) this; + } + + public Criteria andLinkNumberIsNotNull() { + addCriterion("link_number is not null"); + return (Criteria) this; + } + + public Criteria andLinkNumberEqualTo(String value) { + addCriterion("link_number =", value, "linkNumber"); + return (Criteria) this; + } + + public Criteria andLinkNumberNotEqualTo(String value) { + addCriterion("link_number <>", value, "linkNumber"); + return (Criteria) this; + } + + public Criteria andLinkNumberGreaterThan(String value) { + addCriterion("link_number >", value, "linkNumber"); + return (Criteria) this; + } + + public Criteria andLinkNumberGreaterThanOrEqualTo(String value) { + addCriterion("link_number >=", value, "linkNumber"); + return (Criteria) this; + } + + public Criteria andLinkNumberLessThan(String value) { + addCriterion("link_number <", value, "linkNumber"); + return (Criteria) this; + } + + public Criteria andLinkNumberLessThanOrEqualTo(String value) { + addCriterion("link_number <=", value, "linkNumber"); + return (Criteria) this; + } + + public Criteria andLinkNumberLike(String value) { + addCriterion("link_number like", value, "linkNumber"); + return (Criteria) this; + } + + public Criteria andLinkNumberNotLike(String value) { + addCriterion("link_number not like", value, "linkNumber"); + return (Criteria) this; + } + + public Criteria andLinkNumberIn(List values) { + addCriterion("link_number in", values, "linkNumber"); + return (Criteria) this; + } + + public Criteria andLinkNumberNotIn(List values) { + addCriterion("link_number not in", values, "linkNumber"); + return (Criteria) this; + } + + public Criteria andLinkNumberBetween(String value1, String value2) { + addCriterion("link_number between", value1, value2, "linkNumber"); + return (Criteria) this; + } + + public Criteria andLinkNumberNotBetween(String value1, String value2) { + addCriterion("link_number not between", value1, value2, "linkNumber"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotHeadVo4Body.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotHeadVo4Body.java new file mode 100644 index 000000000..11faad8d4 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotHeadVo4Body.java @@ -0,0 +1,46 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; + +public class DepotHeadVo4Body { + + private Long id; + + private String info; + + private String rows; + + private BigDecimal preTotalPrice; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getRows() { + return rows; + } + + public void setRows(String rows) { + this.rows = rows; + } + + public BigDecimal getPreTotalPrice() { + return preTotalPrice; + } + + public void setPreTotalPrice(BigDecimal preTotalPrice) { + this.preTotalPrice = preTotalPrice; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItem.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItem.java new file mode 100644 index 000000000..21a98617f --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItem.java @@ -0,0 +1,265 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; + +public class DepotItem { + private Long id; + + private Long headerId; + + private Long materialId; + + private Long materialExtendId; + + private String materialUnit; + + private BigDecimal operNumber; + + private BigDecimal basicNumber; + + private BigDecimal unitPrice; + + private BigDecimal taxUnitPrice; + + private BigDecimal allPrice; + + private String remark; + + private String img; + + private BigDecimal incidentals; + + private Long depotId; + + private Long anotherDepotId; + + private BigDecimal taxRate; + + private BigDecimal taxMoney; + + private BigDecimal taxLastMoney; + + private String otherField1; + + private String otherField2; + + private String otherField3; + + private String otherField4; + + private String otherField5; + + private String materialType; + + private Long tenantId; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getHeaderId() { + return headerId; + } + + public void setHeaderId(Long headerId) { + this.headerId = headerId; + } + + public Long getMaterialId() { + return materialId; + } + + public void setMaterialId(Long materialId) { + this.materialId = materialId; + } + + public Long getMaterialExtendId() { + return materialExtendId; + } + + public void setMaterialExtendId(Long materialExtendId) { + this.materialExtendId = materialExtendId; + } + + public String getMaterialUnit() { + return materialUnit; + } + + public void setMaterialUnit(String materialUnit) { + this.materialUnit = materialUnit == null ? null : materialUnit.trim(); + } + + public BigDecimal getOperNumber() { + return operNumber; + } + + public void setOperNumber(BigDecimal operNumber) { + this.operNumber = operNumber; + } + + public BigDecimal getBasicNumber() { + return basicNumber; + } + + public void setBasicNumber(BigDecimal basicNumber) { + this.basicNumber = basicNumber; + } + + public BigDecimal getUnitPrice() { + return unitPrice; + } + + public void setUnitPrice(BigDecimal unitPrice) { + this.unitPrice = unitPrice; + } + + public BigDecimal getTaxUnitPrice() { + return taxUnitPrice; + } + + public void setTaxUnitPrice(BigDecimal taxUnitPrice) { + this.taxUnitPrice = taxUnitPrice; + } + + public BigDecimal getAllPrice() { + return allPrice; + } + + public void setAllPrice(BigDecimal allPrice) { + this.allPrice = allPrice; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img == null ? null : img.trim(); + } + + public BigDecimal getIncidentals() { + return incidentals; + } + + public void setIncidentals(BigDecimal incidentals) { + this.incidentals = incidentals; + } + + public Long getDepotId() { + return depotId; + } + + public void setDepotId(Long depotId) { + this.depotId = depotId; + } + + public Long getAnotherDepotId() { + return anotherDepotId; + } + + public void setAnotherDepotId(Long anotherDepotId) { + this.anotherDepotId = anotherDepotId; + } + + public BigDecimal getTaxRate() { + return taxRate; + } + + public void setTaxRate(BigDecimal taxRate) { + this.taxRate = taxRate; + } + + public BigDecimal getTaxMoney() { + return taxMoney; + } + + public void setTaxMoney(BigDecimal taxMoney) { + this.taxMoney = taxMoney; + } + + public BigDecimal getTaxLastMoney() { + return taxLastMoney; + } + + public void setTaxLastMoney(BigDecimal taxLastMoney) { + this.taxLastMoney = taxLastMoney; + } + + public String getOtherField1() { + return otherField1; + } + + public void setOtherField1(String otherField1) { + this.otherField1 = otherField1 == null ? null : otherField1.trim(); + } + + public String getOtherField2() { + return otherField2; + } + + public void setOtherField2(String otherField2) { + this.otherField2 = otherField2 == null ? null : otherField2.trim(); + } + + public String getOtherField3() { + return otherField3; + } + + public void setOtherField3(String otherField3) { + this.otherField3 = otherField3 == null ? null : otherField3.trim(); + } + + public String getOtherField4() { + return otherField4; + } + + public void setOtherField4(String otherField4) { + this.otherField4 = otherField4 == null ? null : otherField4.trim(); + } + + public String getOtherField5() { + return otherField5; + } + + public void setOtherField5(String otherField5) { + this.otherField5 = otherField5 == null ? null : otherField5.trim(); + } + + public String getMaterialType() { + return materialType; + } + + public void setMaterialType(String materialType) { + this.materialType = materialType == null ? null : materialType.trim(); + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItemExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItemExample.java new file mode 100644 index 000000000..b5a3eac85 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItemExample.java @@ -0,0 +1,1860 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +public class DepotItemExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public DepotItemExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andHeaderIdIsNull() { + addCriterion("header_id is null"); + return (Criteria) this; + } + + public Criteria andHeaderIdIsNotNull() { + addCriterion("header_id is not null"); + return (Criteria) this; + } + + public Criteria andHeaderIdEqualTo(Long value) { + addCriterion("header_id =", value, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdNotEqualTo(Long value) { + addCriterion("header_id <>", value, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdGreaterThan(Long value) { + addCriterion("header_id >", value, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdGreaterThanOrEqualTo(Long value) { + addCriterion("header_id >=", value, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdLessThan(Long value) { + addCriterion("header_id <", value, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdLessThanOrEqualTo(Long value) { + addCriterion("header_id <=", value, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdIn(List values) { + addCriterion("header_id in", values, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdNotIn(List values) { + addCriterion("header_id not in", values, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdBetween(Long value1, Long value2) { + addCriterion("header_id between", value1, value2, "headerId"); + return (Criteria) this; + } + + public Criteria andHeaderIdNotBetween(Long value1, Long value2) { + addCriterion("header_id not between", value1, value2, "headerId"); + return (Criteria) this; + } + + public Criteria andMaterialIdIsNull() { + addCriterion("material_id is null"); + return (Criteria) this; + } + + public Criteria andMaterialIdIsNotNull() { + addCriterion("material_id is not null"); + return (Criteria) this; + } + + public Criteria andMaterialIdEqualTo(Long value) { + addCriterion("material_id =", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdNotEqualTo(Long value) { + addCriterion("material_id <>", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdGreaterThan(Long value) { + addCriterion("material_id >", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdGreaterThanOrEqualTo(Long value) { + addCriterion("material_id >=", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdLessThan(Long value) { + addCriterion("material_id <", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdLessThanOrEqualTo(Long value) { + addCriterion("material_id <=", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdIn(List values) { + addCriterion("material_id in", values, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdNotIn(List values) { + addCriterion("material_id not in", values, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdBetween(Long value1, Long value2) { + addCriterion("material_id between", value1, value2, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdNotBetween(Long value1, Long value2) { + addCriterion("material_id not between", value1, value2, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialExtendIdIsNull() { + addCriterion("material_extend_id is null"); + return (Criteria) this; + } + + public Criteria andMaterialExtendIdIsNotNull() { + addCriterion("material_extend_id is not null"); + return (Criteria) this; + } + + public Criteria andMaterialExtendIdEqualTo(Long value) { + addCriterion("material_extend_id =", value, "materialExtendId"); + return (Criteria) this; + } + + public Criteria andMaterialExtendIdNotEqualTo(Long value) { + addCriterion("material_extend_id <>", value, "materialExtendId"); + return (Criteria) this; + } + + public Criteria andMaterialExtendIdGreaterThan(Long value) { + addCriterion("material_extend_id >", value, "materialExtendId"); + return (Criteria) this; + } + + public Criteria andMaterialExtendIdGreaterThanOrEqualTo(Long value) { + addCriterion("material_extend_id >=", value, "materialExtendId"); + return (Criteria) this; + } + + public Criteria andMaterialExtendIdLessThan(Long value) { + addCriterion("material_extend_id <", value, "materialExtendId"); + return (Criteria) this; + } + + public Criteria andMaterialExtendIdLessThanOrEqualTo(Long value) { + addCriterion("material_extend_id <=", value, "materialExtendId"); + return (Criteria) this; + } + + public Criteria andMaterialExtendIdIn(List values) { + addCriterion("material_extend_id in", values, "materialExtendId"); + return (Criteria) this; + } + + public Criteria andMaterialExtendIdNotIn(List values) { + addCriterion("material_extend_id not in", values, "materialExtendId"); + return (Criteria) this; + } + + public Criteria andMaterialExtendIdBetween(Long value1, Long value2) { + addCriterion("material_extend_id between", value1, value2, "materialExtendId"); + return (Criteria) this; + } + + public Criteria andMaterialExtendIdNotBetween(Long value1, Long value2) { + addCriterion("material_extend_id not between", value1, value2, "materialExtendId"); + return (Criteria) this; + } + + public Criteria andMaterialUnitIsNull() { + addCriterion("material_unit is null"); + return (Criteria) this; + } + + public Criteria andMaterialUnitIsNotNull() { + addCriterion("material_unit is not null"); + return (Criteria) this; + } + + public Criteria andMaterialUnitEqualTo(String value) { + addCriterion("material_unit =", value, "materialUnit"); + return (Criteria) this; + } + + public Criteria andMaterialUnitNotEqualTo(String value) { + addCriterion("material_unit <>", value, "materialUnit"); + return (Criteria) this; + } + + public Criteria andMaterialUnitGreaterThan(String value) { + addCriterion("material_unit >", value, "materialUnit"); + return (Criteria) this; + } + + public Criteria andMaterialUnitGreaterThanOrEqualTo(String value) { + addCriterion("material_unit >=", value, "materialUnit"); + return (Criteria) this; + } + + public Criteria andMaterialUnitLessThan(String value) { + addCriterion("material_unit <", value, "materialUnit"); + return (Criteria) this; + } + + public Criteria andMaterialUnitLessThanOrEqualTo(String value) { + addCriterion("material_unit <=", value, "materialUnit"); + return (Criteria) this; + } + + public Criteria andMaterialUnitLike(String value) { + addCriterion("material_unit like", value, "materialUnit"); + return (Criteria) this; + } + + public Criteria andMaterialUnitNotLike(String value) { + addCriterion("material_unit not like", value, "materialUnit"); + return (Criteria) this; + } + + public Criteria andMaterialUnitIn(List values) { + addCriterion("material_unit in", values, "materialUnit"); + return (Criteria) this; + } + + public Criteria andMaterialUnitNotIn(List values) { + addCriterion("material_unit not in", values, "materialUnit"); + return (Criteria) this; + } + + public Criteria andMaterialUnitBetween(String value1, String value2) { + addCriterion("material_unit between", value1, value2, "materialUnit"); + return (Criteria) this; + } + + public Criteria andMaterialUnitNotBetween(String value1, String value2) { + addCriterion("material_unit not between", value1, value2, "materialUnit"); + return (Criteria) this; + } + + public Criteria andOperNumberIsNull() { + addCriterion("oper_number is null"); + return (Criteria) this; + } + + public Criteria andOperNumberIsNotNull() { + addCriterion("oper_number is not null"); + return (Criteria) this; + } + + public Criteria andOperNumberEqualTo(BigDecimal value) { + addCriterion("oper_number =", value, "operNumber"); + return (Criteria) this; + } + + public Criteria andOperNumberNotEqualTo(BigDecimal value) { + addCriterion("oper_number <>", value, "operNumber"); + return (Criteria) this; + } + + public Criteria andOperNumberGreaterThan(BigDecimal value) { + addCriterion("oper_number >", value, "operNumber"); + return (Criteria) this; + } + + public Criteria andOperNumberGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("oper_number >=", value, "operNumber"); + return (Criteria) this; + } + + public Criteria andOperNumberLessThan(BigDecimal value) { + addCriterion("oper_number <", value, "operNumber"); + return (Criteria) this; + } + + public Criteria andOperNumberLessThanOrEqualTo(BigDecimal value) { + addCriterion("oper_number <=", value, "operNumber"); + return (Criteria) this; + } + + public Criteria andOperNumberIn(List values) { + addCriterion("oper_number in", values, "operNumber"); + return (Criteria) this; + } + + public Criteria andOperNumberNotIn(List values) { + addCriterion("oper_number not in", values, "operNumber"); + return (Criteria) this; + } + + public Criteria andOperNumberBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("oper_number between", value1, value2, "operNumber"); + return (Criteria) this; + } + + public Criteria andOperNumberNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("oper_number not between", value1, value2, "operNumber"); + return (Criteria) this; + } + + public Criteria andBasicNumberIsNull() { + addCriterion("basic_number is null"); + return (Criteria) this; + } + + public Criteria andBasicNumberIsNotNull() { + addCriterion("basic_number is not null"); + return (Criteria) this; + } + + public Criteria andBasicNumberEqualTo(BigDecimal value) { + addCriterion("basic_number =", value, "basicNumber"); + return (Criteria) this; + } + + public Criteria andBasicNumberNotEqualTo(BigDecimal value) { + addCriterion("basic_number <>", value, "basicNumber"); + return (Criteria) this; + } + + public Criteria andBasicNumberGreaterThan(BigDecimal value) { + addCriterion("basic_number >", value, "basicNumber"); + return (Criteria) this; + } + + public Criteria andBasicNumberGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("basic_number >=", value, "basicNumber"); + return (Criteria) this; + } + + public Criteria andBasicNumberLessThan(BigDecimal value) { + addCriterion("basic_number <", value, "basicNumber"); + return (Criteria) this; + } + + public Criteria andBasicNumberLessThanOrEqualTo(BigDecimal value) { + addCriterion("basic_number <=", value, "basicNumber"); + return (Criteria) this; + } + + public Criteria andBasicNumberIn(List values) { + addCriterion("basic_number in", values, "basicNumber"); + return (Criteria) this; + } + + public Criteria andBasicNumberNotIn(List values) { + addCriterion("basic_number not in", values, "basicNumber"); + return (Criteria) this; + } + + public Criteria andBasicNumberBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("basic_number between", value1, value2, "basicNumber"); + return (Criteria) this; + } + + public Criteria andBasicNumberNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("basic_number not between", value1, value2, "basicNumber"); + return (Criteria) this; + } + + public Criteria andUnitPriceIsNull() { + addCriterion("unit_price is null"); + return (Criteria) this; + } + + public Criteria andUnitPriceIsNotNull() { + addCriterion("unit_price is not null"); + return (Criteria) this; + } + + public Criteria andUnitPriceEqualTo(BigDecimal value) { + addCriterion("unit_price =", value, "unitPrice"); + return (Criteria) this; + } + + public Criteria andUnitPriceNotEqualTo(BigDecimal value) { + addCriterion("unit_price <>", value, "unitPrice"); + return (Criteria) this; + } + + public Criteria andUnitPriceGreaterThan(BigDecimal value) { + addCriterion("unit_price >", value, "unitPrice"); + return (Criteria) this; + } + + public Criteria andUnitPriceGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("unit_price >=", value, "unitPrice"); + return (Criteria) this; + } + + public Criteria andUnitPriceLessThan(BigDecimal value) { + addCriterion("unit_price <", value, "unitPrice"); + return (Criteria) this; + } + + public Criteria andUnitPriceLessThanOrEqualTo(BigDecimal value) { + addCriterion("unit_price <=", value, "unitPrice"); + return (Criteria) this; + } + + public Criteria andUnitPriceIn(List values) { + addCriterion("unit_price in", values, "unitPrice"); + return (Criteria) this; + } + + public Criteria andUnitPriceNotIn(List values) { + addCriterion("unit_price not in", values, "unitPrice"); + return (Criteria) this; + } + + public Criteria andUnitPriceBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("unit_price between", value1, value2, "unitPrice"); + return (Criteria) this; + } + + public Criteria andUnitPriceNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("unit_price not between", value1, value2, "unitPrice"); + return (Criteria) this; + } + + public Criteria andTaxUnitPriceIsNull() { + addCriterion("tax_unit_price is null"); + return (Criteria) this; + } + + public Criteria andTaxUnitPriceIsNotNull() { + addCriterion("tax_unit_price is not null"); + return (Criteria) this; + } + + public Criteria andTaxUnitPriceEqualTo(BigDecimal value) { + addCriterion("tax_unit_price =", value, "taxUnitPrice"); + return (Criteria) this; + } + + public Criteria andTaxUnitPriceNotEqualTo(BigDecimal value) { + addCriterion("tax_unit_price <>", value, "taxUnitPrice"); + return (Criteria) this; + } + + public Criteria andTaxUnitPriceGreaterThan(BigDecimal value) { + addCriterion("tax_unit_price >", value, "taxUnitPrice"); + return (Criteria) this; + } + + public Criteria andTaxUnitPriceGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("tax_unit_price >=", value, "taxUnitPrice"); + return (Criteria) this; + } + + public Criteria andTaxUnitPriceLessThan(BigDecimal value) { + addCriterion("tax_unit_price <", value, "taxUnitPrice"); + return (Criteria) this; + } + + public Criteria andTaxUnitPriceLessThanOrEqualTo(BigDecimal value) { + addCriterion("tax_unit_price <=", value, "taxUnitPrice"); + return (Criteria) this; + } + + public Criteria andTaxUnitPriceIn(List values) { + addCriterion("tax_unit_price in", values, "taxUnitPrice"); + return (Criteria) this; + } + + public Criteria andTaxUnitPriceNotIn(List values) { + addCriterion("tax_unit_price not in", values, "taxUnitPrice"); + return (Criteria) this; + } + + public Criteria andTaxUnitPriceBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("tax_unit_price between", value1, value2, "taxUnitPrice"); + return (Criteria) this; + } + + public Criteria andTaxUnitPriceNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("tax_unit_price not between", value1, value2, "taxUnitPrice"); + return (Criteria) this; + } + + public Criteria andAllPriceIsNull() { + addCriterion("all_price is null"); + return (Criteria) this; + } + + public Criteria andAllPriceIsNotNull() { + addCriterion("all_price is not null"); + return (Criteria) this; + } + + public Criteria andAllPriceEqualTo(BigDecimal value) { + addCriterion("all_price =", value, "allPrice"); + return (Criteria) this; + } + + public Criteria andAllPriceNotEqualTo(BigDecimal value) { + addCriterion("all_price <>", value, "allPrice"); + return (Criteria) this; + } + + public Criteria andAllPriceGreaterThan(BigDecimal value) { + addCriterion("all_price >", value, "allPrice"); + return (Criteria) this; + } + + public Criteria andAllPriceGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("all_price >=", value, "allPrice"); + return (Criteria) this; + } + + public Criteria andAllPriceLessThan(BigDecimal value) { + addCriterion("all_price <", value, "allPrice"); + return (Criteria) this; + } + + public Criteria andAllPriceLessThanOrEqualTo(BigDecimal value) { + addCriterion("all_price <=", value, "allPrice"); + return (Criteria) this; + } + + public Criteria andAllPriceIn(List values) { + addCriterion("all_price in", values, "allPrice"); + return (Criteria) this; + } + + public Criteria andAllPriceNotIn(List values) { + addCriterion("all_price not in", values, "allPrice"); + return (Criteria) this; + } + + public Criteria andAllPriceBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("all_price between", value1, value2, "allPrice"); + return (Criteria) this; + } + + public Criteria andAllPriceNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("all_price not between", value1, value2, "allPrice"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andImgIsNull() { + addCriterion("img is null"); + return (Criteria) this; + } + + public Criteria andImgIsNotNull() { + addCriterion("img is not null"); + return (Criteria) this; + } + + public Criteria andImgEqualTo(String value) { + addCriterion("img =", value, "img"); + return (Criteria) this; + } + + public Criteria andImgNotEqualTo(String value) { + addCriterion("img <>", value, "img"); + return (Criteria) this; + } + + public Criteria andImgGreaterThan(String value) { + addCriterion("img >", value, "img"); + return (Criteria) this; + } + + public Criteria andImgGreaterThanOrEqualTo(String value) { + addCriterion("img >=", value, "img"); + return (Criteria) this; + } + + public Criteria andImgLessThan(String value) { + addCriterion("img <", value, "img"); + return (Criteria) this; + } + + public Criteria andImgLessThanOrEqualTo(String value) { + addCriterion("img <=", value, "img"); + return (Criteria) this; + } + + public Criteria andImgLike(String value) { + addCriterion("img like", value, "img"); + return (Criteria) this; + } + + public Criteria andImgNotLike(String value) { + addCriterion("img not like", value, "img"); + return (Criteria) this; + } + + public Criteria andImgIn(List values) { + addCriterion("img in", values, "img"); + return (Criteria) this; + } + + public Criteria andImgNotIn(List values) { + addCriterion("img not in", values, "img"); + return (Criteria) this; + } + + public Criteria andImgBetween(String value1, String value2) { + addCriterion("img between", value1, value2, "img"); + return (Criteria) this; + } + + public Criteria andImgNotBetween(String value1, String value2) { + addCriterion("img not between", value1, value2, "img"); + return (Criteria) this; + } + + public Criteria andIncidentalsIsNull() { + addCriterion("incidentals is null"); + return (Criteria) this; + } + + public Criteria andIncidentalsIsNotNull() { + addCriterion("incidentals is not null"); + return (Criteria) this; + } + + public Criteria andIncidentalsEqualTo(BigDecimal value) { + addCriterion("incidentals =", value, "incidentals"); + return (Criteria) this; + } + + public Criteria andIncidentalsNotEqualTo(BigDecimal value) { + addCriterion("incidentals <>", value, "incidentals"); + return (Criteria) this; + } + + public Criteria andIncidentalsGreaterThan(BigDecimal value) { + addCriterion("incidentals >", value, "incidentals"); + return (Criteria) this; + } + + public Criteria andIncidentalsGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("incidentals >=", value, "incidentals"); + return (Criteria) this; + } + + public Criteria andIncidentalsLessThan(BigDecimal value) { + addCriterion("incidentals <", value, "incidentals"); + return (Criteria) this; + } + + public Criteria andIncidentalsLessThanOrEqualTo(BigDecimal value) { + addCriterion("incidentals <=", value, "incidentals"); + return (Criteria) this; + } + + public Criteria andIncidentalsIn(List values) { + addCriterion("incidentals in", values, "incidentals"); + return (Criteria) this; + } + + public Criteria andIncidentalsNotIn(List values) { + addCriterion("incidentals not in", values, "incidentals"); + return (Criteria) this; + } + + public Criteria andIncidentalsBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("incidentals between", value1, value2, "incidentals"); + return (Criteria) this; + } + + public Criteria andIncidentalsNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("incidentals not between", value1, value2, "incidentals"); + return (Criteria) this; + } + + public Criteria andDepotIdIsNull() { + addCriterion("depot_id is null"); + return (Criteria) this; + } + + public Criteria andDepotIdIsNotNull() { + addCriterion("depot_id is not null"); + return (Criteria) this; + } + + public Criteria andDepotIdEqualTo(Long value) { + addCriterion("depot_id =", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdNotEqualTo(Long value) { + addCriterion("depot_id <>", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdGreaterThan(Long value) { + addCriterion("depot_id >", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdGreaterThanOrEqualTo(Long value) { + addCriterion("depot_id >=", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdLessThan(Long value) { + addCriterion("depot_id <", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdLessThanOrEqualTo(Long value) { + addCriterion("depot_id <=", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdIn(List values) { + addCriterion("depot_id in", values, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdNotIn(List values) { + addCriterion("depot_id not in", values, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdBetween(Long value1, Long value2) { + addCriterion("depot_id between", value1, value2, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdNotBetween(Long value1, Long value2) { + addCriterion("depot_id not between", value1, value2, "depotId"); + return (Criteria) this; + } + + public Criteria andAnotherDepotIdIsNull() { + addCriterion("another_depot_id is null"); + return (Criteria) this; + } + + public Criteria andAnotherDepotIdIsNotNull() { + addCriterion("another_depot_id is not null"); + return (Criteria) this; + } + + public Criteria andAnotherDepotIdEqualTo(Long value) { + addCriterion("another_depot_id =", value, "anotherDepotId"); + return (Criteria) this; + } + + public Criteria andAnotherDepotIdNotEqualTo(Long value) { + addCriterion("another_depot_id <>", value, "anotherDepotId"); + return (Criteria) this; + } + + public Criteria andAnotherDepotIdGreaterThan(Long value) { + addCriterion("another_depot_id >", value, "anotherDepotId"); + return (Criteria) this; + } + + public Criteria andAnotherDepotIdGreaterThanOrEqualTo(Long value) { + addCriterion("another_depot_id >=", value, "anotherDepotId"); + return (Criteria) this; + } + + public Criteria andAnotherDepotIdLessThan(Long value) { + addCriterion("another_depot_id <", value, "anotherDepotId"); + return (Criteria) this; + } + + public Criteria andAnotherDepotIdLessThanOrEqualTo(Long value) { + addCriterion("another_depot_id <=", value, "anotherDepotId"); + return (Criteria) this; + } + + public Criteria andAnotherDepotIdIn(List values) { + addCriterion("another_depot_id in", values, "anotherDepotId"); + return (Criteria) this; + } + + public Criteria andAnotherDepotIdNotIn(List values) { + addCriterion("another_depot_id not in", values, "anotherDepotId"); + return (Criteria) this; + } + + public Criteria andAnotherDepotIdBetween(Long value1, Long value2) { + addCriterion("another_depot_id between", value1, value2, "anotherDepotId"); + return (Criteria) this; + } + + public Criteria andAnotherDepotIdNotBetween(Long value1, Long value2) { + addCriterion("another_depot_id not between", value1, value2, "anotherDepotId"); + return (Criteria) this; + } + + public Criteria andTaxRateIsNull() { + addCriterion("tax_rate is null"); + return (Criteria) this; + } + + public Criteria andTaxRateIsNotNull() { + addCriterion("tax_rate is not null"); + return (Criteria) this; + } + + public Criteria andTaxRateEqualTo(BigDecimal value) { + addCriterion("tax_rate =", value, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateNotEqualTo(BigDecimal value) { + addCriterion("tax_rate <>", value, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateGreaterThan(BigDecimal value) { + addCriterion("tax_rate >", value, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("tax_rate >=", value, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateLessThan(BigDecimal value) { + addCriterion("tax_rate <", value, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateLessThanOrEqualTo(BigDecimal value) { + addCriterion("tax_rate <=", value, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateIn(List values) { + addCriterion("tax_rate in", values, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateNotIn(List values) { + addCriterion("tax_rate not in", values, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("tax_rate between", value1, value2, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("tax_rate not between", value1, value2, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxMoneyIsNull() { + addCriterion("tax_money is null"); + return (Criteria) this; + } + + public Criteria andTaxMoneyIsNotNull() { + addCriterion("tax_money is not null"); + return (Criteria) this; + } + + public Criteria andTaxMoneyEqualTo(BigDecimal value) { + addCriterion("tax_money =", value, "taxMoney"); + return (Criteria) this; + } + + public Criteria andTaxMoneyNotEqualTo(BigDecimal value) { + addCriterion("tax_money <>", value, "taxMoney"); + return (Criteria) this; + } + + public Criteria andTaxMoneyGreaterThan(BigDecimal value) { + addCriterion("tax_money >", value, "taxMoney"); + return (Criteria) this; + } + + public Criteria andTaxMoneyGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("tax_money >=", value, "taxMoney"); + return (Criteria) this; + } + + public Criteria andTaxMoneyLessThan(BigDecimal value) { + addCriterion("tax_money <", value, "taxMoney"); + return (Criteria) this; + } + + public Criteria andTaxMoneyLessThanOrEqualTo(BigDecimal value) { + addCriterion("tax_money <=", value, "taxMoney"); + return (Criteria) this; + } + + public Criteria andTaxMoneyIn(List values) { + addCriterion("tax_money in", values, "taxMoney"); + return (Criteria) this; + } + + public Criteria andTaxMoneyNotIn(List values) { + addCriterion("tax_money not in", values, "taxMoney"); + return (Criteria) this; + } + + public Criteria andTaxMoneyBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("tax_money between", value1, value2, "taxMoney"); + return (Criteria) this; + } + + public Criteria andTaxMoneyNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("tax_money not between", value1, value2, "taxMoney"); + return (Criteria) this; + } + + public Criteria andTaxLastMoneyIsNull() { + addCriterion("tax_last_money is null"); + return (Criteria) this; + } + + public Criteria andTaxLastMoneyIsNotNull() { + addCriterion("tax_last_money is not null"); + return (Criteria) this; + } + + public Criteria andTaxLastMoneyEqualTo(BigDecimal value) { + addCriterion("tax_last_money =", value, "taxLastMoney"); + return (Criteria) this; + } + + public Criteria andTaxLastMoneyNotEqualTo(BigDecimal value) { + addCriterion("tax_last_money <>", value, "taxLastMoney"); + return (Criteria) this; + } + + public Criteria andTaxLastMoneyGreaterThan(BigDecimal value) { + addCriterion("tax_last_money >", value, "taxLastMoney"); + return (Criteria) this; + } + + public Criteria andTaxLastMoneyGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("tax_last_money >=", value, "taxLastMoney"); + return (Criteria) this; + } + + public Criteria andTaxLastMoneyLessThan(BigDecimal value) { + addCriterion("tax_last_money <", value, "taxLastMoney"); + return (Criteria) this; + } + + public Criteria andTaxLastMoneyLessThanOrEqualTo(BigDecimal value) { + addCriterion("tax_last_money <=", value, "taxLastMoney"); + return (Criteria) this; + } + + public Criteria andTaxLastMoneyIn(List values) { + addCriterion("tax_last_money in", values, "taxLastMoney"); + return (Criteria) this; + } + + public Criteria andTaxLastMoneyNotIn(List values) { + addCriterion("tax_last_money not in", values, "taxLastMoney"); + return (Criteria) this; + } + + public Criteria andTaxLastMoneyBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("tax_last_money between", value1, value2, "taxLastMoney"); + return (Criteria) this; + } + + public Criteria andTaxLastMoneyNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("tax_last_money not between", value1, value2, "taxLastMoney"); + return (Criteria) this; + } + + public Criteria andOtherField1IsNull() { + addCriterion("other_field1 is null"); + return (Criteria) this; + } + + public Criteria andOtherField1IsNotNull() { + addCriterion("other_field1 is not null"); + return (Criteria) this; + } + + public Criteria andOtherField1EqualTo(String value) { + addCriterion("other_field1 =", value, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1NotEqualTo(String value) { + addCriterion("other_field1 <>", value, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1GreaterThan(String value) { + addCriterion("other_field1 >", value, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1GreaterThanOrEqualTo(String value) { + addCriterion("other_field1 >=", value, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1LessThan(String value) { + addCriterion("other_field1 <", value, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1LessThanOrEqualTo(String value) { + addCriterion("other_field1 <=", value, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1Like(String value) { + addCriterion("other_field1 like", value, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1NotLike(String value) { + addCriterion("other_field1 not like", value, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1In(List values) { + addCriterion("other_field1 in", values, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1NotIn(List values) { + addCriterion("other_field1 not in", values, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1Between(String value1, String value2) { + addCriterion("other_field1 between", value1, value2, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1NotBetween(String value1, String value2) { + addCriterion("other_field1 not between", value1, value2, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField2IsNull() { + addCriterion("other_field2 is null"); + return (Criteria) this; + } + + public Criteria andOtherField2IsNotNull() { + addCriterion("other_field2 is not null"); + return (Criteria) this; + } + + public Criteria andOtherField2EqualTo(String value) { + addCriterion("other_field2 =", value, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2NotEqualTo(String value) { + addCriterion("other_field2 <>", value, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2GreaterThan(String value) { + addCriterion("other_field2 >", value, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2GreaterThanOrEqualTo(String value) { + addCriterion("other_field2 >=", value, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2LessThan(String value) { + addCriterion("other_field2 <", value, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2LessThanOrEqualTo(String value) { + addCriterion("other_field2 <=", value, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2Like(String value) { + addCriterion("other_field2 like", value, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2NotLike(String value) { + addCriterion("other_field2 not like", value, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2In(List values) { + addCriterion("other_field2 in", values, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2NotIn(List values) { + addCriterion("other_field2 not in", values, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2Between(String value1, String value2) { + addCriterion("other_field2 between", value1, value2, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2NotBetween(String value1, String value2) { + addCriterion("other_field2 not between", value1, value2, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField3IsNull() { + addCriterion("other_field3 is null"); + return (Criteria) this; + } + + public Criteria andOtherField3IsNotNull() { + addCriterion("other_field3 is not null"); + return (Criteria) this; + } + + public Criteria andOtherField3EqualTo(String value) { + addCriterion("other_field3 =", value, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3NotEqualTo(String value) { + addCriterion("other_field3 <>", value, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3GreaterThan(String value) { + addCriterion("other_field3 >", value, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3GreaterThanOrEqualTo(String value) { + addCriterion("other_field3 >=", value, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3LessThan(String value) { + addCriterion("other_field3 <", value, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3LessThanOrEqualTo(String value) { + addCriterion("other_field3 <=", value, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3Like(String value) { + addCriterion("other_field3 like", value, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3NotLike(String value) { + addCriterion("other_field3 not like", value, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3In(List values) { + addCriterion("other_field3 in", values, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3NotIn(List values) { + addCriterion("other_field3 not in", values, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3Between(String value1, String value2) { + addCriterion("other_field3 between", value1, value2, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3NotBetween(String value1, String value2) { + addCriterion("other_field3 not between", value1, value2, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField4IsNull() { + addCriterion("other_field4 is null"); + return (Criteria) this; + } + + public Criteria andOtherField4IsNotNull() { + addCriterion("other_field4 is not null"); + return (Criteria) this; + } + + public Criteria andOtherField4EqualTo(String value) { + addCriterion("other_field4 =", value, "otherField4"); + return (Criteria) this; + } + + public Criteria andOtherField4NotEqualTo(String value) { + addCriterion("other_field4 <>", value, "otherField4"); + return (Criteria) this; + } + + public Criteria andOtherField4GreaterThan(String value) { + addCriterion("other_field4 >", value, "otherField4"); + return (Criteria) this; + } + + public Criteria andOtherField4GreaterThanOrEqualTo(String value) { + addCriterion("other_field4 >=", value, "otherField4"); + return (Criteria) this; + } + + public Criteria andOtherField4LessThan(String value) { + addCriterion("other_field4 <", value, "otherField4"); + return (Criteria) this; + } + + public Criteria andOtherField4LessThanOrEqualTo(String value) { + addCriterion("other_field4 <=", value, "otherField4"); + return (Criteria) this; + } + + public Criteria andOtherField4Like(String value) { + addCriterion("other_field4 like", value, "otherField4"); + return (Criteria) this; + } + + public Criteria andOtherField4NotLike(String value) { + addCriterion("other_field4 not like", value, "otherField4"); + return (Criteria) this; + } + + public Criteria andOtherField4In(List values) { + addCriterion("other_field4 in", values, "otherField4"); + return (Criteria) this; + } + + public Criteria andOtherField4NotIn(List values) { + addCriterion("other_field4 not in", values, "otherField4"); + return (Criteria) this; + } + + public Criteria andOtherField4Between(String value1, String value2) { + addCriterion("other_field4 between", value1, value2, "otherField4"); + return (Criteria) this; + } + + public Criteria andOtherField4NotBetween(String value1, String value2) { + addCriterion("other_field4 not between", value1, value2, "otherField4"); + return (Criteria) this; + } + + public Criteria andOtherField5IsNull() { + addCriterion("other_field5 is null"); + return (Criteria) this; + } + + public Criteria andOtherField5IsNotNull() { + addCriterion("other_field5 is not null"); + return (Criteria) this; + } + + public Criteria andOtherField5EqualTo(String value) { + addCriterion("other_field5 =", value, "otherField5"); + return (Criteria) this; + } + + public Criteria andOtherField5NotEqualTo(String value) { + addCriterion("other_field5 <>", value, "otherField5"); + return (Criteria) this; + } + + public Criteria andOtherField5GreaterThan(String value) { + addCriterion("other_field5 >", value, "otherField5"); + return (Criteria) this; + } + + public Criteria andOtherField5GreaterThanOrEqualTo(String value) { + addCriterion("other_field5 >=", value, "otherField5"); + return (Criteria) this; + } + + public Criteria andOtherField5LessThan(String value) { + addCriterion("other_field5 <", value, "otherField5"); + return (Criteria) this; + } + + public Criteria andOtherField5LessThanOrEqualTo(String value) { + addCriterion("other_field5 <=", value, "otherField5"); + return (Criteria) this; + } + + public Criteria andOtherField5Like(String value) { + addCriterion("other_field5 like", value, "otherField5"); + return (Criteria) this; + } + + public Criteria andOtherField5NotLike(String value) { + addCriterion("other_field5 not like", value, "otherField5"); + return (Criteria) this; + } + + public Criteria andOtherField5In(List values) { + addCriterion("other_field5 in", values, "otherField5"); + return (Criteria) this; + } + + public Criteria andOtherField5NotIn(List values) { + addCriterion("other_field5 not in", values, "otherField5"); + return (Criteria) this; + } + + public Criteria andOtherField5Between(String value1, String value2) { + addCriterion("other_field5 between", value1, value2, "otherField5"); + return (Criteria) this; + } + + public Criteria andOtherField5NotBetween(String value1, String value2) { + addCriterion("other_field5 not between", value1, value2, "otherField5"); + return (Criteria) this; + } + + public Criteria andMaterialTypeIsNull() { + addCriterion("material_type is null"); + return (Criteria) this; + } + + public Criteria andMaterialTypeIsNotNull() { + addCriterion("material_type is not null"); + return (Criteria) this; + } + + public Criteria andMaterialTypeEqualTo(String value) { + addCriterion("material_type =", value, "materialType"); + return (Criteria) this; + } + + public Criteria andMaterialTypeNotEqualTo(String value) { + addCriterion("material_type <>", value, "materialType"); + return (Criteria) this; + } + + public Criteria andMaterialTypeGreaterThan(String value) { + addCriterion("material_type >", value, "materialType"); + return (Criteria) this; + } + + public Criteria andMaterialTypeGreaterThanOrEqualTo(String value) { + addCriterion("material_type >=", value, "materialType"); + return (Criteria) this; + } + + public Criteria andMaterialTypeLessThan(String value) { + addCriterion("material_type <", value, "materialType"); + return (Criteria) this; + } + + public Criteria andMaterialTypeLessThanOrEqualTo(String value) { + addCriterion("material_type <=", value, "materialType"); + return (Criteria) this; + } + + public Criteria andMaterialTypeLike(String value) { + addCriterion("material_type like", value, "materialType"); + return (Criteria) this; + } + + public Criteria andMaterialTypeNotLike(String value) { + addCriterion("material_type not like", value, "materialType"); + return (Criteria) this; + } + + public Criteria andMaterialTypeIn(List values) { + addCriterion("material_type in", values, "materialType"); + return (Criteria) this; + } + + public Criteria andMaterialTypeNotIn(List values) { + addCriterion("material_type not in", values, "materialType"); + return (Criteria) this; + } + + public Criteria andMaterialTypeBetween(String value1, String value2) { + addCriterion("material_type between", value1, value2, "materialType"); + return (Criteria) this; + } + + public Criteria andMaterialTypeNotBetween(String value1, String value2) { + addCriterion("material_type not between", value1, value2, "materialType"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItemVo4DetailByTypeAndMId.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItemVo4DetailByTypeAndMId.java new file mode 100644 index 000000000..2d01d245b --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItemVo4DetailByTypeAndMId.java @@ -0,0 +1,67 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; +import java.util.Date; + +public class DepotItemVo4DetailByTypeAndMId { + + private String number; + + private String type; + + private String subType; + + private BigDecimal bnum; + + private String depotName; + + private Date otime; + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getSubType() { + return subType; + } + + public void setSubType(String subType) { + this.subType = subType; + } + + public BigDecimal getBnum() { + return bnum; + } + + public void setBnum(BigDecimal bnum) { + this.bnum = bnum; + } + + public String getDepotName() { + return depotName; + } + + public void setDepotName(String depotName) { + this.depotName = depotName; + } + + public Date getOtime() { + return otime; + } + + public void setOtime(Date otime) { + this.otime = otime; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItemVo4Material.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItemVo4Material.java new file mode 100644 index 000000000..4b404d42b --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItemVo4Material.java @@ -0,0 +1,27 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; +import java.util.Date; + +public class DepotItemVo4Material extends DepotItem{ + + private String mname; + + private String mmodel; + + public String getMname() { + return mname; + } + + public void setMname(String mname) { + this.mname = mname; + } + + public String getMmodel() { + return mmodel; + } + + public void setMmodel(String mmodel) { + this.mmodel = mmodel; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItemVo4WithInfoEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItemVo4WithInfoEx.java new file mode 100644 index 000000000..3a642dc86 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/DepotItemVo4WithInfoEx.java @@ -0,0 +1,206 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; + +public class DepotItemVo4WithInfoEx extends DepotItem{ + + private Long MId; + + private String MName; + + private String MModel; + + private String MaterialUnit; + + private String MColor; + + private String MStandard; + + private String MMfrs; + + private String MOtherField1; + + private String MOtherField2; + + private String MOtherField3; + + private String DepotName; + + private String AnotherDepotName; + + private Long UnitId; + + private String unitName; + + private Integer ratio; + + private String otherUnit; + + private BigDecimal presetPriceOne; + + private String priceStrategy; + + private BigDecimal purchaseDecimal; + + private String barCode; + + public Long getMId() { + return MId; + } + + public void setMId(Long MId) { + this.MId = MId; + } + + public String getMName() { + return MName; + } + + public void setMName(String MName) { + this.MName = MName; + } + + public String getMModel() { + return MModel; + } + + public void setMModel(String MModel) { + this.MModel = MModel; + } + + public String getMaterialUnit() { + return MaterialUnit; + } + + public void setMaterialUnit(String materialUnit) { + MaterialUnit = materialUnit; + } + + public String getMColor() { + return MColor; + } + + public void setMColor(String MColor) { + this.MColor = MColor; + } + + public String getMStandard() { + return MStandard; + } + + public void setMStandard(String MStandard) { + this.MStandard = MStandard; + } + + public String getMMfrs() { + return MMfrs; + } + + public void setMMfrs(String MMfrs) { + this.MMfrs = MMfrs; + } + + public String getMOtherField1() { + return MOtherField1; + } + + public void setMOtherField1(String MOtherField1) { + this.MOtherField1 = MOtherField1; + } + + public String getMOtherField2() { + return MOtherField2; + } + + public void setMOtherField2(String MOtherField2) { + this.MOtherField2 = MOtherField2; + } + + public String getMOtherField3() { + return MOtherField3; + } + + public void setMOtherField3(String MOtherField3) { + this.MOtherField3 = MOtherField3; + } + + public String getDepotName() { + return DepotName; + } + + public void setDepotName(String depotName) { + DepotName = depotName; + } + + public String getAnotherDepotName() { + return AnotherDepotName; + } + + public void setAnotherDepotName(String anotherDepotName) { + AnotherDepotName = anotherDepotName; + } + + public Long getUnitId() { + return UnitId; + } + + public void setUnitId(Long unitId) { + UnitId = unitId; + } + + public String getUnitName() { + return unitName; + } + + public void setUnitName(String unitName) { + this.unitName = unitName; + } + + public Integer getRatio() { + return ratio; + } + + public void setRatio(Integer ratio) { + this.ratio = ratio; + } + + public String getOtherUnit() { + return otherUnit; + } + + public void setOtherUnit(String otherUnit) { + this.otherUnit = otherUnit; + } + + public BigDecimal getPresetPriceOne() { + return presetPriceOne; + } + + public void setPresetPriceOne(BigDecimal presetPriceOne) { + this.presetPriceOne = presetPriceOne; + } + + public String getPriceStrategy() { + return priceStrategy; + } + + public void setPriceStrategy(String priceStrategy) { + this.priceStrategy = priceStrategy; + } + + public BigDecimal getPurchaseDecimal() { + return purchaseDecimal; + } + + public void setPurchaseDecimal(BigDecimal purchaseDecimal) { + this.purchaseDecimal = purchaseDecimal; + } + + public String getBarCode() { + return barCode; + } + + public void setBarCode(String barCode) { + this.barCode = barCode; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Function.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Function.java new file mode 100644 index 000000000..45163bd06 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Function.java @@ -0,0 +1,133 @@ +package com.jsh.erp.datasource.entities; + +public class Function { + private Long id; + + private String number; + + private String name; + + private String parentNumber; + + private String url; + + private String component; + + private Boolean state; + + private String sort; + + private Boolean enabled; + + private String type; + + private String pushBtn; + + private String icon; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number == null ? null : number.trim(); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + public String getParentNumber() { + return parentNumber; + } + + public void setParentNumber(String parentNumber) { + this.parentNumber = parentNumber == null ? null : parentNumber.trim(); + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url == null ? null : url.trim(); + } + + public String getComponent() { + return component; + } + + public void setComponent(String component) { + this.component = component == null ? null : component.trim(); + } + + public Boolean getState() { + return state; + } + + public void setState(Boolean state) { + this.state = state; + } + + public String getSort() { + return sort; + } + + public void setSort(String sort) { + this.sort = sort == null ? null : sort.trim(); + } + + public Boolean getEnabled() { + return enabled; + } + + public void setEnabled(Boolean enabled) { + this.enabled = enabled; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type == null ? null : type.trim(); + } + + public String getPushBtn() { + return pushBtn; + } + + public void setPushBtn(String pushBtn) { + this.pushBtn = pushBtn == null ? null : pushBtn.trim(); + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon == null ? null : icon.trim(); + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/FunctionExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/FunctionExample.java new file mode 100644 index 000000000..80a41efea --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/FunctionExample.java @@ -0,0 +1,1079 @@ +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.List; + +public class FunctionExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public FunctionExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andNumberIsNull() { + addCriterion("number is null"); + return (Criteria) this; + } + + public Criteria andNumberIsNotNull() { + addCriterion("number is not null"); + return (Criteria) this; + } + + public Criteria andNumberEqualTo(String value) { + addCriterion("number =", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberNotEqualTo(String value) { + addCriterion("number <>", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberGreaterThan(String value) { + addCriterion("number >", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberGreaterThanOrEqualTo(String value) { + addCriterion("number >=", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberLessThan(String value) { + addCriterion("number <", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberLessThanOrEqualTo(String value) { + addCriterion("number <=", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberLike(String value) { + addCriterion("number like", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberNotLike(String value) { + addCriterion("number not like", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberIn(List values) { + addCriterion("number in", values, "number"); + return (Criteria) this; + } + + public Criteria andNumberNotIn(List values) { + addCriterion("number not in", values, "number"); + return (Criteria) this; + } + + public Criteria andNumberBetween(String value1, String value2) { + addCriterion("number between", value1, value2, "number"); + return (Criteria) this; + } + + public Criteria andNumberNotBetween(String value1, String value2) { + addCriterion("number not between", value1, value2, "number"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("name is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("name is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("name =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("name <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("name >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("name >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("name <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("name <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("name like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("name not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("name in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("name not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("name between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("name not between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andParentNumberIsNull() { + addCriterion("parent_number is null"); + return (Criteria) this; + } + + public Criteria andParentNumberIsNotNull() { + addCriterion("parent_number is not null"); + return (Criteria) this; + } + + public Criteria andParentNumberEqualTo(String value) { + addCriterion("parent_number =", value, "parentNumber"); + return (Criteria) this; + } + + public Criteria andParentNumberNotEqualTo(String value) { + addCriterion("parent_number <>", value, "parentNumber"); + return (Criteria) this; + } + + public Criteria andParentNumberGreaterThan(String value) { + addCriterion("parent_number >", value, "parentNumber"); + return (Criteria) this; + } + + public Criteria andParentNumberGreaterThanOrEqualTo(String value) { + addCriterion("parent_number >=", value, "parentNumber"); + return (Criteria) this; + } + + public Criteria andParentNumberLessThan(String value) { + addCriterion("parent_number <", value, "parentNumber"); + return (Criteria) this; + } + + public Criteria andParentNumberLessThanOrEqualTo(String value) { + addCriterion("parent_number <=", value, "parentNumber"); + return (Criteria) this; + } + + public Criteria andParentNumberLike(String value) { + addCriterion("parent_number like", value, "parentNumber"); + return (Criteria) this; + } + + public Criteria andParentNumberNotLike(String value) { + addCriterion("parent_number not like", value, "parentNumber"); + return (Criteria) this; + } + + public Criteria andParentNumberIn(List values) { + addCriterion("parent_number in", values, "parentNumber"); + return (Criteria) this; + } + + public Criteria andParentNumberNotIn(List values) { + addCriterion("parent_number not in", values, "parentNumber"); + return (Criteria) this; + } + + public Criteria andParentNumberBetween(String value1, String value2) { + addCriterion("parent_number between", value1, value2, "parentNumber"); + return (Criteria) this; + } + + public Criteria andParentNumberNotBetween(String value1, String value2) { + addCriterion("parent_number not between", value1, value2, "parentNumber"); + return (Criteria) this; + } + + public Criteria andUrlIsNull() { + addCriterion("url is null"); + return (Criteria) this; + } + + public Criteria andUrlIsNotNull() { + addCriterion("url is not null"); + return (Criteria) this; + } + + public Criteria andUrlEqualTo(String value) { + addCriterion("url =", value, "url"); + return (Criteria) this; + } + + public Criteria andUrlNotEqualTo(String value) { + addCriterion("url <>", value, "url"); + return (Criteria) this; + } + + public Criteria andUrlGreaterThan(String value) { + addCriterion("url >", value, "url"); + return (Criteria) this; + } + + public Criteria andUrlGreaterThanOrEqualTo(String value) { + addCriterion("url >=", value, "url"); + return (Criteria) this; + } + + public Criteria andUrlLessThan(String value) { + addCriterion("url <", value, "url"); + return (Criteria) this; + } + + public Criteria andUrlLessThanOrEqualTo(String value) { + addCriterion("url <=", value, "url"); + return (Criteria) this; + } + + public Criteria andUrlLike(String value) { + addCriterion("url like", value, "url"); + return (Criteria) this; + } + + public Criteria andUrlNotLike(String value) { + addCriterion("url not like", value, "url"); + return (Criteria) this; + } + + public Criteria andUrlIn(List values) { + addCriterion("url in", values, "url"); + return (Criteria) this; + } + + public Criteria andUrlNotIn(List values) { + addCriterion("url not in", values, "url"); + return (Criteria) this; + } + + public Criteria andUrlBetween(String value1, String value2) { + addCriterion("url between", value1, value2, "url"); + return (Criteria) this; + } + + public Criteria andUrlNotBetween(String value1, String value2) { + addCriterion("url not between", value1, value2, "url"); + return (Criteria) this; + } + + public Criteria andComponentIsNull() { + addCriterion("component is null"); + return (Criteria) this; + } + + public Criteria andComponentIsNotNull() { + addCriterion("component is not null"); + return (Criteria) this; + } + + public Criteria andComponentEqualTo(String value) { + addCriterion("component =", value, "component"); + return (Criteria) this; + } + + public Criteria andComponentNotEqualTo(String value) { + addCriterion("component <>", value, "component"); + return (Criteria) this; + } + + public Criteria andComponentGreaterThan(String value) { + addCriterion("component >", value, "component"); + return (Criteria) this; + } + + public Criteria andComponentGreaterThanOrEqualTo(String value) { + addCriterion("component >=", value, "component"); + return (Criteria) this; + } + + public Criteria andComponentLessThan(String value) { + addCriterion("component <", value, "component"); + return (Criteria) this; + } + + public Criteria andComponentLessThanOrEqualTo(String value) { + addCriterion("component <=", value, "component"); + return (Criteria) this; + } + + public Criteria andComponentLike(String value) { + addCriterion("component like", value, "component"); + return (Criteria) this; + } + + public Criteria andComponentNotLike(String value) { + addCriterion("component not like", value, "component"); + return (Criteria) this; + } + + public Criteria andComponentIn(List values) { + addCriterion("component in", values, "component"); + return (Criteria) this; + } + + public Criteria andComponentNotIn(List values) { + addCriterion("component not in", values, "component"); + return (Criteria) this; + } + + public Criteria andComponentBetween(String value1, String value2) { + addCriterion("component between", value1, value2, "component"); + return (Criteria) this; + } + + public Criteria andComponentNotBetween(String value1, String value2) { + addCriterion("component not between", value1, value2, "component"); + return (Criteria) this; + } + + public Criteria andStateIsNull() { + addCriterion("state is null"); + return (Criteria) this; + } + + public Criteria andStateIsNotNull() { + addCriterion("state is not null"); + return (Criteria) this; + } + + public Criteria andStateEqualTo(Boolean value) { + addCriterion("state =", value, "state"); + return (Criteria) this; + } + + public Criteria andStateNotEqualTo(Boolean value) { + addCriterion("state <>", value, "state"); + return (Criteria) this; + } + + public Criteria andStateGreaterThan(Boolean value) { + addCriterion("state >", value, "state"); + return (Criteria) this; + } + + public Criteria andStateGreaterThanOrEqualTo(Boolean value) { + addCriterion("state >=", value, "state"); + return (Criteria) this; + } + + public Criteria andStateLessThan(Boolean value) { + addCriterion("state <", value, "state"); + return (Criteria) this; + } + + public Criteria andStateLessThanOrEqualTo(Boolean value) { + addCriterion("state <=", value, "state"); + return (Criteria) this; + } + + public Criteria andStateIn(List values) { + addCriterion("state in", values, "state"); + return (Criteria) this; + } + + public Criteria andStateNotIn(List values) { + addCriterion("state not in", values, "state"); + return (Criteria) this; + } + + public Criteria andStateBetween(Boolean value1, Boolean value2) { + addCriterion("state between", value1, value2, "state"); + return (Criteria) this; + } + + public Criteria andStateNotBetween(Boolean value1, Boolean value2) { + addCriterion("state not between", value1, value2, "state"); + return (Criteria) this; + } + + public Criteria andSortIsNull() { + addCriterion("sort is null"); + return (Criteria) this; + } + + public Criteria andSortIsNotNull() { + addCriterion("sort is not null"); + return (Criteria) this; + } + + public Criteria andSortEqualTo(String value) { + addCriterion("sort =", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotEqualTo(String value) { + addCriterion("sort <>", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortGreaterThan(String value) { + addCriterion("sort >", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortGreaterThanOrEqualTo(String value) { + addCriterion("sort >=", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLessThan(String value) { + addCriterion("sort <", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLessThanOrEqualTo(String value) { + addCriterion("sort <=", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLike(String value) { + addCriterion("sort like", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotLike(String value) { + addCriterion("sort not like", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortIn(List values) { + addCriterion("sort in", values, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotIn(List values) { + addCriterion("sort not in", values, "sort"); + return (Criteria) this; + } + + public Criteria andSortBetween(String value1, String value2) { + addCriterion("sort between", value1, value2, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotBetween(String value1, String value2) { + addCriterion("sort not between", value1, value2, "sort"); + return (Criteria) this; + } + + public Criteria andEnabledIsNull() { + addCriterion("enabled is null"); + return (Criteria) this; + } + + public Criteria andEnabledIsNotNull() { + addCriterion("enabled is not null"); + return (Criteria) this; + } + + public Criteria andEnabledEqualTo(Boolean value) { + addCriterion("enabled =", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledNotEqualTo(Boolean value) { + addCriterion("enabled <>", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledGreaterThan(Boolean value) { + addCriterion("enabled >", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledGreaterThanOrEqualTo(Boolean value) { + addCriterion("enabled >=", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledLessThan(Boolean value) { + addCriterion("enabled <", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledLessThanOrEqualTo(Boolean value) { + addCriterion("enabled <=", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledIn(List values) { + addCriterion("enabled in", values, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledNotIn(List values) { + addCriterion("enabled not in", values, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledBetween(Boolean value1, Boolean value2) { + addCriterion("enabled between", value1, value2, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledNotBetween(Boolean value1, Boolean value2) { + addCriterion("enabled not between", value1, value2, "enabled"); + return (Criteria) this; + } + + public Criteria andTypeIsNull() { + addCriterion("type is null"); + return (Criteria) this; + } + + public Criteria andTypeIsNotNull() { + addCriterion("type is not null"); + return (Criteria) this; + } + + public Criteria andTypeEqualTo(String value) { + addCriterion("type =", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotEqualTo(String value) { + addCriterion("type <>", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThan(String value) { + addCriterion("type >", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThanOrEqualTo(String value) { + addCriterion("type >=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThan(String value) { + addCriterion("type <", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThanOrEqualTo(String value) { + addCriterion("type <=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLike(String value) { + addCriterion("type like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotLike(String value) { + addCriterion("type not like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeIn(List values) { + addCriterion("type in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotIn(List values) { + addCriterion("type not in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeBetween(String value1, String value2) { + addCriterion("type between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotBetween(String value1, String value2) { + addCriterion("type not between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andPushBtnIsNull() { + addCriterion("push_btn is null"); + return (Criteria) this; + } + + public Criteria andPushBtnIsNotNull() { + addCriterion("push_btn is not null"); + return (Criteria) this; + } + + public Criteria andPushBtnEqualTo(String value) { + addCriterion("push_btn =", value, "pushBtn"); + return (Criteria) this; + } + + public Criteria andPushBtnNotEqualTo(String value) { + addCriterion("push_btn <>", value, "pushBtn"); + return (Criteria) this; + } + + public Criteria andPushBtnGreaterThan(String value) { + addCriterion("push_btn >", value, "pushBtn"); + return (Criteria) this; + } + + public Criteria andPushBtnGreaterThanOrEqualTo(String value) { + addCriterion("push_btn >=", value, "pushBtn"); + return (Criteria) this; + } + + public Criteria andPushBtnLessThan(String value) { + addCriterion("push_btn <", value, "pushBtn"); + return (Criteria) this; + } + + public Criteria andPushBtnLessThanOrEqualTo(String value) { + addCriterion("push_btn <=", value, "pushBtn"); + return (Criteria) this; + } + + public Criteria andPushBtnLike(String value) { + addCriterion("push_btn like", value, "pushBtn"); + return (Criteria) this; + } + + public Criteria andPushBtnNotLike(String value) { + addCriterion("push_btn not like", value, "pushBtn"); + return (Criteria) this; + } + + public Criteria andPushBtnIn(List values) { + addCriterion("push_btn in", values, "pushBtn"); + return (Criteria) this; + } + + public Criteria andPushBtnNotIn(List values) { + addCriterion("push_btn not in", values, "pushBtn"); + return (Criteria) this; + } + + public Criteria andPushBtnBetween(String value1, String value2) { + addCriterion("push_btn between", value1, value2, "pushBtn"); + return (Criteria) this; + } + + public Criteria andPushBtnNotBetween(String value1, String value2) { + addCriterion("push_btn not between", value1, value2, "pushBtn"); + return (Criteria) this; + } + + public Criteria andIconIsNull() { + addCriterion("icon is null"); + return (Criteria) this; + } + + public Criteria andIconIsNotNull() { + addCriterion("icon is not null"); + return (Criteria) this; + } + + public Criteria andIconEqualTo(String value) { + addCriterion("icon =", value, "icon"); + return (Criteria) this; + } + + public Criteria andIconNotEqualTo(String value) { + addCriterion("icon <>", value, "icon"); + return (Criteria) this; + } + + public Criteria andIconGreaterThan(String value) { + addCriterion("icon >", value, "icon"); + return (Criteria) this; + } + + public Criteria andIconGreaterThanOrEqualTo(String value) { + addCriterion("icon >=", value, "icon"); + return (Criteria) this; + } + + public Criteria andIconLessThan(String value) { + addCriterion("icon <", value, "icon"); + return (Criteria) this; + } + + public Criteria andIconLessThanOrEqualTo(String value) { + addCriterion("icon <=", value, "icon"); + return (Criteria) this; + } + + public Criteria andIconLike(String value) { + addCriterion("icon like", value, "icon"); + return (Criteria) this; + } + + public Criteria andIconNotLike(String value) { + addCriterion("icon not like", value, "icon"); + return (Criteria) this; + } + + public Criteria andIconIn(List values) { + addCriterion("icon in", values, "icon"); + return (Criteria) this; + } + + public Criteria andIconNotIn(List values) { + addCriterion("icon not in", values, "icon"); + return (Criteria) this; + } + + public Criteria andIconBetween(String value1, String value2) { + addCriterion("icon between", value1, value2, "icon"); + return (Criteria) this; + } + + public Criteria andIconNotBetween(String value1, String value2) { + addCriterion("icon not between", value1, value2, "icon"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/InOutItem.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/InOutItem.java new file mode 100644 index 000000000..9c49c3fa9 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/InOutItem.java @@ -0,0 +1,63 @@ +package com.jsh.erp.datasource.entities; + +public class InOutItem { + private Long id; + + private String name; + + private String type; + + private String remark; + + private Long tenantId; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type == null ? null : type.trim(); + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/InOutItemExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/InOutItemExample.java new file mode 100644 index 000000000..be8659c22 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/InOutItemExample.java @@ -0,0 +1,599 @@ +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.List; + +public class InOutItemExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public InOutItemExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("name is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("name is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("name =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("name <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("name >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("name >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("name <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("name <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("name like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("name not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("name in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("name not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("name between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("name not between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andTypeIsNull() { + addCriterion("type is null"); + return (Criteria) this; + } + + public Criteria andTypeIsNotNull() { + addCriterion("type is not null"); + return (Criteria) this; + } + + public Criteria andTypeEqualTo(String value) { + addCriterion("type =", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotEqualTo(String value) { + addCriterion("type <>", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThan(String value) { + addCriterion("type >", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThanOrEqualTo(String value) { + addCriterion("type >=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThan(String value) { + addCriterion("type <", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThanOrEqualTo(String value) { + addCriterion("type <=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLike(String value) { + addCriterion("type like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotLike(String value) { + addCriterion("type not like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeIn(List values) { + addCriterion("type in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotIn(List values) { + addCriterion("type not in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeBetween(String value1, String value2) { + addCriterion("type between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotBetween(String value1, String value2) { + addCriterion("type not between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Log.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Log.java new file mode 100644 index 000000000..152844161 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Log.java @@ -0,0 +1,85 @@ +package com.jsh.erp.datasource.entities; + +import java.util.Date; + +public class Log { + private Long id; + + private Long userId; + + private String operation; + + private String clientIp; + + private Date createTime; + + private Byte status; + + private String content; + + private Long tenantId; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getOperation() { + return operation; + } + + public void setOperation(String operation) { + this.operation = operation == null ? null : operation.trim(); + } + + public String getClientIp() { + return clientIp; + } + + public void setClientIp(String clientIp) { + this.clientIp = clientIp == null ? null : clientIp.trim(); + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Byte getStatus() { + return status; + } + + public void setStatus(Byte status) { + this.status = status; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content == null ? null : content.trim(); + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/LogExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/LogExample.java new file mode 100644 index 000000000..8a616e5f1 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/LogExample.java @@ -0,0 +1,710 @@ +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class LogExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public LogExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andUserIdIsNull() { + addCriterion("user_id is null"); + return (Criteria) this; + } + + public Criteria andUserIdIsNotNull() { + addCriterion("user_id is not null"); + return (Criteria) this; + } + + public Criteria andUserIdEqualTo(Long value) { + addCriterion("user_id =", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotEqualTo(Long value) { + addCriterion("user_id <>", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThan(Long value) { + addCriterion("user_id >", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThanOrEqualTo(Long value) { + addCriterion("user_id >=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThan(Long value) { + addCriterion("user_id <", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThanOrEqualTo(Long value) { + addCriterion("user_id <=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdIn(List values) { + addCriterion("user_id in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotIn(List values) { + addCriterion("user_id not in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdBetween(Long value1, Long value2) { + addCriterion("user_id between", value1, value2, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotBetween(Long value1, Long value2) { + addCriterion("user_id not between", value1, value2, "userId"); + return (Criteria) this; + } + + public Criteria andOperationIsNull() { + addCriterion("operation is null"); + return (Criteria) this; + } + + public Criteria andOperationIsNotNull() { + addCriterion("operation is not null"); + return (Criteria) this; + } + + public Criteria andOperationEqualTo(String value) { + addCriterion("operation =", value, "operation"); + return (Criteria) this; + } + + public Criteria andOperationNotEqualTo(String value) { + addCriterion("operation <>", value, "operation"); + return (Criteria) this; + } + + public Criteria andOperationGreaterThan(String value) { + addCriterion("operation >", value, "operation"); + return (Criteria) this; + } + + public Criteria andOperationGreaterThanOrEqualTo(String value) { + addCriterion("operation >=", value, "operation"); + return (Criteria) this; + } + + public Criteria andOperationLessThan(String value) { + addCriterion("operation <", value, "operation"); + return (Criteria) this; + } + + public Criteria andOperationLessThanOrEqualTo(String value) { + addCriterion("operation <=", value, "operation"); + return (Criteria) this; + } + + public Criteria andOperationLike(String value) { + addCriterion("operation like", value, "operation"); + return (Criteria) this; + } + + public Criteria andOperationNotLike(String value) { + addCriterion("operation not like", value, "operation"); + return (Criteria) this; + } + + public Criteria andOperationIn(List values) { + addCriterion("operation in", values, "operation"); + return (Criteria) this; + } + + public Criteria andOperationNotIn(List values) { + addCriterion("operation not in", values, "operation"); + return (Criteria) this; + } + + public Criteria andOperationBetween(String value1, String value2) { + addCriterion("operation between", value1, value2, "operation"); + return (Criteria) this; + } + + public Criteria andOperationNotBetween(String value1, String value2) { + addCriterion("operation not between", value1, value2, "operation"); + return (Criteria) this; + } + + public Criteria andClientIpIsNull() { + addCriterion("client_ip is null"); + return (Criteria) this; + } + + public Criteria andClientIpIsNotNull() { + addCriterion("client_ip is not null"); + return (Criteria) this; + } + + public Criteria andClientIpEqualTo(String value) { + addCriterion("client_ip =", value, "clientIp"); + return (Criteria) this; + } + + public Criteria andClientIpNotEqualTo(String value) { + addCriterion("client_ip <>", value, "clientIp"); + return (Criteria) this; + } + + public Criteria andClientIpGreaterThan(String value) { + addCriterion("client_ip >", value, "clientIp"); + return (Criteria) this; + } + + public Criteria andClientIpGreaterThanOrEqualTo(String value) { + addCriterion("client_ip >=", value, "clientIp"); + return (Criteria) this; + } + + public Criteria andClientIpLessThan(String value) { + addCriterion("client_ip <", value, "clientIp"); + return (Criteria) this; + } + + public Criteria andClientIpLessThanOrEqualTo(String value) { + addCriterion("client_ip <=", value, "clientIp"); + return (Criteria) this; + } + + public Criteria andClientIpLike(String value) { + addCriterion("client_ip like", value, "clientIp"); + return (Criteria) this; + } + + public Criteria andClientIpNotLike(String value) { + addCriterion("client_ip not like", value, "clientIp"); + return (Criteria) this; + } + + public Criteria andClientIpIn(List values) { + addCriterion("client_ip in", values, "clientIp"); + return (Criteria) this; + } + + public Criteria andClientIpNotIn(List values) { + addCriterion("client_ip not in", values, "clientIp"); + return (Criteria) this; + } + + public Criteria andClientIpBetween(String value1, String value2) { + addCriterion("client_ip between", value1, value2, "clientIp"); + return (Criteria) this; + } + + public Criteria andClientIpNotBetween(String value1, String value2) { + addCriterion("client_ip not between", value1, value2, "clientIp"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andStatusIsNull() { + addCriterion("status is null"); + return (Criteria) this; + } + + public Criteria andStatusIsNotNull() { + addCriterion("status is not null"); + return (Criteria) this; + } + + public Criteria andStatusEqualTo(Byte value) { + addCriterion("status =", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotEqualTo(Byte value) { + addCriterion("status <>", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusGreaterThan(Byte value) { + addCriterion("status >", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusGreaterThanOrEqualTo(Byte value) { + addCriterion("status >=", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLessThan(Byte value) { + addCriterion("status <", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLessThanOrEqualTo(Byte value) { + addCriterion("status <=", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusIn(List values) { + addCriterion("status in", values, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotIn(List values) { + addCriterion("status not in", values, "status"); + return (Criteria) this; + } + + public Criteria andStatusBetween(Byte value1, Byte value2) { + addCriterion("status between", value1, value2, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotBetween(Byte value1, Byte value2) { + addCriterion("status not between", value1, value2, "status"); + return (Criteria) this; + } + + public Criteria andContentIsNull() { + addCriterion("content is null"); + return (Criteria) this; + } + + public Criteria andContentIsNotNull() { + addCriterion("content is not null"); + return (Criteria) this; + } + + public Criteria andContentEqualTo(String value) { + addCriterion("content =", value, "content"); + return (Criteria) this; + } + + public Criteria andContentNotEqualTo(String value) { + addCriterion("content <>", value, "content"); + return (Criteria) this; + } + + public Criteria andContentGreaterThan(String value) { + addCriterion("content >", value, "content"); + return (Criteria) this; + } + + public Criteria andContentGreaterThanOrEqualTo(String value) { + addCriterion("content >=", value, "content"); + return (Criteria) this; + } + + public Criteria andContentLessThan(String value) { + addCriterion("content <", value, "content"); + return (Criteria) this; + } + + public Criteria andContentLessThanOrEqualTo(String value) { + addCriterion("content <=", value, "content"); + return (Criteria) this; + } + + public Criteria andContentLike(String value) { + addCriterion("content like", value, "content"); + return (Criteria) this; + } + + public Criteria andContentNotLike(String value) { + addCriterion("content not like", value, "content"); + return (Criteria) this; + } + + public Criteria andContentIn(List values) { + addCriterion("content in", values, "content"); + return (Criteria) this; + } + + public Criteria andContentNotIn(List values) { + addCriterion("content not in", values, "content"); + return (Criteria) this; + } + + public Criteria andContentBetween(String value1, String value2) { + addCriterion("content between", value1, value2, "content"); + return (Criteria) this; + } + + public Criteria andContentNotBetween(String value1, String value2) { + addCriterion("content not between", value1, value2, "content"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Material.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Material.java new file mode 100644 index 000000000..361be1742 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Material.java @@ -0,0 +1,185 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; + +public class Material { + private Long id; + + private Long categoryId; + + private String name; + + private String mfrs; + + private BigDecimal safetyStock; + + private String model; + + private String standard; + + private String color; + + private String unit; + + private String remark; + + private Long unitId; + + private Boolean enabled; + + private String otherField1; + + private String otherField2; + + private String otherField3; + + private String enableSerialNumber; + + private Long tenantId; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getCategoryId() { + return categoryId; + } + + public void setCategoryId(Long categoryId) { + this.categoryId = categoryId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + public String getMfrs() { + return mfrs; + } + + public void setMfrs(String mfrs) { + this.mfrs = mfrs == null ? null : mfrs.trim(); + } + + public BigDecimal getSafetyStock() { + return safetyStock; + } + + public void setSafetyStock(BigDecimal safetyStock) { + this.safetyStock = safetyStock; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model == null ? null : model.trim(); + } + + public String getStandard() { + return standard; + } + + public void setStandard(String standard) { + this.standard = standard == null ? null : standard.trim(); + } + + public String getColor() { + return color; + } + + public void setColor(String color) { + this.color = color == null ? null : color.trim(); + } + + public String getUnit() { + return unit; + } + + public void setUnit(String unit) { + this.unit = unit == null ? null : unit.trim(); + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + public Long getUnitId() { + return unitId; + } + + public void setUnitId(Long unitId) { + this.unitId = unitId; + } + + public Boolean getEnabled() { + return enabled; + } + + public void setEnabled(Boolean enabled) { + this.enabled = enabled; + } + + public String getOtherField1() { + return otherField1; + } + + public void setOtherField1(String otherField1) { + this.otherField1 = otherField1 == null ? null : otherField1.trim(); + } + + public String getOtherField2() { + return otherField2; + } + + public void setOtherField2(String otherField2) { + this.otherField2 = otherField2 == null ? null : otherField2.trim(); + } + + public String getOtherField3() { + return otherField3; + } + + public void setOtherField3(String otherField3) { + this.otherField3 = otherField3 == null ? null : otherField3.trim(); + } + + public String getEnableSerialNumber() { + return enableSerialNumber; + } + + public void setEnableSerialNumber(String enableSerialNumber) { + this.enableSerialNumber = enableSerialNumber == null ? null : enableSerialNumber.trim(); + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialCategory.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialCategory.java new file mode 100644 index 000000000..158ceec45 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialCategory.java @@ -0,0 +1,115 @@ +package com.jsh.erp.datasource.entities; + +import java.util.Date; + +public class MaterialCategory { + private Long id; + + private String name; + + private Short categoryLevel; + + private Long parentId; + + private String sort; + + private String serialNo; + + private String remark; + + private Date createTime; + + private Date updateTime; + + private Long tenantId; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + public Short getCategoryLevel() { + return categoryLevel; + } + + public void setCategoryLevel(Short categoryLevel) { + this.categoryLevel = categoryLevel; + } + + public Long getParentId() { + return parentId; + } + + public void setParentId(Long parentId) { + this.parentId = parentId; + } + + public String getSort() { + return sort; + } + + public void setSort(String sort) { + this.sort = sort == null ? null : sort.trim(); + } + + public String getSerialNo() { + return serialNo; + } + + public void setSerialNo(String serialNo) { + this.serialNo = serialNo == null ? null : serialNo.trim(); + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialCategoryExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialCategoryExample.java new file mode 100644 index 000000000..7060ffe42 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialCategoryExample.java @@ -0,0 +1,910 @@ +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class MaterialCategoryExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public MaterialCategoryExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("name is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("name is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("name =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("name <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("name >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("name >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("name <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("name <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("name like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("name not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("name in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("name not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("name between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("name not between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andCategoryLevelIsNull() { + addCriterion("category_level is null"); + return (Criteria) this; + } + + public Criteria andCategoryLevelIsNotNull() { + addCriterion("category_level is not null"); + return (Criteria) this; + } + + public Criteria andCategoryLevelEqualTo(Short value) { + addCriterion("category_level =", value, "categoryLevel"); + return (Criteria) this; + } + + public Criteria andCategoryLevelNotEqualTo(Short value) { + addCriterion("category_level <>", value, "categoryLevel"); + return (Criteria) this; + } + + public Criteria andCategoryLevelGreaterThan(Short value) { + addCriterion("category_level >", value, "categoryLevel"); + return (Criteria) this; + } + + public Criteria andCategoryLevelGreaterThanOrEqualTo(Short value) { + addCriterion("category_level >=", value, "categoryLevel"); + return (Criteria) this; + } + + public Criteria andCategoryLevelLessThan(Short value) { + addCriterion("category_level <", value, "categoryLevel"); + return (Criteria) this; + } + + public Criteria andCategoryLevelLessThanOrEqualTo(Short value) { + addCriterion("category_level <=", value, "categoryLevel"); + return (Criteria) this; + } + + public Criteria andCategoryLevelIn(List values) { + addCriterion("category_level in", values, "categoryLevel"); + return (Criteria) this; + } + + public Criteria andCategoryLevelNotIn(List values) { + addCriterion("category_level not in", values, "categoryLevel"); + return (Criteria) this; + } + + public Criteria andCategoryLevelBetween(Short value1, Short value2) { + addCriterion("category_level between", value1, value2, "categoryLevel"); + return (Criteria) this; + } + + public Criteria andCategoryLevelNotBetween(Short value1, Short value2) { + addCriterion("category_level not between", value1, value2, "categoryLevel"); + return (Criteria) this; + } + + public Criteria andParentIdIsNull() { + addCriterion("parent_id is null"); + return (Criteria) this; + } + + public Criteria andParentIdIsNotNull() { + addCriterion("parent_id is not null"); + return (Criteria) this; + } + + public Criteria andParentIdEqualTo(Long value) { + addCriterion("parent_id =", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdNotEqualTo(Long value) { + addCriterion("parent_id <>", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdGreaterThan(Long value) { + addCriterion("parent_id >", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdGreaterThanOrEqualTo(Long value) { + addCriterion("parent_id >=", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdLessThan(Long value) { + addCriterion("parent_id <", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdLessThanOrEqualTo(Long value) { + addCriterion("parent_id <=", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdIn(List values) { + addCriterion("parent_id in", values, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdNotIn(List values) { + addCriterion("parent_id not in", values, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdBetween(Long value1, Long value2) { + addCriterion("parent_id between", value1, value2, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdNotBetween(Long value1, Long value2) { + addCriterion("parent_id not between", value1, value2, "parentId"); + return (Criteria) this; + } + + public Criteria andSortIsNull() { + addCriterion("sort is null"); + return (Criteria) this; + } + + public Criteria andSortIsNotNull() { + addCriterion("sort is not null"); + return (Criteria) this; + } + + public Criteria andSortEqualTo(String value) { + addCriterion("sort =", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotEqualTo(String value) { + addCriterion("sort <>", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortGreaterThan(String value) { + addCriterion("sort >", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortGreaterThanOrEqualTo(String value) { + addCriterion("sort >=", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLessThan(String value) { + addCriterion("sort <", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLessThanOrEqualTo(String value) { + addCriterion("sort <=", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLike(String value) { + addCriterion("sort like", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotLike(String value) { + addCriterion("sort not like", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortIn(List values) { + addCriterion("sort in", values, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotIn(List values) { + addCriterion("sort not in", values, "sort"); + return (Criteria) this; + } + + public Criteria andSortBetween(String value1, String value2) { + addCriterion("sort between", value1, value2, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotBetween(String value1, String value2) { + addCriterion("sort not between", value1, value2, "sort"); + return (Criteria) this; + } + + public Criteria andSerialNoIsNull() { + addCriterion("serial_no is null"); + return (Criteria) this; + } + + public Criteria andSerialNoIsNotNull() { + addCriterion("serial_no is not null"); + return (Criteria) this; + } + + public Criteria andSerialNoEqualTo(String value) { + addCriterion("serial_no =", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoNotEqualTo(String value) { + addCriterion("serial_no <>", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoGreaterThan(String value) { + addCriterion("serial_no >", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoGreaterThanOrEqualTo(String value) { + addCriterion("serial_no >=", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoLessThan(String value) { + addCriterion("serial_no <", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoLessThanOrEqualTo(String value) { + addCriterion("serial_no <=", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoLike(String value) { + addCriterion("serial_no like", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoNotLike(String value) { + addCriterion("serial_no not like", value, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoIn(List values) { + addCriterion("serial_no in", values, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoNotIn(List values) { + addCriterion("serial_no not in", values, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoBetween(String value1, String value2) { + addCriterion("serial_no between", value1, value2, "serialNo"); + return (Criteria) this; + } + + public Criteria andSerialNoNotBetween(String value1, String value2) { + addCriterion("serial_no not between", value1, value2, "serialNo"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNull() { + addCriterion("update_time is null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNotNull() { + addCriterion("update_time is not null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeEqualTo(Date value) { + addCriterion("update_time =", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotEqualTo(Date value) { + addCriterion("update_time <>", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThan(Date value) { + addCriterion("update_time >", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("update_time >=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThan(Date value) { + addCriterion("update_time <", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThanOrEqualTo(Date value) { + addCriterion("update_time <=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIn(List values) { + addCriterion("update_time in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotIn(List values) { + addCriterion("update_time not in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeBetween(Date value1, Date value2) { + addCriterion("update_time between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotBetween(Date value1, Date value2) { + addCriterion("update_time not between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialCurrentStock.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialCurrentStock.java new file mode 100644 index 000000000..3402d5167 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialCurrentStock.java @@ -0,0 +1,65 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; + +public class MaterialCurrentStock { + private Long id; + + private Long materialId; + + private Long depotId; + + private BigDecimal currentNumber; + + private Long tenantId; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getMaterialId() { + return materialId; + } + + public void setMaterialId(Long materialId) { + this.materialId = materialId; + } + + public Long getDepotId() { + return depotId; + } + + public void setDepotId(Long depotId) { + this.depotId = depotId; + } + + public BigDecimal getCurrentNumber() { + return currentNumber; + } + + public void setCurrentNumber(BigDecimal currentNumber) { + this.currentNumber = currentNumber; + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialCurrentStockExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialCurrentStockExample.java new file mode 100644 index 000000000..6ad310e29 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialCurrentStockExample.java @@ -0,0 +1,570 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +public class MaterialCurrentStockExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public MaterialCurrentStockExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andMaterialIdIsNull() { + addCriterion("material_id is null"); + return (Criteria) this; + } + + public Criteria andMaterialIdIsNotNull() { + addCriterion("material_id is not null"); + return (Criteria) this; + } + + public Criteria andMaterialIdEqualTo(Long value) { + addCriterion("material_id =", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdNotEqualTo(Long value) { + addCriterion("material_id <>", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdGreaterThan(Long value) { + addCriterion("material_id >", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdGreaterThanOrEqualTo(Long value) { + addCriterion("material_id >=", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdLessThan(Long value) { + addCriterion("material_id <", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdLessThanOrEqualTo(Long value) { + addCriterion("material_id <=", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdIn(List values) { + addCriterion("material_id in", values, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdNotIn(List values) { + addCriterion("material_id not in", values, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdBetween(Long value1, Long value2) { + addCriterion("material_id between", value1, value2, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdNotBetween(Long value1, Long value2) { + addCriterion("material_id not between", value1, value2, "materialId"); + return (Criteria) this; + } + + public Criteria andDepotIdIsNull() { + addCriterion("depot_id is null"); + return (Criteria) this; + } + + public Criteria andDepotIdIsNotNull() { + addCriterion("depot_id is not null"); + return (Criteria) this; + } + + public Criteria andDepotIdEqualTo(Long value) { + addCriterion("depot_id =", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdNotEqualTo(Long value) { + addCriterion("depot_id <>", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdGreaterThan(Long value) { + addCriterion("depot_id >", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdGreaterThanOrEqualTo(Long value) { + addCriterion("depot_id >=", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdLessThan(Long value) { + addCriterion("depot_id <", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdLessThanOrEqualTo(Long value) { + addCriterion("depot_id <=", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdIn(List values) { + addCriterion("depot_id in", values, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdNotIn(List values) { + addCriterion("depot_id not in", values, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdBetween(Long value1, Long value2) { + addCriterion("depot_id between", value1, value2, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdNotBetween(Long value1, Long value2) { + addCriterion("depot_id not between", value1, value2, "depotId"); + return (Criteria) this; + } + + public Criteria andCurrentNumberIsNull() { + addCriterion("current_number is null"); + return (Criteria) this; + } + + public Criteria andCurrentNumberIsNotNull() { + addCriterion("current_number is not null"); + return (Criteria) this; + } + + public Criteria andCurrentNumberEqualTo(BigDecimal value) { + addCriterion("current_number =", value, "currentNumber"); + return (Criteria) this; + } + + public Criteria andCurrentNumberNotEqualTo(BigDecimal value) { + addCriterion("current_number <>", value, "currentNumber"); + return (Criteria) this; + } + + public Criteria andCurrentNumberGreaterThan(BigDecimal value) { + addCriterion("current_number >", value, "currentNumber"); + return (Criteria) this; + } + + public Criteria andCurrentNumberGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("current_number >=", value, "currentNumber"); + return (Criteria) this; + } + + public Criteria andCurrentNumberLessThan(BigDecimal value) { + addCriterion("current_number <", value, "currentNumber"); + return (Criteria) this; + } + + public Criteria andCurrentNumberLessThanOrEqualTo(BigDecimal value) { + addCriterion("current_number <=", value, "currentNumber"); + return (Criteria) this; + } + + public Criteria andCurrentNumberIn(List values) { + addCriterion("current_number in", values, "currentNumber"); + return (Criteria) this; + } + + public Criteria andCurrentNumberNotIn(List values) { + addCriterion("current_number not in", values, "currentNumber"); + return (Criteria) this; + } + + public Criteria andCurrentNumberBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("current_number between", value1, value2, "currentNumber"); + return (Criteria) this; + } + + public Criteria andCurrentNumberNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("current_number not between", value1, value2, "currentNumber"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialExample.java new file mode 100644 index 000000000..d63384019 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialExample.java @@ -0,0 +1,1400 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +public class MaterialExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public MaterialExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andCategoryIdIsNull() { + addCriterion("category_id is null"); + return (Criteria) this; + } + + public Criteria andCategoryIdIsNotNull() { + addCriterion("category_id is not null"); + return (Criteria) this; + } + + public Criteria andCategoryIdEqualTo(Long value) { + addCriterion("category_id =", value, "categoryId"); + return (Criteria) this; + } + + public Criteria andCategoryIdNotEqualTo(Long value) { + addCriterion("category_id <>", value, "categoryId"); + return (Criteria) this; + } + + public Criteria andCategoryIdGreaterThan(Long value) { + addCriterion("category_id >", value, "categoryId"); + return (Criteria) this; + } + + public Criteria andCategoryIdGreaterThanOrEqualTo(Long value) { + addCriterion("category_id >=", value, "categoryId"); + return (Criteria) this; + } + + public Criteria andCategoryIdLessThan(Long value) { + addCriterion("category_id <", value, "categoryId"); + return (Criteria) this; + } + + public Criteria andCategoryIdLessThanOrEqualTo(Long value) { + addCriterion("category_id <=", value, "categoryId"); + return (Criteria) this; + } + + public Criteria andCategoryIdIn(List values) { + addCriterion("category_id in", values, "categoryId"); + return (Criteria) this; + } + + public Criteria andCategoryIdNotIn(List values) { + addCriterion("category_id not in", values, "categoryId"); + return (Criteria) this; + } + + public Criteria andCategoryIdBetween(Long value1, Long value2) { + addCriterion("category_id between", value1, value2, "categoryId"); + return (Criteria) this; + } + + public Criteria andCategoryIdNotBetween(Long value1, Long value2) { + addCriterion("category_id not between", value1, value2, "categoryId"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("name is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("name is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("name =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("name <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("name >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("name >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("name <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("name <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("name like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("name not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("name in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("name not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("name between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("name not between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andMfrsIsNull() { + addCriterion("mfrs is null"); + return (Criteria) this; + } + + public Criteria andMfrsIsNotNull() { + addCriterion("mfrs is not null"); + return (Criteria) this; + } + + public Criteria andMfrsEqualTo(String value) { + addCriterion("mfrs =", value, "mfrs"); + return (Criteria) this; + } + + public Criteria andMfrsNotEqualTo(String value) { + addCriterion("mfrs <>", value, "mfrs"); + return (Criteria) this; + } + + public Criteria andMfrsGreaterThan(String value) { + addCriterion("mfrs >", value, "mfrs"); + return (Criteria) this; + } + + public Criteria andMfrsGreaterThanOrEqualTo(String value) { + addCriterion("mfrs >=", value, "mfrs"); + return (Criteria) this; + } + + public Criteria andMfrsLessThan(String value) { + addCriterion("mfrs <", value, "mfrs"); + return (Criteria) this; + } + + public Criteria andMfrsLessThanOrEqualTo(String value) { + addCriterion("mfrs <=", value, "mfrs"); + return (Criteria) this; + } + + public Criteria andMfrsLike(String value) { + addCriterion("mfrs like", value, "mfrs"); + return (Criteria) this; + } + + public Criteria andMfrsNotLike(String value) { + addCriterion("mfrs not like", value, "mfrs"); + return (Criteria) this; + } + + public Criteria andMfrsIn(List values) { + addCriterion("mfrs in", values, "mfrs"); + return (Criteria) this; + } + + public Criteria andMfrsNotIn(List values) { + addCriterion("mfrs not in", values, "mfrs"); + return (Criteria) this; + } + + public Criteria andMfrsBetween(String value1, String value2) { + addCriterion("mfrs between", value1, value2, "mfrs"); + return (Criteria) this; + } + + public Criteria andMfrsNotBetween(String value1, String value2) { + addCriterion("mfrs not between", value1, value2, "mfrs"); + return (Criteria) this; + } + + public Criteria andSafetyStockIsNull() { + addCriterion("safety_stock is null"); + return (Criteria) this; + } + + public Criteria andSafetyStockIsNotNull() { + addCriterion("safety_stock is not null"); + return (Criteria) this; + } + + public Criteria andSafetyStockEqualTo(BigDecimal value) { + addCriterion("safety_stock =", value, "safetyStock"); + return (Criteria) this; + } + + public Criteria andSafetyStockNotEqualTo(BigDecimal value) { + addCriterion("safety_stock <>", value, "safetyStock"); + return (Criteria) this; + } + + public Criteria andSafetyStockGreaterThan(BigDecimal value) { + addCriterion("safety_stock >", value, "safetyStock"); + return (Criteria) this; + } + + public Criteria andSafetyStockGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("safety_stock >=", value, "safetyStock"); + return (Criteria) this; + } + + public Criteria andSafetyStockLessThan(BigDecimal value) { + addCriterion("safety_stock <", value, "safetyStock"); + return (Criteria) this; + } + + public Criteria andSafetyStockLessThanOrEqualTo(BigDecimal value) { + addCriterion("safety_stock <=", value, "safetyStock"); + return (Criteria) this; + } + + public Criteria andSafetyStockIn(List values) { + addCriterion("safety_stock in", values, "safetyStock"); + return (Criteria) this; + } + + public Criteria andSafetyStockNotIn(List values) { + addCriterion("safety_stock not in", values, "safetyStock"); + return (Criteria) this; + } + + public Criteria andSafetyStockBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("safety_stock between", value1, value2, "safetyStock"); + return (Criteria) this; + } + + public Criteria andSafetyStockNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("safety_stock not between", value1, value2, "safetyStock"); + return (Criteria) this; + } + + public Criteria andModelIsNull() { + addCriterion("model is null"); + return (Criteria) this; + } + + public Criteria andModelIsNotNull() { + addCriterion("model is not null"); + return (Criteria) this; + } + + public Criteria andModelEqualTo(String value) { + addCriterion("model =", value, "model"); + return (Criteria) this; + } + + public Criteria andModelNotEqualTo(String value) { + addCriterion("model <>", value, "model"); + return (Criteria) this; + } + + public Criteria andModelGreaterThan(String value) { + addCriterion("model >", value, "model"); + return (Criteria) this; + } + + public Criteria andModelGreaterThanOrEqualTo(String value) { + addCriterion("model >=", value, "model"); + return (Criteria) this; + } + + public Criteria andModelLessThan(String value) { + addCriterion("model <", value, "model"); + return (Criteria) this; + } + + public Criteria andModelLessThanOrEqualTo(String value) { + addCriterion("model <=", value, "model"); + return (Criteria) this; + } + + public Criteria andModelLike(String value) { + addCriterion("model like", value, "model"); + return (Criteria) this; + } + + public Criteria andModelNotLike(String value) { + addCriterion("model not like", value, "model"); + return (Criteria) this; + } + + public Criteria andModelIn(List values) { + addCriterion("model in", values, "model"); + return (Criteria) this; + } + + public Criteria andModelNotIn(List values) { + addCriterion("model not in", values, "model"); + return (Criteria) this; + } + + public Criteria andModelBetween(String value1, String value2) { + addCriterion("model between", value1, value2, "model"); + return (Criteria) this; + } + + public Criteria andModelNotBetween(String value1, String value2) { + addCriterion("model not between", value1, value2, "model"); + return (Criteria) this; + } + + public Criteria andStandardIsNull() { + addCriterion("standard is null"); + return (Criteria) this; + } + + public Criteria andStandardIsNotNull() { + addCriterion("standard is not null"); + return (Criteria) this; + } + + public Criteria andStandardEqualTo(String value) { + addCriterion("standard =", value, "standard"); + return (Criteria) this; + } + + public Criteria andStandardNotEqualTo(String value) { + addCriterion("standard <>", value, "standard"); + return (Criteria) this; + } + + public Criteria andStandardGreaterThan(String value) { + addCriterion("standard >", value, "standard"); + return (Criteria) this; + } + + public Criteria andStandardGreaterThanOrEqualTo(String value) { + addCriterion("standard >=", value, "standard"); + return (Criteria) this; + } + + public Criteria andStandardLessThan(String value) { + addCriterion("standard <", value, "standard"); + return (Criteria) this; + } + + public Criteria andStandardLessThanOrEqualTo(String value) { + addCriterion("standard <=", value, "standard"); + return (Criteria) this; + } + + public Criteria andStandardLike(String value) { + addCriterion("standard like", value, "standard"); + return (Criteria) this; + } + + public Criteria andStandardNotLike(String value) { + addCriterion("standard not like", value, "standard"); + return (Criteria) this; + } + + public Criteria andStandardIn(List values) { + addCriterion("standard in", values, "standard"); + return (Criteria) this; + } + + public Criteria andStandardNotIn(List values) { + addCriterion("standard not in", values, "standard"); + return (Criteria) this; + } + + public Criteria andStandardBetween(String value1, String value2) { + addCriterion("standard between", value1, value2, "standard"); + return (Criteria) this; + } + + public Criteria andStandardNotBetween(String value1, String value2) { + addCriterion("standard not between", value1, value2, "standard"); + return (Criteria) this; + } + + public Criteria andColorIsNull() { + addCriterion("color is null"); + return (Criteria) this; + } + + public Criteria andColorIsNotNull() { + addCriterion("color is not null"); + return (Criteria) this; + } + + public Criteria andColorEqualTo(String value) { + addCriterion("color =", value, "color"); + return (Criteria) this; + } + + public Criteria andColorNotEqualTo(String value) { + addCriterion("color <>", value, "color"); + return (Criteria) this; + } + + public Criteria andColorGreaterThan(String value) { + addCriterion("color >", value, "color"); + return (Criteria) this; + } + + public Criteria andColorGreaterThanOrEqualTo(String value) { + addCriterion("color >=", value, "color"); + return (Criteria) this; + } + + public Criteria andColorLessThan(String value) { + addCriterion("color <", value, "color"); + return (Criteria) this; + } + + public Criteria andColorLessThanOrEqualTo(String value) { + addCriterion("color <=", value, "color"); + return (Criteria) this; + } + + public Criteria andColorLike(String value) { + addCriterion("color like", value, "color"); + return (Criteria) this; + } + + public Criteria andColorNotLike(String value) { + addCriterion("color not like", value, "color"); + return (Criteria) this; + } + + public Criteria andColorIn(List values) { + addCriterion("color in", values, "color"); + return (Criteria) this; + } + + public Criteria andColorNotIn(List values) { + addCriterion("color not in", values, "color"); + return (Criteria) this; + } + + public Criteria andColorBetween(String value1, String value2) { + addCriterion("color between", value1, value2, "color"); + return (Criteria) this; + } + + public Criteria andColorNotBetween(String value1, String value2) { + addCriterion("color not between", value1, value2, "color"); + return (Criteria) this; + } + + public Criteria andUnitIsNull() { + addCriterion("unit is null"); + return (Criteria) this; + } + + public Criteria andUnitIsNotNull() { + addCriterion("unit is not null"); + return (Criteria) this; + } + + public Criteria andUnitEqualTo(String value) { + addCriterion("unit =", value, "unit"); + return (Criteria) this; + } + + public Criteria andUnitNotEqualTo(String value) { + addCriterion("unit <>", value, "unit"); + return (Criteria) this; + } + + public Criteria andUnitGreaterThan(String value) { + addCriterion("unit >", value, "unit"); + return (Criteria) this; + } + + public Criteria andUnitGreaterThanOrEqualTo(String value) { + addCriterion("unit >=", value, "unit"); + return (Criteria) this; + } + + public Criteria andUnitLessThan(String value) { + addCriterion("unit <", value, "unit"); + return (Criteria) this; + } + + public Criteria andUnitLessThanOrEqualTo(String value) { + addCriterion("unit <=", value, "unit"); + return (Criteria) this; + } + + public Criteria andUnitLike(String value) { + addCriterion("unit like", value, "unit"); + return (Criteria) this; + } + + public Criteria andUnitNotLike(String value) { + addCriterion("unit not like", value, "unit"); + return (Criteria) this; + } + + public Criteria andUnitIn(List values) { + addCriterion("unit in", values, "unit"); + return (Criteria) this; + } + + public Criteria andUnitNotIn(List values) { + addCriterion("unit not in", values, "unit"); + return (Criteria) this; + } + + public Criteria andUnitBetween(String value1, String value2) { + addCriterion("unit between", value1, value2, "unit"); + return (Criteria) this; + } + + public Criteria andUnitNotBetween(String value1, String value2) { + addCriterion("unit not between", value1, value2, "unit"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andUnitIdIsNull() { + addCriterion("unit_id is null"); + return (Criteria) this; + } + + public Criteria andUnitIdIsNotNull() { + addCriterion("unit_id is not null"); + return (Criteria) this; + } + + public Criteria andUnitIdEqualTo(Long value) { + addCriterion("unit_id =", value, "unitId"); + return (Criteria) this; + } + + public Criteria andUnitIdNotEqualTo(Long value) { + addCriterion("unit_id <>", value, "unitId"); + return (Criteria) this; + } + + public Criteria andUnitIdGreaterThan(Long value) { + addCriterion("unit_id >", value, "unitId"); + return (Criteria) this; + } + + public Criteria andUnitIdGreaterThanOrEqualTo(Long value) { + addCriterion("unit_id >=", value, "unitId"); + return (Criteria) this; + } + + public Criteria andUnitIdLessThan(Long value) { + addCriterion("unit_id <", value, "unitId"); + return (Criteria) this; + } + + public Criteria andUnitIdLessThanOrEqualTo(Long value) { + addCriterion("unit_id <=", value, "unitId"); + return (Criteria) this; + } + + public Criteria andUnitIdIn(List values) { + addCriterion("unit_id in", values, "unitId"); + return (Criteria) this; + } + + public Criteria andUnitIdNotIn(List values) { + addCriterion("unit_id not in", values, "unitId"); + return (Criteria) this; + } + + public Criteria andUnitIdBetween(Long value1, Long value2) { + addCriterion("unit_id between", value1, value2, "unitId"); + return (Criteria) this; + } + + public Criteria andUnitIdNotBetween(Long value1, Long value2) { + addCriterion("unit_id not between", value1, value2, "unitId"); + return (Criteria) this; + } + + public Criteria andEnabledIsNull() { + addCriterion("enabled is null"); + return (Criteria) this; + } + + public Criteria andEnabledIsNotNull() { + addCriterion("enabled is not null"); + return (Criteria) this; + } + + public Criteria andEnabledEqualTo(Boolean value) { + addCriterion("enabled =", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledNotEqualTo(Boolean value) { + addCriterion("enabled <>", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledGreaterThan(Boolean value) { + addCriterion("enabled >", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledGreaterThanOrEqualTo(Boolean value) { + addCriterion("enabled >=", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledLessThan(Boolean value) { + addCriterion("enabled <", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledLessThanOrEqualTo(Boolean value) { + addCriterion("enabled <=", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledIn(List values) { + addCriterion("enabled in", values, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledNotIn(List values) { + addCriterion("enabled not in", values, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledBetween(Boolean value1, Boolean value2) { + addCriterion("enabled between", value1, value2, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledNotBetween(Boolean value1, Boolean value2) { + addCriterion("enabled not between", value1, value2, "enabled"); + return (Criteria) this; + } + + public Criteria andOtherField1IsNull() { + addCriterion("other_field1 is null"); + return (Criteria) this; + } + + public Criteria andOtherField1IsNotNull() { + addCriterion("other_field1 is not null"); + return (Criteria) this; + } + + public Criteria andOtherField1EqualTo(String value) { + addCriterion("other_field1 =", value, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1NotEqualTo(String value) { + addCriterion("other_field1 <>", value, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1GreaterThan(String value) { + addCriterion("other_field1 >", value, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1GreaterThanOrEqualTo(String value) { + addCriterion("other_field1 >=", value, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1LessThan(String value) { + addCriterion("other_field1 <", value, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1LessThanOrEqualTo(String value) { + addCriterion("other_field1 <=", value, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1Like(String value) { + addCriterion("other_field1 like", value, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1NotLike(String value) { + addCriterion("other_field1 not like", value, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1In(List values) { + addCriterion("other_field1 in", values, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1NotIn(List values) { + addCriterion("other_field1 not in", values, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1Between(String value1, String value2) { + addCriterion("other_field1 between", value1, value2, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField1NotBetween(String value1, String value2) { + addCriterion("other_field1 not between", value1, value2, "otherField1"); + return (Criteria) this; + } + + public Criteria andOtherField2IsNull() { + addCriterion("other_field2 is null"); + return (Criteria) this; + } + + public Criteria andOtherField2IsNotNull() { + addCriterion("other_field2 is not null"); + return (Criteria) this; + } + + public Criteria andOtherField2EqualTo(String value) { + addCriterion("other_field2 =", value, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2NotEqualTo(String value) { + addCriterion("other_field2 <>", value, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2GreaterThan(String value) { + addCriterion("other_field2 >", value, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2GreaterThanOrEqualTo(String value) { + addCriterion("other_field2 >=", value, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2LessThan(String value) { + addCriterion("other_field2 <", value, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2LessThanOrEqualTo(String value) { + addCriterion("other_field2 <=", value, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2Like(String value) { + addCriterion("other_field2 like", value, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2NotLike(String value) { + addCriterion("other_field2 not like", value, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2In(List values) { + addCriterion("other_field2 in", values, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2NotIn(List values) { + addCriterion("other_field2 not in", values, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2Between(String value1, String value2) { + addCriterion("other_field2 between", value1, value2, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField2NotBetween(String value1, String value2) { + addCriterion("other_field2 not between", value1, value2, "otherField2"); + return (Criteria) this; + } + + public Criteria andOtherField3IsNull() { + addCriterion("other_field3 is null"); + return (Criteria) this; + } + + public Criteria andOtherField3IsNotNull() { + addCriterion("other_field3 is not null"); + return (Criteria) this; + } + + public Criteria andOtherField3EqualTo(String value) { + addCriterion("other_field3 =", value, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3NotEqualTo(String value) { + addCriterion("other_field3 <>", value, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3GreaterThan(String value) { + addCriterion("other_field3 >", value, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3GreaterThanOrEqualTo(String value) { + addCriterion("other_field3 >=", value, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3LessThan(String value) { + addCriterion("other_field3 <", value, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3LessThanOrEqualTo(String value) { + addCriterion("other_field3 <=", value, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3Like(String value) { + addCriterion("other_field3 like", value, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3NotLike(String value) { + addCriterion("other_field3 not like", value, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3In(List values) { + addCriterion("other_field3 in", values, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3NotIn(List values) { + addCriterion("other_field3 not in", values, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3Between(String value1, String value2) { + addCriterion("other_field3 between", value1, value2, "otherField3"); + return (Criteria) this; + } + + public Criteria andOtherField3NotBetween(String value1, String value2) { + addCriterion("other_field3 not between", value1, value2, "otherField3"); + return (Criteria) this; + } + + public Criteria andEnableSerialNumberIsNull() { + addCriterion("enable_serial_number is null"); + return (Criteria) this; + } + + public Criteria andEnableSerialNumberIsNotNull() { + addCriterion("enable_serial_number is not null"); + return (Criteria) this; + } + + public Criteria andEnableSerialNumberEqualTo(String value) { + addCriterion("enable_serial_number =", value, "enableSerialNumber"); + return (Criteria) this; + } + + public Criteria andEnableSerialNumberNotEqualTo(String value) { + addCriterion("enable_serial_number <>", value, "enableSerialNumber"); + return (Criteria) this; + } + + public Criteria andEnableSerialNumberGreaterThan(String value) { + addCriterion("enable_serial_number >", value, "enableSerialNumber"); + return (Criteria) this; + } + + public Criteria andEnableSerialNumberGreaterThanOrEqualTo(String value) { + addCriterion("enable_serial_number >=", value, "enableSerialNumber"); + return (Criteria) this; + } + + public Criteria andEnableSerialNumberLessThan(String value) { + addCriterion("enable_serial_number <", value, "enableSerialNumber"); + return (Criteria) this; + } + + public Criteria andEnableSerialNumberLessThanOrEqualTo(String value) { + addCriterion("enable_serial_number <=", value, "enableSerialNumber"); + return (Criteria) this; + } + + public Criteria andEnableSerialNumberLike(String value) { + addCriterion("enable_serial_number like", value, "enableSerialNumber"); + return (Criteria) this; + } + + public Criteria andEnableSerialNumberNotLike(String value) { + addCriterion("enable_serial_number not like", value, "enableSerialNumber"); + return (Criteria) this; + } + + public Criteria andEnableSerialNumberIn(List values) { + addCriterion("enable_serial_number in", values, "enableSerialNumber"); + return (Criteria) this; + } + + public Criteria andEnableSerialNumberNotIn(List values) { + addCriterion("enable_serial_number not in", values, "enableSerialNumber"); + return (Criteria) this; + } + + public Criteria andEnableSerialNumberBetween(String value1, String value2) { + addCriterion("enable_serial_number between", value1, value2, "enableSerialNumber"); + return (Criteria) this; + } + + public Criteria andEnableSerialNumberNotBetween(String value1, String value2) { + addCriterion("enable_serial_number not between", value1, value2, "enableSerialNumber"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialExtend.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialExtend.java new file mode 100644 index 000000000..51c35cbf1 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialExtend.java @@ -0,0 +1,156 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; +import java.util.Date; + +public class MaterialExtend { + private Long id; + + private Long materialId; + + private String barCode; + + private String commodityUnit; + + private BigDecimal purchaseDecimal; + + private BigDecimal commodityDecimal; + + private BigDecimal wholesaleDecimal; + + private BigDecimal lowDecimal; + + private String defaultFlag; + + private Date createTime; + + private String createSerial; + + private String updateSerial; + + private Long updateTime; + + private Long tenantId; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getMaterialId() { + return materialId; + } + + public void setMaterialId(Long materialId) { + this.materialId = materialId; + } + + public String getBarCode() { + return barCode; + } + + public void setBarCode(String barCode) { + this.barCode = barCode == null ? null : barCode.trim(); + } + + public String getCommodityUnit() { + return commodityUnit; + } + + public void setCommodityUnit(String commodityUnit) { + this.commodityUnit = commodityUnit == null ? null : commodityUnit.trim(); + } + + public BigDecimal getPurchaseDecimal() { + return purchaseDecimal; + } + + public void setPurchaseDecimal(BigDecimal purchaseDecimal) { + this.purchaseDecimal = purchaseDecimal; + } + + public BigDecimal getCommodityDecimal() { + return commodityDecimal; + } + + public void setCommodityDecimal(BigDecimal commodityDecimal) { + this.commodityDecimal = commodityDecimal; + } + + public BigDecimal getWholesaleDecimal() { + return wholesaleDecimal; + } + + public void setWholesaleDecimal(BigDecimal wholesaleDecimal) { + this.wholesaleDecimal = wholesaleDecimal; + } + + public BigDecimal getLowDecimal() { + return lowDecimal; + } + + public void setLowDecimal(BigDecimal lowDecimal) { + this.lowDecimal = lowDecimal; + } + + public String getDefaultFlag() { + return defaultFlag; + } + + public void setDefaultFlag(String defaultFlag) { + this.defaultFlag = defaultFlag == null ? null : defaultFlag.trim(); + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getCreateSerial() { + return createSerial; + } + + public void setCreateSerial(String createSerial) { + this.createSerial = createSerial == null ? null : createSerial.trim(); + } + + public String getUpdateSerial() { + return updateSerial; + } + + public void setUpdateSerial(String updateSerial) { + this.updateSerial = updateSerial == null ? null : updateSerial.trim(); + } + + public Long getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Long updateTime) { + this.updateTime = updateTime; + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialExtendExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialExtendExample.java new file mode 100644 index 000000000..a1a9b4a8b --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialExtendExample.java @@ -0,0 +1,1161 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class MaterialExtendExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public MaterialExtendExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andMaterialIdIsNull() { + addCriterion("material_id is null"); + return (Criteria) this; + } + + public Criteria andMaterialIdIsNotNull() { + addCriterion("material_id is not null"); + return (Criteria) this; + } + + public Criteria andMaterialIdEqualTo(Long value) { + addCriterion("material_id =", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdNotEqualTo(Long value) { + addCriterion("material_id <>", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdGreaterThan(Long value) { + addCriterion("material_id >", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdGreaterThanOrEqualTo(Long value) { + addCriterion("material_id >=", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdLessThan(Long value) { + addCriterion("material_id <", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdLessThanOrEqualTo(Long value) { + addCriterion("material_id <=", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdIn(List values) { + addCriterion("material_id in", values, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdNotIn(List values) { + addCriterion("material_id not in", values, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdBetween(Long value1, Long value2) { + addCriterion("material_id between", value1, value2, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdNotBetween(Long value1, Long value2) { + addCriterion("material_id not between", value1, value2, "materialId"); + return (Criteria) this; + } + + public Criteria andBarCodeIsNull() { + addCriterion("bar_code is null"); + return (Criteria) this; + } + + public Criteria andBarCodeIsNotNull() { + addCriterion("bar_code is not null"); + return (Criteria) this; + } + + public Criteria andBarCodeEqualTo(String value) { + addCriterion("bar_code =", value, "barCode"); + return (Criteria) this; + } + + public Criteria andBarCodeNotEqualTo(String value) { + addCriterion("bar_code <>", value, "barCode"); + return (Criteria) this; + } + + public Criteria andBarCodeGreaterThan(String value) { + addCriterion("bar_code >", value, "barCode"); + return (Criteria) this; + } + + public Criteria andBarCodeGreaterThanOrEqualTo(String value) { + addCriterion("bar_code >=", value, "barCode"); + return (Criteria) this; + } + + public Criteria andBarCodeLessThan(String value) { + addCriterion("bar_code <", value, "barCode"); + return (Criteria) this; + } + + public Criteria andBarCodeLessThanOrEqualTo(String value) { + addCriterion("bar_code <=", value, "barCode"); + return (Criteria) this; + } + + public Criteria andBarCodeLike(String value) { + addCriterion("bar_code like", value, "barCode"); + return (Criteria) this; + } + + public Criteria andBarCodeNotLike(String value) { + addCriterion("bar_code not like", value, "barCode"); + return (Criteria) this; + } + + public Criteria andBarCodeIn(List values) { + addCriterion("bar_code in", values, "barCode"); + return (Criteria) this; + } + + public Criteria andBarCodeNotIn(List values) { + addCriterion("bar_code not in", values, "barCode"); + return (Criteria) this; + } + + public Criteria andBarCodeBetween(String value1, String value2) { + addCriterion("bar_code between", value1, value2, "barCode"); + return (Criteria) this; + } + + public Criteria andBarCodeNotBetween(String value1, String value2) { + addCriterion("bar_code not between", value1, value2, "barCode"); + return (Criteria) this; + } + + public Criteria andCommodityUnitIsNull() { + addCriterion("commodity_unit is null"); + return (Criteria) this; + } + + public Criteria andCommodityUnitIsNotNull() { + addCriterion("commodity_unit is not null"); + return (Criteria) this; + } + + public Criteria andCommodityUnitEqualTo(String value) { + addCriterion("commodity_unit =", value, "commodityUnit"); + return (Criteria) this; + } + + public Criteria andCommodityUnitNotEqualTo(String value) { + addCriterion("commodity_unit <>", value, "commodityUnit"); + return (Criteria) this; + } + + public Criteria andCommodityUnitGreaterThan(String value) { + addCriterion("commodity_unit >", value, "commodityUnit"); + return (Criteria) this; + } + + public Criteria andCommodityUnitGreaterThanOrEqualTo(String value) { + addCriterion("commodity_unit >=", value, "commodityUnit"); + return (Criteria) this; + } + + public Criteria andCommodityUnitLessThan(String value) { + addCriterion("commodity_unit <", value, "commodityUnit"); + return (Criteria) this; + } + + public Criteria andCommodityUnitLessThanOrEqualTo(String value) { + addCriterion("commodity_unit <=", value, "commodityUnit"); + return (Criteria) this; + } + + public Criteria andCommodityUnitLike(String value) { + addCriterion("commodity_unit like", value, "commodityUnit"); + return (Criteria) this; + } + + public Criteria andCommodityUnitNotLike(String value) { + addCriterion("commodity_unit not like", value, "commodityUnit"); + return (Criteria) this; + } + + public Criteria andCommodityUnitIn(List values) { + addCriterion("commodity_unit in", values, "commodityUnit"); + return (Criteria) this; + } + + public Criteria andCommodityUnitNotIn(List values) { + addCriterion("commodity_unit not in", values, "commodityUnit"); + return (Criteria) this; + } + + public Criteria andCommodityUnitBetween(String value1, String value2) { + addCriterion("commodity_unit between", value1, value2, "commodityUnit"); + return (Criteria) this; + } + + public Criteria andCommodityUnitNotBetween(String value1, String value2) { + addCriterion("commodity_unit not between", value1, value2, "commodityUnit"); + return (Criteria) this; + } + + public Criteria andPurchaseDecimalIsNull() { + addCriterion("purchase_decimal is null"); + return (Criteria) this; + } + + public Criteria andPurchaseDecimalIsNotNull() { + addCriterion("purchase_decimal is not null"); + return (Criteria) this; + } + + public Criteria andPurchaseDecimalEqualTo(BigDecimal value) { + addCriterion("purchase_decimal =", value, "purchaseDecimal"); + return (Criteria) this; + } + + public Criteria andPurchaseDecimalNotEqualTo(BigDecimal value) { + addCriterion("purchase_decimal <>", value, "purchaseDecimal"); + return (Criteria) this; + } + + public Criteria andPurchaseDecimalGreaterThan(BigDecimal value) { + addCriterion("purchase_decimal >", value, "purchaseDecimal"); + return (Criteria) this; + } + + public Criteria andPurchaseDecimalGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("purchase_decimal >=", value, "purchaseDecimal"); + return (Criteria) this; + } + + public Criteria andPurchaseDecimalLessThan(BigDecimal value) { + addCriterion("purchase_decimal <", value, "purchaseDecimal"); + return (Criteria) this; + } + + public Criteria andPurchaseDecimalLessThanOrEqualTo(BigDecimal value) { + addCriterion("purchase_decimal <=", value, "purchaseDecimal"); + return (Criteria) this; + } + + public Criteria andPurchaseDecimalIn(List values) { + addCriterion("purchase_decimal in", values, "purchaseDecimal"); + return (Criteria) this; + } + + public Criteria andPurchaseDecimalNotIn(List values) { + addCriterion("purchase_decimal not in", values, "purchaseDecimal"); + return (Criteria) this; + } + + public Criteria andPurchaseDecimalBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("purchase_decimal between", value1, value2, "purchaseDecimal"); + return (Criteria) this; + } + + public Criteria andPurchaseDecimalNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("purchase_decimal not between", value1, value2, "purchaseDecimal"); + return (Criteria) this; + } + + public Criteria andCommodityDecimalIsNull() { + addCriterion("commodity_decimal is null"); + return (Criteria) this; + } + + public Criteria andCommodityDecimalIsNotNull() { + addCriterion("commodity_decimal is not null"); + return (Criteria) this; + } + + public Criteria andCommodityDecimalEqualTo(BigDecimal value) { + addCriterion("commodity_decimal =", value, "commodityDecimal"); + return (Criteria) this; + } + + public Criteria andCommodityDecimalNotEqualTo(BigDecimal value) { + addCriterion("commodity_decimal <>", value, "commodityDecimal"); + return (Criteria) this; + } + + public Criteria andCommodityDecimalGreaterThan(BigDecimal value) { + addCriterion("commodity_decimal >", value, "commodityDecimal"); + return (Criteria) this; + } + + public Criteria andCommodityDecimalGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("commodity_decimal >=", value, "commodityDecimal"); + return (Criteria) this; + } + + public Criteria andCommodityDecimalLessThan(BigDecimal value) { + addCriterion("commodity_decimal <", value, "commodityDecimal"); + return (Criteria) this; + } + + public Criteria andCommodityDecimalLessThanOrEqualTo(BigDecimal value) { + addCriterion("commodity_decimal <=", value, "commodityDecimal"); + return (Criteria) this; + } + + public Criteria andCommodityDecimalIn(List values) { + addCriterion("commodity_decimal in", values, "commodityDecimal"); + return (Criteria) this; + } + + public Criteria andCommodityDecimalNotIn(List values) { + addCriterion("commodity_decimal not in", values, "commodityDecimal"); + return (Criteria) this; + } + + public Criteria andCommodityDecimalBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("commodity_decimal between", value1, value2, "commodityDecimal"); + return (Criteria) this; + } + + public Criteria andCommodityDecimalNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("commodity_decimal not between", value1, value2, "commodityDecimal"); + return (Criteria) this; + } + + public Criteria andWholesaleDecimalIsNull() { + addCriterion("wholesale_decimal is null"); + return (Criteria) this; + } + + public Criteria andWholesaleDecimalIsNotNull() { + addCriterion("wholesale_decimal is not null"); + return (Criteria) this; + } + + public Criteria andWholesaleDecimalEqualTo(BigDecimal value) { + addCriterion("wholesale_decimal =", value, "wholesaleDecimal"); + return (Criteria) this; + } + + public Criteria andWholesaleDecimalNotEqualTo(BigDecimal value) { + addCriterion("wholesale_decimal <>", value, "wholesaleDecimal"); + return (Criteria) this; + } + + public Criteria andWholesaleDecimalGreaterThan(BigDecimal value) { + addCriterion("wholesale_decimal >", value, "wholesaleDecimal"); + return (Criteria) this; + } + + public Criteria andWholesaleDecimalGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("wholesale_decimal >=", value, "wholesaleDecimal"); + return (Criteria) this; + } + + public Criteria andWholesaleDecimalLessThan(BigDecimal value) { + addCriterion("wholesale_decimal <", value, "wholesaleDecimal"); + return (Criteria) this; + } + + public Criteria andWholesaleDecimalLessThanOrEqualTo(BigDecimal value) { + addCriterion("wholesale_decimal <=", value, "wholesaleDecimal"); + return (Criteria) this; + } + + public Criteria andWholesaleDecimalIn(List values) { + addCriterion("wholesale_decimal in", values, "wholesaleDecimal"); + return (Criteria) this; + } + + public Criteria andWholesaleDecimalNotIn(List values) { + addCriterion("wholesale_decimal not in", values, "wholesaleDecimal"); + return (Criteria) this; + } + + public Criteria andWholesaleDecimalBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("wholesale_decimal between", value1, value2, "wholesaleDecimal"); + return (Criteria) this; + } + + public Criteria andWholesaleDecimalNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("wholesale_decimal not between", value1, value2, "wholesaleDecimal"); + return (Criteria) this; + } + + public Criteria andLowDecimalIsNull() { + addCriterion("low_decimal is null"); + return (Criteria) this; + } + + public Criteria andLowDecimalIsNotNull() { + addCriterion("low_decimal is not null"); + return (Criteria) this; + } + + public Criteria andLowDecimalEqualTo(BigDecimal value) { + addCriterion("low_decimal =", value, "lowDecimal"); + return (Criteria) this; + } + + public Criteria andLowDecimalNotEqualTo(BigDecimal value) { + addCriterion("low_decimal <>", value, "lowDecimal"); + return (Criteria) this; + } + + public Criteria andLowDecimalGreaterThan(BigDecimal value) { + addCriterion("low_decimal >", value, "lowDecimal"); + return (Criteria) this; + } + + public Criteria andLowDecimalGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("low_decimal >=", value, "lowDecimal"); + return (Criteria) this; + } + + public Criteria andLowDecimalLessThan(BigDecimal value) { + addCriterion("low_decimal <", value, "lowDecimal"); + return (Criteria) this; + } + + public Criteria andLowDecimalLessThanOrEqualTo(BigDecimal value) { + addCriterion("low_decimal <=", value, "lowDecimal"); + return (Criteria) this; + } + + public Criteria andLowDecimalIn(List values) { + addCriterion("low_decimal in", values, "lowDecimal"); + return (Criteria) this; + } + + public Criteria andLowDecimalNotIn(List values) { + addCriterion("low_decimal not in", values, "lowDecimal"); + return (Criteria) this; + } + + public Criteria andLowDecimalBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("low_decimal between", value1, value2, "lowDecimal"); + return (Criteria) this; + } + + public Criteria andLowDecimalNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("low_decimal not between", value1, value2, "lowDecimal"); + return (Criteria) this; + } + + public Criteria andDefaultFlagIsNull() { + addCriterion("default_flag is null"); + return (Criteria) this; + } + + public Criteria andDefaultFlagIsNotNull() { + addCriterion("default_flag is not null"); + return (Criteria) this; + } + + public Criteria andDefaultFlagEqualTo(String value) { + addCriterion("default_flag =", value, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagNotEqualTo(String value) { + addCriterion("default_flag <>", value, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagGreaterThan(String value) { + addCriterion("default_flag >", value, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagGreaterThanOrEqualTo(String value) { + addCriterion("default_flag >=", value, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagLessThan(String value) { + addCriterion("default_flag <", value, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagLessThanOrEqualTo(String value) { + addCriterion("default_flag <=", value, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagLike(String value) { + addCriterion("default_flag like", value, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagNotLike(String value) { + addCriterion("default_flag not like", value, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagIn(List values) { + addCriterion("default_flag in", values, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagNotIn(List values) { + addCriterion("default_flag not in", values, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagBetween(String value1, String value2) { + addCriterion("default_flag between", value1, value2, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andDefaultFlagNotBetween(String value1, String value2) { + addCriterion("default_flag not between", value1, value2, "defaultFlag"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateSerialIsNull() { + addCriterion("create_serial is null"); + return (Criteria) this; + } + + public Criteria andCreateSerialIsNotNull() { + addCriterion("create_serial is not null"); + return (Criteria) this; + } + + public Criteria andCreateSerialEqualTo(String value) { + addCriterion("create_serial =", value, "createSerial"); + return (Criteria) this; + } + + public Criteria andCreateSerialNotEqualTo(String value) { + addCriterion("create_serial <>", value, "createSerial"); + return (Criteria) this; + } + + public Criteria andCreateSerialGreaterThan(String value) { + addCriterion("create_serial >", value, "createSerial"); + return (Criteria) this; + } + + public Criteria andCreateSerialGreaterThanOrEqualTo(String value) { + addCriterion("create_serial >=", value, "createSerial"); + return (Criteria) this; + } + + public Criteria andCreateSerialLessThan(String value) { + addCriterion("create_serial <", value, "createSerial"); + return (Criteria) this; + } + + public Criteria andCreateSerialLessThanOrEqualTo(String value) { + addCriterion("create_serial <=", value, "createSerial"); + return (Criteria) this; + } + + public Criteria andCreateSerialLike(String value) { + addCriterion("create_serial like", value, "createSerial"); + return (Criteria) this; + } + + public Criteria andCreateSerialNotLike(String value) { + addCriterion("create_serial not like", value, "createSerial"); + return (Criteria) this; + } + + public Criteria andCreateSerialIn(List values) { + addCriterion("create_serial in", values, "createSerial"); + return (Criteria) this; + } + + public Criteria andCreateSerialNotIn(List values) { + addCriterion("create_serial not in", values, "createSerial"); + return (Criteria) this; + } + + public Criteria andCreateSerialBetween(String value1, String value2) { + addCriterion("create_serial between", value1, value2, "createSerial"); + return (Criteria) this; + } + + public Criteria andCreateSerialNotBetween(String value1, String value2) { + addCriterion("create_serial not between", value1, value2, "createSerial"); + return (Criteria) this; + } + + public Criteria andUpdateSerialIsNull() { + addCriterion("update_serial is null"); + return (Criteria) this; + } + + public Criteria andUpdateSerialIsNotNull() { + addCriterion("update_serial is not null"); + return (Criteria) this; + } + + public Criteria andUpdateSerialEqualTo(String value) { + addCriterion("update_serial =", value, "updateSerial"); + return (Criteria) this; + } + + public Criteria andUpdateSerialNotEqualTo(String value) { + addCriterion("update_serial <>", value, "updateSerial"); + return (Criteria) this; + } + + public Criteria andUpdateSerialGreaterThan(String value) { + addCriterion("update_serial >", value, "updateSerial"); + return (Criteria) this; + } + + public Criteria andUpdateSerialGreaterThanOrEqualTo(String value) { + addCriterion("update_serial >=", value, "updateSerial"); + return (Criteria) this; + } + + public Criteria andUpdateSerialLessThan(String value) { + addCriterion("update_serial <", value, "updateSerial"); + return (Criteria) this; + } + + public Criteria andUpdateSerialLessThanOrEqualTo(String value) { + addCriterion("update_serial <=", value, "updateSerial"); + return (Criteria) this; + } + + public Criteria andUpdateSerialLike(String value) { + addCriterion("update_serial like", value, "updateSerial"); + return (Criteria) this; + } + + public Criteria andUpdateSerialNotLike(String value) { + addCriterion("update_serial not like", value, "updateSerial"); + return (Criteria) this; + } + + public Criteria andUpdateSerialIn(List values) { + addCriterion("update_serial in", values, "updateSerial"); + return (Criteria) this; + } + + public Criteria andUpdateSerialNotIn(List values) { + addCriterion("update_serial not in", values, "updateSerial"); + return (Criteria) this; + } + + public Criteria andUpdateSerialBetween(String value1, String value2) { + addCriterion("update_serial between", value1, value2, "updateSerial"); + return (Criteria) this; + } + + public Criteria andUpdateSerialNotBetween(String value1, String value2) { + addCriterion("update_serial not between", value1, value2, "updateSerial"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNull() { + addCriterion("update_time is null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNotNull() { + addCriterion("update_time is not null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeEqualTo(Long value) { + addCriterion("update_time =", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotEqualTo(Long value) { + addCriterion("update_time <>", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThan(Long value) { + addCriterion("update_time >", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThanOrEqualTo(Long value) { + addCriterion("update_time >=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThan(Long value) { + addCriterion("update_time <", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThanOrEqualTo(Long value) { + addCriterion("update_time <=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIn(List values) { + addCriterion("update_time in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotIn(List values) { + addCriterion("update_time not in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeBetween(Long value1, Long value2) { + addCriterion("update_time between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotBetween(Long value1, Long value2) { + addCriterion("update_time not between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_Flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_Flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_Flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_Flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_Flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_Flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_Flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_Flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_Flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_Flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_Flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_Flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_Flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_Flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialInitialStock.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialInitialStock.java new file mode 100644 index 000000000..3e40be9cc --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialInitialStock.java @@ -0,0 +1,65 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; + +public class MaterialInitialStock { + private Long id; + + private Long materialId; + + private Long depotId; + + private BigDecimal number; + + private Long tenantId; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getMaterialId() { + return materialId; + } + + public void setMaterialId(Long materialId) { + this.materialId = materialId; + } + + public Long getDepotId() { + return depotId; + } + + public void setDepotId(Long depotId) { + this.depotId = depotId; + } + + public BigDecimal getNumber() { + return number; + } + + public void setNumber(BigDecimal number) { + this.number = number; + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialInitialStockExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialInitialStockExample.java new file mode 100644 index 000000000..ac206a0ee --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialInitialStockExample.java @@ -0,0 +1,570 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +public class MaterialInitialStockExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public MaterialInitialStockExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andMaterialIdIsNull() { + addCriterion("material_id is null"); + return (Criteria) this; + } + + public Criteria andMaterialIdIsNotNull() { + addCriterion("material_id is not null"); + return (Criteria) this; + } + + public Criteria andMaterialIdEqualTo(Long value) { + addCriterion("material_id =", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdNotEqualTo(Long value) { + addCriterion("material_id <>", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdGreaterThan(Long value) { + addCriterion("material_id >", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdGreaterThanOrEqualTo(Long value) { + addCriterion("material_id >=", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdLessThan(Long value) { + addCriterion("material_id <", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdLessThanOrEqualTo(Long value) { + addCriterion("material_id <=", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdIn(List values) { + addCriterion("material_id in", values, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdNotIn(List values) { + addCriterion("material_id not in", values, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdBetween(Long value1, Long value2) { + addCriterion("material_id between", value1, value2, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdNotBetween(Long value1, Long value2) { + addCriterion("material_id not between", value1, value2, "materialId"); + return (Criteria) this; + } + + public Criteria andDepotIdIsNull() { + addCriterion("depot_id is null"); + return (Criteria) this; + } + + public Criteria andDepotIdIsNotNull() { + addCriterion("depot_id is not null"); + return (Criteria) this; + } + + public Criteria andDepotIdEqualTo(Long value) { + addCriterion("depot_id =", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdNotEqualTo(Long value) { + addCriterion("depot_id <>", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdGreaterThan(Long value) { + addCriterion("depot_id >", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdGreaterThanOrEqualTo(Long value) { + addCriterion("depot_id >=", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdLessThan(Long value) { + addCriterion("depot_id <", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdLessThanOrEqualTo(Long value) { + addCriterion("depot_id <=", value, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdIn(List values) { + addCriterion("depot_id in", values, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdNotIn(List values) { + addCriterion("depot_id not in", values, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdBetween(Long value1, Long value2) { + addCriterion("depot_id between", value1, value2, "depotId"); + return (Criteria) this; + } + + public Criteria andDepotIdNotBetween(Long value1, Long value2) { + addCriterion("depot_id not between", value1, value2, "depotId"); + return (Criteria) this; + } + + public Criteria andNumberIsNull() { + addCriterion("number is null"); + return (Criteria) this; + } + + public Criteria andNumberIsNotNull() { + addCriterion("number is not null"); + return (Criteria) this; + } + + public Criteria andNumberEqualTo(BigDecimal value) { + addCriterion("number =", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberNotEqualTo(BigDecimal value) { + addCriterion("number <>", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberGreaterThan(BigDecimal value) { + addCriterion("number >", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("number >=", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberLessThan(BigDecimal value) { + addCriterion("number <", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberLessThanOrEqualTo(BigDecimal value) { + addCriterion("number <=", value, "number"); + return (Criteria) this; + } + + public Criteria andNumberIn(List values) { + addCriterion("number in", values, "number"); + return (Criteria) this; + } + + public Criteria andNumberNotIn(List values) { + addCriterion("number not in", values, "number"); + return (Criteria) this; + } + + public Criteria andNumberBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("number between", value1, value2, "number"); + return (Criteria) this; + } + + public Criteria andNumberNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("number not between", value1, value2, "number"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialProperty.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialProperty.java new file mode 100644 index 000000000..53be4d146 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialProperty.java @@ -0,0 +1,63 @@ +package com.jsh.erp.datasource.entities; + +public class MaterialProperty { + private Long id; + + private String nativeName; + + private Boolean enabled; + + private String sort; + + private String anotherName; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getNativeName() { + return nativeName; + } + + public void setNativeName(String nativeName) { + this.nativeName = nativeName == null ? null : nativeName.trim(); + } + + public Boolean getEnabled() { + return enabled; + } + + public void setEnabled(Boolean enabled) { + this.enabled = enabled; + } + + public String getSort() { + return sort; + } + + public void setSort(String sort) { + this.sort = sort == null ? null : sort.trim(); + } + + public String getAnotherName() { + return anotherName; + } + + public void setAnotherName(String anotherName) { + this.anotherName = anotherName == null ? null : anotherName.trim(); + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialPropertyExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialPropertyExample.java new file mode 100644 index 000000000..6c2fe016a --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialPropertyExample.java @@ -0,0 +1,599 @@ +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.List; + +public class MaterialPropertyExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public MaterialPropertyExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andNativeNameIsNull() { + addCriterion("native_name is null"); + return (Criteria) this; + } + + public Criteria andNativeNameIsNotNull() { + addCriterion("native_name is not null"); + return (Criteria) this; + } + + public Criteria andNativeNameEqualTo(String value) { + addCriterion("native_name =", value, "nativeName"); + return (Criteria) this; + } + + public Criteria andNativeNameNotEqualTo(String value) { + addCriterion("native_name <>", value, "nativeName"); + return (Criteria) this; + } + + public Criteria andNativeNameGreaterThan(String value) { + addCriterion("native_name >", value, "nativeName"); + return (Criteria) this; + } + + public Criteria andNativeNameGreaterThanOrEqualTo(String value) { + addCriterion("native_name >=", value, "nativeName"); + return (Criteria) this; + } + + public Criteria andNativeNameLessThan(String value) { + addCriterion("native_name <", value, "nativeName"); + return (Criteria) this; + } + + public Criteria andNativeNameLessThanOrEqualTo(String value) { + addCriterion("native_name <=", value, "nativeName"); + return (Criteria) this; + } + + public Criteria andNativeNameLike(String value) { + addCriterion("native_name like", value, "nativeName"); + return (Criteria) this; + } + + public Criteria andNativeNameNotLike(String value) { + addCriterion("native_name not like", value, "nativeName"); + return (Criteria) this; + } + + public Criteria andNativeNameIn(List values) { + addCriterion("native_name in", values, "nativeName"); + return (Criteria) this; + } + + public Criteria andNativeNameNotIn(List values) { + addCriterion("native_name not in", values, "nativeName"); + return (Criteria) this; + } + + public Criteria andNativeNameBetween(String value1, String value2) { + addCriterion("native_name between", value1, value2, "nativeName"); + return (Criteria) this; + } + + public Criteria andNativeNameNotBetween(String value1, String value2) { + addCriterion("native_name not between", value1, value2, "nativeName"); + return (Criteria) this; + } + + public Criteria andEnabledIsNull() { + addCriterion("enabled is null"); + return (Criteria) this; + } + + public Criteria andEnabledIsNotNull() { + addCriterion("enabled is not null"); + return (Criteria) this; + } + + public Criteria andEnabledEqualTo(Boolean value) { + addCriterion("enabled =", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledNotEqualTo(Boolean value) { + addCriterion("enabled <>", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledGreaterThan(Boolean value) { + addCriterion("enabled >", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledGreaterThanOrEqualTo(Boolean value) { + addCriterion("enabled >=", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledLessThan(Boolean value) { + addCriterion("enabled <", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledLessThanOrEqualTo(Boolean value) { + addCriterion("enabled <=", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledIn(List values) { + addCriterion("enabled in", values, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledNotIn(List values) { + addCriterion("enabled not in", values, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledBetween(Boolean value1, Boolean value2) { + addCriterion("enabled between", value1, value2, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledNotBetween(Boolean value1, Boolean value2) { + addCriterion("enabled not between", value1, value2, "enabled"); + return (Criteria) this; + } + + public Criteria andSortIsNull() { + addCriterion("sort is null"); + return (Criteria) this; + } + + public Criteria andSortIsNotNull() { + addCriterion("sort is not null"); + return (Criteria) this; + } + + public Criteria andSortEqualTo(String value) { + addCriterion("sort =", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotEqualTo(String value) { + addCriterion("sort <>", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortGreaterThan(String value) { + addCriterion("sort >", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortGreaterThanOrEqualTo(String value) { + addCriterion("sort >=", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLessThan(String value) { + addCriterion("sort <", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLessThanOrEqualTo(String value) { + addCriterion("sort <=", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLike(String value) { + addCriterion("sort like", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotLike(String value) { + addCriterion("sort not like", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortIn(List values) { + addCriterion("sort in", values, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotIn(List values) { + addCriterion("sort not in", values, "sort"); + return (Criteria) this; + } + + public Criteria andSortBetween(String value1, String value2) { + addCriterion("sort between", value1, value2, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotBetween(String value1, String value2) { + addCriterion("sort not between", value1, value2, "sort"); + return (Criteria) this; + } + + public Criteria andAnotherNameIsNull() { + addCriterion("another_name is null"); + return (Criteria) this; + } + + public Criteria andAnotherNameIsNotNull() { + addCriterion("another_name is not null"); + return (Criteria) this; + } + + public Criteria andAnotherNameEqualTo(String value) { + addCriterion("another_name =", value, "anotherName"); + return (Criteria) this; + } + + public Criteria andAnotherNameNotEqualTo(String value) { + addCriterion("another_name <>", value, "anotherName"); + return (Criteria) this; + } + + public Criteria andAnotherNameGreaterThan(String value) { + addCriterion("another_name >", value, "anotherName"); + return (Criteria) this; + } + + public Criteria andAnotherNameGreaterThanOrEqualTo(String value) { + addCriterion("another_name >=", value, "anotherName"); + return (Criteria) this; + } + + public Criteria andAnotherNameLessThan(String value) { + addCriterion("another_name <", value, "anotherName"); + return (Criteria) this; + } + + public Criteria andAnotherNameLessThanOrEqualTo(String value) { + addCriterion("another_name <=", value, "anotherName"); + return (Criteria) this; + } + + public Criteria andAnotherNameLike(String value) { + addCriterion("another_name like", value, "anotherName"); + return (Criteria) this; + } + + public Criteria andAnotherNameNotLike(String value) { + addCriterion("another_name not like", value, "anotherName"); + return (Criteria) this; + } + + public Criteria andAnotherNameIn(List values) { + addCriterion("another_name in", values, "anotherName"); + return (Criteria) this; + } + + public Criteria andAnotherNameNotIn(List values) { + addCriterion("another_name not in", values, "anotherName"); + return (Criteria) this; + } + + public Criteria andAnotherNameBetween(String value1, String value2) { + addCriterion("another_name between", value1, value2, "anotherName"); + return (Criteria) this; + } + + public Criteria andAnotherNameNotBetween(String value1, String value2) { + addCriterion("another_name not between", value1, value2, "anotherName"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialVo4Unit.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialVo4Unit.java new file mode 100644 index 000000000..4b26539d1 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialVo4Unit.java @@ -0,0 +1,116 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; + +public class MaterialVo4Unit extends Material{ + + private String unitName; + + private String categoryName; + + private String materialOther; + + private BigDecimal stock; + + private BigDecimal purchaseDecimal; + + private BigDecimal commodityDecimal; + + private BigDecimal wholesaleDecimal; + + private BigDecimal lowDecimal; + + private String mBarCode; + + private String commodityUnit; + + private Long meId; + + public String getUnitName() { + return unitName; + } + + public void setUnitName(String unitName) { + this.unitName = unitName; + } + + public String getCategoryName() { + return categoryName; + } + + public void setCategoryName(String categoryName) { + this.categoryName = categoryName; + } + + public String getMaterialOther() { + return materialOther; + } + + public void setMaterialOther(String materialOther) { + this.materialOther = materialOther; + } + + public BigDecimal getStock() { + return stock; + } + + public void setStock(BigDecimal stock) { + this.stock = stock; + } + + public BigDecimal getPurchaseDecimal() { + return purchaseDecimal; + } + + public void setPurchaseDecimal(BigDecimal purchaseDecimal) { + this.purchaseDecimal = purchaseDecimal; + } + + public BigDecimal getCommodityDecimal() { + return commodityDecimal; + } + + public void setCommodityDecimal(BigDecimal commodityDecimal) { + this.commodityDecimal = commodityDecimal; + } + + public BigDecimal getWholesaleDecimal() { + return wholesaleDecimal; + } + + public void setWholesaleDecimal(BigDecimal wholesaleDecimal) { + this.wholesaleDecimal = wholesaleDecimal; + } + + public BigDecimal getLowDecimal() { + return lowDecimal; + } + + public void setLowDecimal(BigDecimal lowDecimal) { + this.lowDecimal = lowDecimal; + } + + public String getmBarCode() { + return mBarCode; + } + + public void setmBarCode(String mBarCode) { + this.mBarCode = mBarCode; + } + + public String getCommodityUnit() { + return commodityUnit; + } + + public void setCommodityUnit(String commodityUnit) { + this.commodityUnit = commodityUnit; + } + + public Long getMeId() { + return meId; + } + + public void setMeId(Long meId) { + this.meId = meId; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialWithInitStock.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialWithInitStock.java new file mode 100644 index 000000000..85a4aa9bd --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MaterialWithInitStock.java @@ -0,0 +1,29 @@ +package com.jsh.erp.datasource.entities; + +import com.alibaba.fastjson.JSONObject; + +import java.math.BigDecimal; +import java.util.Map; + +public class MaterialWithInitStock extends Material { + + private Map stockMap; + + private JSONObject materialExObj; + + public Map getStockMap() { + return stockMap; + } + + public void setStockMap(Map stockMap) { + this.stockMap = stockMap; + } + + public JSONObject getMaterialExObj() { + return materialExObj; + } + + public void setMaterialExObj(JSONObject materialExObj) { + this.materialExObj = materialExObj; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Msg.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Msg.java new file mode 100644 index 000000000..931521b63 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Msg.java @@ -0,0 +1,261 @@ +package com.jsh.erp.datasource.entities; + +import java.util.Date; + +public class Msg { + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_msg.id + * + * @mbggenerated + */ + private Long id; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_msg.msg_title + * + * @mbggenerated + */ + private String msgTitle; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_msg.msg_content + * + * @mbggenerated + */ + private String msgContent; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_msg.create_time + * + * @mbggenerated + */ + private Date createTime; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_msg.type + * + * @mbggenerated + */ + private String type; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_msg.status + * + * @mbggenerated + */ + private String status; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_msg.tenant_id + * + * @mbggenerated + */ + private Long tenantId; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_msg.delete_Flag + * + * @mbggenerated + */ + private String deleteFlag; + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_msg.id + * + * @return the value of jsh_msg.id + * + * @mbggenerated + */ + public Long getId() { + return id; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_msg.id + * + * @param id the value for jsh_msg.id + * + * @mbggenerated + */ + public void setId(Long id) { + this.id = id; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_msg.msg_title + * + * @return the value of jsh_msg.msg_title + * + * @mbggenerated + */ + public String getMsgTitle() { + return msgTitle; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_msg.msg_title + * + * @param msgTitle the value for jsh_msg.msg_title + * + * @mbggenerated + */ + public void setMsgTitle(String msgTitle) { + this.msgTitle = msgTitle == null ? null : msgTitle.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_msg.msg_content + * + * @return the value of jsh_msg.msg_content + * + * @mbggenerated + */ + public String getMsgContent() { + return msgContent; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_msg.msg_content + * + * @param msgContent the value for jsh_msg.msg_content + * + * @mbggenerated + */ + public void setMsgContent(String msgContent) { + this.msgContent = msgContent == null ? null : msgContent.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_msg.create_time + * + * @return the value of jsh_msg.create_time + * + * @mbggenerated + */ + public Date getCreateTime() { + return createTime; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_msg.create_time + * + * @param createTime the value for jsh_msg.create_time + * + * @mbggenerated + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_msg.type + * + * @return the value of jsh_msg.type + * + * @mbggenerated + */ + public String getType() { + return type; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_msg.type + * + * @param type the value for jsh_msg.type + * + * @mbggenerated + */ + public void setType(String type) { + this.type = type == null ? null : type.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_msg.status + * + * @return the value of jsh_msg.status + * + * @mbggenerated + */ + public String getStatus() { + return status; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_msg.status + * + * @param status the value for jsh_msg.status + * + * @mbggenerated + */ + public void setStatus(String status) { + this.status = status == null ? null : status.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_msg.tenant_id + * + * @return the value of jsh_msg.tenant_id + * + * @mbggenerated + */ + public Long getTenantId() { + return tenantId; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_msg.tenant_id + * + * @param tenantId the value for jsh_msg.tenant_id + * + * @mbggenerated + */ + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_msg.delete_Flag + * + * @return the value of jsh_msg.delete_Flag + * + * @mbggenerated + */ + public String getDeleteFlag() { + return deleteFlag; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_msg.delete_Flag + * + * @param deleteFlag the value for jsh_msg.delete_Flag + * + * @mbggenerated + */ + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MsgExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MsgExample.java new file mode 100644 index 000000000..88dff99f7 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/MsgExample.java @@ -0,0 +1,833 @@ +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class MsgExample { + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table jsh_msg + * + * @mbggenerated + */ + protected String orderByClause; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table jsh_msg + * + * @mbggenerated + */ + protected boolean distinct; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table jsh_msg + * + * @mbggenerated + */ + protected List oredCriteria; + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + public MsgExample() { + oredCriteria = new ArrayList(); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + public String getOrderByClause() { + return orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + public boolean isDistinct() { + return distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + public List getOredCriteria() { + return oredCriteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table jsh_msg + * + * @mbggenerated + */ + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andMsgTitleIsNull() { + addCriterion("msg_title is null"); + return (Criteria) this; + } + + public Criteria andMsgTitleIsNotNull() { + addCriterion("msg_title is not null"); + return (Criteria) this; + } + + public Criteria andMsgTitleEqualTo(String value) { + addCriterion("msg_title =", value, "msgTitle"); + return (Criteria) this; + } + + public Criteria andMsgTitleNotEqualTo(String value) { + addCriterion("msg_title <>", value, "msgTitle"); + return (Criteria) this; + } + + public Criteria andMsgTitleGreaterThan(String value) { + addCriterion("msg_title >", value, "msgTitle"); + return (Criteria) this; + } + + public Criteria andMsgTitleGreaterThanOrEqualTo(String value) { + addCriterion("msg_title >=", value, "msgTitle"); + return (Criteria) this; + } + + public Criteria andMsgTitleLessThan(String value) { + addCriterion("msg_title <", value, "msgTitle"); + return (Criteria) this; + } + + public Criteria andMsgTitleLessThanOrEqualTo(String value) { + addCriterion("msg_title <=", value, "msgTitle"); + return (Criteria) this; + } + + public Criteria andMsgTitleLike(String value) { + addCriterion("msg_title like", value, "msgTitle"); + return (Criteria) this; + } + + public Criteria andMsgTitleNotLike(String value) { + addCriterion("msg_title not like", value, "msgTitle"); + return (Criteria) this; + } + + public Criteria andMsgTitleIn(List values) { + addCriterion("msg_title in", values, "msgTitle"); + return (Criteria) this; + } + + public Criteria andMsgTitleNotIn(List values) { + addCriterion("msg_title not in", values, "msgTitle"); + return (Criteria) this; + } + + public Criteria andMsgTitleBetween(String value1, String value2) { + addCriterion("msg_title between", value1, value2, "msgTitle"); + return (Criteria) this; + } + + public Criteria andMsgTitleNotBetween(String value1, String value2) { + addCriterion("msg_title not between", value1, value2, "msgTitle"); + return (Criteria) this; + } + + public Criteria andMsgContentIsNull() { + addCriterion("msg_content is null"); + return (Criteria) this; + } + + public Criteria andMsgContentIsNotNull() { + addCriterion("msg_content is not null"); + return (Criteria) this; + } + + public Criteria andMsgContentEqualTo(String value) { + addCriterion("msg_content =", value, "msgContent"); + return (Criteria) this; + } + + public Criteria andMsgContentNotEqualTo(String value) { + addCriterion("msg_content <>", value, "msgContent"); + return (Criteria) this; + } + + public Criteria andMsgContentGreaterThan(String value) { + addCriterion("msg_content >", value, "msgContent"); + return (Criteria) this; + } + + public Criteria andMsgContentGreaterThanOrEqualTo(String value) { + addCriterion("msg_content >=", value, "msgContent"); + return (Criteria) this; + } + + public Criteria andMsgContentLessThan(String value) { + addCriterion("msg_content <", value, "msgContent"); + return (Criteria) this; + } + + public Criteria andMsgContentLessThanOrEqualTo(String value) { + addCriterion("msg_content <=", value, "msgContent"); + return (Criteria) this; + } + + public Criteria andMsgContentLike(String value) { + addCriterion("msg_content like", value, "msgContent"); + return (Criteria) this; + } + + public Criteria andMsgContentNotLike(String value) { + addCriterion("msg_content not like", value, "msgContent"); + return (Criteria) this; + } + + public Criteria andMsgContentIn(List values) { + addCriterion("msg_content in", values, "msgContent"); + return (Criteria) this; + } + + public Criteria andMsgContentNotIn(List values) { + addCriterion("msg_content not in", values, "msgContent"); + return (Criteria) this; + } + + public Criteria andMsgContentBetween(String value1, String value2) { + addCriterion("msg_content between", value1, value2, "msgContent"); + return (Criteria) this; + } + + public Criteria andMsgContentNotBetween(String value1, String value2) { + addCriterion("msg_content not between", value1, value2, "msgContent"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andTypeIsNull() { + addCriterion("type is null"); + return (Criteria) this; + } + + public Criteria andTypeIsNotNull() { + addCriterion("type is not null"); + return (Criteria) this; + } + + public Criteria andTypeEqualTo(String value) { + addCriterion("type =", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotEqualTo(String value) { + addCriterion("type <>", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThan(String value) { + addCriterion("type >", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThanOrEqualTo(String value) { + addCriterion("type >=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThan(String value) { + addCriterion("type <", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThanOrEqualTo(String value) { + addCriterion("type <=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLike(String value) { + addCriterion("type like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotLike(String value) { + addCriterion("type not like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeIn(List values) { + addCriterion("type in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotIn(List values) { + addCriterion("type not in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeBetween(String value1, String value2) { + addCriterion("type between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotBetween(String value1, String value2) { + addCriterion("type not between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andStatusIsNull() { + addCriterion("status is null"); + return (Criteria) this; + } + + public Criteria andStatusIsNotNull() { + addCriterion("status is not null"); + return (Criteria) this; + } + + public Criteria andStatusEqualTo(String value) { + addCriterion("status =", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotEqualTo(String value) { + addCriterion("status <>", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusGreaterThan(String value) { + addCriterion("status >", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusGreaterThanOrEqualTo(String value) { + addCriterion("status >=", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLessThan(String value) { + addCriterion("status <", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLessThanOrEqualTo(String value) { + addCriterion("status <=", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLike(String value) { + addCriterion("status like", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotLike(String value) { + addCriterion("status not like", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusIn(List values) { + addCriterion("status in", values, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotIn(List values) { + addCriterion("status not in", values, "status"); + return (Criteria) this; + } + + public Criteria andStatusBetween(String value1, String value2) { + addCriterion("status between", value1, value2, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotBetween(String value1, String value2) { + addCriterion("status not between", value1, value2, "status"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_Flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_Flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_Flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_Flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_Flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_Flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_Flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_Flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_Flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_Flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_Flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_Flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_Flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_Flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table jsh_msg + * + * @mbggenerated do_not_delete_during_merge + */ + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table jsh_msg + * + * @mbggenerated + */ + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/OrgaUserRel.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/OrgaUserRel.java new file mode 100644 index 000000000..997051994 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/OrgaUserRel.java @@ -0,0 +1,325 @@ +package com.jsh.erp.datasource.entities; + +import java.util.Date; + +public class OrgaUserRel { + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_orga_user_rel.id + * + * @mbggenerated + */ + private Long id; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_orga_user_rel.orga_id + * + * @mbggenerated + */ + private Long orgaId; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_orga_user_rel.user_id + * + * @mbggenerated + */ + private Long userId; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_orga_user_rel.user_blng_orga_dspl_seq + * + * @mbggenerated + */ + private String userBlngOrgaDsplSeq; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_orga_user_rel.delete_flag + * + * @mbggenerated + */ + private String deleteFlag; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_orga_user_rel.create_time + * + * @mbggenerated + */ + private Date createTime; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_orga_user_rel.creator + * + * @mbggenerated + */ + private Long creator; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_orga_user_rel.update_time + * + * @mbggenerated + */ + private Date updateTime; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_orga_user_rel.updater + * + * @mbggenerated + */ + private Long updater; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_orga_user_rel.tenant_id + * + * @mbggenerated + */ + private Long tenantId; + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_orga_user_rel.id + * + * @return the value of jsh_orga_user_rel.id + * + * @mbggenerated + */ + public Long getId() { + return id; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_orga_user_rel.id + * + * @param id the value for jsh_orga_user_rel.id + * + * @mbggenerated + */ + public void setId(Long id) { + this.id = id; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_orga_user_rel.orga_id + * + * @return the value of jsh_orga_user_rel.orga_id + * + * @mbggenerated + */ + public Long getOrgaId() { + return orgaId; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_orga_user_rel.orga_id + * + * @param orgaId the value for jsh_orga_user_rel.orga_id + * + * @mbggenerated + */ + public void setOrgaId(Long orgaId) { + this.orgaId = orgaId; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_orga_user_rel.user_id + * + * @return the value of jsh_orga_user_rel.user_id + * + * @mbggenerated + */ + public Long getUserId() { + return userId; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_orga_user_rel.user_id + * + * @param userId the value for jsh_orga_user_rel.user_id + * + * @mbggenerated + */ + public void setUserId(Long userId) { + this.userId = userId; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_orga_user_rel.user_blng_orga_dspl_seq + * + * @return the value of jsh_orga_user_rel.user_blng_orga_dspl_seq + * + * @mbggenerated + */ + public String getUserBlngOrgaDsplSeq() { + return userBlngOrgaDsplSeq; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_orga_user_rel.user_blng_orga_dspl_seq + * + * @param userBlngOrgaDsplSeq the value for jsh_orga_user_rel.user_blng_orga_dspl_seq + * + * @mbggenerated + */ + public void setUserBlngOrgaDsplSeq(String userBlngOrgaDsplSeq) { + this.userBlngOrgaDsplSeq = userBlngOrgaDsplSeq == null ? null : userBlngOrgaDsplSeq.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_orga_user_rel.delete_flag + * + * @return the value of jsh_orga_user_rel.delete_flag + * + * @mbggenerated + */ + public String getDeleteFlag() { + return deleteFlag; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_orga_user_rel.delete_flag + * + * @param deleteFlag the value for jsh_orga_user_rel.delete_flag + * + * @mbggenerated + */ + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_orga_user_rel.create_time + * + * @return the value of jsh_orga_user_rel.create_time + * + * @mbggenerated + */ + public Date getCreateTime() { + return createTime; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_orga_user_rel.create_time + * + * @param createTime the value for jsh_orga_user_rel.create_time + * + * @mbggenerated + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_orga_user_rel.creator + * + * @return the value of jsh_orga_user_rel.creator + * + * @mbggenerated + */ + public Long getCreator() { + return creator; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_orga_user_rel.creator + * + * @param creator the value for jsh_orga_user_rel.creator + * + * @mbggenerated + */ + public void setCreator(Long creator) { + this.creator = creator; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_orga_user_rel.update_time + * + * @return the value of jsh_orga_user_rel.update_time + * + * @mbggenerated + */ + public Date getUpdateTime() { + return updateTime; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_orga_user_rel.update_time + * + * @param updateTime the value for jsh_orga_user_rel.update_time + * + * @mbggenerated + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_orga_user_rel.updater + * + * @return the value of jsh_orga_user_rel.updater + * + * @mbggenerated + */ + public Long getUpdater() { + return updater; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_orga_user_rel.updater + * + * @param updater the value for jsh_orga_user_rel.updater + * + * @mbggenerated + */ + public void setUpdater(Long updater) { + this.updater = updater; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_orga_user_rel.tenant_id + * + * @return the value of jsh_orga_user_rel.tenant_id + * + * @mbggenerated + */ + public Long getTenantId() { + return tenantId; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_orga_user_rel.tenant_id + * + * @param tenantId the value for jsh_orga_user_rel.tenant_id + * + * @mbggenerated + */ + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/OrgaUserRelEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/OrgaUserRelEx.java new file mode 100644 index 000000000..c6bdf8c6d --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/OrgaUserRelEx.java @@ -0,0 +1,10 @@ +package com.jsh.erp.datasource.entities; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/3/12 10:09 + */ +public class OrgaUserRelEx extends OrgaUserRel { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/OrgaUserRelExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/OrgaUserRelExample.java new file mode 100644 index 000000000..72e39e383 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/OrgaUserRelExample.java @@ -0,0 +1,923 @@ +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class OrgaUserRelExample { + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + protected String orderByClause; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + protected boolean distinct; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + protected List oredCriteria; + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + public OrgaUserRelExample() { + oredCriteria = new ArrayList(); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + public String getOrderByClause() { + return orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + public boolean isDistinct() { + return distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + public List getOredCriteria() { + return oredCriteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andOrgaIdIsNull() { + addCriterion("orga_id is null"); + return (Criteria) this; + } + + public Criteria andOrgaIdIsNotNull() { + addCriterion("orga_id is not null"); + return (Criteria) this; + } + + public Criteria andOrgaIdEqualTo(Long value) { + addCriterion("orga_id =", value, "orgaId"); + return (Criteria) this; + } + + public Criteria andOrgaIdNotEqualTo(Long value) { + addCriterion("orga_id <>", value, "orgaId"); + return (Criteria) this; + } + + public Criteria andOrgaIdGreaterThan(Long value) { + addCriterion("orga_id >", value, "orgaId"); + return (Criteria) this; + } + + public Criteria andOrgaIdGreaterThanOrEqualTo(Long value) { + addCriterion("orga_id >=", value, "orgaId"); + return (Criteria) this; + } + + public Criteria andOrgaIdLessThan(Long value) { + addCriterion("orga_id <", value, "orgaId"); + return (Criteria) this; + } + + public Criteria andOrgaIdLessThanOrEqualTo(Long value) { + addCriterion("orga_id <=", value, "orgaId"); + return (Criteria) this; + } + + public Criteria andOrgaIdIn(List values) { + addCriterion("orga_id in", values, "orgaId"); + return (Criteria) this; + } + + public Criteria andOrgaIdNotIn(List values) { + addCriterion("orga_id not in", values, "orgaId"); + return (Criteria) this; + } + + public Criteria andOrgaIdBetween(Long value1, Long value2) { + addCriterion("orga_id between", value1, value2, "orgaId"); + return (Criteria) this; + } + + public Criteria andOrgaIdNotBetween(Long value1, Long value2) { + addCriterion("orga_id not between", value1, value2, "orgaId"); + return (Criteria) this; + } + + public Criteria andUserIdIsNull() { + addCriterion("user_id is null"); + return (Criteria) this; + } + + public Criteria andUserIdIsNotNull() { + addCriterion("user_id is not null"); + return (Criteria) this; + } + + public Criteria andUserIdEqualTo(Long value) { + addCriterion("user_id =", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotEqualTo(Long value) { + addCriterion("user_id <>", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThan(Long value) { + addCriterion("user_id >", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThanOrEqualTo(Long value) { + addCriterion("user_id >=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThan(Long value) { + addCriterion("user_id <", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThanOrEqualTo(Long value) { + addCriterion("user_id <=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdIn(List values) { + addCriterion("user_id in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotIn(List values) { + addCriterion("user_id not in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdBetween(Long value1, Long value2) { + addCriterion("user_id between", value1, value2, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotBetween(Long value1, Long value2) { + addCriterion("user_id not between", value1, value2, "userId"); + return (Criteria) this; + } + + public Criteria andUserBlngOrgaDsplSeqIsNull() { + addCriterion("user_blng_orga_dspl_seq is null"); + return (Criteria) this; + } + + public Criteria andUserBlngOrgaDsplSeqIsNotNull() { + addCriterion("user_blng_orga_dspl_seq is not null"); + return (Criteria) this; + } + + public Criteria andUserBlngOrgaDsplSeqEqualTo(String value) { + addCriterion("user_blng_orga_dspl_seq =", value, "userBlngOrgaDsplSeq"); + return (Criteria) this; + } + + public Criteria andUserBlngOrgaDsplSeqNotEqualTo(String value) { + addCriterion("user_blng_orga_dspl_seq <>", value, "userBlngOrgaDsplSeq"); + return (Criteria) this; + } + + public Criteria andUserBlngOrgaDsplSeqGreaterThan(String value) { + addCriterion("user_blng_orga_dspl_seq >", value, "userBlngOrgaDsplSeq"); + return (Criteria) this; + } + + public Criteria andUserBlngOrgaDsplSeqGreaterThanOrEqualTo(String value) { + addCriterion("user_blng_orga_dspl_seq >=", value, "userBlngOrgaDsplSeq"); + return (Criteria) this; + } + + public Criteria andUserBlngOrgaDsplSeqLessThan(String value) { + addCriterion("user_blng_orga_dspl_seq <", value, "userBlngOrgaDsplSeq"); + return (Criteria) this; + } + + public Criteria andUserBlngOrgaDsplSeqLessThanOrEqualTo(String value) { + addCriterion("user_blng_orga_dspl_seq <=", value, "userBlngOrgaDsplSeq"); + return (Criteria) this; + } + + public Criteria andUserBlngOrgaDsplSeqLike(String value) { + addCriterion("user_blng_orga_dspl_seq like", value, "userBlngOrgaDsplSeq"); + return (Criteria) this; + } + + public Criteria andUserBlngOrgaDsplSeqNotLike(String value) { + addCriterion("user_blng_orga_dspl_seq not like", value, "userBlngOrgaDsplSeq"); + return (Criteria) this; + } + + public Criteria andUserBlngOrgaDsplSeqIn(List values) { + addCriterion("user_blng_orga_dspl_seq in", values, "userBlngOrgaDsplSeq"); + return (Criteria) this; + } + + public Criteria andUserBlngOrgaDsplSeqNotIn(List values) { + addCriterion("user_blng_orga_dspl_seq not in", values, "userBlngOrgaDsplSeq"); + return (Criteria) this; + } + + public Criteria andUserBlngOrgaDsplSeqBetween(String value1, String value2) { + addCriterion("user_blng_orga_dspl_seq between", value1, value2, "userBlngOrgaDsplSeq"); + return (Criteria) this; + } + + public Criteria andUserBlngOrgaDsplSeqNotBetween(String value1, String value2) { + addCriterion("user_blng_orga_dspl_seq not between", value1, value2, "userBlngOrgaDsplSeq"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreatorIsNull() { + addCriterion("creator is null"); + return (Criteria) this; + } + + public Criteria andCreatorIsNotNull() { + addCriterion("creator is not null"); + return (Criteria) this; + } + + public Criteria andCreatorEqualTo(Long value) { + addCriterion("creator =", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorNotEqualTo(Long value) { + addCriterion("creator <>", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorGreaterThan(Long value) { + addCriterion("creator >", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorGreaterThanOrEqualTo(Long value) { + addCriterion("creator >=", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorLessThan(Long value) { + addCriterion("creator <", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorLessThanOrEqualTo(Long value) { + addCriterion("creator <=", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorIn(List values) { + addCriterion("creator in", values, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorNotIn(List values) { + addCriterion("creator not in", values, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorBetween(Long value1, Long value2) { + addCriterion("creator between", value1, value2, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorNotBetween(Long value1, Long value2) { + addCriterion("creator not between", value1, value2, "creator"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNull() { + addCriterion("update_time is null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNotNull() { + addCriterion("update_time is not null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeEqualTo(Date value) { + addCriterion("update_time =", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotEqualTo(Date value) { + addCriterion("update_time <>", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThan(Date value) { + addCriterion("update_time >", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("update_time >=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThan(Date value) { + addCriterion("update_time <", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThanOrEqualTo(Date value) { + addCriterion("update_time <=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIn(List values) { + addCriterion("update_time in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotIn(List values) { + addCriterion("update_time not in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeBetween(Date value1, Date value2) { + addCriterion("update_time between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotBetween(Date value1, Date value2) { + addCriterion("update_time not between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdaterIsNull() { + addCriterion("updater is null"); + return (Criteria) this; + } + + public Criteria andUpdaterIsNotNull() { + addCriterion("updater is not null"); + return (Criteria) this; + } + + public Criteria andUpdaterEqualTo(Long value) { + addCriterion("updater =", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterNotEqualTo(Long value) { + addCriterion("updater <>", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterGreaterThan(Long value) { + addCriterion("updater >", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterGreaterThanOrEqualTo(Long value) { + addCriterion("updater >=", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterLessThan(Long value) { + addCriterion("updater <", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterLessThanOrEqualTo(Long value) { + addCriterion("updater <=", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterIn(List values) { + addCriterion("updater in", values, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterNotIn(List values) { + addCriterion("updater not in", values, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterBetween(Long value1, Long value2) { + addCriterion("updater between", value1, value2, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterNotBetween(Long value1, Long value2) { + addCriterion("updater not between", value1, value2, "updater"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated do_not_delete_during_merge + */ + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Organization.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Organization.java new file mode 100644 index 000000000..b48824cf7 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Organization.java @@ -0,0 +1,115 @@ +package com.jsh.erp.datasource.entities; + +import java.util.Date; + +public class Organization { + private Long id; + + private String orgNo; + + private String orgFullName; + + private String orgAbr; + + private Long parentId; + + private String sort; + + private String remark; + + private Date createTime; + + private Date updateTime; + + private Long tenantId; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getOrgNo() { + return orgNo; + } + + public void setOrgNo(String orgNo) { + this.orgNo = orgNo == null ? null : orgNo.trim(); + } + + public String getOrgFullName() { + return orgFullName; + } + + public void setOrgFullName(String orgFullName) { + this.orgFullName = orgFullName == null ? null : orgFullName.trim(); + } + + public String getOrgAbr() { + return orgAbr; + } + + public void setOrgAbr(String orgAbr) { + this.orgAbr = orgAbr == null ? null : orgAbr.trim(); + } + + public Long getParentId() { + return parentId; + } + + public void setParentId(Long parentId) { + this.parentId = parentId; + } + + public String getSort() { + return sort; + } + + public void setSort(String sort) { + this.sort = sort == null ? null : sort.trim(); + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/OrganizationExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/OrganizationExample.java new file mode 100644 index 000000000..db6e97add --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/OrganizationExample.java @@ -0,0 +1,920 @@ +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class OrganizationExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public OrganizationExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andOrgNoIsNull() { + addCriterion("org_no is null"); + return (Criteria) this; + } + + public Criteria andOrgNoIsNotNull() { + addCriterion("org_no is not null"); + return (Criteria) this; + } + + public Criteria andOrgNoEqualTo(String value) { + addCriterion("org_no =", value, "orgNo"); + return (Criteria) this; + } + + public Criteria andOrgNoNotEqualTo(String value) { + addCriterion("org_no <>", value, "orgNo"); + return (Criteria) this; + } + + public Criteria andOrgNoGreaterThan(String value) { + addCriterion("org_no >", value, "orgNo"); + return (Criteria) this; + } + + public Criteria andOrgNoGreaterThanOrEqualTo(String value) { + addCriterion("org_no >=", value, "orgNo"); + return (Criteria) this; + } + + public Criteria andOrgNoLessThan(String value) { + addCriterion("org_no <", value, "orgNo"); + return (Criteria) this; + } + + public Criteria andOrgNoLessThanOrEqualTo(String value) { + addCriterion("org_no <=", value, "orgNo"); + return (Criteria) this; + } + + public Criteria andOrgNoLike(String value) { + addCriterion("org_no like", value, "orgNo"); + return (Criteria) this; + } + + public Criteria andOrgNoNotLike(String value) { + addCriterion("org_no not like", value, "orgNo"); + return (Criteria) this; + } + + public Criteria andOrgNoIn(List values) { + addCriterion("org_no in", values, "orgNo"); + return (Criteria) this; + } + + public Criteria andOrgNoNotIn(List values) { + addCriterion("org_no not in", values, "orgNo"); + return (Criteria) this; + } + + public Criteria andOrgNoBetween(String value1, String value2) { + addCriterion("org_no between", value1, value2, "orgNo"); + return (Criteria) this; + } + + public Criteria andOrgNoNotBetween(String value1, String value2) { + addCriterion("org_no not between", value1, value2, "orgNo"); + return (Criteria) this; + } + + public Criteria andOrgFullNameIsNull() { + addCriterion("org_full_name is null"); + return (Criteria) this; + } + + public Criteria andOrgFullNameIsNotNull() { + addCriterion("org_full_name is not null"); + return (Criteria) this; + } + + public Criteria andOrgFullNameEqualTo(String value) { + addCriterion("org_full_name =", value, "orgFullName"); + return (Criteria) this; + } + + public Criteria andOrgFullNameNotEqualTo(String value) { + addCriterion("org_full_name <>", value, "orgFullName"); + return (Criteria) this; + } + + public Criteria andOrgFullNameGreaterThan(String value) { + addCriterion("org_full_name >", value, "orgFullName"); + return (Criteria) this; + } + + public Criteria andOrgFullNameGreaterThanOrEqualTo(String value) { + addCriterion("org_full_name >=", value, "orgFullName"); + return (Criteria) this; + } + + public Criteria andOrgFullNameLessThan(String value) { + addCriterion("org_full_name <", value, "orgFullName"); + return (Criteria) this; + } + + public Criteria andOrgFullNameLessThanOrEqualTo(String value) { + addCriterion("org_full_name <=", value, "orgFullName"); + return (Criteria) this; + } + + public Criteria andOrgFullNameLike(String value) { + addCriterion("org_full_name like", value, "orgFullName"); + return (Criteria) this; + } + + public Criteria andOrgFullNameNotLike(String value) { + addCriterion("org_full_name not like", value, "orgFullName"); + return (Criteria) this; + } + + public Criteria andOrgFullNameIn(List values) { + addCriterion("org_full_name in", values, "orgFullName"); + return (Criteria) this; + } + + public Criteria andOrgFullNameNotIn(List values) { + addCriterion("org_full_name not in", values, "orgFullName"); + return (Criteria) this; + } + + public Criteria andOrgFullNameBetween(String value1, String value2) { + addCriterion("org_full_name between", value1, value2, "orgFullName"); + return (Criteria) this; + } + + public Criteria andOrgFullNameNotBetween(String value1, String value2) { + addCriterion("org_full_name not between", value1, value2, "orgFullName"); + return (Criteria) this; + } + + public Criteria andOrgAbrIsNull() { + addCriterion("org_abr is null"); + return (Criteria) this; + } + + public Criteria andOrgAbrIsNotNull() { + addCriterion("org_abr is not null"); + return (Criteria) this; + } + + public Criteria andOrgAbrEqualTo(String value) { + addCriterion("org_abr =", value, "orgAbr"); + return (Criteria) this; + } + + public Criteria andOrgAbrNotEqualTo(String value) { + addCriterion("org_abr <>", value, "orgAbr"); + return (Criteria) this; + } + + public Criteria andOrgAbrGreaterThan(String value) { + addCriterion("org_abr >", value, "orgAbr"); + return (Criteria) this; + } + + public Criteria andOrgAbrGreaterThanOrEqualTo(String value) { + addCriterion("org_abr >=", value, "orgAbr"); + return (Criteria) this; + } + + public Criteria andOrgAbrLessThan(String value) { + addCriterion("org_abr <", value, "orgAbr"); + return (Criteria) this; + } + + public Criteria andOrgAbrLessThanOrEqualTo(String value) { + addCriterion("org_abr <=", value, "orgAbr"); + return (Criteria) this; + } + + public Criteria andOrgAbrLike(String value) { + addCriterion("org_abr like", value, "orgAbr"); + return (Criteria) this; + } + + public Criteria andOrgAbrNotLike(String value) { + addCriterion("org_abr not like", value, "orgAbr"); + return (Criteria) this; + } + + public Criteria andOrgAbrIn(List values) { + addCriterion("org_abr in", values, "orgAbr"); + return (Criteria) this; + } + + public Criteria andOrgAbrNotIn(List values) { + addCriterion("org_abr not in", values, "orgAbr"); + return (Criteria) this; + } + + public Criteria andOrgAbrBetween(String value1, String value2) { + addCriterion("org_abr between", value1, value2, "orgAbr"); + return (Criteria) this; + } + + public Criteria andOrgAbrNotBetween(String value1, String value2) { + addCriterion("org_abr not between", value1, value2, "orgAbr"); + return (Criteria) this; + } + + public Criteria andParentIdIsNull() { + addCriterion("parent_id is null"); + return (Criteria) this; + } + + public Criteria andParentIdIsNotNull() { + addCriterion("parent_id is not null"); + return (Criteria) this; + } + + public Criteria andParentIdEqualTo(Long value) { + addCriterion("parent_id =", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdNotEqualTo(Long value) { + addCriterion("parent_id <>", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdGreaterThan(Long value) { + addCriterion("parent_id >", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdGreaterThanOrEqualTo(Long value) { + addCriterion("parent_id >=", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdLessThan(Long value) { + addCriterion("parent_id <", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdLessThanOrEqualTo(Long value) { + addCriterion("parent_id <=", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdIn(List values) { + addCriterion("parent_id in", values, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdNotIn(List values) { + addCriterion("parent_id not in", values, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdBetween(Long value1, Long value2) { + addCriterion("parent_id between", value1, value2, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdNotBetween(Long value1, Long value2) { + addCriterion("parent_id not between", value1, value2, "parentId"); + return (Criteria) this; + } + + public Criteria andSortIsNull() { + addCriterion("sort is null"); + return (Criteria) this; + } + + public Criteria andSortIsNotNull() { + addCriterion("sort is not null"); + return (Criteria) this; + } + + public Criteria andSortEqualTo(String value) { + addCriterion("sort =", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotEqualTo(String value) { + addCriterion("sort <>", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortGreaterThan(String value) { + addCriterion("sort >", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortGreaterThanOrEqualTo(String value) { + addCriterion("sort >=", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLessThan(String value) { + addCriterion("sort <", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLessThanOrEqualTo(String value) { + addCriterion("sort <=", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortLike(String value) { + addCriterion("sort like", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotLike(String value) { + addCriterion("sort not like", value, "sort"); + return (Criteria) this; + } + + public Criteria andSortIn(List values) { + addCriterion("sort in", values, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotIn(List values) { + addCriterion("sort not in", values, "sort"); + return (Criteria) this; + } + + public Criteria andSortBetween(String value1, String value2) { + addCriterion("sort between", value1, value2, "sort"); + return (Criteria) this; + } + + public Criteria andSortNotBetween(String value1, String value2) { + addCriterion("sort not between", value1, value2, "sort"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNull() { + addCriterion("update_time is null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNotNull() { + addCriterion("update_time is not null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeEqualTo(Date value) { + addCriterion("update_time =", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotEqualTo(Date value) { + addCriterion("update_time <>", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThan(Date value) { + addCriterion("update_time >", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("update_time >=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThan(Date value) { + addCriterion("update_time <", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThanOrEqualTo(Date value) { + addCriterion("update_time <=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIn(List values) { + addCriterion("update_time in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotIn(List values) { + addCriterion("update_time not in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeBetween(Date value1, Date value2) { + addCriterion("update_time between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotBetween(Date value1, Date value2) { + addCriterion("update_time not between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Person.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Person.java new file mode 100644 index 000000000..9ebbc88fa --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Person.java @@ -0,0 +1,53 @@ +package com.jsh.erp.datasource.entities; + +public class Person { + private Long id; + + private String type; + + private String name; + + private Long tenantId; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type == null ? null : type.trim(); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/PersonExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/PersonExample.java new file mode 100644 index 000000000..91c3136f3 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/PersonExample.java @@ -0,0 +1,529 @@ +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.List; + +public class PersonExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public PersonExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andTypeIsNull() { + addCriterion("type is null"); + return (Criteria) this; + } + + public Criteria andTypeIsNotNull() { + addCriterion("type is not null"); + return (Criteria) this; + } + + public Criteria andTypeEqualTo(String value) { + addCriterion("type =", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotEqualTo(String value) { + addCriterion("type <>", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThan(String value) { + addCriterion("type >", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThanOrEqualTo(String value) { + addCriterion("type >=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThan(String value) { + addCriterion("type <", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThanOrEqualTo(String value) { + addCriterion("type <=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLike(String value) { + addCriterion("type like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotLike(String value) { + addCriterion("type not like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeIn(List values) { + addCriterion("type in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotIn(List values) { + addCriterion("type not in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeBetween(String value1, String value2) { + addCriterion("type between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotBetween(String value1, String value2) { + addCriterion("type not between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("name is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("name is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("name =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("name <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("name >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("name >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("name <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("name <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("name like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("name not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("name in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("name not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("name between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("name not between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/PlatformConfig.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/PlatformConfig.java new file mode 100644 index 000000000..8905caeea --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/PlatformConfig.java @@ -0,0 +1,43 @@ +package com.jsh.erp.datasource.entities; + +public class PlatformConfig { + private Long id; + + private String platformKey; + + private String platformKeyInfo; + + private String platformValue; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getPlatformKey() { + return platformKey; + } + + public void setPlatformKey(String platformKey) { + this.platformKey = platformKey == null ? null : platformKey.trim(); + } + + public String getPlatformKeyInfo() { + return platformKeyInfo; + } + + public void setPlatformKeyInfo(String platformKeyInfo) { + this.platformKeyInfo = platformKeyInfo == null ? null : platformKeyInfo.trim(); + } + + public String getPlatformValue() { + return platformValue; + } + + public void setPlatformValue(String platformValue) { + this.platformValue = platformValue == null ? null : platformValue.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/PlatformConfigExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/PlatformConfigExample.java new file mode 100644 index 000000000..106959ebf --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/PlatformConfigExample.java @@ -0,0 +1,469 @@ +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.List; + +public class PlatformConfigExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public PlatformConfigExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andPlatformKeyIsNull() { + addCriterion("platform_key is null"); + return (Criteria) this; + } + + public Criteria andPlatformKeyIsNotNull() { + addCriterion("platform_key is not null"); + return (Criteria) this; + } + + public Criteria andPlatformKeyEqualTo(String value) { + addCriterion("platform_key =", value, "platformKey"); + return (Criteria) this; + } + + public Criteria andPlatformKeyNotEqualTo(String value) { + addCriterion("platform_key <>", value, "platformKey"); + return (Criteria) this; + } + + public Criteria andPlatformKeyGreaterThan(String value) { + addCriterion("platform_key >", value, "platformKey"); + return (Criteria) this; + } + + public Criteria andPlatformKeyGreaterThanOrEqualTo(String value) { + addCriterion("platform_key >=", value, "platformKey"); + return (Criteria) this; + } + + public Criteria andPlatformKeyLessThan(String value) { + addCriterion("platform_key <", value, "platformKey"); + return (Criteria) this; + } + + public Criteria andPlatformKeyLessThanOrEqualTo(String value) { + addCriterion("platform_key <=", value, "platformKey"); + return (Criteria) this; + } + + public Criteria andPlatformKeyLike(String value) { + addCriterion("platform_key like", value, "platformKey"); + return (Criteria) this; + } + + public Criteria andPlatformKeyNotLike(String value) { + addCriterion("platform_key not like", value, "platformKey"); + return (Criteria) this; + } + + public Criteria andPlatformKeyIn(List values) { + addCriterion("platform_key in", values, "platformKey"); + return (Criteria) this; + } + + public Criteria andPlatformKeyNotIn(List values) { + addCriterion("platform_key not in", values, "platformKey"); + return (Criteria) this; + } + + public Criteria andPlatformKeyBetween(String value1, String value2) { + addCriterion("platform_key between", value1, value2, "platformKey"); + return (Criteria) this; + } + + public Criteria andPlatformKeyNotBetween(String value1, String value2) { + addCriterion("platform_key not between", value1, value2, "platformKey"); + return (Criteria) this; + } + + public Criteria andPlatformKeyInfoIsNull() { + addCriterion("platform_key_info is null"); + return (Criteria) this; + } + + public Criteria andPlatformKeyInfoIsNotNull() { + addCriterion("platform_key_info is not null"); + return (Criteria) this; + } + + public Criteria andPlatformKeyInfoEqualTo(String value) { + addCriterion("platform_key_info =", value, "platformKeyInfo"); + return (Criteria) this; + } + + public Criteria andPlatformKeyInfoNotEqualTo(String value) { + addCriterion("platform_key_info <>", value, "platformKeyInfo"); + return (Criteria) this; + } + + public Criteria andPlatformKeyInfoGreaterThan(String value) { + addCriterion("platform_key_info >", value, "platformKeyInfo"); + return (Criteria) this; + } + + public Criteria andPlatformKeyInfoGreaterThanOrEqualTo(String value) { + addCriterion("platform_key_info >=", value, "platformKeyInfo"); + return (Criteria) this; + } + + public Criteria andPlatformKeyInfoLessThan(String value) { + addCriterion("platform_key_info <", value, "platformKeyInfo"); + return (Criteria) this; + } + + public Criteria andPlatformKeyInfoLessThanOrEqualTo(String value) { + addCriterion("platform_key_info <=", value, "platformKeyInfo"); + return (Criteria) this; + } + + public Criteria andPlatformKeyInfoLike(String value) { + addCriterion("platform_key_info like", value, "platformKeyInfo"); + return (Criteria) this; + } + + public Criteria andPlatformKeyInfoNotLike(String value) { + addCriterion("platform_key_info not like", value, "platformKeyInfo"); + return (Criteria) this; + } + + public Criteria andPlatformKeyInfoIn(List values) { + addCriterion("platform_key_info in", values, "platformKeyInfo"); + return (Criteria) this; + } + + public Criteria andPlatformKeyInfoNotIn(List values) { + addCriterion("platform_key_info not in", values, "platformKeyInfo"); + return (Criteria) this; + } + + public Criteria andPlatformKeyInfoBetween(String value1, String value2) { + addCriterion("platform_key_info between", value1, value2, "platformKeyInfo"); + return (Criteria) this; + } + + public Criteria andPlatformKeyInfoNotBetween(String value1, String value2) { + addCriterion("platform_key_info not between", value1, value2, "platformKeyInfo"); + return (Criteria) this; + } + + public Criteria andPlatformValueIsNull() { + addCriterion("platform_value is null"); + return (Criteria) this; + } + + public Criteria andPlatformValueIsNotNull() { + addCriterion("platform_value is not null"); + return (Criteria) this; + } + + public Criteria andPlatformValueEqualTo(String value) { + addCriterion("platform_value =", value, "platformValue"); + return (Criteria) this; + } + + public Criteria andPlatformValueNotEqualTo(String value) { + addCriterion("platform_value <>", value, "platformValue"); + return (Criteria) this; + } + + public Criteria andPlatformValueGreaterThan(String value) { + addCriterion("platform_value >", value, "platformValue"); + return (Criteria) this; + } + + public Criteria andPlatformValueGreaterThanOrEqualTo(String value) { + addCriterion("platform_value >=", value, "platformValue"); + return (Criteria) this; + } + + public Criteria andPlatformValueLessThan(String value) { + addCriterion("platform_value <", value, "platformValue"); + return (Criteria) this; + } + + public Criteria andPlatformValueLessThanOrEqualTo(String value) { + addCriterion("platform_value <=", value, "platformValue"); + return (Criteria) this; + } + + public Criteria andPlatformValueLike(String value) { + addCriterion("platform_value like", value, "platformValue"); + return (Criteria) this; + } + + public Criteria andPlatformValueNotLike(String value) { + addCriterion("platform_value not like", value, "platformValue"); + return (Criteria) this; + } + + public Criteria andPlatformValueIn(List values) { + addCriterion("platform_value in", values, "platformValue"); + return (Criteria) this; + } + + public Criteria andPlatformValueNotIn(List values) { + addCriterion("platform_value not in", values, "platformValue"); + return (Criteria) this; + } + + public Criteria andPlatformValueBetween(String value1, String value2) { + addCriterion("platform_value between", value1, value2, "platformValue"); + return (Criteria) this; + } + + public Criteria andPlatformValueNotBetween(String value1, String value2) { + addCriterion("platform_value not between", value1, value2, "platformValue"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Role.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Role.java new file mode 100644 index 000000000..a68474be3 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Role.java @@ -0,0 +1,73 @@ +package com.jsh.erp.datasource.entities; + +public class Role { + private Long id; + + private String name; + + private String type; + + private String value; + + private String description; + + private Long tenantId; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type == null ? null : type.trim(); + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value == null ? null : value.trim(); + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description == null ? null : description.trim(); + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/RoleExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/RoleExample.java new file mode 100644 index 000000000..2cb98ccad --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/RoleExample.java @@ -0,0 +1,669 @@ +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.List; + +public class RoleExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public RoleExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("name is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("name is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("name =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("name <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("name >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("name >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("name <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("name <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("name like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("name not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("name in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("name not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("name between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("name not between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andTypeIsNull() { + addCriterion("type is null"); + return (Criteria) this; + } + + public Criteria andTypeIsNotNull() { + addCriterion("type is not null"); + return (Criteria) this; + } + + public Criteria andTypeEqualTo(String value) { + addCriterion("type =", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotEqualTo(String value) { + addCriterion("type <>", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThan(String value) { + addCriterion("type >", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThanOrEqualTo(String value) { + addCriterion("type >=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThan(String value) { + addCriterion("type <", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThanOrEqualTo(String value) { + addCriterion("type <=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLike(String value) { + addCriterion("type like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotLike(String value) { + addCriterion("type not like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeIn(List values) { + addCriterion("type in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotIn(List values) { + addCriterion("type not in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeBetween(String value1, String value2) { + addCriterion("type between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotBetween(String value1, String value2) { + addCriterion("type not between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andValueIsNull() { + addCriterion("value is null"); + return (Criteria) this; + } + + public Criteria andValueIsNotNull() { + addCriterion("value is not null"); + return (Criteria) this; + } + + public Criteria andValueEqualTo(String value) { + addCriterion("value =", value, "value"); + return (Criteria) this; + } + + public Criteria andValueNotEqualTo(String value) { + addCriterion("value <>", value, "value"); + return (Criteria) this; + } + + public Criteria andValueGreaterThan(String value) { + addCriterion("value >", value, "value"); + return (Criteria) this; + } + + public Criteria andValueGreaterThanOrEqualTo(String value) { + addCriterion("value >=", value, "value"); + return (Criteria) this; + } + + public Criteria andValueLessThan(String value) { + addCriterion("value <", value, "value"); + return (Criteria) this; + } + + public Criteria andValueLessThanOrEqualTo(String value) { + addCriterion("value <=", value, "value"); + return (Criteria) this; + } + + public Criteria andValueLike(String value) { + addCriterion("value like", value, "value"); + return (Criteria) this; + } + + public Criteria andValueNotLike(String value) { + addCriterion("value not like", value, "value"); + return (Criteria) this; + } + + public Criteria andValueIn(List values) { + addCriterion("value in", values, "value"); + return (Criteria) this; + } + + public Criteria andValueNotIn(List values) { + addCriterion("value not in", values, "value"); + return (Criteria) this; + } + + public Criteria andValueBetween(String value1, String value2) { + addCriterion("value between", value1, value2, "value"); + return (Criteria) this; + } + + public Criteria andValueNotBetween(String value1, String value2) { + addCriterion("value not between", value1, value2, "value"); + return (Criteria) this; + } + + public Criteria andDescriptionIsNull() { + addCriterion("description is null"); + return (Criteria) this; + } + + public Criteria andDescriptionIsNotNull() { + addCriterion("description is not null"); + return (Criteria) this; + } + + public Criteria andDescriptionEqualTo(String value) { + addCriterion("description =", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotEqualTo(String value) { + addCriterion("description <>", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionGreaterThan(String value) { + addCriterion("description >", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionGreaterThanOrEqualTo(String value) { + addCriterion("description >=", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLessThan(String value) { + addCriterion("description <", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLessThanOrEqualTo(String value) { + addCriterion("description <=", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLike(String value) { + addCriterion("description like", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotLike(String value) { + addCriterion("description not like", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionIn(List values) { + addCriterion("description in", values, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotIn(List values) { + addCriterion("description not in", values, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionBetween(String value1, String value2) { + addCriterion("description between", value1, value2, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotBetween(String value1, String value2) { + addCriterion("description not between", value1, value2, "description"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SerialNumber.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SerialNumber.java new file mode 100644 index 000000000..3a90195f7 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SerialNumber.java @@ -0,0 +1,125 @@ +package com.jsh.erp.datasource.entities; + +import java.util.Date; + +public class SerialNumber { + private Long id; + + private Long materialId; + + private String serialNumber; + + private String isSell; + + private String remark; + + private String deleteFlag; + + private Date createTime; + + private Long creator; + + private Date updateTime; + + private Long updater; + + private Long depotHeadId; + + private Long tenantId; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getMaterialId() { + return materialId; + } + + public void setMaterialId(Long materialId) { + this.materialId = materialId; + } + + public String getSerialNumber() { + return serialNumber; + } + + public void setSerialNumber(String serialNumber) { + this.serialNumber = serialNumber == null ? null : serialNumber.trim(); + } + + public String getIsSell() { + return isSell; + } + + public void setIsSell(String isSell) { + this.isSell = isSell == null ? null : isSell.trim(); + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Long getCreator() { + return creator; + } + + public void setCreator(Long creator) { + this.creator = creator; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Long getUpdater() { + return updater; + } + + public void setUpdater(Long updater) { + this.updater = updater; + } + + public Long getDepotHeadId() { + return depotHeadId; + } + + public void setDepotHeadId(Long depotHeadId) { + this.depotHeadId = depotHeadId; + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SerialNumberEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SerialNumberEx.java new file mode 100644 index 000000000..c57924939 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SerialNumberEx.java @@ -0,0 +1,78 @@ +package com.jsh.erp.datasource.entities; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/1/21 17:32 + */ +public class SerialNumberEx extends SerialNumber{ + /** + * 商品条码 + * */ + private String materialCode; + /** + * 商品名称 + * */ + private String materialName; + /** + * 创建者名称 + * */ + private String creatorName; + /** + * 更新者名称 + * */ + private String updaterName; + /**单据编号*/ + private String depotHeadNumber; + /**单据类型(出库入库)*/ + private String depotHeadType; + + public String getMaterialCode() { + return materialCode; + } + + public void setMaterialCode(String materialCode) { + this.materialCode = materialCode; + } + + public String getMaterialName() { + return materialName; + } + + public void setMaterialName(String materialName) { + this.materialName = materialName; + } + + public String getCreatorName() { + return creatorName; + } + + public void setCreatorName(String creatorName) { + this.creatorName = creatorName; + } + + public String getUpdaterName() { + return updaterName; + } + + public void setUpdaterName(String updaterName) { + this.updaterName = updaterName; + } + + public String getDepotHeadNumber() { + return depotHeadNumber; + } + + public void setDepotHeadNumber(String depotHeadNumber) { + this.depotHeadNumber = depotHeadNumber; + } + + public String getDepotHeadType() { + return depotHeadType; + } + + public void setDepotHeadType(String depotHeadType) { + this.depotHeadType = depotHeadType; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SerialNumberExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SerialNumberExample.java new file mode 100644 index 000000000..579761477 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SerialNumberExample.java @@ -0,0 +1,960 @@ +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class SerialNumberExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public SerialNumberExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andMaterialIdIsNull() { + addCriterion("material_id is null"); + return (Criteria) this; + } + + public Criteria andMaterialIdIsNotNull() { + addCriterion("material_id is not null"); + return (Criteria) this; + } + + public Criteria andMaterialIdEqualTo(Long value) { + addCriterion("material_id =", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdNotEqualTo(Long value) { + addCriterion("material_id <>", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdGreaterThan(Long value) { + addCriterion("material_id >", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdGreaterThanOrEqualTo(Long value) { + addCriterion("material_id >=", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdLessThan(Long value) { + addCriterion("material_id <", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdLessThanOrEqualTo(Long value) { + addCriterion("material_id <=", value, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdIn(List values) { + addCriterion("material_id in", values, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdNotIn(List values) { + addCriterion("material_id not in", values, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdBetween(Long value1, Long value2) { + addCriterion("material_id between", value1, value2, "materialId"); + return (Criteria) this; + } + + public Criteria andMaterialIdNotBetween(Long value1, Long value2) { + addCriterion("material_id not between", value1, value2, "materialId"); + return (Criteria) this; + } + + public Criteria andSerialNumberIsNull() { + addCriterion("serial_number is null"); + return (Criteria) this; + } + + public Criteria andSerialNumberIsNotNull() { + addCriterion("serial_number is not null"); + return (Criteria) this; + } + + public Criteria andSerialNumberEqualTo(String value) { + addCriterion("serial_number =", value, "serialNumber"); + return (Criteria) this; + } + + public Criteria andSerialNumberNotEqualTo(String value) { + addCriterion("serial_number <>", value, "serialNumber"); + return (Criteria) this; + } + + public Criteria andSerialNumberGreaterThan(String value) { + addCriterion("serial_number >", value, "serialNumber"); + return (Criteria) this; + } + + public Criteria andSerialNumberGreaterThanOrEqualTo(String value) { + addCriterion("serial_number >=", value, "serialNumber"); + return (Criteria) this; + } + + public Criteria andSerialNumberLessThan(String value) { + addCriterion("serial_number <", value, "serialNumber"); + return (Criteria) this; + } + + public Criteria andSerialNumberLessThanOrEqualTo(String value) { + addCriterion("serial_number <=", value, "serialNumber"); + return (Criteria) this; + } + + public Criteria andSerialNumberLike(String value) { + addCriterion("serial_number like", value, "serialNumber"); + return (Criteria) this; + } + + public Criteria andSerialNumberNotLike(String value) { + addCriterion("serial_number not like", value, "serialNumber"); + return (Criteria) this; + } + + public Criteria andSerialNumberIn(List values) { + addCriterion("serial_number in", values, "serialNumber"); + return (Criteria) this; + } + + public Criteria andSerialNumberNotIn(List values) { + addCriterion("serial_number not in", values, "serialNumber"); + return (Criteria) this; + } + + public Criteria andSerialNumberBetween(String value1, String value2) { + addCriterion("serial_number between", value1, value2, "serialNumber"); + return (Criteria) this; + } + + public Criteria andSerialNumberNotBetween(String value1, String value2) { + addCriterion("serial_number not between", value1, value2, "serialNumber"); + return (Criteria) this; + } + + public Criteria andIsSellIsNull() { + addCriterion("is_sell is null"); + return (Criteria) this; + } + + public Criteria andIsSellIsNotNull() { + addCriterion("is_sell is not null"); + return (Criteria) this; + } + + public Criteria andIsSellEqualTo(String value) { + addCriterion("is_sell =", value, "isSell"); + return (Criteria) this; + } + + public Criteria andIsSellNotEqualTo(String value) { + addCriterion("is_sell <>", value, "isSell"); + return (Criteria) this; + } + + public Criteria andIsSellGreaterThan(String value) { + addCriterion("is_sell >", value, "isSell"); + return (Criteria) this; + } + + public Criteria andIsSellGreaterThanOrEqualTo(String value) { + addCriterion("is_sell >=", value, "isSell"); + return (Criteria) this; + } + + public Criteria andIsSellLessThan(String value) { + addCriterion("is_sell <", value, "isSell"); + return (Criteria) this; + } + + public Criteria andIsSellLessThanOrEqualTo(String value) { + addCriterion("is_sell <=", value, "isSell"); + return (Criteria) this; + } + + public Criteria andIsSellLike(String value) { + addCriterion("is_sell like", value, "isSell"); + return (Criteria) this; + } + + public Criteria andIsSellNotLike(String value) { + addCriterion("is_sell not like", value, "isSell"); + return (Criteria) this; + } + + public Criteria andIsSellIn(List values) { + addCriterion("is_sell in", values, "isSell"); + return (Criteria) this; + } + + public Criteria andIsSellNotIn(List values) { + addCriterion("is_sell not in", values, "isSell"); + return (Criteria) this; + } + + public Criteria andIsSellBetween(String value1, String value2) { + addCriterion("is_sell between", value1, value2, "isSell"); + return (Criteria) this; + } + + public Criteria andIsSellNotBetween(String value1, String value2) { + addCriterion("is_sell not between", value1, value2, "isSell"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreatorIsNull() { + addCriterion("creator is null"); + return (Criteria) this; + } + + public Criteria andCreatorIsNotNull() { + addCriterion("creator is not null"); + return (Criteria) this; + } + + public Criteria andCreatorEqualTo(Long value) { + addCriterion("creator =", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorNotEqualTo(Long value) { + addCriterion("creator <>", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorGreaterThan(Long value) { + addCriterion("creator >", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorGreaterThanOrEqualTo(Long value) { + addCriterion("creator >=", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorLessThan(Long value) { + addCriterion("creator <", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorLessThanOrEqualTo(Long value) { + addCriterion("creator <=", value, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorIn(List values) { + addCriterion("creator in", values, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorNotIn(List values) { + addCriterion("creator not in", values, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorBetween(Long value1, Long value2) { + addCriterion("creator between", value1, value2, "creator"); + return (Criteria) this; + } + + public Criteria andCreatorNotBetween(Long value1, Long value2) { + addCriterion("creator not between", value1, value2, "creator"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNull() { + addCriterion("update_time is null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIsNotNull() { + addCriterion("update_time is not null"); + return (Criteria) this; + } + + public Criteria andUpdateTimeEqualTo(Date value) { + addCriterion("update_time =", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotEqualTo(Date value) { + addCriterion("update_time <>", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThan(Date value) { + addCriterion("update_time >", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("update_time >=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThan(Date value) { + addCriterion("update_time <", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeLessThanOrEqualTo(Date value) { + addCriterion("update_time <=", value, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeIn(List values) { + addCriterion("update_time in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotIn(List values) { + addCriterion("update_time not in", values, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeBetween(Date value1, Date value2) { + addCriterion("update_time between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdateTimeNotBetween(Date value1, Date value2) { + addCriterion("update_time not between", value1, value2, "updateTime"); + return (Criteria) this; + } + + public Criteria andUpdaterIsNull() { + addCriterion("updater is null"); + return (Criteria) this; + } + + public Criteria andUpdaterIsNotNull() { + addCriterion("updater is not null"); + return (Criteria) this; + } + + public Criteria andUpdaterEqualTo(Long value) { + addCriterion("updater =", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterNotEqualTo(Long value) { + addCriterion("updater <>", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterGreaterThan(Long value) { + addCriterion("updater >", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterGreaterThanOrEqualTo(Long value) { + addCriterion("updater >=", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterLessThan(Long value) { + addCriterion("updater <", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterLessThanOrEqualTo(Long value) { + addCriterion("updater <=", value, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterIn(List values) { + addCriterion("updater in", values, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterNotIn(List values) { + addCriterion("updater not in", values, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterBetween(Long value1, Long value2) { + addCriterion("updater between", value1, value2, "updater"); + return (Criteria) this; + } + + public Criteria andUpdaterNotBetween(Long value1, Long value2) { + addCriterion("updater not between", value1, value2, "updater"); + return (Criteria) this; + } + + public Criteria andDepotHeadIdIsNull() { + addCriterion("depot_head_id is null"); + return (Criteria) this; + } + + public Criteria andDepotHeadIdIsNotNull() { + addCriterion("depot_head_id is not null"); + return (Criteria) this; + } + + public Criteria andDepotHeadIdEqualTo(Long value) { + addCriterion("depot_head_id =", value, "depotHeadId"); + return (Criteria) this; + } + + public Criteria andDepotHeadIdNotEqualTo(Long value) { + addCriterion("depot_head_id <>", value, "depotHeadId"); + return (Criteria) this; + } + + public Criteria andDepotHeadIdGreaterThan(Long value) { + addCriterion("depot_head_id >", value, "depotHeadId"); + return (Criteria) this; + } + + public Criteria andDepotHeadIdGreaterThanOrEqualTo(Long value) { + addCriterion("depot_head_id >=", value, "depotHeadId"); + return (Criteria) this; + } + + public Criteria andDepotHeadIdLessThan(Long value) { + addCriterion("depot_head_id <", value, "depotHeadId"); + return (Criteria) this; + } + + public Criteria andDepotHeadIdLessThanOrEqualTo(Long value) { + addCriterion("depot_head_id <=", value, "depotHeadId"); + return (Criteria) this; + } + + public Criteria andDepotHeadIdIn(List values) { + addCriterion("depot_head_id in", values, "depotHeadId"); + return (Criteria) this; + } + + public Criteria andDepotHeadIdNotIn(List values) { + addCriterion("depot_head_id not in", values, "depotHeadId"); + return (Criteria) this; + } + + public Criteria andDepotHeadIdBetween(Long value1, Long value2) { + addCriterion("depot_head_id between", value1, value2, "depotHeadId"); + return (Criteria) this; + } + + public Criteria andDepotHeadIdNotBetween(Long value1, Long value2) { + addCriterion("depot_head_id not between", value1, value2, "depotHeadId"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Supplier.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Supplier.java new file mode 100644 index 000000000..975457a7b --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Supplier.java @@ -0,0 +1,235 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; + +public class Supplier { + private Long id; + + private String supplier; + + private String contacts; + + private String phoneNum; + + private String email; + + private String description; + + private Byte isystem; + + private String type; + + private Boolean enabled; + + private BigDecimal advanceIn; + + private BigDecimal beginNeedGet; + + private BigDecimal beginNeedPay; + + private BigDecimal allNeedGet; + + private BigDecimal allNeedPay; + + private String fax; + + private String telephone; + + private String address; + + private String taxNum; + + private String bankName; + + private String accountNumber; + + private BigDecimal taxRate; + + private Long tenantId; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSupplier() { + return supplier; + } + + public void setSupplier(String supplier) { + this.supplier = supplier == null ? null : supplier.trim(); + } + + public String getContacts() { + return contacts; + } + + public void setContacts(String contacts) { + this.contacts = contacts == null ? null : contacts.trim(); + } + + public String getPhoneNum() { + return phoneNum; + } + + public void setPhoneNum(String phoneNum) { + this.phoneNum = phoneNum == null ? null : phoneNum.trim(); + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email == null ? null : email.trim(); + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description == null ? null : description.trim(); + } + + public Byte getIsystem() { + return isystem; + } + + public void setIsystem(Byte isystem) { + this.isystem = isystem; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type == null ? null : type.trim(); + } + + public Boolean getEnabled() { + return enabled; + } + + public void setEnabled(Boolean enabled) { + this.enabled = enabled; + } + + public BigDecimal getAdvanceIn() { + return advanceIn; + } + + public void setAdvanceIn(BigDecimal advanceIn) { + this.advanceIn = advanceIn; + } + + public BigDecimal getBeginNeedGet() { + return beginNeedGet; + } + + public void setBeginNeedGet(BigDecimal beginNeedGet) { + this.beginNeedGet = beginNeedGet; + } + + public BigDecimal getBeginNeedPay() { + return beginNeedPay; + } + + public void setBeginNeedPay(BigDecimal beginNeedPay) { + this.beginNeedPay = beginNeedPay; + } + + public BigDecimal getAllNeedGet() { + return allNeedGet; + } + + public void setAllNeedGet(BigDecimal allNeedGet) { + this.allNeedGet = allNeedGet; + } + + public BigDecimal getAllNeedPay() { + return allNeedPay; + } + + public void setAllNeedPay(BigDecimal allNeedPay) { + this.allNeedPay = allNeedPay; + } + + public String getFax() { + return fax; + } + + public void setFax(String fax) { + this.fax = fax == null ? null : fax.trim(); + } + + public String getTelephone() { + return telephone; + } + + public void setTelephone(String telephone) { + this.telephone = telephone == null ? null : telephone.trim(); + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address == null ? null : address.trim(); + } + + public String getTaxNum() { + return taxNum; + } + + public void setTaxNum(String taxNum) { + this.taxNum = taxNum == null ? null : taxNum.trim(); + } + + public String getBankName() { + return bankName; + } + + public void setBankName(String bankName) { + this.bankName = bankName == null ? null : bankName.trim(); + } + + public String getAccountNumber() { + return accountNumber; + } + + public void setAccountNumber(String accountNumber) { + this.accountNumber = accountNumber == null ? null : accountNumber.trim(); + } + + public BigDecimal getTaxRate() { + return taxRate; + } + + public void setTaxRate(BigDecimal taxRate) { + this.taxRate = taxRate; + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SupplierExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SupplierExample.java new file mode 100644 index 000000000..1d771e057 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SupplierExample.java @@ -0,0 +1,1710 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +public class SupplierExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public SupplierExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andSupplierIsNull() { + addCriterion("supplier is null"); + return (Criteria) this; + } + + public Criteria andSupplierIsNotNull() { + addCriterion("supplier is not null"); + return (Criteria) this; + } + + public Criteria andSupplierEqualTo(String value) { + addCriterion("supplier =", value, "supplier"); + return (Criteria) this; + } + + public Criteria andSupplierNotEqualTo(String value) { + addCriterion("supplier <>", value, "supplier"); + return (Criteria) this; + } + + public Criteria andSupplierGreaterThan(String value) { + addCriterion("supplier >", value, "supplier"); + return (Criteria) this; + } + + public Criteria andSupplierGreaterThanOrEqualTo(String value) { + addCriterion("supplier >=", value, "supplier"); + return (Criteria) this; + } + + public Criteria andSupplierLessThan(String value) { + addCriterion("supplier <", value, "supplier"); + return (Criteria) this; + } + + public Criteria andSupplierLessThanOrEqualTo(String value) { + addCriterion("supplier <=", value, "supplier"); + return (Criteria) this; + } + + public Criteria andSupplierLike(String value) { + addCriterion("supplier like", value, "supplier"); + return (Criteria) this; + } + + public Criteria andSupplierNotLike(String value) { + addCriterion("supplier not like", value, "supplier"); + return (Criteria) this; + } + + public Criteria andSupplierIn(List values) { + addCriterion("supplier in", values, "supplier"); + return (Criteria) this; + } + + public Criteria andSupplierNotIn(List values) { + addCriterion("supplier not in", values, "supplier"); + return (Criteria) this; + } + + public Criteria andSupplierBetween(String value1, String value2) { + addCriterion("supplier between", value1, value2, "supplier"); + return (Criteria) this; + } + + public Criteria andSupplierNotBetween(String value1, String value2) { + addCriterion("supplier not between", value1, value2, "supplier"); + return (Criteria) this; + } + + public Criteria andContactsIsNull() { + addCriterion("contacts is null"); + return (Criteria) this; + } + + public Criteria andContactsIsNotNull() { + addCriterion("contacts is not null"); + return (Criteria) this; + } + + public Criteria andContactsEqualTo(String value) { + addCriterion("contacts =", value, "contacts"); + return (Criteria) this; + } + + public Criteria andContactsNotEqualTo(String value) { + addCriterion("contacts <>", value, "contacts"); + return (Criteria) this; + } + + public Criteria andContactsGreaterThan(String value) { + addCriterion("contacts >", value, "contacts"); + return (Criteria) this; + } + + public Criteria andContactsGreaterThanOrEqualTo(String value) { + addCriterion("contacts >=", value, "contacts"); + return (Criteria) this; + } + + public Criteria andContactsLessThan(String value) { + addCriterion("contacts <", value, "contacts"); + return (Criteria) this; + } + + public Criteria andContactsLessThanOrEqualTo(String value) { + addCriterion("contacts <=", value, "contacts"); + return (Criteria) this; + } + + public Criteria andContactsLike(String value) { + addCriterion("contacts like", value, "contacts"); + return (Criteria) this; + } + + public Criteria andContactsNotLike(String value) { + addCriterion("contacts not like", value, "contacts"); + return (Criteria) this; + } + + public Criteria andContactsIn(List values) { + addCriterion("contacts in", values, "contacts"); + return (Criteria) this; + } + + public Criteria andContactsNotIn(List values) { + addCriterion("contacts not in", values, "contacts"); + return (Criteria) this; + } + + public Criteria andContactsBetween(String value1, String value2) { + addCriterion("contacts between", value1, value2, "contacts"); + return (Criteria) this; + } + + public Criteria andContactsNotBetween(String value1, String value2) { + addCriterion("contacts not between", value1, value2, "contacts"); + return (Criteria) this; + } + + public Criteria andPhoneNumIsNull() { + addCriterion("phone_num is null"); + return (Criteria) this; + } + + public Criteria andPhoneNumIsNotNull() { + addCriterion("phone_num is not null"); + return (Criteria) this; + } + + public Criteria andPhoneNumEqualTo(String value) { + addCriterion("phone_num =", value, "phoneNum"); + return (Criteria) this; + } + + public Criteria andPhoneNumNotEqualTo(String value) { + addCriterion("phone_num <>", value, "phoneNum"); + return (Criteria) this; + } + + public Criteria andPhoneNumGreaterThan(String value) { + addCriterion("phone_num >", value, "phoneNum"); + return (Criteria) this; + } + + public Criteria andPhoneNumGreaterThanOrEqualTo(String value) { + addCriterion("phone_num >=", value, "phoneNum"); + return (Criteria) this; + } + + public Criteria andPhoneNumLessThan(String value) { + addCriterion("phone_num <", value, "phoneNum"); + return (Criteria) this; + } + + public Criteria andPhoneNumLessThanOrEqualTo(String value) { + addCriterion("phone_num <=", value, "phoneNum"); + return (Criteria) this; + } + + public Criteria andPhoneNumLike(String value) { + addCriterion("phone_num like", value, "phoneNum"); + return (Criteria) this; + } + + public Criteria andPhoneNumNotLike(String value) { + addCriterion("phone_num not like", value, "phoneNum"); + return (Criteria) this; + } + + public Criteria andPhoneNumIn(List values) { + addCriterion("phone_num in", values, "phoneNum"); + return (Criteria) this; + } + + public Criteria andPhoneNumNotIn(List values) { + addCriterion("phone_num not in", values, "phoneNum"); + return (Criteria) this; + } + + public Criteria andPhoneNumBetween(String value1, String value2) { + addCriterion("phone_num between", value1, value2, "phoneNum"); + return (Criteria) this; + } + + public Criteria andPhoneNumNotBetween(String value1, String value2) { + addCriterion("phone_num not between", value1, value2, "phoneNum"); + return (Criteria) this; + } + + public Criteria andEmailIsNull() { + addCriterion("email is null"); + return (Criteria) this; + } + + public Criteria andEmailIsNotNull() { + addCriterion("email is not null"); + return (Criteria) this; + } + + public Criteria andEmailEqualTo(String value) { + addCriterion("email =", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailNotEqualTo(String value) { + addCriterion("email <>", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailGreaterThan(String value) { + addCriterion("email >", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailGreaterThanOrEqualTo(String value) { + addCriterion("email >=", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailLessThan(String value) { + addCriterion("email <", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailLessThanOrEqualTo(String value) { + addCriterion("email <=", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailLike(String value) { + addCriterion("email like", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailNotLike(String value) { + addCriterion("email not like", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailIn(List values) { + addCriterion("email in", values, "email"); + return (Criteria) this; + } + + public Criteria andEmailNotIn(List values) { + addCriterion("email not in", values, "email"); + return (Criteria) this; + } + + public Criteria andEmailBetween(String value1, String value2) { + addCriterion("email between", value1, value2, "email"); + return (Criteria) this; + } + + public Criteria andEmailNotBetween(String value1, String value2) { + addCriterion("email not between", value1, value2, "email"); + return (Criteria) this; + } + + public Criteria andDescriptionIsNull() { + addCriterion("description is null"); + return (Criteria) this; + } + + public Criteria andDescriptionIsNotNull() { + addCriterion("description is not null"); + return (Criteria) this; + } + + public Criteria andDescriptionEqualTo(String value) { + addCriterion("description =", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotEqualTo(String value) { + addCriterion("description <>", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionGreaterThan(String value) { + addCriterion("description >", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionGreaterThanOrEqualTo(String value) { + addCriterion("description >=", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLessThan(String value) { + addCriterion("description <", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLessThanOrEqualTo(String value) { + addCriterion("description <=", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLike(String value) { + addCriterion("description like", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotLike(String value) { + addCriterion("description not like", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionIn(List values) { + addCriterion("description in", values, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotIn(List values) { + addCriterion("description not in", values, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionBetween(String value1, String value2) { + addCriterion("description between", value1, value2, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotBetween(String value1, String value2) { + addCriterion("description not between", value1, value2, "description"); + return (Criteria) this; + } + + public Criteria andIsystemIsNull() { + addCriterion("isystem is null"); + return (Criteria) this; + } + + public Criteria andIsystemIsNotNull() { + addCriterion("isystem is not null"); + return (Criteria) this; + } + + public Criteria andIsystemEqualTo(Byte value) { + addCriterion("isystem =", value, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemNotEqualTo(Byte value) { + addCriterion("isystem <>", value, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemGreaterThan(Byte value) { + addCriterion("isystem >", value, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemGreaterThanOrEqualTo(Byte value) { + addCriterion("isystem >=", value, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemLessThan(Byte value) { + addCriterion("isystem <", value, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemLessThanOrEqualTo(Byte value) { + addCriterion("isystem <=", value, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemIn(List values) { + addCriterion("isystem in", values, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemNotIn(List values) { + addCriterion("isystem not in", values, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemBetween(Byte value1, Byte value2) { + addCriterion("isystem between", value1, value2, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemNotBetween(Byte value1, Byte value2) { + addCriterion("isystem not between", value1, value2, "isystem"); + return (Criteria) this; + } + + public Criteria andTypeIsNull() { + addCriterion("type is null"); + return (Criteria) this; + } + + public Criteria andTypeIsNotNull() { + addCriterion("type is not null"); + return (Criteria) this; + } + + public Criteria andTypeEqualTo(String value) { + addCriterion("type =", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotEqualTo(String value) { + addCriterion("type <>", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThan(String value) { + addCriterion("type >", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThanOrEqualTo(String value) { + addCriterion("type >=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThan(String value) { + addCriterion("type <", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThanOrEqualTo(String value) { + addCriterion("type <=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLike(String value) { + addCriterion("type like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotLike(String value) { + addCriterion("type not like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeIn(List values) { + addCriterion("type in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotIn(List values) { + addCriterion("type not in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeBetween(String value1, String value2) { + addCriterion("type between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotBetween(String value1, String value2) { + addCriterion("type not between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andEnabledIsNull() { + addCriterion("enabled is null"); + return (Criteria) this; + } + + public Criteria andEnabledIsNotNull() { + addCriterion("enabled is not null"); + return (Criteria) this; + } + + public Criteria andEnabledEqualTo(Boolean value) { + addCriterion("enabled =", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledNotEqualTo(Boolean value) { + addCriterion("enabled <>", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledGreaterThan(Boolean value) { + addCriterion("enabled >", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledGreaterThanOrEqualTo(Boolean value) { + addCriterion("enabled >=", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledLessThan(Boolean value) { + addCriterion("enabled <", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledLessThanOrEqualTo(Boolean value) { + addCriterion("enabled <=", value, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledIn(List values) { + addCriterion("enabled in", values, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledNotIn(List values) { + addCriterion("enabled not in", values, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledBetween(Boolean value1, Boolean value2) { + addCriterion("enabled between", value1, value2, "enabled"); + return (Criteria) this; + } + + public Criteria andEnabledNotBetween(Boolean value1, Boolean value2) { + addCriterion("enabled not between", value1, value2, "enabled"); + return (Criteria) this; + } + + public Criteria andAdvanceInIsNull() { + addCriterion("advance_in is null"); + return (Criteria) this; + } + + public Criteria andAdvanceInIsNotNull() { + addCriterion("advance_in is not null"); + return (Criteria) this; + } + + public Criteria andAdvanceInEqualTo(BigDecimal value) { + addCriterion("advance_in =", value, "advanceIn"); + return (Criteria) this; + } + + public Criteria andAdvanceInNotEqualTo(BigDecimal value) { + addCriterion("advance_in <>", value, "advanceIn"); + return (Criteria) this; + } + + public Criteria andAdvanceInGreaterThan(BigDecimal value) { + addCriterion("advance_in >", value, "advanceIn"); + return (Criteria) this; + } + + public Criteria andAdvanceInGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("advance_in >=", value, "advanceIn"); + return (Criteria) this; + } + + public Criteria andAdvanceInLessThan(BigDecimal value) { + addCriterion("advance_in <", value, "advanceIn"); + return (Criteria) this; + } + + public Criteria andAdvanceInLessThanOrEqualTo(BigDecimal value) { + addCriterion("advance_in <=", value, "advanceIn"); + return (Criteria) this; + } + + public Criteria andAdvanceInIn(List values) { + addCriterion("advance_in in", values, "advanceIn"); + return (Criteria) this; + } + + public Criteria andAdvanceInNotIn(List values) { + addCriterion("advance_in not in", values, "advanceIn"); + return (Criteria) this; + } + + public Criteria andAdvanceInBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("advance_in between", value1, value2, "advanceIn"); + return (Criteria) this; + } + + public Criteria andAdvanceInNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("advance_in not between", value1, value2, "advanceIn"); + return (Criteria) this; + } + + public Criteria andBeginNeedGetIsNull() { + addCriterion("begin_need_get is null"); + return (Criteria) this; + } + + public Criteria andBeginNeedGetIsNotNull() { + addCriterion("begin_need_get is not null"); + return (Criteria) this; + } + + public Criteria andBeginNeedGetEqualTo(BigDecimal value) { + addCriterion("begin_need_get =", value, "beginNeedGet"); + return (Criteria) this; + } + + public Criteria andBeginNeedGetNotEqualTo(BigDecimal value) { + addCriterion("begin_need_get <>", value, "beginNeedGet"); + return (Criteria) this; + } + + public Criteria andBeginNeedGetGreaterThan(BigDecimal value) { + addCriterion("begin_need_get >", value, "beginNeedGet"); + return (Criteria) this; + } + + public Criteria andBeginNeedGetGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("begin_need_get >=", value, "beginNeedGet"); + return (Criteria) this; + } + + public Criteria andBeginNeedGetLessThan(BigDecimal value) { + addCriterion("begin_need_get <", value, "beginNeedGet"); + return (Criteria) this; + } + + public Criteria andBeginNeedGetLessThanOrEqualTo(BigDecimal value) { + addCriterion("begin_need_get <=", value, "beginNeedGet"); + return (Criteria) this; + } + + public Criteria andBeginNeedGetIn(List values) { + addCriterion("begin_need_get in", values, "beginNeedGet"); + return (Criteria) this; + } + + public Criteria andBeginNeedGetNotIn(List values) { + addCriterion("begin_need_get not in", values, "beginNeedGet"); + return (Criteria) this; + } + + public Criteria andBeginNeedGetBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("begin_need_get between", value1, value2, "beginNeedGet"); + return (Criteria) this; + } + + public Criteria andBeginNeedGetNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("begin_need_get not between", value1, value2, "beginNeedGet"); + return (Criteria) this; + } + + public Criteria andBeginNeedPayIsNull() { + addCriterion("begin_need_pay is null"); + return (Criteria) this; + } + + public Criteria andBeginNeedPayIsNotNull() { + addCriterion("begin_need_pay is not null"); + return (Criteria) this; + } + + public Criteria andBeginNeedPayEqualTo(BigDecimal value) { + addCriterion("begin_need_pay =", value, "beginNeedPay"); + return (Criteria) this; + } + + public Criteria andBeginNeedPayNotEqualTo(BigDecimal value) { + addCriterion("begin_need_pay <>", value, "beginNeedPay"); + return (Criteria) this; + } + + public Criteria andBeginNeedPayGreaterThan(BigDecimal value) { + addCriterion("begin_need_pay >", value, "beginNeedPay"); + return (Criteria) this; + } + + public Criteria andBeginNeedPayGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("begin_need_pay >=", value, "beginNeedPay"); + return (Criteria) this; + } + + public Criteria andBeginNeedPayLessThan(BigDecimal value) { + addCriterion("begin_need_pay <", value, "beginNeedPay"); + return (Criteria) this; + } + + public Criteria andBeginNeedPayLessThanOrEqualTo(BigDecimal value) { + addCriterion("begin_need_pay <=", value, "beginNeedPay"); + return (Criteria) this; + } + + public Criteria andBeginNeedPayIn(List values) { + addCriterion("begin_need_pay in", values, "beginNeedPay"); + return (Criteria) this; + } + + public Criteria andBeginNeedPayNotIn(List values) { + addCriterion("begin_need_pay not in", values, "beginNeedPay"); + return (Criteria) this; + } + + public Criteria andBeginNeedPayBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("begin_need_pay between", value1, value2, "beginNeedPay"); + return (Criteria) this; + } + + public Criteria andBeginNeedPayNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("begin_need_pay not between", value1, value2, "beginNeedPay"); + return (Criteria) this; + } + + public Criteria andAllNeedGetIsNull() { + addCriterion("all_need_get is null"); + return (Criteria) this; + } + + public Criteria andAllNeedGetIsNotNull() { + addCriterion("all_need_get is not null"); + return (Criteria) this; + } + + public Criteria andAllNeedGetEqualTo(BigDecimal value) { + addCriterion("all_need_get =", value, "allNeedGet"); + return (Criteria) this; + } + + public Criteria andAllNeedGetNotEqualTo(BigDecimal value) { + addCriterion("all_need_get <>", value, "allNeedGet"); + return (Criteria) this; + } + + public Criteria andAllNeedGetGreaterThan(BigDecimal value) { + addCriterion("all_need_get >", value, "allNeedGet"); + return (Criteria) this; + } + + public Criteria andAllNeedGetGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("all_need_get >=", value, "allNeedGet"); + return (Criteria) this; + } + + public Criteria andAllNeedGetLessThan(BigDecimal value) { + addCriterion("all_need_get <", value, "allNeedGet"); + return (Criteria) this; + } + + public Criteria andAllNeedGetLessThanOrEqualTo(BigDecimal value) { + addCriterion("all_need_get <=", value, "allNeedGet"); + return (Criteria) this; + } + + public Criteria andAllNeedGetIn(List values) { + addCriterion("all_need_get in", values, "allNeedGet"); + return (Criteria) this; + } + + public Criteria andAllNeedGetNotIn(List values) { + addCriterion("all_need_get not in", values, "allNeedGet"); + return (Criteria) this; + } + + public Criteria andAllNeedGetBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("all_need_get between", value1, value2, "allNeedGet"); + return (Criteria) this; + } + + public Criteria andAllNeedGetNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("all_need_get not between", value1, value2, "allNeedGet"); + return (Criteria) this; + } + + public Criteria andAllNeedPayIsNull() { + addCriterion("all_need_pay is null"); + return (Criteria) this; + } + + public Criteria andAllNeedPayIsNotNull() { + addCriterion("all_need_pay is not null"); + return (Criteria) this; + } + + public Criteria andAllNeedPayEqualTo(BigDecimal value) { + addCriterion("all_need_pay =", value, "allNeedPay"); + return (Criteria) this; + } + + public Criteria andAllNeedPayNotEqualTo(BigDecimal value) { + addCriterion("all_need_pay <>", value, "allNeedPay"); + return (Criteria) this; + } + + public Criteria andAllNeedPayGreaterThan(BigDecimal value) { + addCriterion("all_need_pay >", value, "allNeedPay"); + return (Criteria) this; + } + + public Criteria andAllNeedPayGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("all_need_pay >=", value, "allNeedPay"); + return (Criteria) this; + } + + public Criteria andAllNeedPayLessThan(BigDecimal value) { + addCriterion("all_need_pay <", value, "allNeedPay"); + return (Criteria) this; + } + + public Criteria andAllNeedPayLessThanOrEqualTo(BigDecimal value) { + addCriterion("all_need_pay <=", value, "allNeedPay"); + return (Criteria) this; + } + + public Criteria andAllNeedPayIn(List values) { + addCriterion("all_need_pay in", values, "allNeedPay"); + return (Criteria) this; + } + + public Criteria andAllNeedPayNotIn(List values) { + addCriterion("all_need_pay not in", values, "allNeedPay"); + return (Criteria) this; + } + + public Criteria andAllNeedPayBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("all_need_pay between", value1, value2, "allNeedPay"); + return (Criteria) this; + } + + public Criteria andAllNeedPayNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("all_need_pay not between", value1, value2, "allNeedPay"); + return (Criteria) this; + } + + public Criteria andFaxIsNull() { + addCriterion("fax is null"); + return (Criteria) this; + } + + public Criteria andFaxIsNotNull() { + addCriterion("fax is not null"); + return (Criteria) this; + } + + public Criteria andFaxEqualTo(String value) { + addCriterion("fax =", value, "fax"); + return (Criteria) this; + } + + public Criteria andFaxNotEqualTo(String value) { + addCriterion("fax <>", value, "fax"); + return (Criteria) this; + } + + public Criteria andFaxGreaterThan(String value) { + addCriterion("fax >", value, "fax"); + return (Criteria) this; + } + + public Criteria andFaxGreaterThanOrEqualTo(String value) { + addCriterion("fax >=", value, "fax"); + return (Criteria) this; + } + + public Criteria andFaxLessThan(String value) { + addCriterion("fax <", value, "fax"); + return (Criteria) this; + } + + public Criteria andFaxLessThanOrEqualTo(String value) { + addCriterion("fax <=", value, "fax"); + return (Criteria) this; + } + + public Criteria andFaxLike(String value) { + addCriterion("fax like", value, "fax"); + return (Criteria) this; + } + + public Criteria andFaxNotLike(String value) { + addCriterion("fax not like", value, "fax"); + return (Criteria) this; + } + + public Criteria andFaxIn(List values) { + addCriterion("fax in", values, "fax"); + return (Criteria) this; + } + + public Criteria andFaxNotIn(List values) { + addCriterion("fax not in", values, "fax"); + return (Criteria) this; + } + + public Criteria andFaxBetween(String value1, String value2) { + addCriterion("fax between", value1, value2, "fax"); + return (Criteria) this; + } + + public Criteria andFaxNotBetween(String value1, String value2) { + addCriterion("fax not between", value1, value2, "fax"); + return (Criteria) this; + } + + public Criteria andTelephoneIsNull() { + addCriterion("telephone is null"); + return (Criteria) this; + } + + public Criteria andTelephoneIsNotNull() { + addCriterion("telephone is not null"); + return (Criteria) this; + } + + public Criteria andTelephoneEqualTo(String value) { + addCriterion("telephone =", value, "telephone"); + return (Criteria) this; + } + + public Criteria andTelephoneNotEqualTo(String value) { + addCriterion("telephone <>", value, "telephone"); + return (Criteria) this; + } + + public Criteria andTelephoneGreaterThan(String value) { + addCriterion("telephone >", value, "telephone"); + return (Criteria) this; + } + + public Criteria andTelephoneGreaterThanOrEqualTo(String value) { + addCriterion("telephone >=", value, "telephone"); + return (Criteria) this; + } + + public Criteria andTelephoneLessThan(String value) { + addCriterion("telephone <", value, "telephone"); + return (Criteria) this; + } + + public Criteria andTelephoneLessThanOrEqualTo(String value) { + addCriterion("telephone <=", value, "telephone"); + return (Criteria) this; + } + + public Criteria andTelephoneLike(String value) { + addCriterion("telephone like", value, "telephone"); + return (Criteria) this; + } + + public Criteria andTelephoneNotLike(String value) { + addCriterion("telephone not like", value, "telephone"); + return (Criteria) this; + } + + public Criteria andTelephoneIn(List values) { + addCriterion("telephone in", values, "telephone"); + return (Criteria) this; + } + + public Criteria andTelephoneNotIn(List values) { + addCriterion("telephone not in", values, "telephone"); + return (Criteria) this; + } + + public Criteria andTelephoneBetween(String value1, String value2) { + addCriterion("telephone between", value1, value2, "telephone"); + return (Criteria) this; + } + + public Criteria andTelephoneNotBetween(String value1, String value2) { + addCriterion("telephone not between", value1, value2, "telephone"); + return (Criteria) this; + } + + public Criteria andAddressIsNull() { + addCriterion("address is null"); + return (Criteria) this; + } + + public Criteria andAddressIsNotNull() { + addCriterion("address is not null"); + return (Criteria) this; + } + + public Criteria andAddressEqualTo(String value) { + addCriterion("address =", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressNotEqualTo(String value) { + addCriterion("address <>", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressGreaterThan(String value) { + addCriterion("address >", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressGreaterThanOrEqualTo(String value) { + addCriterion("address >=", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressLessThan(String value) { + addCriterion("address <", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressLessThanOrEqualTo(String value) { + addCriterion("address <=", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressLike(String value) { + addCriterion("address like", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressNotLike(String value) { + addCriterion("address not like", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressIn(List values) { + addCriterion("address in", values, "address"); + return (Criteria) this; + } + + public Criteria andAddressNotIn(List values) { + addCriterion("address not in", values, "address"); + return (Criteria) this; + } + + public Criteria andAddressBetween(String value1, String value2) { + addCriterion("address between", value1, value2, "address"); + return (Criteria) this; + } + + public Criteria andAddressNotBetween(String value1, String value2) { + addCriterion("address not between", value1, value2, "address"); + return (Criteria) this; + } + + public Criteria andTaxNumIsNull() { + addCriterion("tax_num is null"); + return (Criteria) this; + } + + public Criteria andTaxNumIsNotNull() { + addCriterion("tax_num is not null"); + return (Criteria) this; + } + + public Criteria andTaxNumEqualTo(String value) { + addCriterion("tax_num =", value, "taxNum"); + return (Criteria) this; + } + + public Criteria andTaxNumNotEqualTo(String value) { + addCriterion("tax_num <>", value, "taxNum"); + return (Criteria) this; + } + + public Criteria andTaxNumGreaterThan(String value) { + addCriterion("tax_num >", value, "taxNum"); + return (Criteria) this; + } + + public Criteria andTaxNumGreaterThanOrEqualTo(String value) { + addCriterion("tax_num >=", value, "taxNum"); + return (Criteria) this; + } + + public Criteria andTaxNumLessThan(String value) { + addCriterion("tax_num <", value, "taxNum"); + return (Criteria) this; + } + + public Criteria andTaxNumLessThanOrEqualTo(String value) { + addCriterion("tax_num <=", value, "taxNum"); + return (Criteria) this; + } + + public Criteria andTaxNumLike(String value) { + addCriterion("tax_num like", value, "taxNum"); + return (Criteria) this; + } + + public Criteria andTaxNumNotLike(String value) { + addCriterion("tax_num not like", value, "taxNum"); + return (Criteria) this; + } + + public Criteria andTaxNumIn(List values) { + addCriterion("tax_num in", values, "taxNum"); + return (Criteria) this; + } + + public Criteria andTaxNumNotIn(List values) { + addCriterion("tax_num not in", values, "taxNum"); + return (Criteria) this; + } + + public Criteria andTaxNumBetween(String value1, String value2) { + addCriterion("tax_num between", value1, value2, "taxNum"); + return (Criteria) this; + } + + public Criteria andTaxNumNotBetween(String value1, String value2) { + addCriterion("tax_num not between", value1, value2, "taxNum"); + return (Criteria) this; + } + + public Criteria andBankNameIsNull() { + addCriterion("bank_name is null"); + return (Criteria) this; + } + + public Criteria andBankNameIsNotNull() { + addCriterion("bank_name is not null"); + return (Criteria) this; + } + + public Criteria andBankNameEqualTo(String value) { + addCriterion("bank_name =", value, "bankName"); + return (Criteria) this; + } + + public Criteria andBankNameNotEqualTo(String value) { + addCriterion("bank_name <>", value, "bankName"); + return (Criteria) this; + } + + public Criteria andBankNameGreaterThan(String value) { + addCriterion("bank_name >", value, "bankName"); + return (Criteria) this; + } + + public Criteria andBankNameGreaterThanOrEqualTo(String value) { + addCriterion("bank_name >=", value, "bankName"); + return (Criteria) this; + } + + public Criteria andBankNameLessThan(String value) { + addCriterion("bank_name <", value, "bankName"); + return (Criteria) this; + } + + public Criteria andBankNameLessThanOrEqualTo(String value) { + addCriterion("bank_name <=", value, "bankName"); + return (Criteria) this; + } + + public Criteria andBankNameLike(String value) { + addCriterion("bank_name like", value, "bankName"); + return (Criteria) this; + } + + public Criteria andBankNameNotLike(String value) { + addCriterion("bank_name not like", value, "bankName"); + return (Criteria) this; + } + + public Criteria andBankNameIn(List values) { + addCriterion("bank_name in", values, "bankName"); + return (Criteria) this; + } + + public Criteria andBankNameNotIn(List values) { + addCriterion("bank_name not in", values, "bankName"); + return (Criteria) this; + } + + public Criteria andBankNameBetween(String value1, String value2) { + addCriterion("bank_name between", value1, value2, "bankName"); + return (Criteria) this; + } + + public Criteria andBankNameNotBetween(String value1, String value2) { + addCriterion("bank_name not between", value1, value2, "bankName"); + return (Criteria) this; + } + + public Criteria andAccountNumberIsNull() { + addCriterion("account_number is null"); + return (Criteria) this; + } + + public Criteria andAccountNumberIsNotNull() { + addCriterion("account_number is not null"); + return (Criteria) this; + } + + public Criteria andAccountNumberEqualTo(String value) { + addCriterion("account_number =", value, "accountNumber"); + return (Criteria) this; + } + + public Criteria andAccountNumberNotEqualTo(String value) { + addCriterion("account_number <>", value, "accountNumber"); + return (Criteria) this; + } + + public Criteria andAccountNumberGreaterThan(String value) { + addCriterion("account_number >", value, "accountNumber"); + return (Criteria) this; + } + + public Criteria andAccountNumberGreaterThanOrEqualTo(String value) { + addCriterion("account_number >=", value, "accountNumber"); + return (Criteria) this; + } + + public Criteria andAccountNumberLessThan(String value) { + addCriterion("account_number <", value, "accountNumber"); + return (Criteria) this; + } + + public Criteria andAccountNumberLessThanOrEqualTo(String value) { + addCriterion("account_number <=", value, "accountNumber"); + return (Criteria) this; + } + + public Criteria andAccountNumberLike(String value) { + addCriterion("account_number like", value, "accountNumber"); + return (Criteria) this; + } + + public Criteria andAccountNumberNotLike(String value) { + addCriterion("account_number not like", value, "accountNumber"); + return (Criteria) this; + } + + public Criteria andAccountNumberIn(List values) { + addCriterion("account_number in", values, "accountNumber"); + return (Criteria) this; + } + + public Criteria andAccountNumberNotIn(List values) { + addCriterion("account_number not in", values, "accountNumber"); + return (Criteria) this; + } + + public Criteria andAccountNumberBetween(String value1, String value2) { + addCriterion("account_number between", value1, value2, "accountNumber"); + return (Criteria) this; + } + + public Criteria andAccountNumberNotBetween(String value1, String value2) { + addCriterion("account_number not between", value1, value2, "accountNumber"); + return (Criteria) this; + } + + public Criteria andTaxRateIsNull() { + addCriterion("tax_rate is null"); + return (Criteria) this; + } + + public Criteria andTaxRateIsNotNull() { + addCriterion("tax_rate is not null"); + return (Criteria) this; + } + + public Criteria andTaxRateEqualTo(BigDecimal value) { + addCriterion("tax_rate =", value, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateNotEqualTo(BigDecimal value) { + addCriterion("tax_rate <>", value, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateGreaterThan(BigDecimal value) { + addCriterion("tax_rate >", value, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("tax_rate >=", value, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateLessThan(BigDecimal value) { + addCriterion("tax_rate <", value, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateLessThanOrEqualTo(BigDecimal value) { + addCriterion("tax_rate <=", value, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateIn(List values) { + addCriterion("tax_rate in", values, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateNotIn(List values) { + addCriterion("tax_rate not in", values, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("tax_rate between", value1, value2, "taxRate"); + return (Criteria) this; + } + + public Criteria andTaxRateNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("tax_rate not between", value1, value2, "taxRate"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SysLoginModel.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SysLoginModel.java new file mode 100644 index 000000000..6d5bb7a06 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SysLoginModel.java @@ -0,0 +1,55 @@ +package com.jsh.erp.datasource.entities; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 登录表单 + * + * @Author scott + * @since 2019-01-18 + */ +@ApiModel(value="登录对象", description="登录对象") +public class SysLoginModel { + @ApiModelProperty(value = "账号") + private String username; + @ApiModelProperty(value = "密码") + private String password; + @ApiModelProperty(value = "验证码") + private String captcha; + @ApiModelProperty(value = "验证码key") + private String checkKey; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getCaptcha() { + return captcha; + } + + public void setCaptcha(String captcha) { + this.captcha = captcha; + } + + public String getCheckKey() { + return checkKey; + } + + public void setCheckKey(String checkKey) { + this.checkKey = checkKey; + } + +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SystemConfig.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SystemConfig.java new file mode 100644 index 000000000..8716b326a --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SystemConfig.java @@ -0,0 +1,123 @@ +package com.jsh.erp.datasource.entities; + +public class SystemConfig { + private Long id; + + private String companyName; + + private String companyContacts; + + private String companyAddress; + + private String companyTel; + + private String companyFax; + + private String companyPostCode; + + private String depotFlag; + + private String customerFlag; + + private String minusStockFlag; + + private Long tenantId; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getCompanyName() { + return companyName; + } + + public void setCompanyName(String companyName) { + this.companyName = companyName == null ? null : companyName.trim(); + } + + public String getCompanyContacts() { + return companyContacts; + } + + public void setCompanyContacts(String companyContacts) { + this.companyContacts = companyContacts == null ? null : companyContacts.trim(); + } + + public String getCompanyAddress() { + return companyAddress; + } + + public void setCompanyAddress(String companyAddress) { + this.companyAddress = companyAddress == null ? null : companyAddress.trim(); + } + + public String getCompanyTel() { + return companyTel; + } + + public void setCompanyTel(String companyTel) { + this.companyTel = companyTel == null ? null : companyTel.trim(); + } + + public String getCompanyFax() { + return companyFax; + } + + public void setCompanyFax(String companyFax) { + this.companyFax = companyFax == null ? null : companyFax.trim(); + } + + public String getCompanyPostCode() { + return companyPostCode; + } + + public void setCompanyPostCode(String companyPostCode) { + this.companyPostCode = companyPostCode == null ? null : companyPostCode.trim(); + } + + public String getDepotFlag() { + return depotFlag; + } + + public void setDepotFlag(String depotFlag) { + this.depotFlag = depotFlag == null ? null : depotFlag.trim(); + } + + public String getCustomerFlag() { + return customerFlag; + } + + public void setCustomerFlag(String customerFlag) { + this.customerFlag = customerFlag == null ? null : customerFlag.trim(); + } + + public String getMinusStockFlag() { + return minusStockFlag; + } + + public void setMinusStockFlag(String minusStockFlag) { + this.minusStockFlag = minusStockFlag == null ? null : minusStockFlag.trim(); + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SystemConfigExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SystemConfigExample.java new file mode 100644 index 000000000..3bd0f12bc --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/SystemConfigExample.java @@ -0,0 +1,1019 @@ +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.List; + +public class SystemConfigExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public SystemConfigExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andCompanyNameIsNull() { + addCriterion("company_name is null"); + return (Criteria) this; + } + + public Criteria andCompanyNameIsNotNull() { + addCriterion("company_name is not null"); + return (Criteria) this; + } + + public Criteria andCompanyNameEqualTo(String value) { + addCriterion("company_name =", value, "companyName"); + return (Criteria) this; + } + + public Criteria andCompanyNameNotEqualTo(String value) { + addCriterion("company_name <>", value, "companyName"); + return (Criteria) this; + } + + public Criteria andCompanyNameGreaterThan(String value) { + addCriterion("company_name >", value, "companyName"); + return (Criteria) this; + } + + public Criteria andCompanyNameGreaterThanOrEqualTo(String value) { + addCriterion("company_name >=", value, "companyName"); + return (Criteria) this; + } + + public Criteria andCompanyNameLessThan(String value) { + addCriterion("company_name <", value, "companyName"); + return (Criteria) this; + } + + public Criteria andCompanyNameLessThanOrEqualTo(String value) { + addCriterion("company_name <=", value, "companyName"); + return (Criteria) this; + } + + public Criteria andCompanyNameLike(String value) { + addCriterion("company_name like", value, "companyName"); + return (Criteria) this; + } + + public Criteria andCompanyNameNotLike(String value) { + addCriterion("company_name not like", value, "companyName"); + return (Criteria) this; + } + + public Criteria andCompanyNameIn(List values) { + addCriterion("company_name in", values, "companyName"); + return (Criteria) this; + } + + public Criteria andCompanyNameNotIn(List values) { + addCriterion("company_name not in", values, "companyName"); + return (Criteria) this; + } + + public Criteria andCompanyNameBetween(String value1, String value2) { + addCriterion("company_name between", value1, value2, "companyName"); + return (Criteria) this; + } + + public Criteria andCompanyNameNotBetween(String value1, String value2) { + addCriterion("company_name not between", value1, value2, "companyName"); + return (Criteria) this; + } + + public Criteria andCompanyContactsIsNull() { + addCriterion("company_contacts is null"); + return (Criteria) this; + } + + public Criteria andCompanyContactsIsNotNull() { + addCriterion("company_contacts is not null"); + return (Criteria) this; + } + + public Criteria andCompanyContactsEqualTo(String value) { + addCriterion("company_contacts =", value, "companyContacts"); + return (Criteria) this; + } + + public Criteria andCompanyContactsNotEqualTo(String value) { + addCriterion("company_contacts <>", value, "companyContacts"); + return (Criteria) this; + } + + public Criteria andCompanyContactsGreaterThan(String value) { + addCriterion("company_contacts >", value, "companyContacts"); + return (Criteria) this; + } + + public Criteria andCompanyContactsGreaterThanOrEqualTo(String value) { + addCriterion("company_contacts >=", value, "companyContacts"); + return (Criteria) this; + } + + public Criteria andCompanyContactsLessThan(String value) { + addCriterion("company_contacts <", value, "companyContacts"); + return (Criteria) this; + } + + public Criteria andCompanyContactsLessThanOrEqualTo(String value) { + addCriterion("company_contacts <=", value, "companyContacts"); + return (Criteria) this; + } + + public Criteria andCompanyContactsLike(String value) { + addCriterion("company_contacts like", value, "companyContacts"); + return (Criteria) this; + } + + public Criteria andCompanyContactsNotLike(String value) { + addCriterion("company_contacts not like", value, "companyContacts"); + return (Criteria) this; + } + + public Criteria andCompanyContactsIn(List values) { + addCriterion("company_contacts in", values, "companyContacts"); + return (Criteria) this; + } + + public Criteria andCompanyContactsNotIn(List values) { + addCriterion("company_contacts not in", values, "companyContacts"); + return (Criteria) this; + } + + public Criteria andCompanyContactsBetween(String value1, String value2) { + addCriterion("company_contacts between", value1, value2, "companyContacts"); + return (Criteria) this; + } + + public Criteria andCompanyContactsNotBetween(String value1, String value2) { + addCriterion("company_contacts not between", value1, value2, "companyContacts"); + return (Criteria) this; + } + + public Criteria andCompanyAddressIsNull() { + addCriterion("company_address is null"); + return (Criteria) this; + } + + public Criteria andCompanyAddressIsNotNull() { + addCriterion("company_address is not null"); + return (Criteria) this; + } + + public Criteria andCompanyAddressEqualTo(String value) { + addCriterion("company_address =", value, "companyAddress"); + return (Criteria) this; + } + + public Criteria andCompanyAddressNotEqualTo(String value) { + addCriterion("company_address <>", value, "companyAddress"); + return (Criteria) this; + } + + public Criteria andCompanyAddressGreaterThan(String value) { + addCriterion("company_address >", value, "companyAddress"); + return (Criteria) this; + } + + public Criteria andCompanyAddressGreaterThanOrEqualTo(String value) { + addCriterion("company_address >=", value, "companyAddress"); + return (Criteria) this; + } + + public Criteria andCompanyAddressLessThan(String value) { + addCriterion("company_address <", value, "companyAddress"); + return (Criteria) this; + } + + public Criteria andCompanyAddressLessThanOrEqualTo(String value) { + addCriterion("company_address <=", value, "companyAddress"); + return (Criteria) this; + } + + public Criteria andCompanyAddressLike(String value) { + addCriterion("company_address like", value, "companyAddress"); + return (Criteria) this; + } + + public Criteria andCompanyAddressNotLike(String value) { + addCriterion("company_address not like", value, "companyAddress"); + return (Criteria) this; + } + + public Criteria andCompanyAddressIn(List values) { + addCriterion("company_address in", values, "companyAddress"); + return (Criteria) this; + } + + public Criteria andCompanyAddressNotIn(List values) { + addCriterion("company_address not in", values, "companyAddress"); + return (Criteria) this; + } + + public Criteria andCompanyAddressBetween(String value1, String value2) { + addCriterion("company_address between", value1, value2, "companyAddress"); + return (Criteria) this; + } + + public Criteria andCompanyAddressNotBetween(String value1, String value2) { + addCriterion("company_address not between", value1, value2, "companyAddress"); + return (Criteria) this; + } + + public Criteria andCompanyTelIsNull() { + addCriterion("company_tel is null"); + return (Criteria) this; + } + + public Criteria andCompanyTelIsNotNull() { + addCriterion("company_tel is not null"); + return (Criteria) this; + } + + public Criteria andCompanyTelEqualTo(String value) { + addCriterion("company_tel =", value, "companyTel"); + return (Criteria) this; + } + + public Criteria andCompanyTelNotEqualTo(String value) { + addCriterion("company_tel <>", value, "companyTel"); + return (Criteria) this; + } + + public Criteria andCompanyTelGreaterThan(String value) { + addCriterion("company_tel >", value, "companyTel"); + return (Criteria) this; + } + + public Criteria andCompanyTelGreaterThanOrEqualTo(String value) { + addCriterion("company_tel >=", value, "companyTel"); + return (Criteria) this; + } + + public Criteria andCompanyTelLessThan(String value) { + addCriterion("company_tel <", value, "companyTel"); + return (Criteria) this; + } + + public Criteria andCompanyTelLessThanOrEqualTo(String value) { + addCriterion("company_tel <=", value, "companyTel"); + return (Criteria) this; + } + + public Criteria andCompanyTelLike(String value) { + addCriterion("company_tel like", value, "companyTel"); + return (Criteria) this; + } + + public Criteria andCompanyTelNotLike(String value) { + addCriterion("company_tel not like", value, "companyTel"); + return (Criteria) this; + } + + public Criteria andCompanyTelIn(List values) { + addCriterion("company_tel in", values, "companyTel"); + return (Criteria) this; + } + + public Criteria andCompanyTelNotIn(List values) { + addCriterion("company_tel not in", values, "companyTel"); + return (Criteria) this; + } + + public Criteria andCompanyTelBetween(String value1, String value2) { + addCriterion("company_tel between", value1, value2, "companyTel"); + return (Criteria) this; + } + + public Criteria andCompanyTelNotBetween(String value1, String value2) { + addCriterion("company_tel not between", value1, value2, "companyTel"); + return (Criteria) this; + } + + public Criteria andCompanyFaxIsNull() { + addCriterion("company_fax is null"); + return (Criteria) this; + } + + public Criteria andCompanyFaxIsNotNull() { + addCriterion("company_fax is not null"); + return (Criteria) this; + } + + public Criteria andCompanyFaxEqualTo(String value) { + addCriterion("company_fax =", value, "companyFax"); + return (Criteria) this; + } + + public Criteria andCompanyFaxNotEqualTo(String value) { + addCriterion("company_fax <>", value, "companyFax"); + return (Criteria) this; + } + + public Criteria andCompanyFaxGreaterThan(String value) { + addCriterion("company_fax >", value, "companyFax"); + return (Criteria) this; + } + + public Criteria andCompanyFaxGreaterThanOrEqualTo(String value) { + addCriterion("company_fax >=", value, "companyFax"); + return (Criteria) this; + } + + public Criteria andCompanyFaxLessThan(String value) { + addCriterion("company_fax <", value, "companyFax"); + return (Criteria) this; + } + + public Criteria andCompanyFaxLessThanOrEqualTo(String value) { + addCriterion("company_fax <=", value, "companyFax"); + return (Criteria) this; + } + + public Criteria andCompanyFaxLike(String value) { + addCriterion("company_fax like", value, "companyFax"); + return (Criteria) this; + } + + public Criteria andCompanyFaxNotLike(String value) { + addCriterion("company_fax not like", value, "companyFax"); + return (Criteria) this; + } + + public Criteria andCompanyFaxIn(List values) { + addCriterion("company_fax in", values, "companyFax"); + return (Criteria) this; + } + + public Criteria andCompanyFaxNotIn(List values) { + addCriterion("company_fax not in", values, "companyFax"); + return (Criteria) this; + } + + public Criteria andCompanyFaxBetween(String value1, String value2) { + addCriterion("company_fax between", value1, value2, "companyFax"); + return (Criteria) this; + } + + public Criteria andCompanyFaxNotBetween(String value1, String value2) { + addCriterion("company_fax not between", value1, value2, "companyFax"); + return (Criteria) this; + } + + public Criteria andCompanyPostCodeIsNull() { + addCriterion("company_post_code is null"); + return (Criteria) this; + } + + public Criteria andCompanyPostCodeIsNotNull() { + addCriterion("company_post_code is not null"); + return (Criteria) this; + } + + public Criteria andCompanyPostCodeEqualTo(String value) { + addCriterion("company_post_code =", value, "companyPostCode"); + return (Criteria) this; + } + + public Criteria andCompanyPostCodeNotEqualTo(String value) { + addCriterion("company_post_code <>", value, "companyPostCode"); + return (Criteria) this; + } + + public Criteria andCompanyPostCodeGreaterThan(String value) { + addCriterion("company_post_code >", value, "companyPostCode"); + return (Criteria) this; + } + + public Criteria andCompanyPostCodeGreaterThanOrEqualTo(String value) { + addCriterion("company_post_code >=", value, "companyPostCode"); + return (Criteria) this; + } + + public Criteria andCompanyPostCodeLessThan(String value) { + addCriterion("company_post_code <", value, "companyPostCode"); + return (Criteria) this; + } + + public Criteria andCompanyPostCodeLessThanOrEqualTo(String value) { + addCriterion("company_post_code <=", value, "companyPostCode"); + return (Criteria) this; + } + + public Criteria andCompanyPostCodeLike(String value) { + addCriterion("company_post_code like", value, "companyPostCode"); + return (Criteria) this; + } + + public Criteria andCompanyPostCodeNotLike(String value) { + addCriterion("company_post_code not like", value, "companyPostCode"); + return (Criteria) this; + } + + public Criteria andCompanyPostCodeIn(List values) { + addCriterion("company_post_code in", values, "companyPostCode"); + return (Criteria) this; + } + + public Criteria andCompanyPostCodeNotIn(List values) { + addCriterion("company_post_code not in", values, "companyPostCode"); + return (Criteria) this; + } + + public Criteria andCompanyPostCodeBetween(String value1, String value2) { + addCriterion("company_post_code between", value1, value2, "companyPostCode"); + return (Criteria) this; + } + + public Criteria andCompanyPostCodeNotBetween(String value1, String value2) { + addCriterion("company_post_code not between", value1, value2, "companyPostCode"); + return (Criteria) this; + } + + public Criteria andDepotFlagIsNull() { + addCriterion("depot_flag is null"); + return (Criteria) this; + } + + public Criteria andDepotFlagIsNotNull() { + addCriterion("depot_flag is not null"); + return (Criteria) this; + } + + public Criteria andDepotFlagEqualTo(String value) { + addCriterion("depot_flag =", value, "depotFlag"); + return (Criteria) this; + } + + public Criteria andDepotFlagNotEqualTo(String value) { + addCriterion("depot_flag <>", value, "depotFlag"); + return (Criteria) this; + } + + public Criteria andDepotFlagGreaterThan(String value) { + addCriterion("depot_flag >", value, "depotFlag"); + return (Criteria) this; + } + + public Criteria andDepotFlagGreaterThanOrEqualTo(String value) { + addCriterion("depot_flag >=", value, "depotFlag"); + return (Criteria) this; + } + + public Criteria andDepotFlagLessThan(String value) { + addCriterion("depot_flag <", value, "depotFlag"); + return (Criteria) this; + } + + public Criteria andDepotFlagLessThanOrEqualTo(String value) { + addCriterion("depot_flag <=", value, "depotFlag"); + return (Criteria) this; + } + + public Criteria andDepotFlagLike(String value) { + addCriterion("depot_flag like", value, "depotFlag"); + return (Criteria) this; + } + + public Criteria andDepotFlagNotLike(String value) { + addCriterion("depot_flag not like", value, "depotFlag"); + return (Criteria) this; + } + + public Criteria andDepotFlagIn(List values) { + addCriterion("depot_flag in", values, "depotFlag"); + return (Criteria) this; + } + + public Criteria andDepotFlagNotIn(List values) { + addCriterion("depot_flag not in", values, "depotFlag"); + return (Criteria) this; + } + + public Criteria andDepotFlagBetween(String value1, String value2) { + addCriterion("depot_flag between", value1, value2, "depotFlag"); + return (Criteria) this; + } + + public Criteria andDepotFlagNotBetween(String value1, String value2) { + addCriterion("depot_flag not between", value1, value2, "depotFlag"); + return (Criteria) this; + } + + public Criteria andCustomerFlagIsNull() { + addCriterion("customer_flag is null"); + return (Criteria) this; + } + + public Criteria andCustomerFlagIsNotNull() { + addCriterion("customer_flag is not null"); + return (Criteria) this; + } + + public Criteria andCustomerFlagEqualTo(String value) { + addCriterion("customer_flag =", value, "customerFlag"); + return (Criteria) this; + } + + public Criteria andCustomerFlagNotEqualTo(String value) { + addCriterion("customer_flag <>", value, "customerFlag"); + return (Criteria) this; + } + + public Criteria andCustomerFlagGreaterThan(String value) { + addCriterion("customer_flag >", value, "customerFlag"); + return (Criteria) this; + } + + public Criteria andCustomerFlagGreaterThanOrEqualTo(String value) { + addCriterion("customer_flag >=", value, "customerFlag"); + return (Criteria) this; + } + + public Criteria andCustomerFlagLessThan(String value) { + addCriterion("customer_flag <", value, "customerFlag"); + return (Criteria) this; + } + + public Criteria andCustomerFlagLessThanOrEqualTo(String value) { + addCriterion("customer_flag <=", value, "customerFlag"); + return (Criteria) this; + } + + public Criteria andCustomerFlagLike(String value) { + addCriterion("customer_flag like", value, "customerFlag"); + return (Criteria) this; + } + + public Criteria andCustomerFlagNotLike(String value) { + addCriterion("customer_flag not like", value, "customerFlag"); + return (Criteria) this; + } + + public Criteria andCustomerFlagIn(List values) { + addCriterion("customer_flag in", values, "customerFlag"); + return (Criteria) this; + } + + public Criteria andCustomerFlagNotIn(List values) { + addCriterion("customer_flag not in", values, "customerFlag"); + return (Criteria) this; + } + + public Criteria andCustomerFlagBetween(String value1, String value2) { + addCriterion("customer_flag between", value1, value2, "customerFlag"); + return (Criteria) this; + } + + public Criteria andCustomerFlagNotBetween(String value1, String value2) { + addCriterion("customer_flag not between", value1, value2, "customerFlag"); + return (Criteria) this; + } + + public Criteria andMinusStockFlagIsNull() { + addCriterion("minus_stock_flag is null"); + return (Criteria) this; + } + + public Criteria andMinusStockFlagIsNotNull() { + addCriterion("minus_stock_flag is not null"); + return (Criteria) this; + } + + public Criteria andMinusStockFlagEqualTo(String value) { + addCriterion("minus_stock_flag =", value, "minusStockFlag"); + return (Criteria) this; + } + + public Criteria andMinusStockFlagNotEqualTo(String value) { + addCriterion("minus_stock_flag <>", value, "minusStockFlag"); + return (Criteria) this; + } + + public Criteria andMinusStockFlagGreaterThan(String value) { + addCriterion("minus_stock_flag >", value, "minusStockFlag"); + return (Criteria) this; + } + + public Criteria andMinusStockFlagGreaterThanOrEqualTo(String value) { + addCriterion("minus_stock_flag >=", value, "minusStockFlag"); + return (Criteria) this; + } + + public Criteria andMinusStockFlagLessThan(String value) { + addCriterion("minus_stock_flag <", value, "minusStockFlag"); + return (Criteria) this; + } + + public Criteria andMinusStockFlagLessThanOrEqualTo(String value) { + addCriterion("minus_stock_flag <=", value, "minusStockFlag"); + return (Criteria) this; + } + + public Criteria andMinusStockFlagLike(String value) { + addCriterion("minus_stock_flag like", value, "minusStockFlag"); + return (Criteria) this; + } + + public Criteria andMinusStockFlagNotLike(String value) { + addCriterion("minus_stock_flag not like", value, "minusStockFlag"); + return (Criteria) this; + } + + public Criteria andMinusStockFlagIn(List values) { + addCriterion("minus_stock_flag in", values, "minusStockFlag"); + return (Criteria) this; + } + + public Criteria andMinusStockFlagNotIn(List values) { + addCriterion("minus_stock_flag not in", values, "minusStockFlag"); + return (Criteria) this; + } + + public Criteria andMinusStockFlagBetween(String value1, String value2) { + addCriterion("minus_stock_flag between", value1, value2, "minusStockFlag"); + return (Criteria) this; + } + + public Criteria andMinusStockFlagNotBetween(String value1, String value2) { + addCriterion("minus_stock_flag not between", value1, value2, "minusStockFlag"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Tenant.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Tenant.java new file mode 100644 index 000000000..bbcd85f51 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Tenant.java @@ -0,0 +1,197 @@ +package com.jsh.erp.datasource.entities; + +import java.util.Date; + +public class Tenant { + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_tenant.id + * + * @mbggenerated + */ + private Long id; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_tenant.tenant_id + * + * @mbggenerated + */ + private Long tenantId; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_tenant.login_name + * + * @mbggenerated + */ + private String loginName; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_tenant.user_num_limit + * + * @mbggenerated + */ + private Integer userNumLimit; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_tenant.bills_num_limit + * + * @mbggenerated + */ + private Integer billsNumLimit; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database column jsh_tenant.create_time + * + * @mbggenerated + */ + private Date createTime; + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_tenant.id + * + * @return the value of jsh_tenant.id + * + * @mbggenerated + */ + public Long getId() { + return id; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_tenant.id + * + * @param id the value for jsh_tenant.id + * + * @mbggenerated + */ + public void setId(Long id) { + this.id = id; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_tenant.tenant_id + * + * @return the value of jsh_tenant.tenant_id + * + * @mbggenerated + */ + public Long getTenantId() { + return tenantId; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_tenant.tenant_id + * + * @param tenantId the value for jsh_tenant.tenant_id + * + * @mbggenerated + */ + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_tenant.login_name + * + * @return the value of jsh_tenant.login_name + * + * @mbggenerated + */ + public String getLoginName() { + return loginName; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_tenant.login_name + * + * @param loginName the value for jsh_tenant.login_name + * + * @mbggenerated + */ + public void setLoginName(String loginName) { + this.loginName = loginName == null ? null : loginName.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_tenant.user_num_limit + * + * @return the value of jsh_tenant.user_num_limit + * + * @mbggenerated + */ + public Integer getUserNumLimit() { + return userNumLimit; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_tenant.user_num_limit + * + * @param userNumLimit the value for jsh_tenant.user_num_limit + * + * @mbggenerated + */ + public void setUserNumLimit(Integer userNumLimit) { + this.userNumLimit = userNumLimit; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_tenant.bills_num_limit + * + * @return the value of jsh_tenant.bills_num_limit + * + * @mbggenerated + */ + public Integer getBillsNumLimit() { + return billsNumLimit; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_tenant.bills_num_limit + * + * @param billsNumLimit the value for jsh_tenant.bills_num_limit + * + * @mbggenerated + */ + public void setBillsNumLimit(Integer billsNumLimit) { + this.billsNumLimit = billsNumLimit; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column jsh_tenant.create_time + * + * @return the value of jsh_tenant.create_time + * + * @mbggenerated + */ + public Date getCreateTime() { + return createTime; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column jsh_tenant.create_time + * + * @param createTime the value for jsh_tenant.create_time + * + * @mbggenerated + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/TenantExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/TenantExample.java new file mode 100644 index 000000000..c196986b3 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/TenantExample.java @@ -0,0 +1,673 @@ +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class TenantExample { + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + protected String orderByClause; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + protected boolean distinct; + + /** + * This field was generated by MyBatis Generator. + * This field corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + protected List oredCriteria; + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + public TenantExample() { + oredCriteria = new ArrayList(); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + public String getOrderByClause() { + return orderByClause; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + public boolean isDistinct() { + return distinct; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + public List getOredCriteria() { + return oredCriteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andLoginNameIsNull() { + addCriterion("login_name is null"); + return (Criteria) this; + } + + public Criteria andLoginNameIsNotNull() { + addCriterion("login_name is not null"); + return (Criteria) this; + } + + public Criteria andLoginNameEqualTo(String value) { + addCriterion("login_name =", value, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameNotEqualTo(String value) { + addCriterion("login_name <>", value, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameGreaterThan(String value) { + addCriterion("login_name >", value, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameGreaterThanOrEqualTo(String value) { + addCriterion("login_name >=", value, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameLessThan(String value) { + addCriterion("login_name <", value, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameLessThanOrEqualTo(String value) { + addCriterion("login_name <=", value, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameLike(String value) { + addCriterion("login_name like", value, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameNotLike(String value) { + addCriterion("login_name not like", value, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameIn(List values) { + addCriterion("login_name in", values, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameNotIn(List values) { + addCriterion("login_name not in", values, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameBetween(String value1, String value2) { + addCriterion("login_name between", value1, value2, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameNotBetween(String value1, String value2) { + addCriterion("login_name not between", value1, value2, "loginName"); + return (Criteria) this; + } + + public Criteria andUserNumLimitIsNull() { + addCriterion("user_num_limit is null"); + return (Criteria) this; + } + + public Criteria andUserNumLimitIsNotNull() { + addCriterion("user_num_limit is not null"); + return (Criteria) this; + } + + public Criteria andUserNumLimitEqualTo(Integer value) { + addCriterion("user_num_limit =", value, "userNumLimit"); + return (Criteria) this; + } + + public Criteria andUserNumLimitNotEqualTo(Integer value) { + addCriterion("user_num_limit <>", value, "userNumLimit"); + return (Criteria) this; + } + + public Criteria andUserNumLimitGreaterThan(Integer value) { + addCriterion("user_num_limit >", value, "userNumLimit"); + return (Criteria) this; + } + + public Criteria andUserNumLimitGreaterThanOrEqualTo(Integer value) { + addCriterion("user_num_limit >=", value, "userNumLimit"); + return (Criteria) this; + } + + public Criteria andUserNumLimitLessThan(Integer value) { + addCriterion("user_num_limit <", value, "userNumLimit"); + return (Criteria) this; + } + + public Criteria andUserNumLimitLessThanOrEqualTo(Integer value) { + addCriterion("user_num_limit <=", value, "userNumLimit"); + return (Criteria) this; + } + + public Criteria andUserNumLimitIn(List values) { + addCriterion("user_num_limit in", values, "userNumLimit"); + return (Criteria) this; + } + + public Criteria andUserNumLimitNotIn(List values) { + addCriterion("user_num_limit not in", values, "userNumLimit"); + return (Criteria) this; + } + + public Criteria andUserNumLimitBetween(Integer value1, Integer value2) { + addCriterion("user_num_limit between", value1, value2, "userNumLimit"); + return (Criteria) this; + } + + public Criteria andUserNumLimitNotBetween(Integer value1, Integer value2) { + addCriterion("user_num_limit not between", value1, value2, "userNumLimit"); + return (Criteria) this; + } + + public Criteria andBillsNumLimitIsNull() { + addCriterion("bills_num_limit is null"); + return (Criteria) this; + } + + public Criteria andBillsNumLimitIsNotNull() { + addCriterion("bills_num_limit is not null"); + return (Criteria) this; + } + + public Criteria andBillsNumLimitEqualTo(Integer value) { + addCriterion("bills_num_limit =", value, "billsNumLimit"); + return (Criteria) this; + } + + public Criteria andBillsNumLimitNotEqualTo(Integer value) { + addCriterion("bills_num_limit <>", value, "billsNumLimit"); + return (Criteria) this; + } + + public Criteria andBillsNumLimitGreaterThan(Integer value) { + addCriterion("bills_num_limit >", value, "billsNumLimit"); + return (Criteria) this; + } + + public Criteria andBillsNumLimitGreaterThanOrEqualTo(Integer value) { + addCriterion("bills_num_limit >=", value, "billsNumLimit"); + return (Criteria) this; + } + + public Criteria andBillsNumLimitLessThan(Integer value) { + addCriterion("bills_num_limit <", value, "billsNumLimit"); + return (Criteria) this; + } + + public Criteria andBillsNumLimitLessThanOrEqualTo(Integer value) { + addCriterion("bills_num_limit <=", value, "billsNumLimit"); + return (Criteria) this; + } + + public Criteria andBillsNumLimitIn(List values) { + addCriterion("bills_num_limit in", values, "billsNumLimit"); + return (Criteria) this; + } + + public Criteria andBillsNumLimitNotIn(List values) { + addCriterion("bills_num_limit not in", values, "billsNumLimit"); + return (Criteria) this; + } + + public Criteria andBillsNumLimitBetween(Integer value1, Integer value2) { + addCriterion("bills_num_limit between", value1, value2, "billsNumLimit"); + return (Criteria) this; + } + + public Criteria andBillsNumLimitNotBetween(Integer value1, Integer value2) { + addCriterion("bills_num_limit not between", value1, value2, "billsNumLimit"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table jsh_tenant + * + * @mbggenerated do_not_delete_during_merge + */ + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + /** + * This class was generated by MyBatis Generator. + * This class corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Unit.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Unit.java new file mode 100644 index 000000000..f5cc3acd9 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/Unit.java @@ -0,0 +1,73 @@ +package com.jsh.erp.datasource.entities; + +public class Unit { + private Long id; + + private String name; + + private String basicUnit; + + private String otherUnit; + + private Integer ratio; + + private Long tenantId; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + public String getBasicUnit() { + return basicUnit; + } + + public void setBasicUnit(String basicUnit) { + this.basicUnit = basicUnit == null ? null : basicUnit.trim(); + } + + public String getOtherUnit() { + return otherUnit; + } + + public void setOtherUnit(String otherUnit) { + this.otherUnit = otherUnit == null ? null : otherUnit.trim(); + } + + public Integer getRatio() { + return ratio; + } + + public void setRatio(Integer ratio) { + this.ratio = ratio; + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UnitExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UnitExample.java new file mode 100644 index 000000000..eb03bc18c --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UnitExample.java @@ -0,0 +1,659 @@ +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.List; + +public class UnitExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public UnitExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("name is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("name is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("name =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("name <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("name >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("name >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("name <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("name <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("name like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("name not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("name in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("name not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("name between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("name not between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andBasicUnitIsNull() { + addCriterion("basic_unit is null"); + return (Criteria) this; + } + + public Criteria andBasicUnitIsNotNull() { + addCriterion("basic_unit is not null"); + return (Criteria) this; + } + + public Criteria andBasicUnitEqualTo(String value) { + addCriterion("basic_unit =", value, "basicUnit"); + return (Criteria) this; + } + + public Criteria andBasicUnitNotEqualTo(String value) { + addCriterion("basic_unit <>", value, "basicUnit"); + return (Criteria) this; + } + + public Criteria andBasicUnitGreaterThan(String value) { + addCriterion("basic_unit >", value, "basicUnit"); + return (Criteria) this; + } + + public Criteria andBasicUnitGreaterThanOrEqualTo(String value) { + addCriterion("basic_unit >=", value, "basicUnit"); + return (Criteria) this; + } + + public Criteria andBasicUnitLessThan(String value) { + addCriterion("basic_unit <", value, "basicUnit"); + return (Criteria) this; + } + + public Criteria andBasicUnitLessThanOrEqualTo(String value) { + addCriterion("basic_unit <=", value, "basicUnit"); + return (Criteria) this; + } + + public Criteria andBasicUnitLike(String value) { + addCriterion("basic_unit like", value, "basicUnit"); + return (Criteria) this; + } + + public Criteria andBasicUnitNotLike(String value) { + addCriterion("basic_unit not like", value, "basicUnit"); + return (Criteria) this; + } + + public Criteria andBasicUnitIn(List values) { + addCriterion("basic_unit in", values, "basicUnit"); + return (Criteria) this; + } + + public Criteria andBasicUnitNotIn(List values) { + addCriterion("basic_unit not in", values, "basicUnit"); + return (Criteria) this; + } + + public Criteria andBasicUnitBetween(String value1, String value2) { + addCriterion("basic_unit between", value1, value2, "basicUnit"); + return (Criteria) this; + } + + public Criteria andBasicUnitNotBetween(String value1, String value2) { + addCriterion("basic_unit not between", value1, value2, "basicUnit"); + return (Criteria) this; + } + + public Criteria andOtherUnitIsNull() { + addCriterion("other_unit is null"); + return (Criteria) this; + } + + public Criteria andOtherUnitIsNotNull() { + addCriterion("other_unit is not null"); + return (Criteria) this; + } + + public Criteria andOtherUnitEqualTo(String value) { + addCriterion("other_unit =", value, "otherUnit"); + return (Criteria) this; + } + + public Criteria andOtherUnitNotEqualTo(String value) { + addCriterion("other_unit <>", value, "otherUnit"); + return (Criteria) this; + } + + public Criteria andOtherUnitGreaterThan(String value) { + addCriterion("other_unit >", value, "otherUnit"); + return (Criteria) this; + } + + public Criteria andOtherUnitGreaterThanOrEqualTo(String value) { + addCriterion("other_unit >=", value, "otherUnit"); + return (Criteria) this; + } + + public Criteria andOtherUnitLessThan(String value) { + addCriterion("other_unit <", value, "otherUnit"); + return (Criteria) this; + } + + public Criteria andOtherUnitLessThanOrEqualTo(String value) { + addCriterion("other_unit <=", value, "otherUnit"); + return (Criteria) this; + } + + public Criteria andOtherUnitLike(String value) { + addCriterion("other_unit like", value, "otherUnit"); + return (Criteria) this; + } + + public Criteria andOtherUnitNotLike(String value) { + addCriterion("other_unit not like", value, "otherUnit"); + return (Criteria) this; + } + + public Criteria andOtherUnitIn(List values) { + addCriterion("other_unit in", values, "otherUnit"); + return (Criteria) this; + } + + public Criteria andOtherUnitNotIn(List values) { + addCriterion("other_unit not in", values, "otherUnit"); + return (Criteria) this; + } + + public Criteria andOtherUnitBetween(String value1, String value2) { + addCriterion("other_unit between", value1, value2, "otherUnit"); + return (Criteria) this; + } + + public Criteria andOtherUnitNotBetween(String value1, String value2) { + addCriterion("other_unit not between", value1, value2, "otherUnit"); + return (Criteria) this; + } + + public Criteria andRatioIsNull() { + addCriterion("ratio is null"); + return (Criteria) this; + } + + public Criteria andRatioIsNotNull() { + addCriterion("ratio is not null"); + return (Criteria) this; + } + + public Criteria andRatioEqualTo(Integer value) { + addCriterion("ratio =", value, "ratio"); + return (Criteria) this; + } + + public Criteria andRatioNotEqualTo(Integer value) { + addCriterion("ratio <>", value, "ratio"); + return (Criteria) this; + } + + public Criteria andRatioGreaterThan(Integer value) { + addCriterion("ratio >", value, "ratio"); + return (Criteria) this; + } + + public Criteria andRatioGreaterThanOrEqualTo(Integer value) { + addCriterion("ratio >=", value, "ratio"); + return (Criteria) this; + } + + public Criteria andRatioLessThan(Integer value) { + addCriterion("ratio <", value, "ratio"); + return (Criteria) this; + } + + public Criteria andRatioLessThanOrEqualTo(Integer value) { + addCriterion("ratio <=", value, "ratio"); + return (Criteria) this; + } + + public Criteria andRatioIn(List values) { + addCriterion("ratio in", values, "ratio"); + return (Criteria) this; + } + + public Criteria andRatioNotIn(List values) { + addCriterion("ratio not in", values, "ratio"); + return (Criteria) this; + } + + public Criteria andRatioBetween(Integer value1, Integer value2) { + addCriterion("ratio between", value1, value2, "ratio"); + return (Criteria) this; + } + + public Criteria andRatioNotBetween(Integer value1, Integer value2) { + addCriterion("ratio not between", value1, value2, "ratio"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/User.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/User.java new file mode 100644 index 000000000..9b31979a6 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/User.java @@ -0,0 +1,143 @@ +package com.jsh.erp.datasource.entities; + +public class User { + private Long id; + + private String username; + + private String loginName; + + private String password; + + private String position; + + private String department; + + private String email; + + private String phonenum; + + private Byte ismanager; + + private Byte isystem; + + private Byte status; + + private String description; + + private String remark; + + private Long tenantId; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username == null ? null : username.trim(); + } + + public String getLoginName() { + return loginName; + } + + public void setLoginName(String loginName) { + this.loginName = loginName == null ? null : loginName.trim(); + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password == null ? null : password.trim(); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position == null ? null : position.trim(); + } + + public String getDepartment() { + return department; + } + + public void setDepartment(String department) { + this.department = department == null ? null : department.trim(); + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email == null ? null : email.trim(); + } + + public String getPhonenum() { + return phonenum; + } + + public void setPhonenum(String phonenum) { + this.phonenum = phonenum == null ? null : phonenum.trim(); + } + + public Byte getIsmanager() { + return ismanager; + } + + public void setIsmanager(Byte ismanager) { + this.ismanager = ismanager; + } + + public Byte getIsystem() { + return isystem; + } + + public void setIsystem(Byte isystem) { + this.isystem = isystem; + } + + public Byte getStatus() { + return status; + } + + public void setStatus(Byte status) { + this.status = status; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description == null ? null : description.trim(); + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UserBusiness.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UserBusiness.java new file mode 100644 index 000000000..baf734083 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UserBusiness.java @@ -0,0 +1,63 @@ +package com.jsh.erp.datasource.entities; + +public class UserBusiness { + private Long id; + + private String type; + + private String keyId; + + private String value; + + private String btnStr; + + private String deleteFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type == null ? null : type.trim(); + } + + public String getKeyId() { + return keyId; + } + + public void setKeyId(String keyId) { + this.keyId = keyId == null ? null : keyId.trim(); + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value == null ? null : value.trim(); + } + + public String getBtnStr() { + return btnStr; + } + + public void setBtnStr(String btnStr) { + this.btnStr = btnStr == null ? null : btnStr.trim(); + } + + public String getDeleteFlag() { + return deleteFlag; + } + + public void setDeleteFlag(String deleteFlag) { + this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UserBusinessExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UserBusinessExample.java new file mode 100644 index 000000000..3895486c7 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UserBusinessExample.java @@ -0,0 +1,609 @@ +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.List; + +public class UserBusinessExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public UserBusinessExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andTypeIsNull() { + addCriterion("type is null"); + return (Criteria) this; + } + + public Criteria andTypeIsNotNull() { + addCriterion("type is not null"); + return (Criteria) this; + } + + public Criteria andTypeEqualTo(String value) { + addCriterion("type =", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotEqualTo(String value) { + addCriterion("type <>", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThan(String value) { + addCriterion("type >", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThanOrEqualTo(String value) { + addCriterion("type >=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThan(String value) { + addCriterion("type <", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThanOrEqualTo(String value) { + addCriterion("type <=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLike(String value) { + addCriterion("type like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotLike(String value) { + addCriterion("type not like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeIn(List values) { + addCriterion("type in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotIn(List values) { + addCriterion("type not in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeBetween(String value1, String value2) { + addCriterion("type between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotBetween(String value1, String value2) { + addCriterion("type not between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andKeyIdIsNull() { + addCriterion("key_id is null"); + return (Criteria) this; + } + + public Criteria andKeyIdIsNotNull() { + addCriterion("key_id is not null"); + return (Criteria) this; + } + + public Criteria andKeyIdEqualTo(String value) { + addCriterion("key_id =", value, "keyId"); + return (Criteria) this; + } + + public Criteria andKeyIdNotEqualTo(String value) { + addCriterion("key_id <>", value, "keyId"); + return (Criteria) this; + } + + public Criteria andKeyIdGreaterThan(String value) { + addCriterion("key_id >", value, "keyId"); + return (Criteria) this; + } + + public Criteria andKeyIdGreaterThanOrEqualTo(String value) { + addCriterion("key_id >=", value, "keyId"); + return (Criteria) this; + } + + public Criteria andKeyIdLessThan(String value) { + addCriterion("key_id <", value, "keyId"); + return (Criteria) this; + } + + public Criteria andKeyIdLessThanOrEqualTo(String value) { + addCriterion("key_id <=", value, "keyId"); + return (Criteria) this; + } + + public Criteria andKeyIdLike(String value) { + addCriterion("key_id like", value, "keyId"); + return (Criteria) this; + } + + public Criteria andKeyIdNotLike(String value) { + addCriterion("key_id not like", value, "keyId"); + return (Criteria) this; + } + + public Criteria andKeyIdIn(List values) { + addCriterion("key_id in", values, "keyId"); + return (Criteria) this; + } + + public Criteria andKeyIdNotIn(List values) { + addCriterion("key_id not in", values, "keyId"); + return (Criteria) this; + } + + public Criteria andKeyIdBetween(String value1, String value2) { + addCriterion("key_id between", value1, value2, "keyId"); + return (Criteria) this; + } + + public Criteria andKeyIdNotBetween(String value1, String value2) { + addCriterion("key_id not between", value1, value2, "keyId"); + return (Criteria) this; + } + + public Criteria andValueIsNull() { + addCriterion("value is null"); + return (Criteria) this; + } + + public Criteria andValueIsNotNull() { + addCriterion("value is not null"); + return (Criteria) this; + } + + public Criteria andValueEqualTo(String value) { + addCriterion("value =", value, "value"); + return (Criteria) this; + } + + public Criteria andValueNotEqualTo(String value) { + addCriterion("value <>", value, "value"); + return (Criteria) this; + } + + public Criteria andValueGreaterThan(String value) { + addCriterion("value >", value, "value"); + return (Criteria) this; + } + + public Criteria andValueGreaterThanOrEqualTo(String value) { + addCriterion("value >=", value, "value"); + return (Criteria) this; + } + + public Criteria andValueLessThan(String value) { + addCriterion("value <", value, "value"); + return (Criteria) this; + } + + public Criteria andValueLessThanOrEqualTo(String value) { + addCriterion("value <=", value, "value"); + return (Criteria) this; + } + + public Criteria andValueLike(String value) { + addCriterion("value like", value, "value"); + return (Criteria) this; + } + + public Criteria andValueNotLike(String value) { + addCriterion("value not like", value, "value"); + return (Criteria) this; + } + + public Criteria andValueIn(List values) { + addCriterion("value in", values, "value"); + return (Criteria) this; + } + + public Criteria andValueNotIn(List values) { + addCriterion("value not in", values, "value"); + return (Criteria) this; + } + + public Criteria andValueBetween(String value1, String value2) { + addCriterion("value between", value1, value2, "value"); + return (Criteria) this; + } + + public Criteria andValueNotBetween(String value1, String value2) { + addCriterion("value not between", value1, value2, "value"); + return (Criteria) this; + } + + public Criteria andBtnStrIsNull() { + addCriterion("btn_str is null"); + return (Criteria) this; + } + + public Criteria andBtnStrIsNotNull() { + addCriterion("btn_str is not null"); + return (Criteria) this; + } + + public Criteria andBtnStrEqualTo(String value) { + addCriterion("btn_str =", value, "btnStr"); + return (Criteria) this; + } + + public Criteria andBtnStrNotEqualTo(String value) { + addCriterion("btn_str <>", value, "btnStr"); + return (Criteria) this; + } + + public Criteria andBtnStrGreaterThan(String value) { + addCriterion("btn_str >", value, "btnStr"); + return (Criteria) this; + } + + public Criteria andBtnStrGreaterThanOrEqualTo(String value) { + addCriterion("btn_str >=", value, "btnStr"); + return (Criteria) this; + } + + public Criteria andBtnStrLessThan(String value) { + addCriterion("btn_str <", value, "btnStr"); + return (Criteria) this; + } + + public Criteria andBtnStrLessThanOrEqualTo(String value) { + addCriterion("btn_str <=", value, "btnStr"); + return (Criteria) this; + } + + public Criteria andBtnStrLike(String value) { + addCriterion("btn_str like", value, "btnStr"); + return (Criteria) this; + } + + public Criteria andBtnStrNotLike(String value) { + addCriterion("btn_str not like", value, "btnStr"); + return (Criteria) this; + } + + public Criteria andBtnStrIn(List values) { + addCriterion("btn_str in", values, "btnStr"); + return (Criteria) this; + } + + public Criteria andBtnStrNotIn(List values) { + addCriterion("btn_str not in", values, "btnStr"); + return (Criteria) this; + } + + public Criteria andBtnStrBetween(String value1, String value2) { + addCriterion("btn_str between", value1, value2, "btnStr"); + return (Criteria) this; + } + + public Criteria andBtnStrNotBetween(String value1, String value2) { + addCriterion("btn_str not between", value1, value2, "btnStr"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNull() { + addCriterion("delete_flag is null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIsNotNull() { + addCriterion("delete_flag is not null"); + return (Criteria) this; + } + + public Criteria andDeleteFlagEqualTo(String value) { + addCriterion("delete_flag =", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotEqualTo(String value) { + addCriterion("delete_flag <>", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThan(String value) { + addCriterion("delete_flag >", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagGreaterThanOrEqualTo(String value) { + addCriterion("delete_flag >=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThan(String value) { + addCriterion("delete_flag <", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLessThanOrEqualTo(String value) { + addCriterion("delete_flag <=", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagLike(String value) { + addCriterion("delete_flag like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotLike(String value) { + addCriterion("delete_flag not like", value, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagIn(List values) { + addCriterion("delete_flag in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotIn(List values) { + addCriterion("delete_flag not in", values, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagBetween(String value1, String value2) { + addCriterion("delete_flag between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + + public Criteria andDeleteFlagNotBetween(String value1, String value2) { + addCriterion("delete_flag not between", value1, value2, "deleteFlag"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UserEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UserEx.java new file mode 100644 index 000000000..79987311f --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UserEx.java @@ -0,0 +1,80 @@ +package com.jsh.erp.datasource.entities; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/3/8 15:12 + */ +public class UserEx extends User{ + //机构简称 + private String orgAbr; + //机构id + private Long orgaId; + //用户在部门中排序 + private String userBlngOrgaDsplSeq; + //机构用户关联关系id + private Long orgaUserRelId; + + private Long roleId; + + private String roleName; + + private String userType; + + public String getOrgAbr() { + return orgAbr; + } + + public void setOrgAbr(String orgAbr) { + this.orgAbr = orgAbr; + } + + public Long getOrgaId() { + return orgaId; + } + + public void setOrgaId(Long orgaId) { + this.orgaId = orgaId; + } + + public String getUserBlngOrgaDsplSeq() { + return userBlngOrgaDsplSeq; + } + + public void setUserBlngOrgaDsplSeq(String userBlngOrgaDsplSeq) { + this.userBlngOrgaDsplSeq = userBlngOrgaDsplSeq; + } + + public Long getOrgaUserRelId() { + return orgaUserRelId; + } + + public void setOrgaUserRelId(Long orgaUserRelId) { + this.orgaUserRelId = orgaUserRelId; + } + + public Long getRoleId() { + return roleId; + } + + public void setRoleId(Long roleId) { + this.roleId = roleId; + } + + public String getRoleName() { + return roleName; + } + + public void setRoleName(String roleName) { + this.roleName = roleName; + } + + public String getUserType() { + return userType; + } + + public void setUserType(String userType) { + this.userType = userType; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UserExample.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UserExample.java new file mode 100644 index 000000000..c7acb7cc3 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/UserExample.java @@ -0,0 +1,1129 @@ +package com.jsh.erp.datasource.entities; + +import java.util.ArrayList; +import java.util.List; + +public class UserExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public UserExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andUsernameIsNull() { + addCriterion("username is null"); + return (Criteria) this; + } + + public Criteria andUsernameIsNotNull() { + addCriterion("username is not null"); + return (Criteria) this; + } + + public Criteria andUsernameEqualTo(String value) { + addCriterion("username =", value, "username"); + return (Criteria) this; + } + + public Criteria andUsernameNotEqualTo(String value) { + addCriterion("username <>", value, "username"); + return (Criteria) this; + } + + public Criteria andUsernameGreaterThan(String value) { + addCriterion("username >", value, "username"); + return (Criteria) this; + } + + public Criteria andUsernameGreaterThanOrEqualTo(String value) { + addCriterion("username >=", value, "username"); + return (Criteria) this; + } + + public Criteria andUsernameLessThan(String value) { + addCriterion("username <", value, "username"); + return (Criteria) this; + } + + public Criteria andUsernameLessThanOrEqualTo(String value) { + addCriterion("username <=", value, "username"); + return (Criteria) this; + } + + public Criteria andUsernameLike(String value) { + addCriterion("username like", value, "username"); + return (Criteria) this; + } + + public Criteria andUsernameNotLike(String value) { + addCriterion("username not like", value, "username"); + return (Criteria) this; + } + + public Criteria andUsernameIn(List values) { + addCriterion("username in", values, "username"); + return (Criteria) this; + } + + public Criteria andUsernameNotIn(List values) { + addCriterion("username not in", values, "username"); + return (Criteria) this; + } + + public Criteria andUsernameBetween(String value1, String value2) { + addCriterion("username between", value1, value2, "username"); + return (Criteria) this; + } + + public Criteria andUsernameNotBetween(String value1, String value2) { + addCriterion("username not between", value1, value2, "username"); + return (Criteria) this; + } + + public Criteria andLoginNameIsNull() { + addCriterion("login_name is null"); + return (Criteria) this; + } + + public Criteria andLoginNameIsNotNull() { + addCriterion("login_name is not null"); + return (Criteria) this; + } + + public Criteria andLoginNameEqualTo(String value) { + addCriterion("login_name =", value, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameNotEqualTo(String value) { + addCriterion("login_name <>", value, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameGreaterThan(String value) { + addCriterion("login_name >", value, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameGreaterThanOrEqualTo(String value) { + addCriterion("login_name >=", value, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameLessThan(String value) { + addCriterion("login_name <", value, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameLessThanOrEqualTo(String value) { + addCriterion("login_name <=", value, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameLike(String value) { + addCriterion("login_name like", value, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameNotLike(String value) { + addCriterion("login_name not like", value, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameIn(List values) { + addCriterion("login_name in", values, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameNotIn(List values) { + addCriterion("login_name not in", values, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameBetween(String value1, String value2) { + addCriterion("login_name between", value1, value2, "loginName"); + return (Criteria) this; + } + + public Criteria andLoginNameNotBetween(String value1, String value2) { + addCriterion("login_name not between", value1, value2, "loginName"); + return (Criteria) this; + } + + public Criteria andPasswordIsNull() { + addCriterion("password is null"); + return (Criteria) this; + } + + public Criteria andPasswordIsNotNull() { + addCriterion("password is not null"); + return (Criteria) this; + } + + public Criteria andPasswordEqualTo(String value) { + addCriterion("password =", value, "password"); + return (Criteria) this; + } + + public Criteria andPasswordNotEqualTo(String value) { + addCriterion("password <>", value, "password"); + return (Criteria) this; + } + + public Criteria andPasswordGreaterThan(String value) { + addCriterion("password >", value, "password"); + return (Criteria) this; + } + + public Criteria andPasswordGreaterThanOrEqualTo(String value) { + addCriterion("password >=", value, "password"); + return (Criteria) this; + } + + public Criteria andPasswordLessThan(String value) { + addCriterion("password <", value, "password"); + return (Criteria) this; + } + + public Criteria andPasswordLessThanOrEqualTo(String value) { + addCriterion("password <=", value, "password"); + return (Criteria) this; + } + + public Criteria andPasswordLike(String value) { + addCriterion("password like", value, "password"); + return (Criteria) this; + } + + public Criteria andPasswordNotLike(String value) { + addCriterion("password not like", value, "password"); + return (Criteria) this; + } + + public Criteria andPasswordIn(List values) { + addCriterion("password in", values, "password"); + return (Criteria) this; + } + + public Criteria andPasswordNotIn(List values) { + addCriterion("password not in", values, "password"); + return (Criteria) this; + } + + public Criteria andPasswordBetween(String value1, String value2) { + addCriterion("password between", value1, value2, "password"); + return (Criteria) this; + } + + public Criteria andPasswordNotBetween(String value1, String value2) { + addCriterion("password not between", value1, value2, "password"); + return (Criteria) this; + } + + public Criteria andPositionIsNull() { + addCriterion("position is null"); + return (Criteria) this; + } + + public Criteria andPositionIsNotNull() { + addCriterion("position is not null"); + return (Criteria) this; + } + + public Criteria andPositionEqualTo(String value) { + addCriterion("position =", value, "position"); + return (Criteria) this; + } + + public Criteria andPositionNotEqualTo(String value) { + addCriterion("position <>", value, "position"); + return (Criteria) this; + } + + public Criteria andPositionGreaterThan(String value) { + addCriterion("position >", value, "position"); + return (Criteria) this; + } + + public Criteria andPositionGreaterThanOrEqualTo(String value) { + addCriterion("position >=", value, "position"); + return (Criteria) this; + } + + public Criteria andPositionLessThan(String value) { + addCriterion("position <", value, "position"); + return (Criteria) this; + } + + public Criteria andPositionLessThanOrEqualTo(String value) { + addCriterion("position <=", value, "position"); + return (Criteria) this; + } + + public Criteria andPositionLike(String value) { + addCriterion("position like", value, "position"); + return (Criteria) this; + } + + public Criteria andPositionNotLike(String value) { + addCriterion("position not like", value, "position"); + return (Criteria) this; + } + + public Criteria andPositionIn(List values) { + addCriterion("position in", values, "position"); + return (Criteria) this; + } + + public Criteria andPositionNotIn(List values) { + addCriterion("position not in", values, "position"); + return (Criteria) this; + } + + public Criteria andPositionBetween(String value1, String value2) { + addCriterion("position between", value1, value2, "position"); + return (Criteria) this; + } + + public Criteria andPositionNotBetween(String value1, String value2) { + addCriterion("position not between", value1, value2, "position"); + return (Criteria) this; + } + + public Criteria andDepartmentIsNull() { + addCriterion("department is null"); + return (Criteria) this; + } + + public Criteria andDepartmentIsNotNull() { + addCriterion("department is not null"); + return (Criteria) this; + } + + public Criteria andDepartmentEqualTo(String value) { + addCriterion("department =", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentNotEqualTo(String value) { + addCriterion("department <>", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentGreaterThan(String value) { + addCriterion("department >", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentGreaterThanOrEqualTo(String value) { + addCriterion("department >=", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentLessThan(String value) { + addCriterion("department <", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentLessThanOrEqualTo(String value) { + addCriterion("department <=", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentLike(String value) { + addCriterion("department like", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentNotLike(String value) { + addCriterion("department not like", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentIn(List values) { + addCriterion("department in", values, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentNotIn(List values) { + addCriterion("department not in", values, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentBetween(String value1, String value2) { + addCriterion("department between", value1, value2, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentNotBetween(String value1, String value2) { + addCriterion("department not between", value1, value2, "department"); + return (Criteria) this; + } + + public Criteria andEmailIsNull() { + addCriterion("email is null"); + return (Criteria) this; + } + + public Criteria andEmailIsNotNull() { + addCriterion("email is not null"); + return (Criteria) this; + } + + public Criteria andEmailEqualTo(String value) { + addCriterion("email =", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailNotEqualTo(String value) { + addCriterion("email <>", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailGreaterThan(String value) { + addCriterion("email >", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailGreaterThanOrEqualTo(String value) { + addCriterion("email >=", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailLessThan(String value) { + addCriterion("email <", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailLessThanOrEqualTo(String value) { + addCriterion("email <=", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailLike(String value) { + addCriterion("email like", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailNotLike(String value) { + addCriterion("email not like", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailIn(List values) { + addCriterion("email in", values, "email"); + return (Criteria) this; + } + + public Criteria andEmailNotIn(List values) { + addCriterion("email not in", values, "email"); + return (Criteria) this; + } + + public Criteria andEmailBetween(String value1, String value2) { + addCriterion("email between", value1, value2, "email"); + return (Criteria) this; + } + + public Criteria andEmailNotBetween(String value1, String value2) { + addCriterion("email not between", value1, value2, "email"); + return (Criteria) this; + } + + public Criteria andPhonenumIsNull() { + addCriterion("phonenum is null"); + return (Criteria) this; + } + + public Criteria andPhonenumIsNotNull() { + addCriterion("phonenum is not null"); + return (Criteria) this; + } + + public Criteria andPhonenumEqualTo(String value) { + addCriterion("phonenum =", value, "phonenum"); + return (Criteria) this; + } + + public Criteria andPhonenumNotEqualTo(String value) { + addCriterion("phonenum <>", value, "phonenum"); + return (Criteria) this; + } + + public Criteria andPhonenumGreaterThan(String value) { + addCriterion("phonenum >", value, "phonenum"); + return (Criteria) this; + } + + public Criteria andPhonenumGreaterThanOrEqualTo(String value) { + addCriterion("phonenum >=", value, "phonenum"); + return (Criteria) this; + } + + public Criteria andPhonenumLessThan(String value) { + addCriterion("phonenum <", value, "phonenum"); + return (Criteria) this; + } + + public Criteria andPhonenumLessThanOrEqualTo(String value) { + addCriterion("phonenum <=", value, "phonenum"); + return (Criteria) this; + } + + public Criteria andPhonenumLike(String value) { + addCriterion("phonenum like", value, "phonenum"); + return (Criteria) this; + } + + public Criteria andPhonenumNotLike(String value) { + addCriterion("phonenum not like", value, "phonenum"); + return (Criteria) this; + } + + public Criteria andPhonenumIn(List values) { + addCriterion("phonenum in", values, "phonenum"); + return (Criteria) this; + } + + public Criteria andPhonenumNotIn(List values) { + addCriterion("phonenum not in", values, "phonenum"); + return (Criteria) this; + } + + public Criteria andPhonenumBetween(String value1, String value2) { + addCriterion("phonenum between", value1, value2, "phonenum"); + return (Criteria) this; + } + + public Criteria andPhonenumNotBetween(String value1, String value2) { + addCriterion("phonenum not between", value1, value2, "phonenum"); + return (Criteria) this; + } + + public Criteria andIsmanagerIsNull() { + addCriterion("ismanager is null"); + return (Criteria) this; + } + + public Criteria andIsmanagerIsNotNull() { + addCriterion("ismanager is not null"); + return (Criteria) this; + } + + public Criteria andIsmanagerEqualTo(Byte value) { + addCriterion("ismanager =", value, "ismanager"); + return (Criteria) this; + } + + public Criteria andIsmanagerNotEqualTo(Byte value) { + addCriterion("ismanager <>", value, "ismanager"); + return (Criteria) this; + } + + public Criteria andIsmanagerGreaterThan(Byte value) { + addCriterion("ismanager >", value, "ismanager"); + return (Criteria) this; + } + + public Criteria andIsmanagerGreaterThanOrEqualTo(Byte value) { + addCriterion("ismanager >=", value, "ismanager"); + return (Criteria) this; + } + + public Criteria andIsmanagerLessThan(Byte value) { + addCriterion("ismanager <", value, "ismanager"); + return (Criteria) this; + } + + public Criteria andIsmanagerLessThanOrEqualTo(Byte value) { + addCriterion("ismanager <=", value, "ismanager"); + return (Criteria) this; + } + + public Criteria andIsmanagerIn(List values) { + addCriterion("ismanager in", values, "ismanager"); + return (Criteria) this; + } + + public Criteria andIsmanagerNotIn(List values) { + addCriterion("ismanager not in", values, "ismanager"); + return (Criteria) this; + } + + public Criteria andIsmanagerBetween(Byte value1, Byte value2) { + addCriterion("ismanager between", value1, value2, "ismanager"); + return (Criteria) this; + } + + public Criteria andIsmanagerNotBetween(Byte value1, Byte value2) { + addCriterion("ismanager not between", value1, value2, "ismanager"); + return (Criteria) this; + } + + public Criteria andIsystemIsNull() { + addCriterion("isystem is null"); + return (Criteria) this; + } + + public Criteria andIsystemIsNotNull() { + addCriterion("isystem is not null"); + return (Criteria) this; + } + + public Criteria andIsystemEqualTo(Byte value) { + addCriterion("isystem =", value, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemNotEqualTo(Byte value) { + addCriterion("isystem <>", value, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemGreaterThan(Byte value) { + addCriterion("isystem >", value, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemGreaterThanOrEqualTo(Byte value) { + addCriterion("isystem >=", value, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemLessThan(Byte value) { + addCriterion("isystem <", value, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemLessThanOrEqualTo(Byte value) { + addCriterion("isystem <=", value, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemIn(List values) { + addCriterion("isystem in", values, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemNotIn(List values) { + addCriterion("isystem not in", values, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemBetween(Byte value1, Byte value2) { + addCriterion("isystem between", value1, value2, "isystem"); + return (Criteria) this; + } + + public Criteria andIsystemNotBetween(Byte value1, Byte value2) { + addCriterion("isystem not between", value1, value2, "isystem"); + return (Criteria) this; + } + + public Criteria andStatusIsNull() { + addCriterion("Status is null"); + return (Criteria) this; + } + + public Criteria andStatusIsNotNull() { + addCriterion("Status is not null"); + return (Criteria) this; + } + + public Criteria andStatusEqualTo(Byte value) { + addCriterion("Status =", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotEqualTo(Byte value) { + addCriterion("Status <>", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusGreaterThan(Byte value) { + addCriterion("Status >", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusGreaterThanOrEqualTo(Byte value) { + addCriterion("Status >=", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLessThan(Byte value) { + addCriterion("Status <", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLessThanOrEqualTo(Byte value) { + addCriterion("Status <=", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusIn(List values) { + addCriterion("Status in", values, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotIn(List values) { + addCriterion("Status not in", values, "status"); + return (Criteria) this; + } + + public Criteria andStatusBetween(Byte value1, Byte value2) { + addCriterion("Status between", value1, value2, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotBetween(Byte value1, Byte value2) { + addCriterion("Status not between", value1, value2, "status"); + return (Criteria) this; + } + + public Criteria andDescriptionIsNull() { + addCriterion("description is null"); + return (Criteria) this; + } + + public Criteria andDescriptionIsNotNull() { + addCriterion("description is not null"); + return (Criteria) this; + } + + public Criteria andDescriptionEqualTo(String value) { + addCriterion("description =", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotEqualTo(String value) { + addCriterion("description <>", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionGreaterThan(String value) { + addCriterion("description >", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionGreaterThanOrEqualTo(String value) { + addCriterion("description >=", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLessThan(String value) { + addCriterion("description <", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLessThanOrEqualTo(String value) { + addCriterion("description <=", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLike(String value) { + addCriterion("description like", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotLike(String value) { + addCriterion("description not like", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionIn(List values) { + addCriterion("description in", values, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotIn(List values) { + addCriterion("description not in", values, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionBetween(String value1, String value2) { + addCriterion("description between", value1, value2, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotBetween(String value1, String value2) { + addCriterion("description not between", value1, value2, "description"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNull() { + addCriterion("tenant_id is null"); + return (Criteria) this; + } + + public Criteria andTenantIdIsNotNull() { + addCriterion("tenant_id is not null"); + return (Criteria) this; + } + + public Criteria andTenantIdEqualTo(Long value) { + addCriterion("tenant_id =", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotEqualTo(Long value) { + addCriterion("tenant_id <>", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThan(Long value) { + addCriterion("tenant_id >", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdGreaterThanOrEqualTo(Long value) { + addCriterion("tenant_id >=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThan(Long value) { + addCriterion("tenant_id <", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdLessThanOrEqualTo(Long value) { + addCriterion("tenant_id <=", value, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdIn(List values) { + addCriterion("tenant_id in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotIn(List values) { + addCriterion("tenant_id not in", values, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdBetween(Long value1, Long value2) { + addCriterion("tenant_id between", value1, value2, "tenantId"); + return (Criteria) this; + } + + public Criteria andTenantIdNotBetween(Long value1, Long value2) { + addCriterion("tenant_id not between", value1, value2, "tenantId"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountHeadMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountHeadMapper.java new file mode 100644 index 000000000..0af096032 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountHeadMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.AccountHead; +import com.jsh.erp.datasource.entities.AccountHeadExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface AccountHeadMapper { + long countByExample(AccountHeadExample example); + + int deleteByExample(AccountHeadExample example); + + int deleteByPrimaryKey(Long id); + + int insert(AccountHead record); + + int insertSelective(AccountHead record); + + List selectByExample(AccountHeadExample example); + + AccountHead selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") AccountHead record, @Param("example") AccountHeadExample example); + + int updateByExample(@Param("record") AccountHead record, @Param("example") AccountHeadExample example); + + int updateByPrimaryKeySelective(AccountHead record); + + int updateByPrimaryKey(AccountHead record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountHeadMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountHeadMapperEx.java new file mode 100644 index 000000000..963bb10a6 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountHeadMapperEx.java @@ -0,0 +1,46 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.AccountHead; +import com.jsh.erp.datasource.entities.AccountHeadExample; +import com.jsh.erp.datasource.entities.AccountHeadVo4ListEx; +import org.apache.ibatis.annotations.Param; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +public interface AccountHeadMapperEx { + + List selectByConditionAccountHead( + @Param("type") String type, + @Param("creatorArray") String[] creatorArray, + @Param("billNo") String billNo, + @Param("beginTime") String beginTime, + @Param("endTime") String endTime, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByAccountHead( + @Param("type") String type, + @Param("creatorArray") String[] creatorArray, + @Param("billNo") String billNo, + @Param("beginTime") String beginTime, + @Param("endTime") String endTime); + + BigDecimal findAllMoney( + @Param("supplierId") Integer supplierId, + @Param("type") String type, + @Param("modeName") String modeName, + @Param("endTime") String endTime); + + List getDetailByNumber( + @Param("billNo") String billNo); + + int batchDeleteAccountHeadByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String[] ids); + + List getAccountHeadListByAccountIds(@Param("accountIds") String[] accountIds); + + List getAccountHeadListByOrganIds(@Param("organIds") String[] organIds); + + List getAccountHeadListByHandsPersonIds(@Param("handsPersonIds") String[] handsPersonIds); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountItemMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountItemMapper.java new file mode 100644 index 000000000..0ffe72021 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountItemMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.AccountItem; +import com.jsh.erp.datasource.entities.AccountItemExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface AccountItemMapper { + long countByExample(AccountItemExample example); + + int deleteByExample(AccountItemExample example); + + int deleteByPrimaryKey(Long id); + + int insert(AccountItem record); + + int insertSelective(AccountItem record); + + List selectByExample(AccountItemExample example); + + AccountItem selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") AccountItem record, @Param("example") AccountItemExample example); + + int updateByExample(@Param("record") AccountItem record, @Param("example") AccountItemExample example); + + int updateByPrimaryKeySelective(AccountItem record); + + int updateByPrimaryKey(AccountItem record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountItemMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountItemMapperEx.java new file mode 100644 index 000000000..a023f31f1 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountItemMapperEx.java @@ -0,0 +1,37 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.AccountItem; +import com.jsh.erp.datasource.entities.AccountItemExample; +import com.jsh.erp.datasource.vo.AccountItemVo4List; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +public interface AccountItemMapperEx { + + List selectByConditionAccountItem( + @Param("name") String name, + @Param("type") Integer type, + @Param("remark") String remark, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByAccountItem( + @Param("name") String name, + @Param("type") Integer type, + @Param("remark") String remark); + + List getDetailList( + @Param("headerId") Long headerId); + + int batchDeleteAccountItemByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String[] ids); + + List getAccountItemListByAccountIds(@Param("accountIds") String[] accountIds); + + List getAccountItemListByHeaderIds(@Param("headerIds") String[] headerIds); + + List getAccountItemListByInOutItemIds(@Param("inOutItemIds") String[] inOutItemIds); + + int batchDeleteAccountItemByHeadIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String[] ids); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountMapper.java new file mode 100644 index 000000000..8471428d4 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Account; +import com.jsh.erp.datasource.entities.AccountExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface AccountMapper { + long countByExample(AccountExample example); + + int deleteByExample(AccountExample example); + + int deleteByPrimaryKey(Long id); + + int insert(Account record); + + int insertSelective(Account record); + + List selectByExample(AccountExample example); + + Account selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") Account record, @Param("example") AccountExample example); + + int updateByExample(@Param("record") Account record, @Param("example") AccountExample example); + + int updateByPrimaryKeySelective(Account record); + + int updateByPrimaryKey(Account record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountMapperEx.java new file mode 100644 index 000000000..d6e12f342 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountMapperEx.java @@ -0,0 +1,40 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Account; +import com.jsh.erp.datasource.entities.AccountExample; +import com.jsh.erp.datasource.vo.AccountVo4InOutList; +import com.jsh.erp.datasource.vo.AccountVo4List; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +public interface AccountMapperEx { + + List getAccountByParam( + @Param("name") String name, + @Param("serialNo") String serialNo); + + List selectByConditionAccount( + @Param("name") String name, + @Param("serialNo") String serialNo, + @Param("remark") String remark, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByAccount( + @Param("name") String name, + @Param("serialNo") String serialNo, + @Param("remark") String remark); + + List findAccountInOutList( + @Param("accountId") Long accountId, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + int findAccountInOutListCount( + @Param("accountId") Long accountId); + + int batchDeleteAccountByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); + +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotHeadMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotHeadMapper.java new file mode 100644 index 000000000..15201e883 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotHeadMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.DepotHead; +import com.jsh.erp.datasource.entities.DepotHeadExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface DepotHeadMapper { + long countByExample(DepotHeadExample example); + + int deleteByExample(DepotHeadExample example); + + int deleteByPrimaryKey(Long id); + + int insert(DepotHead record); + + int insertSelective(DepotHead record); + + List selectByExample(DepotHeadExample example); + + DepotHead selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") DepotHead record, @Param("example") DepotHeadExample example); + + int updateByExample(@Param("record") DepotHead record, @Param("example") DepotHeadExample example); + + int updateByPrimaryKeySelective(DepotHead record); + + int updateByPrimaryKey(DepotHead record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotHeadMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotHeadMapperEx.java new file mode 100644 index 000000000..1fc51435e --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotHeadMapperEx.java @@ -0,0 +1,135 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.DepotHead; +import com.jsh.erp.datasource.vo.DepotHeadVo4InDetail; +import com.jsh.erp.datasource.vo.DepotHeadVo4InOutMCount; +import com.jsh.erp.datasource.vo.DepotHeadVo4List; +import com.jsh.erp.datasource.vo.DepotHeadVo4StatementAccount; +import org.apache.ibatis.annotations.Param; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/1/25 14:50 + */ +public interface DepotHeadMapperEx { + List selectByConditionDepotHead( + @Param("type") String type, + @Param("subType") String subType, + @Param("creatorArray") String[] creatorArray, + @Param("status") String status, + @Param("number") String number, + @Param("beginTime") String beginTime, + @Param("endTime") String endTime, + @Param("materialParam") String materialParam, + @Param("depotIds") String depotIds, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByDepotHead( + @Param("type") String type, + @Param("subType") String subType, + @Param("creatorArray") String[] creatorArray, + @Param("status") String status, + @Param("number") String number, + @Param("beginTime") String beginTime, + @Param("endTime") String endTime, + @Param("materialParam") String materialParam, + @Param("depotIds") String depotIds); + + String findMaterialsListByHeaderId( + @Param("id") Long id); + + List findByAll( + @Param("beginTime") String beginTime, + @Param("endTime") String endTime, + @Param("type") String type, + @Param("materialParam") String materialParam, + @Param("depotId") Integer depotId, + @Param("oId") Integer oId, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + int findByAllCount( + @Param("beginTime") String beginTime, + @Param("endTime") String endTime, + @Param("type") String type, + @Param("materialParam") String materialParam, + @Param("depotId") Integer depotId, + @Param("oId") Integer oId); + + List findInOutMaterialCount( + @Param("beginTime") String beginTime, + @Param("endTime") String endTime, + @Param("type") String type, + @Param("materialParam") String materialParam, + @Param("depotId") Integer depotId, + @Param("oId") Integer oId, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + int findInOutMaterialCountTotal( + @Param("beginTime") String beginTime, + @Param("endTime") String endTime, + @Param("type") String type, + @Param("materialParam") String materialParam, + @Param("depotId") Integer depotId, + @Param("oId") Integer oId); + + List findStatementAccount( + @Param("beginTime") String beginTime, + @Param("endTime") String endTime, + @Param("organId") Integer organId, + @Param("supType") String supType, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + int findStatementAccountCount( + @Param("beginTime") String beginTime, + @Param("endTime") String endTime, + @Param("organId") Integer organId, + @Param("supType") String supType); + + BigDecimal findAllMoney( + @Param("supplierId") Integer supplierId, + @Param("type") String type, + @Param("subType") String subType, + @Param("modeName") String modeName, + @Param("endTime") String endTime); + + BigDecimal findAllOtherMoney( + @Param("supplierId") Integer supplierId, + @Param("type") String type, + @Param("subType") String subType, + @Param("endTime") String endTime); + + List getDetailByNumber( + @Param("number") String number); + + int batchDeleteDepotHeadByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); + + List getDepotHeadListByAccountIds(@Param("accountIds") String[] accountIds); + + List getDepotHeadListByOrganIds(@Param("organIds") String[] organIds); + + List getDepotHeadListByCreator(@Param("creatorArray") String[] creatorArray); + + BigDecimal getBuyAndSaleStatistics( + @Param("type") String type, + @Param("subType") String subType, + @Param("hasSupplier") Integer hasSupplier, + @Param("beginTime") String beginTime, + @Param("endTime") String endTime); + + BigDecimal getBuyAndSaleRetailStatistics( + @Param("type") String type, + @Param("subType") String subType, + @Param("hasSupplier") Integer hasSupplier, + @Param("beginTime") String beginTime, + @Param("endTime") String endTime); +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotItemMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotItemMapper.java new file mode 100644 index 000000000..c361cb9f1 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotItemMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.DepotItem; +import com.jsh.erp.datasource.entities.DepotItemExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface DepotItemMapper { + long countByExample(DepotItemExample example); + + int deleteByExample(DepotItemExample example); + + int deleteByPrimaryKey(Long id); + + int insert(DepotItem record); + + int insertSelective(DepotItem record); + + List selectByExample(DepotItemExample example); + + DepotItem selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") DepotItem record, @Param("example") DepotItemExample example); + + int updateByExample(@Param("record") DepotItem record, @Param("example") DepotItemExample example); + + int updateByPrimaryKeySelective(DepotItem record); + + int updateByPrimaryKey(DepotItem record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotItemMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotItemMapperEx.java new file mode 100644 index 000000000..244539d5c --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotItemMapperEx.java @@ -0,0 +1,118 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.vo.DepotItemStockWarningCount; +import com.jsh.erp.datasource.vo.DepotItemVo4Stock; +import org.apache.ibatis.annotations.Param; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/1/24 16:59 + */ +public interface DepotItemMapperEx { + List selectByConditionDepotItem( + @Param("name") String name, + @Param("type") Integer type, + @Param("remark") String remark, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByDepotItem( + @Param("name") String name, + @Param("type") Integer type, + @Param("remark") String remark); + + List findDetailByTypeAndMaterialIdList( + @Param("mId") Long mId, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long findDetailByTypeAndMaterialIdCounts( + @Param("mId") Long mId); + + List getDetailList( + @Param("headerId") Long headerId); + + List findByAll( + @Param("materialParam") String materialParam, + @Param("endTime") String endTime, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + int findByAllCount( + @Param("materialParam") String materialParam, + @Param("endTime") String endTime); + + BigDecimal buyOrSaleNumber( + @Param("type") String type, + @Param("subType") String subType, + @Param("MId") Long MId, + @Param("MonthTime") String MonthTime, + @Param("sumType") String sumType); + + BigDecimal buyOrSalePrice( + @Param("type") String type, + @Param("subType") String subType, + @Param("MId") Long MId, + @Param("MonthTime") String MonthTime, + @Param("sumType") String sumType); + + BigDecimal inOrOutPrice( + @Param("type") String type, + @Param("subType") String subType, + @Param("MonthTime") String MonthTime); + + BigDecimal getStockCheckSum( + @Param("depotId") Long depotId, + @Param("mId") Long mId, + @Param("beginTime") String beginTime, + @Param("endTime") String endTime); + + DepotItemVo4Stock getStockByParam( + @Param("depotId") Long depotId, + @Param("mId") Long mId, + @Param("beginTime") String beginTime, + @Param("endTime") String endTime, + @Param("tenantId") Long tenantId); + + /** + * 通过单据主表id查询所有单据子表数据 + * @param depotheadId + * @param enableSerialNumber + * @return + */ + List findDepotItemListBydepotheadId(@Param("depotheadId")Long depotheadId, + @Param("enableSerialNumber")String enableSerialNumber); + /** + * 根据单据主表id删除单据子表数据 + * 物理删除,已弃用 + * */ + @Deprecated + int deleteDepotItemByDepotHeadIds(@Param("depotheadIds")Long []depotHeadIds); + /** + * 根据单据主表id删除单据子表数据 + * */ + int batchDeleteDepotItemByDepotHeadIds(@Param("depotheadIds")Long []depotHeadIds); + + int batchDeleteDepotItemByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); + + List getDepotItemListListByDepotIds(@Param("depotIds") String[] depotIds); + + List getDepotItemListListByMaterialIds(@Param("materialIds") String[] materialIds); + + List findStockWarningCount( + @Param("offset") Integer offset, + @Param("rows") Integer rows, + @Param("materialParam") String materialParam, + @Param("depotId") Long depotId); + + int findStockWarningCountTotal( + @Param("materialParam") String materialParam, + @Param("depotId") Long depotId); +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotMapper.java new file mode 100644 index 000000000..f42e00492 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotMapper.java @@ -0,0 +1,96 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Depot; +import com.jsh.erp.datasource.entities.DepotExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface DepotMapper { + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + int countByExample(DepotExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + int deleteByExample(DepotExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + int deleteByPrimaryKey(Long id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + int insert(Depot record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + int insertSelective(Depot record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + List selectByExample(DepotExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + Depot selectByPrimaryKey(Long id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + int updateByExampleSelective(@Param("record") Depot record, @Param("example") DepotExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + int updateByExample(@Param("record") Depot record, @Param("example") DepotExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + int updateByPrimaryKeySelective(Depot record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_depot + * + * @mbggenerated + */ + int updateByPrimaryKey(Depot record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotMapperEx.java new file mode 100644 index 000000000..42f58c39d --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotMapperEx.java @@ -0,0 +1,27 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Depot; +import com.jsh.erp.datasource.entities.DepotEx; +import com.jsh.erp.datasource.entities.DepotExample; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +public interface DepotMapperEx { + + List selectByConditionDepot( + @Param("name") String name, + @Param("type") Integer type, + @Param("remark") String remark, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByDepot( + @Param("name") String name, + @Param("type") Integer type, + @Param("remark") String remark); + + int batchDeleteDepotByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/FunctionMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/FunctionMapper.java new file mode 100644 index 000000000..ed3eb54d4 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/FunctionMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Function; +import com.jsh.erp.datasource.entities.FunctionExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface FunctionMapper { + long countByExample(FunctionExample example); + + int deleteByExample(FunctionExample example); + + int deleteByPrimaryKey(Long id); + + int insert(Function record); + + int insertSelective(Function record); + + List selectByExample(FunctionExample example); + + Function selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") Function record, @Param("example") FunctionExample example); + + int updateByExample(@Param("record") Function record, @Param("example") FunctionExample example); + + int updateByPrimaryKeySelective(Function record); + + int updateByPrimaryKey(Function record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/FunctionMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/FunctionMapperEx.java new file mode 100644 index 000000000..ae76f703c --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/FunctionMapperEx.java @@ -0,0 +1,22 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Function; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +public interface FunctionMapperEx { + + List selectByConditionFunction( + @Param("name") String name, + @Param("type") String type, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByFunction( + @Param("name") String name, + @Param("type") String type); + + int batchDeleteFunctionByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/InOutItemMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/InOutItemMapper.java new file mode 100644 index 000000000..1ce4b1731 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/InOutItemMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.InOutItem; +import com.jsh.erp.datasource.entities.InOutItemExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface InOutItemMapper { + long countByExample(InOutItemExample example); + + int deleteByExample(InOutItemExample example); + + int deleteByPrimaryKey(Long id); + + int insert(InOutItem record); + + int insertSelective(InOutItem record); + + List selectByExample(InOutItemExample example); + + InOutItem selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") InOutItem record, @Param("example") InOutItemExample example); + + int updateByExample(@Param("record") InOutItem record, @Param("example") InOutItemExample example); + + int updateByPrimaryKeySelective(InOutItem record); + + int updateByPrimaryKey(InOutItem record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/InOutItemMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/InOutItemMapperEx.java new file mode 100644 index 000000000..903aa40af --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/InOutItemMapperEx.java @@ -0,0 +1,25 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.InOutItem; +import com.jsh.erp.datasource.entities.InOutItemExample; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +public interface InOutItemMapperEx { + + List selectByConditionInOutItem( + @Param("name") String name, + @Param("type") String type, + @Param("remark") String remark, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByInOutItem( + @Param("name") String name, + @Param("type") String type, + @Param("remark") String remark); + + int batchDeleteInOutItemByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/LogMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/LogMapper.java new file mode 100644 index 000000000..343b759b2 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/LogMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Log; +import com.jsh.erp.datasource.entities.LogExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface LogMapper { + long countByExample(LogExample example); + + int deleteByExample(LogExample example); + + int deleteByPrimaryKey(Long id); + + int insert(Log record); + + int insertSelective(Log record); + + List selectByExample(LogExample example); + + Log selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") Log record, @Param("example") LogExample example); + + int updateByExample(@Param("record") Log record, @Param("example") LogExample example); + + int updateByPrimaryKeySelective(Log record); + + int updateByPrimaryKey(Log record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/LogMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/LogMapperEx.java new file mode 100644 index 000000000..655c73cc3 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/LogMapperEx.java @@ -0,0 +1,31 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Log; +import com.jsh.erp.datasource.entities.LogExample; +import com.jsh.erp.datasource.vo.LogVo4List; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface LogMapperEx { + + List selectByConditionLog( + @Param("operation") String operation, + @Param("userId") Integer userId, + @Param("clientIp") String clientIp, + @Param("status") Integer status, + @Param("beginTime") String beginTime, + @Param("endTime") String endTime, + @Param("content") String content, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByLog( + @Param("operation") String operation, + @Param("userId") Integer userId, + @Param("clientIp") String clientIp, + @Param("status") Integer status, + @Param("beginTime") String beginTime, + @Param("endTime") String endTime, + @Param("content") String content); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialCategoryMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialCategoryMapper.java new file mode 100644 index 000000000..c86856672 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialCategoryMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.MaterialCategory; +import com.jsh.erp.datasource.entities.MaterialCategoryExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface MaterialCategoryMapper { + long countByExample(MaterialCategoryExample example); + + int deleteByExample(MaterialCategoryExample example); + + int deleteByPrimaryKey(Long id); + + int insert(MaterialCategory record); + + int insertSelective(MaterialCategory record); + + List selectByExample(MaterialCategoryExample example); + + MaterialCategory selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") MaterialCategory record, @Param("example") MaterialCategoryExample example); + + int updateByExample(@Param("record") MaterialCategory record, @Param("example") MaterialCategoryExample example); + + int updateByPrimaryKeySelective(MaterialCategory record); + + int updateByPrimaryKey(MaterialCategory record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialCategoryMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialCategoryMapperEx.java new file mode 100644 index 000000000..f609c4c82 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialCategoryMapperEx.java @@ -0,0 +1,42 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.MaterialCategory; +import com.jsh.erp.datasource.vo.TreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/2/18 17:23 + */ +public interface MaterialCategoryMapperEx { + List selectByConditionMaterialCategory( + @Param("name") String name, + @Param("parentId") Integer parentId, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByMaterialCategory( + @Param("name") String name, + @Param("parentId") Integer parentId); + + List getNodeTree(@Param("currentId")Long currentId); + List getNextNodeTree(Map parameterMap); + + int addMaterialCategory(MaterialCategory mc); + + int batchDeleteMaterialCategoryByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); + + int editMaterialCategory(MaterialCategory mc); + + List getMaterialCategoryBySerialNo(@Param("serialNo") String serialNo, @Param("id") Long id); + + List getMaterialCategoryListByCategoryIds(@Param("parentIds") String[] categoryIds); + + List getListByParentId(@Param("parentId") Long parentId); +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialCurrentStockMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialCurrentStockMapper.java new file mode 100644 index 000000000..5f911a919 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialCurrentStockMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.MaterialCurrentStock; +import com.jsh.erp.datasource.entities.MaterialCurrentStockExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface MaterialCurrentStockMapper { + long countByExample(MaterialCurrentStockExample example); + + int deleteByExample(MaterialCurrentStockExample example); + + int deleteByPrimaryKey(Long id); + + int insert(MaterialCurrentStock record); + + int insertSelective(MaterialCurrentStock record); + + List selectByExample(MaterialCurrentStockExample example); + + MaterialCurrentStock selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") MaterialCurrentStock record, @Param("example") MaterialCurrentStockExample example); + + int updateByExample(@Param("record") MaterialCurrentStock record, @Param("example") MaterialCurrentStockExample example); + + int updateByPrimaryKeySelective(MaterialCurrentStock record); + + int updateByPrimaryKey(MaterialCurrentStock record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialExtendMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialExtendMapper.java new file mode 100644 index 000000000..9163eb146 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialExtendMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.MaterialExtend; +import com.jsh.erp.datasource.entities.MaterialExtendExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface MaterialExtendMapper { + long countByExample(MaterialExtendExample example); + + int deleteByExample(MaterialExtendExample example); + + int deleteByPrimaryKey(Long id); + + int insert(MaterialExtend record); + + int insertSelective(MaterialExtend record); + + List selectByExample(MaterialExtendExample example); + + MaterialExtend selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") MaterialExtend record, @Param("example") MaterialExtendExample example); + + int updateByExample(@Param("record") MaterialExtend record, @Param("example") MaterialExtendExample example); + + int updateByPrimaryKeySelective(MaterialExtend record); + + int updateByPrimaryKey(MaterialExtend record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialExtendMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialExtendMapperEx.java new file mode 100644 index 000000000..9eb1db013 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialExtendMapperEx.java @@ -0,0 +1,25 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.MaterialExtend; +import com.jsh.erp.datasource.vo.MaterialExtendVo4List; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +public interface MaterialExtendMapperEx { + + int batchDeleteMaterialExtendByIds(@Param("ids") String ids[]); + + List getDetailList( + @Param("materialId") Long materialId); + + Long getMaxTimeByTenantAndTime( + @Param("tenantId") Long tenantId, + @Param("lastTime") Long lastTime, + @Param("syncNum") Long syncNum); + + List getListByMId(@Param("ids") Long ids[]); + + int batchDeleteMaterialExtendByMIds(@Param("ids") String ids[]); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialInitialStockMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialInitialStockMapper.java new file mode 100644 index 000000000..44c56c781 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialInitialStockMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.MaterialInitialStock; +import com.jsh.erp.datasource.entities.MaterialInitialStockExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface MaterialInitialStockMapper { + long countByExample(MaterialInitialStockExample example); + + int deleteByExample(MaterialInitialStockExample example); + + int deleteByPrimaryKey(Long id); + + int insert(MaterialInitialStock record); + + int insertSelective(MaterialInitialStock record); + + List selectByExample(MaterialInitialStockExample example); + + MaterialInitialStock selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") MaterialInitialStock record, @Param("example") MaterialInitialStockExample example); + + int updateByExample(@Param("record") MaterialInitialStock record, @Param("example") MaterialInitialStockExample example); + + int updateByPrimaryKeySelective(MaterialInitialStock record); + + int updateByPrimaryKey(MaterialInitialStock record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapper.java new file mode 100644 index 000000000..cb61c590a --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Material; +import com.jsh.erp.datasource.entities.MaterialExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface MaterialMapper { + long countByExample(MaterialExample example); + + int deleteByExample(MaterialExample example); + + int deleteByPrimaryKey(Long id); + + int insert(Material record); + + int insertSelective(Material record); + + List selectByExample(MaterialExample example); + + Material selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") Material record, @Param("example") MaterialExample example); + + int updateByExample(@Param("record") Material record, @Param("example") MaterialExample example); + + int updateByPrimaryKeySelective(Material record); + + int updateByPrimaryKey(Material record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapperEx.java new file mode 100644 index 000000000..0522c6d0c --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapperEx.java @@ -0,0 +1,88 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.AccountHead; +import com.jsh.erp.datasource.entities.Material; +import com.jsh.erp.datasource.entities.MaterialVo4Unit; +import com.jsh.erp.datasource.entities.Unit; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/1/22 14:54 + */ +public interface MaterialMapperEx { + + List selectByConditionMaterial( + @Param("barCode") String barCode, + @Param("name") String name, + @Param("standard") String standard, + @Param("model") String model, + @Param("idList") List idList, + @Param("mpList") String mpList, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByMaterial( + @Param("barCode") String barCode, + @Param("name") String name, + @Param("standard") String standard, + @Param("model") String model, + @Param("idList") List idList, + @Param("mpList") String mpList); + + List findUnitList(@Param("mId") Long mId); + + List findById(@Param("id") Long id); + + List findByIdWithBarCode(@Param("meId") Long meId); + + List findBySelectWithBarCode(@Param("idList") List idList, + @Param("q") String q, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + int findBySelectWithBarCodeCount(@Param("idList") List idList, + @Param("q") String q); + + List findByAll( + @Param("barCode") String barCode, + @Param("name") String name, + @Param("standard") String standard, + @Param("model") String model, + @Param("idList") List idList); + /** + * 通过商品名称查询商品信息 + * */ + List findByMaterialName(@Param("name") String name); + /** + * 获取开启序列号并且状态正常的商品列表 + * */ + List getMaterialEnableSerialNumberList(@Param("q") String q, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long getMaterialEnableSerialNumberCount(@Param("q") String q); + + int batchDeleteMaterialByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); + + List getMaterialListByCategoryIds(@Param("categoryIds") String[] categoryIds); + + List getMaterialListByUnitIds(@Param("unitIds") String[] unitIds); + + String getMaxBarCode(); + + List getMaterialByMeId( + @Param("meId") Long meId); + + List getMaterialNameList(); + + int setUnitIdToNull(@Param("id") Long id); + + List getMaterialByBarCode(@Param("barCode") String barCode); +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialPropertyMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialPropertyMapper.java new file mode 100644 index 000000000..dc3e5880f --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialPropertyMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.MaterialProperty; +import com.jsh.erp.datasource.entities.MaterialPropertyExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface MaterialPropertyMapper { + long countByExample(MaterialPropertyExample example); + + int deleteByExample(MaterialPropertyExample example); + + int deleteByPrimaryKey(Long id); + + int insert(MaterialProperty record); + + int insertSelective(MaterialProperty record); + + List selectByExample(MaterialPropertyExample example); + + MaterialProperty selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") MaterialProperty record, @Param("example") MaterialPropertyExample example); + + int updateByExample(@Param("record") MaterialProperty record, @Param("example") MaterialPropertyExample example); + + int updateByPrimaryKeySelective(MaterialProperty record); + + int updateByPrimaryKey(MaterialProperty record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialPropertyMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialPropertyMapperEx.java new file mode 100644 index 000000000..7404be525 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MaterialPropertyMapperEx.java @@ -0,0 +1,20 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.MaterialProperty; +import com.jsh.erp.datasource.entities.MaterialPropertyExample; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +public interface MaterialPropertyMapperEx { + + List selectByConditionMaterialProperty( + @Param("name") String name, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByMaterialProperty(@Param("name") String name); + + int batchDeleteMaterialPropertyByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MsgMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MsgMapper.java new file mode 100644 index 000000000..dc3cd823a --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MsgMapper.java @@ -0,0 +1,96 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Msg; +import com.jsh.erp.datasource.entities.MsgExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface MsgMapper { + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + int countByExample(MsgExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + int deleteByExample(MsgExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + int deleteByPrimaryKey(Long id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + int insert(Msg record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + int insertSelective(Msg record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + List selectByExample(MsgExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + Msg selectByPrimaryKey(Long id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + int updateByExampleSelective(@Param("record") Msg record, @Param("example") MsgExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + int updateByExample(@Param("record") Msg record, @Param("example") MsgExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + int updateByPrimaryKeySelective(Msg record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_msg + * + * @mbggenerated + */ + int updateByPrimaryKey(Msg record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MsgMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MsgMapperEx.java new file mode 100644 index 000000000..ff8b0d0c4 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/MsgMapperEx.java @@ -0,0 +1,27 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Msg; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface MsgMapperEx { + + List selectByConditionMsg( + @Param("name") String name, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByMsg( + @Param("name") String name); + + int batchDeleteMsgByIds(@Param("ids") String ids[]); + + int insertSelectiveByTask(Msg record); + + int checkIsNameExistByTask(@Param("msgTitle") String msgTitle); + + Long getMsgCountByStatus( + @Param("status") String status, + @Param("userId") Long userId); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/OrgaUserRelMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/OrgaUserRelMapper.java new file mode 100644 index 000000000..aaedd2474 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/OrgaUserRelMapper.java @@ -0,0 +1,96 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.OrgaUserRel; +import com.jsh.erp.datasource.entities.OrgaUserRelExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface OrgaUserRelMapper { + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + int countByExample(OrgaUserRelExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + int deleteByExample(OrgaUserRelExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + int deleteByPrimaryKey(Long id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + int insert(OrgaUserRel record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + int insertSelective(OrgaUserRel record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + List selectByExample(OrgaUserRelExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + OrgaUserRel selectByPrimaryKey(Long id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + int updateByExampleSelective(@Param("record") OrgaUserRel record, @Param("example") OrgaUserRelExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + int updateByExample(@Param("record") OrgaUserRel record, @Param("example") OrgaUserRelExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + int updateByPrimaryKeySelective(OrgaUserRel record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_orga_user_rel + * + * @mbggenerated + */ + int updateByPrimaryKey(OrgaUserRel record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/OrgaUserRelMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/OrgaUserRelMapperEx.java new file mode 100644 index 000000000..7a2017f72 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/OrgaUserRelMapperEx.java @@ -0,0 +1,14 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.OrgaUserRel; /** + * Description + * + * @Author: cjl + * @Date: 2019/3/12 9:13 + */ +public interface OrgaUserRelMapperEx { + + int addOrgaUserRel(OrgaUserRel orgaUserRel); + + int updateOrgaUserRel(OrgaUserRel orgaUserRel); +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/OrganizationMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/OrganizationMapper.java new file mode 100644 index 000000000..23dfab933 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/OrganizationMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Organization; +import com.jsh.erp.datasource.entities.OrganizationExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface OrganizationMapper { + long countByExample(OrganizationExample example); + + int deleteByExample(OrganizationExample example); + + int deleteByPrimaryKey(Long id); + + int insert(Organization record); + + int insertSelective(Organization record); + + List selectByExample(OrganizationExample example); + + Organization selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") Organization record, @Param("example") OrganizationExample example); + + int updateByExample(@Param("record") Organization record, @Param("example") OrganizationExample example); + + int updateByPrimaryKeySelective(Organization record); + + int updateByPrimaryKey(Organization record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/OrganizationMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/OrganizationMapperEx.java new file mode 100644 index 000000000..20e41b207 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/OrganizationMapperEx.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.MaterialCategory; +import com.jsh.erp.datasource.entities.Organization; +import com.jsh.erp.datasource.vo.TreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/3/6 15:51 + */ +public interface OrganizationMapperEx { + + + List getNodeTree(@Param("currentId")Long currentId); + List getNextNodeTree(Map parameterMap); + + int addOrganization(Organization org); + + int batchDeleteOrganizationByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); + + int editOrganization(Organization org); + List getOrganizationRootByIds(@Param("ids") String ids[]); +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/PersonMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/PersonMapper.java new file mode 100644 index 000000000..8b852cb20 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/PersonMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Person; +import com.jsh.erp.datasource.entities.PersonExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface PersonMapper { + long countByExample(PersonExample example); + + int deleteByExample(PersonExample example); + + int deleteByPrimaryKey(Long id); + + int insert(Person record); + + int insertSelective(Person record); + + List selectByExample(PersonExample example); + + Person selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") Person record, @Param("example") PersonExample example); + + int updateByExample(@Param("record") Person record, @Param("example") PersonExample example); + + int updateByPrimaryKeySelective(Person record); + + int updateByPrimaryKey(Person record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/PersonMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/PersonMapperEx.java new file mode 100644 index 000000000..539288118 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/PersonMapperEx.java @@ -0,0 +1,23 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Person; +import com.jsh.erp.datasource.entities.PersonExample; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +public interface PersonMapperEx { + + List selectByConditionPerson( + @Param("name") String name, + @Param("type") String type, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByPerson( + @Param("name") String name, + @Param("type") String type); + + int batchDeletePersonByIds(@Param("ids") String ids[]); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/PlatformConfigMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/PlatformConfigMapper.java new file mode 100644 index 000000000..08d6062fa --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/PlatformConfigMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.PlatformConfig; +import com.jsh.erp.datasource.entities.PlatformConfigExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface PlatformConfigMapper { + long countByExample(PlatformConfigExample example); + + int deleteByExample(PlatformConfigExample example); + + int deleteByPrimaryKey(Long id); + + int insert(PlatformConfig record); + + int insertSelective(PlatformConfig record); + + List selectByExample(PlatformConfigExample example); + + PlatformConfig selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") PlatformConfig record, @Param("example") PlatformConfigExample example); + + int updateByExample(@Param("record") PlatformConfig record, @Param("example") PlatformConfigExample example); + + int updateByPrimaryKeySelective(PlatformConfig record); + + int updateByPrimaryKey(PlatformConfig record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/PlatformConfigMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/PlatformConfigMapperEx.java new file mode 100644 index 000000000..dcedf05db --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/PlatformConfigMapperEx.java @@ -0,0 +1,19 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.PlatformConfig; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +public interface PlatformConfigMapperEx { + + List selectByConditionPlatformConfig( + @Param("key") String key, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByPlatformConfig( + @Param("key") String key); + +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/RoleMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/RoleMapper.java new file mode 100644 index 000000000..18cd6a543 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/RoleMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Role; +import com.jsh.erp.datasource.entities.RoleExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface RoleMapper { + long countByExample(RoleExample example); + + int deleteByExample(RoleExample example); + + int deleteByPrimaryKey(Long id); + + int insert(Role record); + + int insertSelective(Role record); + + List selectByExample(RoleExample example); + + Role selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") Role record, @Param("example") RoleExample example); + + int updateByExample(@Param("record") Role record, @Param("example") RoleExample example); + + int updateByPrimaryKeySelective(Role record); + + int updateByPrimaryKey(Role record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/RoleMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/RoleMapperEx.java new file mode 100644 index 000000000..969a0cd46 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/RoleMapperEx.java @@ -0,0 +1,21 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Role; +import com.jsh.erp.datasource.entities.RoleExample; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +public interface RoleMapperEx { + + List selectByConditionRole( + @Param("name") String name, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByRole( + @Param("name") String name); + + int batchDeleteRoleByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SequenceMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SequenceMapperEx.java new file mode 100644 index 000000000..7533681d7 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SequenceMapperEx.java @@ -0,0 +1,13 @@ +package com.jsh.erp.datasource.mappers; + +import org.apache.ibatis.annotations.Param; + +public interface SequenceMapperEx { + + void updateBuildOnlyNumber(); + + /** + * 获得一个全局唯一的数作为订单号的追加 + * */ + Long getBuildOnlyNumber(@Param("seq_name") String seq_name); +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SerialNumberMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SerialNumberMapper.java new file mode 100644 index 000000000..3480e124c --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SerialNumberMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.SerialNumber; +import com.jsh.erp.datasource.entities.SerialNumberExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface SerialNumberMapper { + long countByExample(SerialNumberExample example); + + int deleteByExample(SerialNumberExample example); + + int deleteByPrimaryKey(Long id); + + int insert(SerialNumber record); + + int insertSelective(SerialNumber record); + + List selectByExample(SerialNumberExample example); + + SerialNumber selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") SerialNumber record, @Param("example") SerialNumberExample example); + + int updateByExample(@Param("record") SerialNumber record, @Param("example") SerialNumberExample example); + + int updateByPrimaryKeySelective(SerialNumber record); + + int updateByPrimaryKey(SerialNumber record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SerialNumberMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SerialNumberMapperEx.java new file mode 100644 index 000000000..d43f383bb --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SerialNumberMapperEx.java @@ -0,0 +1,65 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.SerialNumberEx; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/1/21 17:09 + */ +public interface SerialNumberMapperEx { + /** + * 根据条件查询序列号列表 + * */ + List selectByConditionSerialNumber(@Param("serialNumber") String serialNumber, @Param("materialName") String materialName,@Param("offset") Integer offset,@Param("rows") Integer rows); + /** + * 根据条件查询序列号数量 + * */ + Long countSerialNumber(@Param("serialNumber")String serialNumber,@Param("materialName")String materialName); + /** + * 通过id查询序列号复合信息 + * */ + List findById(Long id); + /** + * 通过序列号查询序列号实体信息 + * */ + List findBySerialNumber(@Param("serialNumber") String serialNumber); + /** + * 新增序列号信息 + * */ + int addSerialNumber(SerialNumberEx serialNumberEx); + /** + * 修改序列号信息 + * */ + int updateSerialNumber(SerialNumberEx serialNumberEx); + /** + * 查询指定商品下有效的序列号数量 + * 未删除为卖出的视为有效 + * */ + int findSerialNumberByMaterialId(@Param("materialId") Long materialId); + /** + * 查询符合条件的序列号数量 + * */ + int countSerialNumberByMaterialIdAndDepotheadId(@Param("materialId")Long materialId, @Param("depotHeadId")Long depotHeadId, @Param("isSell")String isSell); + /** + * 卖出: update jsh_serial_number set is_Sell='1' ,depothead_Id='depotheadId' where 1=1 and material_Id='materialId' + * and is_Sell !='1' and delete_Flag !='1' {limit 0,count} + * */ + int sellSerialNumber(@Param("materialId")Long materialId, @Param("depotHeadId")Long depotHeadId,@Param("count")Integer count, @Param("updateTime") Date updateTime,@Param("updater") Long updater); + /** + * 赎回:update jsh_serial_number set is_Sell='0',depothead_Id=null where 1=1 and material_Id='materialId' + * and depothead_Id='depotheadId' and is_Sell !='0' and delete_Flag !='1' {limit 0,count} + * */ + int cancelSerialNumber(@Param("materialId")Long materialId, @Param("depotHeadId")Long depotHeadId, @Param("count")Integer count, @Param("updateTime") Date updateTime,@Param("updater") Long updater); + /** + * 批量添加序列号 + * */ + int batAddSerialNumber(@Param("list") List list); + + int batchDeleteSerialNumberByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SupplierMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SupplierMapper.java new file mode 100644 index 000000000..51bdba96b --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SupplierMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Supplier; +import com.jsh.erp.datasource.entities.SupplierExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface SupplierMapper { + long countByExample(SupplierExample example); + + int deleteByExample(SupplierExample example); + + int deleteByPrimaryKey(Long id); + + int insert(Supplier record); + + int insertSelective(Supplier record); + + List selectByExample(SupplierExample example); + + Supplier selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") Supplier record, @Param("example") SupplierExample example); + + int updateByExample(@Param("record") Supplier record, @Param("example") SupplierExample example); + + int updateByPrimaryKeySelective(Supplier record); + + int updateByPrimaryKey(Supplier record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SupplierMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SupplierMapperEx.java new file mode 100644 index 000000000..851a8806a --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SupplierMapperEx.java @@ -0,0 +1,33 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Supplier; +import com.jsh.erp.datasource.entities.SupplierExample; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +public interface SupplierMapperEx { + + List selectByConditionSupplier( + @Param("supplier") String supplier, + @Param("type") String type, + @Param("phonenum") String phonenum, + @Param("telephone") String telephone, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsBySupplier( + @Param("supplier") String supplier, + @Param("type") String type, + @Param("phonenum") String phonenum, + @Param("telephone") String telephone); + + List findByAll( + @Param("supplier") String supplier, + @Param("type") String type, + @Param("phonenum") String phonenum, + @Param("telephone") String telephone); + + int batchDeleteSupplierByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SystemConfigMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SystemConfigMapper.java new file mode 100644 index 000000000..3ba366045 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SystemConfigMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.SystemConfig; +import com.jsh.erp.datasource.entities.SystemConfigExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface SystemConfigMapper { + long countByExample(SystemConfigExample example); + + int deleteByExample(SystemConfigExample example); + + int deleteByPrimaryKey(Long id); + + int insert(SystemConfig record); + + int insertSelective(SystemConfig record); + + List selectByExample(SystemConfigExample example); + + SystemConfig selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") SystemConfig record, @Param("example") SystemConfigExample example); + + int updateByExample(@Param("record") SystemConfig record, @Param("example") SystemConfigExample example); + + int updateByPrimaryKeySelective(SystemConfig record); + + int updateByPrimaryKey(SystemConfig record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SystemConfigMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SystemConfigMapperEx.java new file mode 100644 index 000000000..e4903cef2 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SystemConfigMapperEx.java @@ -0,0 +1,21 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.SystemConfig; +import com.jsh.erp.datasource.entities.SystemConfigExample; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +public interface SystemConfigMapperEx { + + List selectByConditionSystemConfig( + @Param("companyName") String companyName, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsBySystemConfig( + @Param("companyName") String companyName); + + int batchDeleteSystemConfigByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/TenantMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/TenantMapper.java new file mode 100644 index 000000000..04069777e --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/TenantMapper.java @@ -0,0 +1,96 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Tenant; +import com.jsh.erp.datasource.entities.TenantExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface TenantMapper { + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + int countByExample(TenantExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + int deleteByExample(TenantExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + int deleteByPrimaryKey(Long id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + int insert(Tenant record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + int insertSelective(Tenant record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + List selectByExample(TenantExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + Tenant selectByPrimaryKey(Long id); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + int updateByExampleSelective(@Param("record") Tenant record, @Param("example") TenantExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + int updateByExample(@Param("record") Tenant record, @Param("example") TenantExample example); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + int updateByPrimaryKeySelective(Tenant record); + + /** + * This method was generated by MyBatis Generator. + * This method corresponds to the database table jsh_tenant + * + * @mbggenerated + */ + int updateByPrimaryKey(Tenant record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/TenantMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/TenantMapperEx.java new file mode 100644 index 000000000..39af69e7b --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/TenantMapperEx.java @@ -0,0 +1,17 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Tenant; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface TenantMapperEx { + + List selectByConditionTenant( + @Param("loginName") String loginName, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByTenant( + @Param("loginName") String loginName); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UnitMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UnitMapper.java new file mode 100644 index 000000000..83b781381 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UnitMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Unit; +import com.jsh.erp.datasource.entities.UnitExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface UnitMapper { + long countByExample(UnitExample example); + + int deleteByExample(UnitExample example); + + int deleteByPrimaryKey(Long id); + + int insert(Unit record); + + int insertSelective(Unit record); + + List selectByExample(UnitExample example); + + Unit selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") Unit record, @Param("example") UnitExample example); + + int updateByExample(@Param("record") Unit record, @Param("example") UnitExample example); + + int updateByPrimaryKeySelective(Unit record); + + int updateByPrimaryKey(Unit record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UnitMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UnitMapperEx.java new file mode 100644 index 000000000..960cc3f9b --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UnitMapperEx.java @@ -0,0 +1,21 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.Unit; +import com.jsh.erp.datasource.entities.UnitExample; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +public interface UnitMapperEx { + + List selectByConditionUnit( + @Param("name") String name, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByUnit( + @Param("name") String name); + + int batchDeleteUnitByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UserBusinessMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UserBusinessMapper.java new file mode 100644 index 000000000..73ccc5ba6 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UserBusinessMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.UserBusiness; +import com.jsh.erp.datasource.entities.UserBusinessExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface UserBusinessMapper { + long countByExample(UserBusinessExample example); + + int deleteByExample(UserBusinessExample example); + + int deleteByPrimaryKey(Long id); + + int insert(UserBusiness record); + + int insertSelective(UserBusiness record); + + List selectByExample(UserBusinessExample example); + + UserBusiness selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") UserBusiness record, @Param("example") UserBusinessExample example); + + int updateByExample(@Param("record") UserBusiness record, @Param("example") UserBusinessExample example); + + int updateByPrimaryKeySelective(UserBusiness record); + + int updateByPrimaryKey(UserBusiness record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UserBusinessMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UserBusinessMapperEx.java new file mode 100644 index 000000000..d1396672b --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UserBusinessMapperEx.java @@ -0,0 +1,15 @@ +package com.jsh.erp.datasource.mappers; + +import org.apache.ibatis.annotations.Param; + +import java.util.Date; /** + * Description + * + * @Author: qiankunpingtai + * @Date: 2019/3/29 15:09 + */ +public interface UserBusinessMapperEx { + + int batchDeleteUserBusinessByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UserMapper.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UserMapper.java new file mode 100644 index 000000000..a5aef02a9 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UserMapper.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.entities.UserExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface UserMapper { + long countByExample(UserExample example); + + int deleteByExample(UserExample example); + + int deleteByPrimaryKey(Long id); + + int insert(User record); + + int insertSelective(User record); + + List selectByExample(UserExample example); + + User selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") User record, @Param("example") UserExample example); + + int updateByExample(@Param("record") User record, @Param("example") UserExample example); + + int updateByPrimaryKeySelective(User record); + + int updateByPrimaryKey(User record); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UserMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UserMapperEx.java new file mode 100644 index 000000000..eff461d8b --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/UserMapperEx.java @@ -0,0 +1,33 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.entities.UserEx; +import com.jsh.erp.datasource.entities.UserExample; +import com.jsh.erp.datasource.vo.TreeNode; +import com.jsh.erp.datasource.vo.TreeNodeEx; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +public interface UserMapperEx { + + List selectByConditionUser( + @Param("userName") String userName, + @Param("loginName") String loginName, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + Long countsByUser( + @Param("userName") String userName, + @Param("loginName") String loginName); + + List getUserListByUserNameOrLoginName(@Param("userName") String userName, + @Param("loginName") String loginName); + + int batDeleteOrUpdateUser(@Param("ids") String ids[], @Param("status") byte status); + + List getNodeTree(); + List getNextNodeTree(Map parameterMap); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/AccountItemVo4List.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/AccountItemVo4List.java new file mode 100644 index 000000000..d3da5ada2 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/AccountItemVo4List.java @@ -0,0 +1,26 @@ +package com.jsh.erp.datasource.vo; + +import com.jsh.erp.datasource.entities.AccountItem; + +public class AccountItemVo4List extends AccountItem { + + private String accountName; + + private String inOutItemName; + + public String getAccountName() { + return accountName; + } + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + public String getInOutItemName() { + return inOutItemName; + } + + public void setInOutItemName(String inOutItemName) { + this.inOutItemName = inOutItemName; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/AccountVo4InOutList.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/AccountVo4InOutList.java new file mode 100644 index 000000000..544f25730 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/AccountVo4InOutList.java @@ -0,0 +1,96 @@ +package com.jsh.erp.datasource.vo; + +import java.math.BigDecimal; + +public class AccountVo4InOutList { + + private String number; + + private String type; + + private String supplierName; + + private BigDecimal changeAmount; + + private BigDecimal balance; + + private String operTime; + + private String aList; + + private String amList; + + private Long tenantId; + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getSupplierName() { + return supplierName; + } + + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; + } + + public BigDecimal getChangeAmount() { + return changeAmount; + } + + public void setChangeAmount(BigDecimal changeAmount) { + this.changeAmount = changeAmount; + } + + public BigDecimal getBalance() { + return balance; + } + + public void setBalance(BigDecimal balance) { + this.balance = balance; + } + + public String getOperTime() { + return operTime; + } + + public void setOperTime(String operTime) { + this.operTime = operTime; + } + + public String getaList() { + return aList; + } + + public void setaList(String aList) { + this.aList = aList; + } + + public String getAmList() { + return amList; + } + + public void setAmList(String amList) { + this.amList = amList; + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/AccountVo4List.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/AccountVo4List.java new file mode 100644 index 000000000..c96bf0af3 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/AccountVo4List.java @@ -0,0 +1,16 @@ +package com.jsh.erp.datasource.vo; + +import com.jsh.erp.datasource.entities.Account; + +public class AccountVo4List extends Account{ + + private String thisMonthAmount; + + public String getThisMonthAmount() { + return thisMonthAmount; + } + + public void setThisMonthAmount(String thisMonthAmount) { + this.thisMonthAmount = thisMonthAmount; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotHeadVo4InDetail.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotHeadVo4InDetail.java new file mode 100644 index 000000000..14cbec70e --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotHeadVo4InDetail.java @@ -0,0 +1,128 @@ +package com.jsh.erp.datasource.vo; + + +import java.math.BigDecimal; +import java.util.Date; + +public class DepotHeadVo4InDetail { + + private String Number; + + private String MName; + + private String Model; + + private String standard; + + private BigDecimal UnitPrice; + + private BigDecimal OperNumber; + + private BigDecimal AllPrice; + + private String SName; + + private String DName; + + private String OperTime; + + private String NewType; + + private Long tenantId; + + public String getNumber() { + return Number; + } + + public void setNumber(String number) { + Number = number; + } + + public String getMName() { + return MName; + } + + public void setMName(String MName) { + this.MName = MName; + } + + public String getModel() { + return Model; + } + + public void setModel(String model) { + Model = model; + } + + public String getStandard() { + return standard; + } + + public void setStandard(String standard) { + this.standard = standard; + } + + public BigDecimal getUnitPrice() { + return UnitPrice; + } + + public void setUnitPrice(BigDecimal unitPrice) { + UnitPrice = unitPrice; + } + + public BigDecimal getOperNumber() { + return OperNumber; + } + + public void setOperNumber(BigDecimal operNumber) { + OperNumber = operNumber; + } + + public BigDecimal getAllPrice() { + return AllPrice; + } + + public void setAllPrice(BigDecimal allPrice) { + AllPrice = allPrice; + } + + public String getSName() { + return SName; + } + + public void setSName(String SName) { + this.SName = SName; + } + + public String getDName() { + return DName; + } + + public void setDName(String DName) { + this.DName = DName; + } + + public String getOperTime() { + return OperTime; + } + + public void setOperTime(String operTime) { + OperTime = operTime; + } + + public String getNewType() { + return NewType; + } + + public void setNewType(String newType) { + NewType = newType; + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotHeadVo4InOutMCount.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotHeadVo4InOutMCount.java new file mode 100644 index 000000000..3fcfc03b1 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotHeadVo4InOutMCount.java @@ -0,0 +1,87 @@ +package com.jsh.erp.datasource.vo; + + +import java.math.BigDecimal; + +public class DepotHeadVo4InOutMCount { + + private Long MaterialId; + + private String mName; + + private String Model; + + private String standard; + + private String categoryName; + + private BigDecimal numSum; + + private BigDecimal priceSum; + + private Long tenantId; + + public Long getMaterialId() { + return MaterialId; + } + + public void setMaterialId(Long materialId) { + MaterialId = materialId; + } + + public String getmName() { + return mName; + } + + public void setmName(String mName) { + this.mName = mName; + } + + public String getModel() { + return Model; + } + + public void setModel(String model) { + Model = model; + } + + public String getStandard() { + return standard; + } + + public void setStandard(String standard) { + this.standard = standard; + } + + public String getCategoryName() { + return categoryName; + } + + public void setCategoryName(String categoryName) { + this.categoryName = categoryName; + } + + public BigDecimal getNumSum() { + return numSum; + } + + public void setNumSum(BigDecimal numSum) { + this.numSum = numSum; + } + + public BigDecimal getPriceSum() { + return priceSum; + } + + public void setPriceSum(BigDecimal priceSum) { + this.priceSum = priceSum; + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotHeadVo4List.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotHeadVo4List.java new file mode 100644 index 000000000..e513ebb22 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotHeadVo4List.java @@ -0,0 +1,79 @@ +package com.jsh.erp.datasource.vo; + +import com.jsh.erp.datasource.entities.DepotHead; + +import java.math.BigDecimal; +import java.util.Date; + +public class DepotHeadVo4List extends DepotHead{ + + private String projectName; + + private String organName; + + private String userName; + + private String accountName; + + private String allocationProjectName; + + private String materialsList; + + private String operTimeStr; + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public String getOrganName() { + return organName; + } + + public void setOrganName(String organName) { + this.organName = organName; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getAccountName() { + return accountName; + } + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + public String getAllocationProjectName() { + return allocationProjectName; + } + + public void setAllocationProjectName(String allocationProjectName) { + this.allocationProjectName = allocationProjectName; + } + + public String getMaterialsList() { + return materialsList; + } + + public void setMaterialsList(String materialsList) { + this.materialsList = materialsList; + } + + public String getOperTimeStr() { + return operTimeStr; + } + + public void setOperTimeStr(String operTimeStr) { + this.operTimeStr = operTimeStr; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotHeadVo4StatementAccount.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotHeadVo4StatementAccount.java new file mode 100644 index 000000000..9a529d26a --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotHeadVo4StatementAccount.java @@ -0,0 +1,107 @@ +package com.jsh.erp.datasource.vo; + + +import java.math.BigDecimal; + +public class DepotHeadVo4StatementAccount { + + private String number; + + private String type; + + private BigDecimal discountLastMoney; + + private BigDecimal otherMoney; + + private BigDecimal billMoney; + + private BigDecimal changeAmount; + + private BigDecimal allPrice; + + private String supplierName; + + private String oTime; + + private Long tenantId; + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public BigDecimal getDiscountLastMoney() { + return discountLastMoney; + } + + public void setDiscountLastMoney(BigDecimal discountLastMoney) { + this.discountLastMoney = discountLastMoney; + } + + public BigDecimal getOtherMoney() { + return otherMoney; + } + + public void setOtherMoney(BigDecimal otherMoney) { + this.otherMoney = otherMoney; + } + + public BigDecimal getBillMoney() { + return billMoney; + } + + public void setBillMoney(BigDecimal billMoney) { + this.billMoney = billMoney; + } + + public BigDecimal getChangeAmount() { + return changeAmount; + } + + public void setChangeAmount(BigDecimal changeAmount) { + this.changeAmount = changeAmount; + } + + public BigDecimal getAllPrice() { + return allPrice; + } + + public void setAllPrice(BigDecimal allPrice) { + this.allPrice = allPrice; + } + + public String getSupplierName() { + return supplierName; + } + + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; + } + + public String getoTime() { + return oTime; + } + + public void setoTime(String oTime) { + this.oTime = oTime; + } + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotItemStockWarningCount.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotItemStockWarningCount.java new file mode 100644 index 000000000..3dec4c546 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotItemStockWarningCount.java @@ -0,0 +1,157 @@ +package com.jsh.erp.datasource.vo; + + +import java.math.BigDecimal; + +public class DepotItemStockWarningCount { + + private Long MId; + + private String MName; + + private String MModel; + + private String MaterialUnit; + + private String MColor; + + private String MStandard; + + private String MMfrs; + + private String unitName; + + private String MaterialOther; + + private String MOtherField1; + + private String MOtherField2; + + private String MOtherField3; + + private BigDecimal safetystock;//安全库存量 + + private BigDecimal currentNumber;//库存 + + private BigDecimal linjieNumber;//临界库存 + + public Long getMId() { + return MId; + } + + public void setMId(Long MId) { + this.MId = MId; + } + + public String getMName() { + return MName; + } + + public void setMName(String MName) { + this.MName = MName; + } + + public String getMModel() { + return MModel; + } + + public void setMModel(String MModel) { + this.MModel = MModel; + } + + public String getMaterialUnit() { + return MaterialUnit; + } + + public void setMaterialUnit(String materialUnit) { + MaterialUnit = materialUnit; + } + + public String getMColor() { + return MColor; + } + + public void setMColor(String MColor) { + this.MColor = MColor; + } + + public String getMStandard() { + return MStandard; + } + + public void setMStandard(String MStandard) { + this.MStandard = MStandard; + } + + public String getMMfrs() { + return MMfrs; + } + + public void setMMfrs(String MMfrs) { + this.MMfrs = MMfrs; + } + + public String getUnitName() { + return unitName; + } + + public void setUnitName(String unitName) { + this.unitName = unitName; + } + + public String getMaterialOther() { + return MaterialOther; + } + + public void setMaterialOther(String materialOther) { + MaterialOther = materialOther; + } + + public String getMOtherField1() { + return MOtherField1; + } + + public void setMOtherField1(String MOtherField1) { + this.MOtherField1 = MOtherField1; + } + + public String getMOtherField2() { + return MOtherField2; + } + + public void setMOtherField2(String MOtherField2) { + this.MOtherField2 = MOtherField2; + } + + public String getMOtherField3() { + return MOtherField3; + } + + public void setMOtherField3(String MOtherField3) { + this.MOtherField3 = MOtherField3; + } + + public BigDecimal getSafetystock() { + return safetystock; + } + + public void setSafetystock(BigDecimal safetystock) { + this.safetystock = safetystock; + } + + public BigDecimal getCurrentNumber() { + return currentNumber; + } + + public void setCurrentNumber(BigDecimal currentNumber) { + this.currentNumber = currentNumber; + } + + public BigDecimal getLinjieNumber() { + return linjieNumber; + } + + public void setLinjieNumber(BigDecimal linjieNumber) { + this.linjieNumber = linjieNumber; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotItemVo4Stock.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotItemVo4Stock.java new file mode 100644 index 000000000..cea9c520a --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/DepotItemVo4Stock.java @@ -0,0 +1,26 @@ +package com.jsh.erp.datasource.vo; + + +import java.math.BigDecimal; + +public class DepotItemVo4Stock { + + private BigDecimal inNum; + private BigDecimal outNum; + + public BigDecimal getInNum() { + return inNum; + } + + public void setInNum(BigDecimal inNum) { + this.inNum = inNum; + } + + public BigDecimal getOutNum() { + return outNum; + } + + public void setOutNum(BigDecimal outNum) { + this.outNum = outNum; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/LogVo4List.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/LogVo4List.java new file mode 100644 index 000000000..c69a0fce5 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/LogVo4List.java @@ -0,0 +1,26 @@ +package com.jsh.erp.datasource.vo; + +import com.jsh.erp.datasource.entities.Log; + +public class LogVo4List extends Log { + + private String userName; + + private String createTimeStr; + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getCreateTimeStr() { + return createTimeStr; + } + + public void setCreateTimeStr(String createTimeStr) { + this.createTimeStr = createTimeStr; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/MaterialExtendVo4List.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/MaterialExtendVo4List.java new file mode 100644 index 000000000..66cff2aba --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/MaterialExtendVo4List.java @@ -0,0 +1,68 @@ +package com.jsh.erp.datasource.vo; + +import com.jsh.erp.datasource.entities.MaterialExtend; + +import java.math.BigDecimal; + +public class MaterialExtendVo4List extends MaterialExtend { + + private String supplier; + + private String originPlace; + + private String unit; + + private String brandName; + + private BigDecimal guaranteePeriod; + + private BigDecimal memberDecimal; + + public String getSupplier() { + return supplier; + } + + public void setSupplier(String supplier) { + this.supplier = supplier; + } + + public String getOriginPlace() { + return originPlace; + } + + public void setOriginPlace(String originPlace) { + this.originPlace = originPlace; + } + + public String getUnit() { + return unit; + } + + public void setUnit(String unit) { + this.unit = unit; + } + + public String getBrandName() { + return brandName; + } + + public void setBrandName(String brandName) { + this.brandName = brandName; + } + + public BigDecimal getGuaranteePeriod() { + return guaranteePeriod; + } + + public void setGuaranteePeriod(BigDecimal guaranteePeriod) { + this.guaranteePeriod = guaranteePeriod; + } + + public BigDecimal getMemberDecimal() { + return memberDecimal; + } + + public void setMemberDecimal(BigDecimal memberDecimal) { + this.memberDecimal = memberDecimal; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/NodeAttributes.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/NodeAttributes.java new file mode 100644 index 000000000..6b3d4a947 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/NodeAttributes.java @@ -0,0 +1,30 @@ +package com.jsh.erp.datasource.vo; + +/** + * Description + * + * @Author: qiankunpingtai + * @Date: 2019/3/13 18:11 + */ +public class NodeAttributes { + //编号 + private String no; + //类型 + private Integer type; + + public String getNo() { + return no; + } + + public void setNo(String no) { + this.no = no; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/TreeNode.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/TreeNode.java new file mode 100644 index 000000000..244d67c34 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/TreeNode.java @@ -0,0 +1,114 @@ +package com.jsh.erp.datasource.vo; + +import java.util.List; + +/** + * Description + * 树形结构基本元素 + * @Author: cjl + * @Date: 2019/2/19 11:27 + */ +public class TreeNode { + /** + * id主键 + * */ + private Long id; + private Long key; + private Long value; + /** + * title显示的文本 + * */ + private String title; + /** + *state节点状态,'open' 或 'closed',默认:'open'。如果为'closed'的时候,将不自动展开该节点。 + * */ + private String state="open"; + /** + *iconCls 节点图标id + * */ + private String iconCls; + /** + * checked 是否被选中 + * */ + private boolean checked; + /** + *attributes 自定义属性 + * */ + private String attributes; + /** + * children 子节点 + * */ + private List children; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getKey() { + return key; + } + + public void setKey(Long key) { + this.key = key; + } + + public Long getValue() { + return value; + } + + public void setValue(Long value) { + this.value = value; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getIconCls() { + return iconCls; + } + + public void setIconCls(String iconCls) { + this.iconCls = iconCls; + } + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public String getAttributes() { + return attributes; + } + + public void setAttributes(String attributes) { + this.attributes = attributes; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/TreeNodeEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/TreeNodeEx.java new file mode 100644 index 000000000..8c938a53e --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/vo/TreeNodeEx.java @@ -0,0 +1,96 @@ +package com.jsh.erp.datasource.vo; + +import java.util.List; + +/** + * Description + * + * @Author: qiankunpingtai + * @Date: 2019/3/13 18:10 + */ +public class TreeNodeEx { + /** + * id主键 + * */ + private Long id; + /** + * text显示的文本 + * */ + private String text; + /** + *state节点状态,'open' 或 'closed',默认:'open'。如果为'closed'的时候,将不自动展开该节点。 + * */ + private String state="open"; + /** + *iconCls 节点图标id + * */ + private String iconCls; + /** + * checked 是否被选中 + * */ + private boolean checked; + /** + *attributes 自定义属性 + * */ + private NodeAttributes attributes; + /** + * children 子节点 + * */ + private List children; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getIconCls() { + return iconCls; + } + + public void setIconCls(String iconCls) { + this.iconCls = iconCls; + } + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public NodeAttributes getAttributes() { + return attributes; + } + + public void setAttributes(NodeAttributes attributes) { + this.attributes = attributes; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/exception/BusinessParamCheckingException.java b/jshERP-boot/src/main/java/com/jsh/erp/exception/BusinessParamCheckingException.java new file mode 100644 index 000000000..47fa28fa6 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/exception/BusinessParamCheckingException.java @@ -0,0 +1,32 @@ +package com.jsh.erp.exception; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Getter +public class BusinessParamCheckingException extends Exception { + + private static final long serialVersionUID = 1L; + private int code; + private Map data; + + public BusinessParamCheckingException(int code, String reason) { + super(reason); + Map objectMap = new HashMap<>(); + objectMap.put("message", reason); + this.code = code; + this.data = objectMap; + } + + public BusinessParamCheckingException(int code, String reason, Throwable throwable) { + super(reason, throwable); + Map objectMap = new HashMap<>(); + objectMap.put("message", reason); + this.code = code; + this.data = objectMap; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/exception/BusinessRunTimeException.java b/jshERP-boot/src/main/java/com/jsh/erp/exception/BusinessRunTimeException.java new file mode 100644 index 000000000..ec3decbdd --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/exception/BusinessRunTimeException.java @@ -0,0 +1,32 @@ +package com.jsh.erp.exception; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Getter +public class BusinessRunTimeException extends RuntimeException { + + private static final long serialVersionUID = 1L; + private int code; + private Map data; + + public BusinessRunTimeException(int code, String reason) { + super(reason); + Map objectMap = new HashMap<>(); + objectMap.put("message", reason); + this.code = code; + this.data = objectMap; + } + + public BusinessRunTimeException(int code, String reason, Throwable throwable) { + super(reason, throwable); + Map objectMap = new HashMap<>(); + objectMap.put("message", reason); + this.code = code; + this.data = objectMap; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/exception/GlobalExceptionHandler.java b/jshERP-boot/src/main/java/com/jsh/erp/exception/GlobalExceptionHandler.java new file mode 100644 index 000000000..bdddf7cfc --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/exception/GlobalExceptionHandler.java @@ -0,0 +1,47 @@ +package com.jsh.erp.exception; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.ExceptionConstants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import javax.servlet.http.HttpServletRequest; + +@Slf4j +@RestControllerAdvice +public class GlobalExceptionHandler { + + @ExceptionHandler(value = Exception.class) + @ResponseBody + public Object handleException(Exception e, HttpServletRequest request) { + JSONObject status = new JSONObject(); + + // 针对业务参数异常的处理 + if (e instanceof BusinessParamCheckingException) { + status.put(ExceptionConstants.GLOBAL_RETURNS_CODE, ((BusinessParamCheckingException) e).getCode()); + status.put(ExceptionConstants.GLOBAL_RETURNS_DATA, ((BusinessParamCheckingException) e).getData()); + return status; + } + + //针对业务运行时异常的处理 + if (e instanceof BusinessRunTimeException) { + status.put(ExceptionConstants.GLOBAL_RETURNS_CODE, ((BusinessRunTimeException) e).getCode()); + status.put(ExceptionConstants.GLOBAL_RETURNS_DATA, ((BusinessRunTimeException) e).getData()); + return status; + } + + status.put(ExceptionConstants.GLOBAL_RETURNS_CODE, ExceptionConstants.SERVICE_SYSTEM_ERROR_CODE); + status.put(ExceptionConstants.GLOBAL_RETURNS_DATA, ExceptionConstants.SERVICE_SYSTEM_ERROR_MSG); + log.error("Global Exception Occured => url : {}, msg : {}", request.getRequestURL(), e.getMessage()); + /** + * create by: qiankunpingtai + * create time: 2019/4/18 17:41 + * 这里输出完整的堆栈信息,否则有些异常完全不知道哪里出错了。 + */ + log.error("Global Exception Occured => url : {}", request.getRequestURL(), e); + e.printStackTrace(); + return status; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/exception/JshException.java b/jshERP-boot/src/main/java/com/jsh/erp/exception/JshException.java new file mode 100644 index 000000000..d23a1ae31 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/exception/JshException.java @@ -0,0 +1,27 @@ +package com.jsh.erp.exception; + +import com.jsh.erp.constants.ExceptionConstants; +import org.slf4j.Logger; + +/** + * 封装日志打印,收集日志 + * author: ji shenghua, qq 752718 920 + */ +public class JshException { + + public static void readFail(Logger logger, Exception e) { + logger.error("异常码[{}],异常提示[{}],异常[{}]", + ExceptionConstants.DATA_READ_FAIL_CODE, ExceptionConstants.DATA_READ_FAIL_MSG,e); + throw new BusinessRunTimeException(ExceptionConstants.DATA_READ_FAIL_CODE, + ExceptionConstants.DATA_READ_FAIL_MSG); + } + + public static void writeFail(Logger logger, Exception e) { + logger.error("异常码[{}],异常提示[{}],异常[{}]", + ExceptionConstants.DATA_WRITE_FAIL_CODE,ExceptionConstants.DATA_WRITE_FAIL_MSG,e); + throw new BusinessRunTimeException(ExceptionConstants.DATA_WRITE_FAIL_CODE, + ExceptionConstants.DATA_WRITE_FAIL_MSG); + } + + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/filter/LogCostFilter.java b/jshERP-boot/src/main/java/com/jsh/erp/filter/LogCostFilter.java new file mode 100644 index 000000000..b8c1a764a --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/filter/LogCostFilter.java @@ -0,0 +1,98 @@ +package com.jsh.erp.filter; + +import com.jsh.erp.service.redis.RedisService; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import javax.servlet.*; +import javax.servlet.annotation.WebFilter; +import javax.servlet.annotation.WebInitParam; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@WebFilter(filterName = "LogCostFilter", urlPatterns = {"/*"}, + initParams = {@WebInitParam(name = "ignoredUrl", value = ".ico"), + @WebInitParam(name = "filterPath", + value = "/jshERP-boot/user/login#/jshERP-boot/user/registerUser#/jshERP-boot/user/randomImage" + + "#/jshERP-boot/platformConfig/getPlatformName#/jshERP-boot/v2/api-docs")}) +public class LogCostFilter implements Filter { + + private static final String FILTER_PATH = "filterPath"; + private static final String IGNORED_PATH = "ignoredUrl"; + + private static final List ignoredList = new ArrayList<>(); + private String[] allowUrls; + private String[] ignoredUrls; + @Resource + private RedisService redisService; + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + String filterPath = filterConfig.getInitParameter(FILTER_PATH); + if (!StringUtils.isEmpty(filterPath)) { + allowUrls = filterPath.contains("#") ? filterPath.split("#") : new String[]{filterPath}; + } + + String ignoredPath = filterConfig.getInitParameter(IGNORED_PATH); + if (!StringUtils.isEmpty(ignoredPath)) { + ignoredUrls = ignoredPath.contains("#") ? ignoredPath.split("#") : new String[]{ignoredPath}; + for (String ignoredUrl : ignoredUrls) { + ignoredList.add(ignoredUrl); + } + } + } + @Override + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException, ServletException { + HttpServletRequest servletRequest = (HttpServletRequest) request; + HttpServletResponse servletResponse = (HttpServletResponse) response; + String requestUrl = servletRequest.getRequestURI(); + //具体,比如:处理若用户未登录,则跳转到登录页 + Object userId = redisService.getObjectFromSessionByKey(servletRequest,"userId"); + if(userId!=null) { //如果已登录,不阻止 + chain.doFilter(request, response); + return; + } + if (requestUrl != null && (requestUrl.contains("/doc.html") || + requestUrl.contains("/register.html") || requestUrl.contains("/login.html"))) { + chain.doFilter(request, response); + return; + } + if (verify(ignoredList, requestUrl)) { + chain.doFilter(servletRequest, response); + return; + } + if (null != allowUrls && allowUrls.length > 0) { + for (String url : allowUrls) { + if (requestUrl.startsWith(url)) { + chain.doFilter(request, response); + return; + } + } + } + servletResponse.sendRedirect("/login.html"); + } + + private static String regexPrefix = "^.*"; + private static String regexSuffix = ".*$"; + + private static boolean verify(List ignoredList, String url) { + for (String regex : ignoredList) { + Pattern pattern = Pattern.compile(regexPrefix + regex + regexSuffix); + Matcher matcher = pattern.matcher(url); + if (matcher.matches()) { + return true; + } + } + return false; + } + @Override + public void destroy() { + + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/CommonQueryManager.java b/jshERP-boot/src/main/java/com/jsh/erp/service/CommonQueryManager.java new file mode 100644 index 000000000..cc560c9bb --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/CommonQueryManager.java @@ -0,0 +1,137 @@ +package com.jsh.erp.service; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @author jishenghua 752718920 2018-10-7 15:25:58 + */ +@Service +public class CommonQueryManager { + + @Resource + private InterfaceContainer container; + + @Resource + private LogService logService; + + /** + * 查询单条 + * + * @param apiName 接口名称 + * @param id ID + */ + public Object selectOne(String apiName, Long id) throws Exception { + if (StringUtil.isNotEmpty(apiName) && id!=null) { + return container.getCommonQuery(apiName).selectOne(id); + } + return null; + } + + /** + * 查询 + * @param apiName + * @param parameterMap + * @return + */ + public List select(String apiName, Map parameterMap)throws Exception { + if (StringUtil.isNotEmpty(apiName)) { + return container.getCommonQuery(apiName).select(parameterMap); + } + return new ArrayList(); + } + + /** + * 计数 + * @param apiName + * @param parameterMap + * @return + */ + public Long counts(String apiName, Map parameterMap)throws Exception { + if (StringUtil.isNotEmpty(apiName)) { + return container.getCommonQuery(apiName).counts(parameterMap); + } + return BusinessConstants.DEFAULT_LIST_NULL_NUMBER; + } + + /** + * 插入 + * @param apiName + * @param obj + * @return + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insert(String apiName, JSONObject obj, HttpServletRequest request) throws Exception{ + if (StringUtil.isNotEmpty(apiName)) { + return container.getCommonQuery(apiName).insert(obj, request); + } + return 0; + } + + /** + * 更新 + * @param apiName + * @param obj + * @return + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int update(String apiName, JSONObject obj, HttpServletRequest request)throws Exception { + if (StringUtil.isNotEmpty(apiName)) { + return container.getCommonQuery(apiName).update(obj, request); + } + return 0; + } + + /** + * 删除 + * @param apiName + * @param id + * @return + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int delete(String apiName, Long id, HttpServletRequest request)throws Exception { + if (StringUtil.isNotEmpty(apiName)) { + return container.getCommonQuery(apiName).delete(id, request); + } + return 0; + } + + /** + * 批量删除 + * @param apiName + * @param ids + * @return + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteBatch(String apiName, String ids, HttpServletRequest request)throws Exception { + if (StringUtil.isNotEmpty(apiName)) { + return container.getCommonQuery(apiName).deleteBatch(ids, request); + } + return 0; + } + + /** + * 判断是否存在 + * @param apiName + * @param id + * @param name + * @return + */ + public int checkIsNameExist(String apiName, Long id, String name) throws Exception{ + if (StringUtil.isNotEmpty(apiName)) { + return container.getCommonQuery(apiName).checkIsNameExist(id, name); + } + return 0; + } + +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/ICommonQuery.java b/jshERP-boot/src/main/java/com/jsh/erp/service/ICommonQuery.java new file mode 100644 index 000000000..64756ca85 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/ICommonQuery.java @@ -0,0 +1,80 @@ +package com.jsh.erp.service; + +import com.alibaba.fastjson.JSONObject; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +/** + * 通用查询接口 + * 功能:1、单条查询 2、分页+搜索 3、查询数量 + * + * @author jishenghua + * @version 1.0 + */ +public interface ICommonQuery { + /** + * 根据id查询明细。 + * + * @param id 资源id + * @return 资源 + */ + Object selectOne(Long id) throws Exception; + + /** + * 自定义查询 + * + * @param parameterMap 查询参数 + * @return 查询结果 + */ + List select(Map parameterMap) throws Exception; + + /** + * 查询数量 + * + * @param parameterMap 查询参数 + * @return 查询结果 + */ + Long counts(Map parameterMap) throws Exception; + + /** + * 新增数据 + * + * @param obj + * @return + */ + int insert(JSONObject obj, HttpServletRequest request) throws Exception; + + /** + * 更新数据 + * + * @param obj + * @return + */ + int update(JSONObject obj, HttpServletRequest request) throws Exception; + + /** + * 删除数据 + * + * @param id + * @return + */ + int delete(Long id, HttpServletRequest request) throws Exception; + + /** + * 批量删除数据 + * + * @param ids + * @return + */ + int deleteBatch(String ids, HttpServletRequest request) throws Exception; + + /** + * 查询名称是否存在 + * + * @param id + * @return + */ + int checkIsNameExist(Long id, String name) throws Exception; +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/InterfaceContainer.java b/jshERP-boot/src/main/java/com/jsh/erp/service/InterfaceContainer.java new file mode 100644 index 000000000..a0cadfbb0 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/InterfaceContainer.java @@ -0,0 +1,31 @@ +package com.jsh.erp.service; + +import com.jsh.erp.utils.AnnotationUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author jishenghua 2018-10-7 15:25:09 + */ +@Service +public class InterfaceContainer { + private final Map configComponentMap = new HashMap<>(); + + @Autowired(required = false) + private synchronized void init(ICommonQuery[] configComponents) { + for (ICommonQuery configComponent : configComponents) { + ResourceInfo info = AnnotationUtils.getAnnotation(configComponent, ResourceInfo.class); + if (info != null) { + configComponentMap.put(info.value(), configComponent); + } + } + } + + public ICommonQuery getCommonQuery(String apiName) { + return configComponentMap.get(apiName); + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/ResourceInfo.java b/jshERP-boot/src/main/java/com/jsh/erp/service/ResourceInfo.java new file mode 100644 index 000000000..3b0c185df --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/ResourceInfo.java @@ -0,0 +1,14 @@ +package com.jsh.erp.service; + +import java.lang.annotation.*; + +/** + * @author jishenghua 2018-10-7 15:25:39 + */ +@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +@Documented +public @interface ResourceInfo { + String value(); +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/account/AccountComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/account/AccountComponent.java new file mode 100644 index 000000000..1b155c3fe --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/account/AccountComponent.java @@ -0,0 +1,75 @@ +package com.jsh.erp.service.account; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "account_component") +@AccountResource +public class AccountComponent implements ICommonQuery { + + @Resource + private AccountService accountService; + + @Override + public Object selectOne(Long id) throws Exception { + return accountService.getAccount(id); + } + + @Override + public List select(Map map)throws Exception { + return getAccountList(map); + } + + private List getAccountList(Map map) throws Exception{ + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + String serialNo = StringUtil.getInfo(search, "serialNo"); + String remark = StringUtil.getInfo(search, "remark"); + String order = QueryUtils.order(map); + return accountService.select(name, serialNo, remark, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map) throws Exception{ + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + String serialNo = StringUtil.getInfo(search, "serialNo"); + String remark = StringUtil.getInfo(search, "remark"); + return accountService.countAccount(name, serialNo, remark); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request) throws Exception{ + return accountService.insertAccount(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return accountService.updateAccount(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return accountService.deleteAccount(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return accountService.batchDeleteAccount(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return accountService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/account/AccountResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/account/AccountResource.java new file mode 100644 index 000000000..15c5786f4 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/account/AccountResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.account; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "account") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface AccountResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/account/AccountService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/account/AccountService.java new file mode 100644 index 000000000..349c9bb6d --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/account/AccountService.java @@ -0,0 +1,555 @@ +package com.jsh.erp.service.account; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.mappers.*; +import com.jsh.erp.datasource.vo.AccountVo4InOutList; +import com.jsh.erp.datasource.vo.AccountVo4List; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import com.jsh.erp.utils.Tools; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.util.*; + +@Service +public class AccountService { + private Logger logger = LoggerFactory.getLogger(AccountService.class); + + @Resource + private AccountMapper accountMapper; + + @Resource + private AccountMapperEx accountMapperEx; + + @Resource + private DepotHeadMapper depotHeadMapper; + @Resource + private DepotHeadMapperEx depotHeadMapperEx; + + @Resource + private AccountHeadMapper accountHeadMapper; + @Resource + private AccountHeadMapperEx accountHeadMapperEx; + + @Resource + private AccountItemMapper accountItemMapper; + @Resource + private AccountItemMapperEx accountItemMapperEx; + @Resource + private LogService logService; + @Resource + private UserService userService; + + public Account getAccount(long id) throws Exception{ + return accountMapper.selectByPrimaryKey(id); + } + + public List getAccountListByIds(String ids)throws Exception { + List idList = StringUtil.strToLongList(ids); + List list = new ArrayList<>(); + try{ + AccountExample example = new AccountExample(); + example.createCriteria().andIdIn(idList); + list = accountMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getAccount() throws Exception{ + AccountExample example = new AccountExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=accountMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getAccountByParam(String name, String serialNo) throws Exception{ + List list=null; + try{ + list=accountMapperEx.getAccountByParam(name, serialNo); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String name, String serialNo, String remark, int offset, int rows) throws Exception{ + List resList = new ArrayList(); + List list=null; + try{ + list = accountMapperEx.selectByConditionAccount(name, serialNo, remark, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + String timeStr = Tools.getCurrentMonth(); + if (null != list && null !=timeStr) { + for (AccountVo4List al : list) { + DecimalFormat df = new DecimalFormat(".##"); + BigDecimal thisMonthAmount = getAccountSum(al.getId(), timeStr, "month").add(getAccountSumByHead(al.getId(), timeStr, "month")).add(getAccountSumByDetail(al.getId(), timeStr, "month")).add(getManyAccountSum(al.getId(), timeStr, "month")); + String thisMonthAmountFmt = "0"; + if ((thisMonthAmount.compareTo(BigDecimal.ZERO))!=0) { + thisMonthAmountFmt = df.format(thisMonthAmount); + } + al.setThisMonthAmount(thisMonthAmountFmt); //本月发生额 + BigDecimal currentAmount = getAccountSum(al.getId(), "", "month").add(getAccountSumByHead(al.getId(), "", "month")).add(getAccountSumByDetail(al.getId(), "", "month")).add(getManyAccountSum(al.getId(), "", "month")) .add(al.getInitialAmount()) ; + al.setCurrentAmount(currentAmount); + resList.add(al); + } + } + return resList; + } + + public Long countAccount(String name, String serialNo, String remark)throws Exception { + Long result=null; + try{ + result=accountMapperEx.countsByAccount(name, serialNo, remark); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertAccount(JSONObject obj, HttpServletRequest request)throws Exception { + Account account = JSONObject.parseObject(obj.toJSONString(), Account.class); + if(account.getInitialAmount() == null) { + account.setInitialAmount(BigDecimal.ZERO); + } + account.setIsDefault(false); + int result=0; + try{ + result = accountMapper.insertSelective(account); + logService.insertLog("账户", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(account.getName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateAccount(JSONObject obj, HttpServletRequest request)throws Exception { + Account account = JSONObject.parseObject(obj.toJSONString(), Account.class); + int result=0; + try{ + result = accountMapper.updateByPrimaryKeySelective(account); + logService.insertLog("账户", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(account.getName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteAccount(Long id, HttpServletRequest request) throws Exception{ + return batchDeleteAccountByIds(id.toString()); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteAccount(String ids, HttpServletRequest request)throws Exception { + return batchDeleteAccountByIds(ids); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteAccountByIds(String ids) throws Exception{ + int result=0; + String [] idArray=ids.split(","); + //校验财务主表 jsh_accounthead + List accountHeadList=null; + try{ + accountHeadList = accountHeadMapperEx.getAccountHeadListByAccountIds(idArray); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if(accountHeadList!=null&&accountHeadList.size()>0){ + logger.error("异常码[{}],异常提示[{}],参数,AccountIds[{}]", + ExceptionConstants.DELETE_FORCE_CONFIRM_CODE,ExceptionConstants.DELETE_FORCE_CONFIRM_MSG,ids); + throw new BusinessRunTimeException(ExceptionConstants.DELETE_FORCE_CONFIRM_CODE, + ExceptionConstants.DELETE_FORCE_CONFIRM_MSG); + } + //校验财务子表 jsh_accountitem + List accountItemList=null; + try{ + accountItemList = accountItemMapperEx.getAccountItemListByAccountIds(idArray); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if(accountItemList!=null&&accountItemList.size()>0){ + logger.error("异常码[{}],异常提示[{}],参数,AccountIds[{}]", + ExceptionConstants.DELETE_FORCE_CONFIRM_CODE,ExceptionConstants.DELETE_FORCE_CONFIRM_MSG,ids); + throw new BusinessRunTimeException(ExceptionConstants.DELETE_FORCE_CONFIRM_CODE, + ExceptionConstants.DELETE_FORCE_CONFIRM_MSG); + } + //校验单据主表 jsh_depot_head + List depotHeadList =null; + try{ + depotHeadList = depotHeadMapperEx.getDepotHeadListByAccountIds(idArray); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if(depotHeadList!=null&&depotHeadList.size()>0){ + logger.error("异常码[{}],异常提示[{}],参数,AccountIds[{}]", + ExceptionConstants.DELETE_FORCE_CONFIRM_CODE,ExceptionConstants.DELETE_FORCE_CONFIRM_MSG,ids); + throw new BusinessRunTimeException(ExceptionConstants.DELETE_FORCE_CONFIRM_CODE, + ExceptionConstants.DELETE_FORCE_CONFIRM_MSG); + } + //记录日志 + StringBuffer sb = new StringBuffer(); + sb.append(BusinessConstants.LOG_OPERATION_TYPE_DELETE); + List list = getAccountListByIds(ids); + for(Account account: list){ + sb.append("[").append(account.getName()).append("]"); + } + logService.insertLog("账户", sb.toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + User userInfo=userService.getCurrentUser(); + //校验通过执行删除操作 + try{ + result = accountMapperEx.batchDeleteAccountByIds(new Date(),userInfo==null?null:userInfo.getId(),idArray); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int checkIsNameExist(Long id, String name)throws Exception { + AccountExample example = new AccountExample(); + example.createCriteria().andIdNotEqualTo(id).andNameEqualTo(name).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list = accountMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + + public List findBySelect()throws Exception { + AccountExample example = new AccountExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + example.setOrderByClause("id desc"); + List list=null; + try{ + list = accountMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + /** + * 单个账户的金额求和-入库和出库 + * + * @param id + * @return + */ + public BigDecimal getAccountSum(Long id, String timeStr, String type) throws Exception{ + BigDecimal accountSum = BigDecimal.ZERO; + try { + DepotHeadExample example = new DepotHeadExample(); + if (!timeStr.equals("")) { + Date bTime = StringUtil.getDateByString(timeStr + "-01 00:00:00", null); + Date eTime = StringUtil.getDateByString(timeStr + "-31 00:00:00", null); + Date mTime = StringUtil.getDateByString(timeStr + "-01 00:00:00", null); + if (type.equals("month")) { + example.createCriteria().andAccountIdEqualTo(id).andPayTypeNotEqualTo("预付款") + .andOperTimeGreaterThanOrEqualTo(bTime).andOperTimeLessThanOrEqualTo(eTime) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } else if (type.equals("date")) { + example.createCriteria().andAccountIdEqualTo(id).andPayTypeNotEqualTo("预付款") + .andOperTimeLessThanOrEqualTo(mTime).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } + } else { + example.createCriteria().andAccountIdEqualTo(id).andPayTypeNotEqualTo("预付款") + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } + List dataList=null; + try{ + dataList = depotHeadMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if (dataList != null) { + for (DepotHead depotHead : dataList) { + if(depotHead.getChangeAmount()!=null) { + accountSum = accountSum .add(depotHead.getChangeAmount()) ; + } + } + } + } catch (DataAccessException e) { + logger.error(">>>>>>>>>查找进销存信息异常", e); + } + return accountSum; + } + + /** + * 单个账户的金额求和-收入、支出、转账的单据表头的合计 + * + * @param id + * @return + */ + public BigDecimal getAccountSumByHead(Long id, String timeStr, String type) throws Exception{ + BigDecimal accountSum = BigDecimal.ZERO; + try { + AccountHeadExample example = new AccountHeadExample(); + if (!timeStr.equals("")) { + Date bTime = StringUtil.getDateByString(timeStr + "-01 00:00:00", null); + Date eTime = StringUtil.getDateByString(timeStr + "-31 00:00:00", null); + Date mTime = StringUtil.getDateByString(timeStr + "-01 00:00:00", null); + if (type.equals("month")) { + example.createCriteria().andAccountIdEqualTo(id) + .andBillTimeGreaterThanOrEqualTo(bTime).andBillTimeLessThanOrEqualTo(eTime) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } else if (type.equals("date")) { + example.createCriteria().andAccountIdEqualTo(id) + .andBillTimeLessThanOrEqualTo(mTime) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } + } else { + example.createCriteria().andAccountIdEqualTo(id) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } + List dataList=null; + try{ + dataList = accountHeadMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if (dataList != null) { + for (AccountHead accountHead : dataList) { + if(accountHead.getChangeAmount()!=null) { + accountSum = accountSum.add(accountHead.getChangeAmount()); + } + } + } + } catch (DataAccessException e) { + logger.error(">>>>>>>>>查找进销存信息异常", e); + } + return accountSum; + } + + /** + * 单个账户的金额求和-收款、付款、转账、收预付款的单据明细的合计 + * + * @param id + * @return + */ + public BigDecimal getAccountSumByDetail(Long id, String timeStr, String type)throws Exception { + BigDecimal accountSum =BigDecimal.ZERO ; + try { + AccountHeadExample example = new AccountHeadExample(); + if (!timeStr.equals("")) { + Date bTime = StringUtil.getDateByString(timeStr + "-01 00:00:00", null); + Date eTime = StringUtil.getDateByString(timeStr + "-31 00:00:00", null); + Date mTime = StringUtil.getDateByString(timeStr + "-01 00:00:00", null); + if (type.equals("month")) { + example.createCriteria().andBillTimeGreaterThanOrEqualTo(bTime).andBillTimeLessThanOrEqualTo(eTime) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } else if (type.equals("date")) { + example.createCriteria().andBillTimeLessThanOrEqualTo(mTime) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } + } + List dataList=null; + try{ + dataList = accountHeadMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if (dataList != null) { + String ids = ""; + for (AccountHead accountHead : dataList) { + ids = ids + accountHead.getId() + ","; + } + if (!ids.equals("")) { + ids = ids.substring(0, ids.length() - 1); + } + AccountItemExample exampleAi = new AccountItemExample(); + if (!ids.equals("")) { + List idList = StringUtil.strToLongList(ids); + exampleAi.createCriteria().andAccountIdEqualTo(id).andHeaderIdIn(idList) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List dataListOne = accountItemMapper.selectByExample(exampleAi); + if (dataListOne != null) { + for (AccountItem accountItem : dataListOne) { + if(accountItem.getEachAmount()!=null) { + accountSum = accountSum.add(accountItem.getEachAmount()); + } + } + } + } + } + } catch (DataAccessException e) { + logger.error(">>>>>>>>>查找进销存信息异常", e); + } catch (Exception e) { + logger.error(">>>>>>>>>异常信息:", e); + } + return accountSum; + } + + /** + * 单个账户的金额求和-多账户的明细合计 + * + * @param id + * @return + */ + public BigDecimal getManyAccountSum(Long id, String timeStr, String type)throws Exception { + BigDecimal accountSum = BigDecimal.ZERO; + try { + DepotHeadExample example = new DepotHeadExample(); + if (!timeStr.equals("")) { + Date bTime = StringUtil.getDateByString(timeStr + "-01 00:00:00", null); + Date eTime = StringUtil.getDateByString(timeStr + "-31 00:00:00", null); + Date mTime = StringUtil.getDateByString(timeStr + "-01 00:00:00", null); + if (type.equals("month")) { + example.createCriteria().andAccountIdListLike("%" +id.toString() + "%") + .andOperTimeGreaterThanOrEqualTo(bTime).andOperTimeLessThanOrEqualTo(eTime) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } else if (type.equals("date")) { + example.createCriteria().andAccountIdListLike("%" +id.toString() + "%") + .andOperTimeLessThanOrEqualTo(mTime) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } + } else { + example.createCriteria().andAccountIdListLike("%" +id.toString() + "%") + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } + List dataList=null; + try{ + dataList = depotHeadMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if (dataList != null) { + for (DepotHead depotHead : dataList) { + String accountIdList = depotHead.getAccountIdList(); + String accountMoneyList = depotHead.getAccountMoneyList(); + if(StringUtil.isNotEmpty(accountIdList) && StringUtil.isNotEmpty(accountMoneyList)) { + accountIdList = accountIdList.replace("[", "").replace("]", "").replace("\"", ""); + accountMoneyList = accountMoneyList.replace("[", "").replace("]", "").replace("\"", ""); + String[] aList = accountIdList.split(","); + String[] amList = accountMoneyList.split(","); + for (int i = 0; i < aList.length; i++) { + if (aList[i].toString().equals(id.toString())) { + if(amList!=null && amList.length>0) { + accountSum = accountSum.add(new BigDecimal(amList[i])); + } + } + } + } + } + } + } catch (DataAccessException e) { + logger.error(">>>>>>>>>查找信息异常", e); + } + return accountSum; + } + + public List findAccountInOutList(Long accountId, Integer offset, Integer rows) throws Exception{ + List list=null; + try{ + list = accountMapperEx.findAccountInOutList(accountId, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public int findAccountInOutListCount(Long accountId) throws Exception{ + int result=0; + try{ + result = accountMapperEx.findAccountInOutListCount(accountId); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateIsDefault(Long accountId) throws Exception{ + int result=0; + try{ + //全部取消默认 + Account allAccount = new Account(); + allAccount.setIsDefault(false); + AccountExample allExample = new AccountExample(); + allExample.createCriteria(); + accountMapper.updateByExampleSelective(allAccount, allExample); + //给指定账户设为默认 + Account account = new Account(); + account.setIsDefault(true); + AccountExample example = new AccountExample(); + example.createCriteria().andIdEqualTo(accountId); + accountMapper.updateByExampleSelective(account, example); + logService.insertLog("账户",BusinessConstants.LOG_OPERATION_TYPE_EDIT+accountId, + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + result = 1; + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public Map getStatistics(String name, String serialNo) { + Map map = new HashMap<>(); + try { + List list = getAccountByParam(name, serialNo); + String timeStr = Tools.getCurrentMonth(); + BigDecimal allMonthAmount = BigDecimal.ZERO; + BigDecimal allCurrentAmount = BigDecimal.ZERO; + if (null != list && null !=timeStr) { + for (Account a : list) { + BigDecimal monthAmount = getAccountSum(a.getId(), timeStr, "month").add(getAccountSumByHead(a.getId(), timeStr, "month")) + .add(getAccountSumByDetail(a.getId(), timeStr, "month")).add(getManyAccountSum(a.getId(), timeStr, "month")); + BigDecimal currentAmount = getAccountSum(a.getId(), "", "month").add(getAccountSumByHead(a.getId(), "", "month")) + .add(getAccountSumByDetail(a.getId(), "", "month")).add(getManyAccountSum(a.getId(), "", "month")).add(a.getInitialAmount()); + allMonthAmount = allMonthAmount.add(monthAmount); + allCurrentAmount = allCurrentAmount.add(currentAmount); + } + } + map.put("allCurrentAmount", priceFormat(allCurrentAmount)); //当前总金额 + map.put("allMonthAmount", priceFormat(allMonthAmount)); //本月发生额 + } catch (Exception e) { + JshException.readFail(logger, e); + } + return map; + } + + /** + * 价格格式化 + * @param price + * @return + */ + private String priceFormat(BigDecimal price) { + String priceFmt = "0"; + DecimalFormat df = new DecimalFormat(".##"); + if ((price.compareTo(BigDecimal.ZERO))!=0) { + priceFmt = df.format(price); + } + return priceFmt; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/accountHead/AccountHeadComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/accountHead/AccountHeadComponent.java new file mode 100644 index 000000000..c4f1c6709 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/accountHead/AccountHeadComponent.java @@ -0,0 +1,79 @@ +package com.jsh.erp.service.accountHead; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "accountHead_component") +@AccountHeadResource +public class AccountHeadComponent implements ICommonQuery { + + @Resource + private AccountHeadService accountHeadService; + + @Override + public Object selectOne(Long id) throws Exception { + return accountHeadService.getAccountHead(id); + } + + @Override + public List select(Map map)throws Exception { + return getAccountHeadList(map); + } + + private List getAccountHeadList(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String type = StringUtil.getInfo(search, "type"); + String roleType = StringUtil.getInfo(search, "roleType"); + String billNo = StringUtil.getInfo(search, "billNo"); + String beginTime = StringUtil.getInfo(search, "beginTime"); + String endTime = StringUtil.getInfo(search, "endTime"); + String order = QueryUtils.order(map); + return accountHeadService.select(type, roleType, billNo, beginTime, endTime, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String type = StringUtil.getInfo(search, "type"); + String roleType = StringUtil.getInfo(search, "roleType"); + String billNo = StringUtil.getInfo(search, "billNo"); + String beginTime = StringUtil.getInfo(search, "beginTime"); + String endTime = StringUtil.getInfo(search, "endTime"); + return accountHeadService.countAccountHead(type, roleType, billNo, beginTime, endTime); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request) throws Exception{ + return accountHeadService.insertAccountHead(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return accountHeadService.updateAccountHead(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return accountHeadService.deleteAccountHead(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return accountHeadService.batchDeleteAccountHead(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return accountHeadService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/accountHead/AccountHeadResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/accountHead/AccountHeadResource.java new file mode 100644 index 000000000..85609a1a8 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/accountHead/AccountHeadResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.accountHead; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "accountHead") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface AccountHeadResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/accountHead/AccountHeadService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/accountHead/AccountHeadService.java new file mode 100644 index 000000000..d5e80e8c2 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/accountHead/AccountHeadService.java @@ -0,0 +1,342 @@ +package com.jsh.erp.service.accountHead; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.datasource.entities.AccountHead; +import com.jsh.erp.datasource.entities.AccountHeadExample; +import com.jsh.erp.datasource.entities.AccountHeadVo4ListEx; +import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.mappers.AccountHeadMapper; +import com.jsh.erp.datasource.mappers.AccountHeadMapperEx; +import com.jsh.erp.datasource.mappers.AccountItemMapperEx; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.accountItem.AccountItemService; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.orgaUserRel.OrgaUserRelService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import static com.jsh.erp.utils.Tools.getCenternTime; + +@Service +public class AccountHeadService { + private Logger logger = LoggerFactory.getLogger(AccountHeadService.class); + @Resource + private AccountHeadMapper accountHeadMapper; + @Resource + private AccountHeadMapperEx accountHeadMapperEx; + @Resource + private OrgaUserRelService orgaUserRelService; + @Resource + private AccountItemService accountItemService; + @Resource + private UserService userService; + @Resource + private LogService logService; + @Resource + private AccountItemMapperEx accountItemMapperEx; + + public AccountHead getAccountHead(long id) throws Exception { + AccountHead result=null; + try{ + result=accountHeadMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getAccountHeadListByIds(String ids)throws Exception { + List idList = StringUtil.strToLongList(ids); + List list = new ArrayList<>(); + try{ + AccountHeadExample example = new AccountHeadExample(); + example.createCriteria().andIdIn(idList); + list = accountHeadMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getAccountHead() throws Exception{ + AccountHeadExample example = new AccountHeadExample(); + List list=null; + try{ + list=accountHeadMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String type, String roleType, String billNo, String beginTime, String endTime, int offset, int rows) throws Exception{ + List resList = new ArrayList(); + List list=null; + try{ + String [] creatorArray = getCreatorArray(roleType); + list = accountHeadMapperEx.selectByConditionAccountHead(type, creatorArray, billNo, beginTime, endTime, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if (null != list) { + for (AccountHeadVo4ListEx ah : list) { + if(ah.getChangeAmount() != null) { + ah.setChangeAmount(ah.getChangeAmount().abs()); + } + if(ah.getTotalPrice() != null) { + ah.setTotalPrice(ah.getTotalPrice().abs()); + } + ah.setBillTimeStr(getCenternTime(ah.getBillTime())); + resList.add(ah); + } + } + return resList; + } + + public Long countAccountHead(String type, String roleType, String billNo, String beginTime, String endTime) throws Exception{ + Long result=null; + try{ + String [] creatorArray = getCreatorArray(roleType); + result = accountHeadMapperEx.countsByAccountHead(type, creatorArray, billNo, beginTime, endTime); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + /** + * 根据角色类型获取操作员数组 + * @param roleType + * @return + * @throws Exception + */ + private String[] getCreatorArray(String roleType) throws Exception { + String creator = ""; + User user = userService.getCurrentUser(); + if(BusinessConstants.ROLE_TYPE_PRIVATE.equals(roleType)) { + creator = user.getId().toString(); + } else if(BusinessConstants.ROLE_TYPE_THIS_ORG.equals(roleType)) { + creator = orgaUserRelService.getUserIdListByUserId(user.getId()); + } + String [] creatorArray=null; + if(StringUtil.isNotEmpty(creator)){ + creatorArray = creator.split(","); + } + return creatorArray; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertAccountHead(JSONObject obj, HttpServletRequest request) throws Exception{ + AccountHead accountHead = JSONObject.parseObject(obj.toJSONString(), AccountHead.class); + int result=0; + try{ + User userInfo=userService.getCurrentUser(); + accountHead.setCreator(userInfo==null?null:userInfo.getId()); + result = accountHeadMapper.insertSelective(accountHead); + logService.insertLog("财务", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(accountHead.getBillNo()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateAccountHead(JSONObject obj, HttpServletRequest request)throws Exception { + AccountHead accountHead = JSONObject.parseObject(obj.toJSONString(), AccountHead.class); + int result=0; + try{ + result = accountHeadMapper.updateByPrimaryKeySelective(accountHead); + logService.insertLog("财务", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(accountHead.getBillNo()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteAccountHead(Long id, HttpServletRequest request)throws Exception { + return batchDeleteAccountHeadByIds(id.toString()); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteAccountHead(String ids, HttpServletRequest request)throws Exception { + return batchDeleteAccountHeadByIds(ids); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteAccountHeadByIds(String ids)throws Exception { + StringBuffer sb = new StringBuffer(); + sb.append(BusinessConstants.LOG_OPERATION_TYPE_DELETE); + List list = getAccountHeadListByIds(ids); + for(AccountHead accountHead: list){ + sb.append("[").append(accountHead.getBillNo()).append("]"); + } + logService.insertLog("财务", sb.toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + User userInfo=userService.getCurrentUser(); + String [] idArray=ids.split(","); + int result = 0; + try{ + //删除主表 + result = accountItemMapperEx.batchDeleteAccountItemByHeadIds(new Date(),userInfo==null?null:userInfo.getId(),idArray); + //删除子表 + result = accountHeadMapperEx.batchDeleteAccountHeadByIds(new Date(),userInfo==null?null:userInfo.getId(),idArray); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int checkIsNameExist(Long id, String name)throws Exception { + AccountHeadExample example = new AccountHeadExample(); + example.createCriteria().andIdNotEqualTo(id).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list = null; + try{ + list = accountHeadMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + + public void addAccountHeadAndDetail(String beanJson, String rows, HttpServletRequest request) throws Exception { + AccountHead accountHead = JSONObject.parseObject(beanJson, AccountHead.class); + User userInfo=userService.getCurrentUser(); + accountHead.setCreator(userInfo==null?null:userInfo.getId()); + accountHeadMapper.insertSelective(accountHead); + //根据单据编号查询单据id + AccountHeadExample dhExample = new AccountHeadExample(); + dhExample.createCriteria().andBillNoEqualTo(accountHead.getBillNo()).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list = accountHeadMapper.selectByExample(dhExample); + if(list!=null) { + Long headId = list.get(0).getId(); + String type = list.get(0).getType(); + /**处理单据子表信息*/ + accountItemService.saveDetials(rows, headId, type, request); + } + logService.insertLog("财务单据", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(accountHead.getBillNo()).toString(), request); + } + + public void updateAccountHeadAndDetail(String beanJson, String rows, HttpServletRequest request) throws Exception { + AccountHead accountHead = JSONObject.parseObject(beanJson, AccountHead.class); + accountHeadMapper.updateByPrimaryKeySelective(accountHead); + //根据单据编号查询单据id + AccountHeadExample dhExample = new AccountHeadExample(); + dhExample.createCriteria().andBillNoEqualTo(accountHead.getBillNo()).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list = accountHeadMapper.selectByExample(dhExample); + if(list!=null) { + Long headId = list.get(0).getId(); + String type = list.get(0).getType(); + /**处理单据子表信息*/ + accountItemService.saveDetials(rows, headId, type, request); + } + logService.insertLog("财务单据", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(accountHead.getBillNo()).toString(), request); + } + + public BigDecimal findAllMoney(Integer supplierId, String type, String mode, String endTime) { + String modeName = ""; + if (mode.equals("实际")) { + modeName = "change_amount"; + } else if (mode.equals("合计")) { + modeName = "total_price"; + } + BigDecimal result = null; + try{ + result = accountHeadMapperEx.findAllMoney(supplierId, type, modeName, endTime); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + /** + * 统计总金额 + * @param getS + * @param type + * @param mode 合计或者金额 + * @param endTime + * @return + */ + public BigDecimal allMoney(String getS, String type, String mode, String endTime) { + BigDecimal allMoney = BigDecimal.ZERO; + try { + Integer supplierId = Integer.valueOf(getS); + BigDecimal sum = findAllMoney(supplierId, type, mode, endTime); + if(sum != null) { + allMoney = sum; + } + } catch (Exception e) { + e.printStackTrace(); + } + //返回正数,如果负数也转为正数 + if ((allMoney.compareTo(BigDecimal.ZERO))==-1) { + allMoney = allMoney.abs(); + } + return allMoney; + } + + /** + * 查询单位的累计应收和累计应付,收预付款不计入此处 + * @param supplierId + * @param endTime + * @param supType + * @return + */ + public BigDecimal findTotalPay(Integer supplierId, String endTime, String supType) { + BigDecimal sum = BigDecimal.ZERO; + String getS = supplierId.toString(); + int i = 1; + if (("customer").equals(supType)) { //客户 + i = 1; + } else if (("vendor").equals(supType)) { //供应商 + i = -1; + } + //收付款部分 + sum = sum.add((allMoney(getS, "付款", "合计",endTime).add(allMoney(getS, "付款", "实际",endTime))).multiply(new BigDecimal(i))); + sum = sum.subtract((allMoney(getS, "收款", "合计",endTime).add(allMoney(getS, "收款", "实际",endTime))).multiply(new BigDecimal(i))); + sum = sum.add((allMoney(getS, "收入", "合计",endTime).subtract(allMoney(getS, "收入", "实际",endTime))).multiply(new BigDecimal(i))); + sum = sum.subtract((allMoney(getS, "支出", "合计",endTime).subtract(allMoney(getS, "支出", "实际",endTime))).multiply(new BigDecimal(i))); + return sum; + } + + public List getDetailByNumber(String billNo)throws Exception { + List resList = new ArrayList(); + List list = null; + try{ + list = accountHeadMapperEx.getDetailByNumber(billNo); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if (null != list) { + for (AccountHeadVo4ListEx ah : list) { + if(ah.getChangeAmount() != null) { + ah.setChangeAmount(ah.getChangeAmount().abs()); + } + if(ah.getTotalPrice() != null) { + ah.setTotalPrice(ah.getTotalPrice().abs()); + } + ah.setBillTimeStr(getCenternTime(ah.getBillTime())); + resList.add(ah); + } + } + return resList; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/accountItem/AccountItemComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/accountItem/AccountItemComponent.java new file mode 100644 index 000000000..f5d22ffbd --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/accountItem/AccountItemComponent.java @@ -0,0 +1,75 @@ +package com.jsh.erp.service.accountItem; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "accountItem_component") +@AccountItemResource +public class AccountItemComponent implements ICommonQuery { + + @Resource + private AccountItemService accountItemService; + + @Override + public Object selectOne(Long id) throws Exception { + return accountItemService.getAccountItem(id); + } + + @Override + public List select(Map map)throws Exception { + return getAccountItemList(map); + } + + private List getAccountItemList(Map map) throws Exception{ + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + Integer type = StringUtil.parseInteger(StringUtil.getInfo(search, "type")); + String remark = StringUtil.getInfo(search, "remark"); + String order = QueryUtils.order(map); + return accountItemService.select(name, type, remark, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + Integer type = StringUtil.parseInteger(StringUtil.getInfo(search, "type")); + String remark = StringUtil.getInfo(search, "remark"); + return accountItemService.countAccountItem(name, type, remark); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request) throws Exception{ + return accountItemService.insertAccountItem(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return accountItemService.updateAccountItem(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return accountItemService.deleteAccountItem(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return accountItemService.batchDeleteAccountItem(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return accountItemService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/accountItem/AccountItemResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/accountItem/AccountItemResource.java new file mode 100644 index 000000000..e0c446c48 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/accountItem/AccountItemResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.accountItem; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "accountItem") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface AccountItemResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/accountItem/AccountItemService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/accountItem/AccountItemService.java new file mode 100644 index 000000000..2b5b269b3 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/accountItem/AccountItemService.java @@ -0,0 +1,241 @@ +package com.jsh.erp.service.accountItem; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.datasource.entities.AccountItem; +import com.jsh.erp.datasource.entities.AccountItemExample; +import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.mappers.AccountItemMapper; +import com.jsh.erp.datasource.mappers.AccountItemMapperEx; +import com.jsh.erp.datasource.vo.AccountItemVo4List; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +@Service +public class AccountItemService { + private Logger logger = LoggerFactory.getLogger(AccountItemService.class); + + @Resource + private AccountItemMapper accountItemMapper; + + @Resource + private AccountItemMapperEx accountItemMapperEx; + @Resource + private LogService logService; + @Resource + private UserService userService; + + public AccountItem getAccountItem(long id)throws Exception { + AccountItem result=null; + try{ + result=accountItemMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getAccountItem()throws Exception { + AccountItemExample example = new AccountItemExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=accountItemMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String name, Integer type, String remark, int offset, int rows)throws Exception { + List list=null; + try{ + list = accountItemMapperEx.selectByConditionAccountItem(name, type, remark, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long countAccountItem(String name, Integer type, String remark)throws Exception { + Long result=null; + try{ + result = accountItemMapperEx.countsByAccountItem(name, type, remark); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertAccountItem(JSONObject obj, HttpServletRequest request) throws Exception{ + AccountItem accountItem = JSONObject.parseObject(obj.toJSONString(), AccountItem.class); + int result=0; + try{ + result = accountItemMapper.insertSelective(accountItem); + logService.insertLog("财务明细", BusinessConstants.LOG_OPERATION_TYPE_ADD, request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateAccountItem(JSONObject obj, HttpServletRequest request)throws Exception { + AccountItem accountItem = JSONObject.parseObject(obj.toJSONString(), AccountItem.class); + int result=0; + try{ + result = accountItemMapper.updateByPrimaryKeySelective(accountItem); + logService.insertLog("财务明细", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(accountItem.getId()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteAccountItem(Long id, HttpServletRequest request)throws Exception { + int result=0; + try{ + result = accountItemMapper.deleteByPrimaryKey(id); + logService.insertLog("财务明细", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_DELETE).append(id).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteAccountItem(String ids, HttpServletRequest request)throws Exception { + List idList = StringUtil.strToLongList(ids); + AccountItemExample example = new AccountItemExample(); + example.createCriteria().andIdIn(idList); + int result=0; + try{ + result = accountItemMapper.deleteByExample(example); + logService.insertLog("财务明细", "批量删除,id集:" + ids, request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int checkIsNameExist(Long id, String name)throws Exception { + AccountItemExample example = new AccountItemExample(); + example.createCriteria().andIdNotEqualTo(id).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list = null; + try{ + list = accountItemMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertAccountItemWithObj(AccountItem accountItem)throws Exception { + int result=0; + try{ + result = accountItemMapper.insertSelective(accountItem); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateAccountItemWithObj(AccountItem accountItem)throws Exception { + int result=0; + try{ + result = accountItemMapper.updateByPrimaryKeySelective(accountItem); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public List getDetailList(Long headerId) { + List list=null; + try{ + list = accountItemMapperEx.getDetailList(headerId); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public void saveDetials(String rows, Long headerId, String type, HttpServletRequest request) throws Exception { + //删除单据的明细 + deleteAccountItemHeadId(headerId); + JSONArray rowArr = JSONArray.parseArray(rows); + if (null != rowArr) { + for (int i = 0; i < rowArr.size(); i++) { + AccountItem accountItem = new AccountItem(); + JSONObject tempInsertedJson = JSONObject.parseObject(rowArr.getString(i)); + accountItem.setHeaderId(headerId); + if (tempInsertedJson.get("accountId") != null && !tempInsertedJson.get("accountId").equals("")) { + accountItem.setAccountId(tempInsertedJson.getLong("accountId")); + } + if (tempInsertedJson.get("inOutItemId") != null && !tempInsertedJson.get("inOutItemId").equals("")) { + accountItem.setInOutItemId(tempInsertedJson.getLong("inOutItemId")); + } + if (tempInsertedJson.get("eachAmount") != null && !tempInsertedJson.get("eachAmount").equals("")) { + BigDecimal eachAmount = tempInsertedJson.getBigDecimal("eachAmount"); + if (type.equals("付款")) { + eachAmount = BigDecimal.ZERO.subtract(eachAmount); + } + accountItem.setEachAmount(eachAmount); + } else { + accountItem.setEachAmount(BigDecimal.ZERO); + } + accountItem.setRemark(tempInsertedJson.getString("remark")); + this.insertAccountItemWithObj(accountItem); + } + } + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public void deleteAccountItemHeadId(Long headerId)throws Exception { + AccountItemExample example = new AccountItemExample(); + example.createCriteria().andHeaderIdEqualTo(headerId); + try{ + accountItemMapper.deleteByExample(example); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteAccountItemByIds(String ids) throws Exception{ + logService.insertLog("财务明细", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_DELETE).append(ids).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + User userInfo=userService.getCurrentUser(); + String [] idArray=ids.split(","); + int result=0; + try{ + result = accountItemMapperEx.batchDeleteAccountItemByIds(new Date(),userInfo==null?null:userInfo.getId(),idArray); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/depot/DepotComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/depot/DepotComponent.java new file mode 100644 index 000000000..e9de2f14c --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/depot/DepotComponent.java @@ -0,0 +1,75 @@ +package com.jsh.erp.service.depot; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "depot_component") +@DepotResource +public class DepotComponent implements ICommonQuery { + + @Resource + private DepotService depotService; + + @Override + public Object selectOne(Long id) throws Exception { + return depotService.getDepot(id); + } + + @Override + public List select(Map map)throws Exception { + return getDepotList(map); + } + + private List getDepotList(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + Integer type = StringUtil.parseInteger(StringUtil.getInfo(search, "type")); + String remark = StringUtil.getInfo(search, "remark"); + String order = QueryUtils.order(map); + return depotService.select(name, type, remark, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + Integer type = StringUtil.parseInteger(StringUtil.getInfo(search, "type")); + String remark = StringUtil.getInfo(search, "remark"); + return depotService.countDepot(name, type, remark); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request) throws Exception{ + return depotService.insertDepot(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return depotService.updateDepot(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return depotService.deleteDepot(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return depotService.batchDeleteDepot(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return depotService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/depot/DepotResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/depot/DepotResource.java new file mode 100644 index 000000000..fb8729f7f --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/depot/DepotResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.depot; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "depot") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface DepotResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/depot/DepotService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/depot/DepotService.java new file mode 100644 index 000000000..23eeeb175 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/depot/DepotService.java @@ -0,0 +1,265 @@ +package com.jsh.erp.service.depot; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.mappers.*; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Service +public class DepotService { + private Logger logger = LoggerFactory.getLogger(DepotService.class); + + @Resource + private DepotMapper depotMapper; + + @Resource + private DepotMapperEx depotMapperEx; + @Resource + private UserService userService; + @Resource + private LogService logService; + @Resource + private DepotHeadMapperEx depotHeadMapperEx; + @Resource + private DepotItemMapperEx depotItemMapperEx; + + public Depot getDepot(long id)throws Exception { + Depot result=null; + try{ + result=depotMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getDepotListByIds(String ids)throws Exception { + List idList = StringUtil.strToLongList(ids); + List list = new ArrayList<>(); + try{ + DepotExample example = new DepotExample(); + example.createCriteria().andIdIn(idList); + list = depotMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getDepot()throws Exception { + DepotExample example = new DepotExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=depotMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getAllList()throws Exception { + DepotExample example = new DepotExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + example.setOrderByClause("sort"); + List list=null; + try{ + list=depotMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String name, Integer type, String remark, int offset, int rows)throws Exception { + List list=null; + try{ + list=depotMapperEx.selectByConditionDepot(name, type, remark, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long countDepot(String name, Integer type, String remark)throws Exception { + Long result=null; + try{ + result=depotMapperEx.countsByDepot(name, type, remark); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertDepot(JSONObject obj, HttpServletRequest request)throws Exception { + Depot depot = JSONObject.parseObject(obj.toJSONString(), Depot.class); + int result=0; + try{ + result=depotMapper.insertSelective(depot); + logService.insertLog("仓库", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(depot.getName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateDepot(JSONObject obj, HttpServletRequest request) throws Exception{ + Depot depot = JSONObject.parseObject(obj.toJSONString(), Depot.class); + int result=0; + try{ + result= depotMapper.updateByPrimaryKeySelective(depot); + logService.insertLog("仓库", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(depot.getName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteDepot(Long id, HttpServletRequest request)throws Exception { + return batchDeleteDepotByIds(id.toString()); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteDepot(String ids, HttpServletRequest request) throws Exception{ + return batchDeleteDepotByIds(ids); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteDepotByIds(String ids)throws Exception { + int result=0; + String [] idArray=ids.split(","); + //校验单据子表 jsh_depot_item + List depotItemList=null; + try{ + depotItemList = depotItemMapperEx.getDepotItemListListByDepotIds(idArray); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if(depotItemList!=null&&depotItemList.size()>0){ + logger.error("异常码[{}],异常提示[{}],参数,DepotIds[{}]", + ExceptionConstants.DELETE_FORCE_CONFIRM_CODE,ExceptionConstants.DELETE_FORCE_CONFIRM_MSG,ids); + throw new BusinessRunTimeException(ExceptionConstants.DELETE_FORCE_CONFIRM_CODE, + ExceptionConstants.DELETE_FORCE_CONFIRM_MSG); + } + //记录日志 + StringBuffer sb = new StringBuffer(); + sb.append(BusinessConstants.LOG_OPERATION_TYPE_DELETE); + List list = getDepotListByIds(ids); + for(Depot depot: list){ + sb.append("[").append(depot.getName()).append("]"); + } + logService.insertLog("仓库", sb.toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + User userInfo=userService.getCurrentUser(); + //校验通过执行删除操作 + try{ + result = depotMapperEx.batchDeleteDepotByIds(new Date(),userInfo==null?null:userInfo.getId(),idArray); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int checkIsNameExist(Long id, String name)throws Exception { + DepotExample example = new DepotExample(); + example.createCriteria().andIdNotEqualTo(id).andNameEqualTo(name).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list= depotMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + + public List findUserDepot()throws Exception{ + DepotExample example = new DepotExample(); + example.createCriteria().andTypeEqualTo(0).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + example.setOrderByClause("Sort"); + List list=null; + try{ + list= depotMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List findGiftByType(Integer type)throws Exception{ + DepotExample example = new DepotExample(); + example.createCriteria().andTypeEqualTo(type); + example.setOrderByClause("Sort"); + List list=null; + try{ + list= depotMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateIsDefault(Long depotId) throws Exception{ + int result=0; + try{ + //全部取消默认 + Depot allDepot = new Depot(); + allDepot.setIsDefault(false); + DepotExample allExample = new DepotExample(); + allExample.createCriteria(); + depotMapper.updateByExampleSelective(allDepot, allExample); + //给指定仓库设为默认 + Depot depot = new Depot(); + depot.setIsDefault(true); + DepotExample example = new DepotExample(); + example.createCriteria().andIdEqualTo(depotId); + depotMapper.updateByExampleSelective(depot, example); + logService.insertLog("仓库",BusinessConstants.LOG_OPERATION_TYPE_EDIT+depotId, + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + result = 1; + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + /** + * 根据名称获取id + * @param name + */ + public Long getIdByName(String name){ + Long id = 0L; + DepotExample example = new DepotExample(); + example.createCriteria().andNameEqualTo(name).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list = depotMapper.selectByExample(example); + if(list!=null && list.size()>0) { + id = list.get(0).getId(); + } + return id; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/depotHead/DepotHeadComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/depotHead/DepotHeadComponent.java new file mode 100644 index 000000000..1dd5c6d2b --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/depotHead/DepotHeadComponent.java @@ -0,0 +1,86 @@ +package com.jsh.erp.service.depotHead; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "depotHead_component") +@DepotHeadResource +public class DepotHeadComponent implements ICommonQuery { + + @Resource + private DepotHeadService depotHeadService; + + @Override + public Object selectOne(Long id) throws Exception { + return depotHeadService.getDepotHead(id); + } + + @Override + public List select(Map map)throws Exception { + return getDepotHeadList(map); + } + + private List getDepotHeadList(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String type = StringUtil.getInfo(search, "type"); + String subType = StringUtil.getInfo(search, "subType"); + String roleType = StringUtil.getInfo(search, "roleType"); + String status = StringUtil.getInfo(search, "status"); + String number = StringUtil.getInfo(search, "number"); + String beginTime = StringUtil.getInfo(search, "beginTime"); + String endTime = StringUtil.getInfo(search, "endTime"); + String materialParam = StringUtil.getInfo(search, "materialParam"); + String depotIds = StringUtil.getInfo(search, "depotIds"); + return depotHeadService.select(type, subType, roleType, status, number, beginTime, endTime, materialParam, depotIds, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String type = StringUtil.getInfo(search, "type"); + String subType = StringUtil.getInfo(search, "subType"); + String roleType = StringUtil.getInfo(search, "roleType"); + String status = StringUtil.getInfo(search, "status"); + String number = StringUtil.getInfo(search, "number"); + String beginTime = StringUtil.getInfo(search, "beginTime"); + String endTime = StringUtil.getInfo(search, "endTime"); + String materialParam = StringUtil.getInfo(search, "materialParam"); + String depotIds = StringUtil.getInfo(search, "depotIds"); + return depotHeadService.countDepotHead(type, subType, roleType, status, number, beginTime, endTime, materialParam, depotIds); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request) throws Exception{ + return depotHeadService.insertDepotHead(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return depotHeadService.updateDepotHead(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return depotHeadService.deleteDepotHead(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return depotHeadService.batchDeleteDepotHead(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return depotHeadService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/depotHead/DepotHeadResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/depotHead/DepotHeadResource.java new file mode 100644 index 000000000..8b51f5273 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/depotHead/DepotHeadResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.depotHead; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "depotHead") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface DepotHeadResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/depotHead/DepotHeadService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/depotHead/DepotHeadService.java new file mode 100644 index 000000000..7b7f2cfa7 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/depotHead/DepotHeadService.java @@ -0,0 +1,592 @@ +package com.jsh.erp.service.depotHead; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.mappers.DepotHeadMapper; +import com.jsh.erp.datasource.mappers.DepotHeadMapperEx; +import com.jsh.erp.datasource.mappers.DepotItemMapperEx; +import com.jsh.erp.datasource.vo.DepotHeadVo4InDetail; +import com.jsh.erp.datasource.vo.DepotHeadVo4InOutMCount; +import com.jsh.erp.datasource.vo.DepotHeadVo4List; +import com.jsh.erp.datasource.vo.DepotHeadVo4StatementAccount; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.depotItem.DepotItemService; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.orgaUserRel.OrgaUserRelService; +import com.jsh.erp.service.redis.RedisService; +import com.jsh.erp.service.serialNumber.SerialNumberService; +import com.jsh.erp.service.supplier.SupplierService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import static com.jsh.erp.utils.Tools.getCenternTime; + +@Service +public class DepotHeadService { + private Logger logger = LoggerFactory.getLogger(DepotHeadService.class); + + @Resource + private DepotHeadMapper depotHeadMapper; + @Resource + private DepotHeadMapperEx depotHeadMapperEx; + @Resource + private UserService userService; + @Resource + DepotItemService depotItemService; + @Resource + private SupplierService supplierService; + @Resource + private SerialNumberService serialNumberService; + @Resource + private OrgaUserRelService orgaUserRelService; + @Resource + DepotItemMapperEx depotItemMapperEx; + @Resource + private LogService logService; + @Resource + private RedisService redisService; + + public DepotHead getDepotHead(long id)throws Exception { + DepotHead result=null; + try{ + result=depotHeadMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getDepotHead()throws Exception { + DepotHeadExample example = new DepotHeadExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=depotHeadMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String type, String subType, String roleType, String status, String number, String beginTime, String endTime, + String materialParam, String depotIds, int offset, int rows)throws Exception { + List resList = new ArrayList(); + List list=null; + try{ + String [] creatorArray = getCreatorArray(roleType); + list=depotHeadMapperEx.selectByConditionDepotHead(type, subType, creatorArray, status, number, beginTime, endTime, materialParam, depotIds, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if (null != list) { + for (DepotHeadVo4List dh : list) { + if(dh.getAccountIdList() != null) { + String accountidlistStr = dh.getAccountIdList().replace("[", "").replace("]", "").replaceAll("\"", ""); + dh.setAccountIdList(accountidlistStr); + } + if(dh.getAccountMoneyList() != null) { + String accountmoneylistStr = dh.getAccountMoneyList().replace("[", "").replace("]", "").replaceAll("\"", ""); + dh.setAccountMoneyList(accountmoneylistStr); + } + if(dh.getOtherMoneyList() != null) { + String otherMoneyListStr = dh.getOtherMoneyList().replace("[", "").replace("]", "").replaceAll("\"", ""); + dh.setOtherMoneyList(otherMoneyListStr); + } + if(dh.getChangeAmount() != null) { + dh.setChangeAmount(dh.getChangeAmount().abs()); + } + if(dh.getTotalPrice() != null) { + dh.setTotalPrice(dh.getTotalPrice().abs()); + } + if(dh.getOperTime() != null) { + dh.setOperTimeStr(getCenternTime(dh.getOperTime())); + } + dh.setMaterialsList(findMaterialsListByHeaderId(dh.getId())); + resList.add(dh); + } + } + return resList; + } + + public Long countDepotHead(String type, String subType, String roleType, String status, String number, String beginTime, String endTime, + String materialParam, String depotIds) throws Exception{ + Long result=null; + try{ + String [] creatorArray = getCreatorArray(roleType); + result=depotHeadMapperEx.countsByDepotHead(type, subType, creatorArray, status, number, beginTime, endTime, materialParam, depotIds); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + /** + * 根据角色类型获取操作员数组 + * @param roleType + * @return + * @throws Exception + */ + public String[] getCreatorArray(String roleType) throws Exception { + String creator = getCreatorByRoleType(roleType); + String [] creatorArray=null; + if(StringUtil.isNotEmpty(creator)){ + creatorArray = creator.split(","); + } + return creatorArray; + } + + /** + * 根据角色类型获取操作员 + * @param roleType + * @return + * @throws Exception + */ + public String getCreatorByRoleType(String roleType) throws Exception { + String creator = ""; + User user = userService.getCurrentUser(); + if(BusinessConstants.ROLE_TYPE_PRIVATE.equals(roleType)) { + creator = user.getId().toString(); + } else if(BusinessConstants.ROLE_TYPE_THIS_ORG.equals(roleType)) { + creator = orgaUserRelService.getUserIdListByUserId(user.getId()); + } + return creator; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertDepotHead(JSONObject obj, HttpServletRequest request)throws Exception { + DepotHead depotHead = JSONObject.parseObject(obj.toJSONString(), DepotHead.class); + depotHead.setCreateTime(new Timestamp(System.currentTimeMillis())); + depotHead.setStatus(BusinessConstants.BILLS_STATUS_UN_AUDIT); + int result=0; + try{ + result=depotHeadMapper.insert(depotHead); + logService.insertLog("单据", BusinessConstants.LOG_OPERATION_TYPE_ADD, request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateDepotHead(JSONObject obj, HttpServletRequest request) throws Exception{ + DepotHead depotHead = JSONObject.parseObject(obj.toJSONString(), DepotHead.class); + DepotHead dh=null; + try{ + dh = depotHeadMapper.selectByPrimaryKey(depotHead.getId()); + }catch(Exception e){ + JshException.readFail(logger, e); + } + depotHead.setStatus(dh.getStatus()); + depotHead.setCreateTime(dh.getCreateTime()); + int result=0; + try{ + result = depotHeadMapper.updateByPrimaryKey(depotHead); + logService.insertLog("单据", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(depotHead.getId()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteDepotHead(Long id, HttpServletRequest request)throws Exception { + int result=0; + try{ + //查询单据主表信息 + DepotHead depotHead =getDepotHead(id); + User userInfo=userService.getCurrentUser(); + //删除出库数据回收序列号 + if(BusinessConstants.DEPOTHEAD_TYPE_OUT.equals(depotHead.getType()) + &&!BusinessConstants.SUB_TYPE_TRANSFER.equals(depotHead.getSubType())){ + //查询单据子表列表 + List depotItemList=null; + try{ + depotItemList = depotItemMapperEx.findDepotItemListBydepotheadId(id,BusinessConstants.ENABLE_SERIAL_NUMBER_ENABLED); + }catch(Exception e){ + JshException.readFail(logger, e); + } + + /**回收序列号*/ + if(depotItemList!=null&&depotItemList.size()>0){ + for(DepotItem depotItem:depotItemList){ + //BasicNumber=OperNumber*ratio + serialNumberService.cancelSerialNumber(depotItem.getMaterialId(), depotItem.getHeaderId(),(depotItem.getBasicNumber()==null?0:depotItem.getBasicNumber()).intValue(),userInfo); + } + } + } + /**删除单据子表数据*/ + try{ + depotItemMapperEx.batchDeleteDepotItemByDepotHeadIds(new Long []{id}); + //更新当前库存 + List list = depotItemService.getListByHeaderId(id); + for(DepotItem depotItem: list){ + Long tenantId = Long.parseLong(redisService.getObjectFromSessionByKey(request,"tenantId").toString()); + depotItemService.updateCurrentStock(depotItem,tenantId); + } + }catch(Exception e){ + JshException.writeFail(logger, e); + } + /**删除单据主表信息*/ + batchDeleteDepotHeadByIds(id.toString()); + logService.insertLog("单据", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_DELETE).append(depotHead.getNumber()).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + result = 1; + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteDepotHead(String ids, HttpServletRequest request)throws Exception { + int result=0; + try{ + if(StringUtil.isNotEmpty(ids)){ + String [] headIds=ids.split(","); + for(int i=0;i list = null; + try{ + list = depotHeadMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchSetStatus(String status, String depotHeadIDs)throws Exception { + List ids = StringUtil.strToLongList(depotHeadIDs); + DepotHead depotHead = new DepotHead(); + depotHead.setStatus(status); + DepotHeadExample example = new DepotHeadExample(); + example.createCriteria().andIdIn(ids); + int result = 0; + try{ + result = depotHeadMapper.updateByExampleSelective(depotHead, example); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public String findMaterialsListByHeaderId(Long id)throws Exception { + String result = null; + try{ + result = depotHeadMapperEx.findMaterialsListByHeaderId(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List findByAll(String beginTime, String endTime, String type, String materialParam, Integer depotId, Integer oId, Integer offset, Integer rows) throws Exception{ + List list = null; + try{ + list =depotHeadMapperEx.findByAll(beginTime, endTime, type, materialParam, depotId, oId, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public int findByAllCount(String beginTime, String endTime, String type, String materialParam, Integer depotId, Integer oId) throws Exception{ + int result = 0; + try{ + result =depotHeadMapperEx.findByAllCount(beginTime, endTime, type, materialParam, depotId, oId); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List findInOutMaterialCount(String beginTime, String endTime, String type, String materialParam, Integer depotId, Integer oId, Integer offset, Integer rows)throws Exception { + List list = null; + try{ + list =depotHeadMapperEx.findInOutMaterialCount(beginTime, endTime, type, materialParam, depotId, oId, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public int findInOutMaterialCountTotal(String beginTime, String endTime, String type, String materialParam, Integer depotId, Integer oId)throws Exception { + int result = 0; + try{ + result =depotHeadMapperEx.findInOutMaterialCountTotal(beginTime, endTime, type, materialParam, depotId, oId); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List findStatementAccount(String beginTime, String endTime, Integer organId, String supType, Integer offset, Integer rows)throws Exception { + List list = null; + try{ + list =depotHeadMapperEx.findStatementAccount(beginTime, endTime, organId, supType, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public int findStatementAccountCount(String beginTime, String endTime, Integer organId, String supType) throws Exception{ + int result = 0; + try{ + result =depotHeadMapperEx.findStatementAccountCount(beginTime, endTime, organId, supType); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public BigDecimal findAllMoney(Integer supplierId, String type, String subType, String mode, String endTime)throws Exception { + String modeName = ""; + BigDecimal allOtherMoney = BigDecimal.ZERO; + if (mode.equals("实际")) { + modeName = "change_amount"; + } else if (mode.equals("合计")) { + modeName = "discount_last_money"; + allOtherMoney = depotHeadMapperEx.findAllOtherMoney(supplierId, type, subType, endTime); + } + BigDecimal result = BigDecimal.ZERO; + try{ + result =depotHeadMapperEx.findAllMoney(supplierId, type, subType, modeName, endTime); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if(allOtherMoney!=null) { + result = result.add(allOtherMoney); + } + return result; + } + + /** + * 统计总金额 + * @param getS + * @param type + * @param subType + * @param mode 合计或者金额 + * @return + */ + public BigDecimal allMoney(String getS, String type, String subType, String mode, String endTime) { + BigDecimal allMoney = BigDecimal.ZERO; + try { + Integer supplierId = Integer.valueOf(getS); + BigDecimal sum = findAllMoney(supplierId, type, subType, mode, endTime); + if(sum != null) { + allMoney = sum; + } + } catch (Exception e) { + e.printStackTrace(); + } + //返回正数,如果负数也转为正数 + if ((allMoney.compareTo(BigDecimal.ZERO))==-1) { + allMoney = allMoney.abs(); + } + return allMoney; + } + + /** + * 查询单位的累计应收和累计应付,零售不能计入 + * @param supplierId + * @param endTime + * @param supType + * @return + */ + public BigDecimal findTotalPay(Integer supplierId, String endTime, String supType) { + BigDecimal sum = BigDecimal.ZERO; + String getS = supplierId.toString(); + int i = 1; + if (("customer").equals(supType)) { //客户 + i = 1; + } else if (("vendor").equals(supType)) { //供应商 + i = -1; + } + //进销部分 + sum = sum.subtract((allMoney(getS, "入库", "采购", "合计",endTime).subtract(allMoney(getS, "入库", "采购", "实际",endTime))).multiply(new BigDecimal(i))); + sum = sum.subtract((allMoney(getS, "入库", "销售退货", "合计",endTime).subtract(allMoney(getS, "入库", "销售退货", "实际",endTime))).multiply(new BigDecimal(i))); + sum = sum.add((allMoney(getS, "出库", "销售", "合计",endTime).subtract(allMoney(getS, "出库", "销售", "实际",endTime))).multiply(new BigDecimal(i))); + sum = sum.add((allMoney(getS, "出库", "采购退货", "合计",endTime).subtract(allMoney(getS, "出库", "采购退货", "实际",endTime))).multiply(new BigDecimal(i))); + return sum; + } + + public List getDetailByNumber(String number)throws Exception { + List resList = new ArrayList(); + List list = null; + try{ + list = depotHeadMapperEx.getDetailByNumber(number); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if (null != list) { + for (DepotHeadVo4List dh : list) { + if(dh.getAccountIdList() != null) { + String accountidlistStr = dh.getAccountIdList().replace("[", "").replace("]", "").replaceAll("\"", ""); + dh.setAccountIdList(accountidlistStr); + } + if(dh.getAccountMoneyList() != null) { + String accountmoneylistStr = dh.getAccountMoneyList().replace("[", "").replace("]", "").replaceAll("\"", ""); + dh.setAccountMoneyList(accountmoneylistStr); + } + if(dh.getOtherMoneyList() != null) { + String otherMoneyListStr = dh.getOtherMoneyList().replace("[", "").replace("]", "").replaceAll("\"", ""); + dh.setOtherMoneyList(otherMoneyListStr); + } + if(dh.getOtherMoneyItem() != null) { + String otherMoneyItemStr = dh.getOtherMoneyItem().replace("[", "").replace("]", "").replaceAll("\"", ""); + dh.setOtherMoneyItem(otherMoneyItemStr); + } + if(dh.getChangeAmount() != null) { + dh.setChangeAmount(dh.getChangeAmount().abs()); + } + if(dh.getTotalPrice() != null) { + dh.setTotalPrice(dh.getTotalPrice().abs()); + } + dh.setOperTimeStr(getCenternTime(dh.getOperTime())); + dh.setMaterialsList(findMaterialsListByHeaderId(dh.getId())); + resList.add(dh); + } + } + return resList; + } + + /** + * 新增单据主表及单据子表信息 + * @param beanJson + * @param rows + * @param tenantId + * @param request + * @throws Exception + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public void addDepotHeadAndDetail(String beanJson, String rows, Long tenantId, + HttpServletRequest request) throws Exception { + /**处理单据主表数据*/ + DepotHead depotHead = JSONObject.parseObject(beanJson, DepotHead.class); + //判断用户是否已经登录过,登录过不再处理 + User userInfo=userService.getCurrentUser(); + depotHead.setCreator(userInfo==null?null:userInfo.getId()); + depotHead.setCreateTime(new Timestamp(System.currentTimeMillis())); + depotHead.setStatus(BusinessConstants.BILLS_STATUS_UN_AUDIT); + try{ + depotHeadMapper.insertSelective(depotHead); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + /**入库和出库处理预付款信息*/ + if(BusinessConstants.PAY_TYPE_PREPAID.equals(depotHead.getPayType())){ + if(depotHead.getOrganId()!=null) { + supplierService.updateAdvanceIn(depotHead.getOrganId(), BigDecimal.ZERO.subtract(depotHead.getTotalPrice())); + } + } + //根据单据编号查询单据id + DepotHeadExample dhExample = new DepotHeadExample(); + dhExample.createCriteria().andNumberEqualTo(depotHead.getNumber()).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list = depotHeadMapper.selectByExample(dhExample); + if(list!=null) { + Long headId = list.get(0).getId(); + /**入库和出库处理单据子表信息*/ + depotItemService.saveDetials(rows,headId,tenantId, request); + } + /**如果关联单据号非空则更新订单的状态为2 */ + if(depotHead.getLinkNumber()!=null) { + DepotHead depotHeadOrders = new DepotHead(); + depotHeadOrders.setStatus(BusinessConstants.BILLS_STATUS_SKIP); + DepotHeadExample example = new DepotHeadExample(); + example.createCriteria().andNumberEqualTo(depotHead.getLinkNumber()); + try{ + depotHeadMapper.updateByExampleSelective(depotHeadOrders, example); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + } + logService.insertLog("单据", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(depotHead.getNumber()).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + } + + /** + * 更新单据主表及单据子表信息 + * @param beanJson + * @param rows + * @param preTotalPrice + * @param tenantId + * @param request + * @throws Exception + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public void updateDepotHeadAndDetail(String beanJson, String rows, + BigDecimal preTotalPrice, Long tenantId,HttpServletRequest request)throws Exception { + /**更新单据主表信息*/ + DepotHead depotHead = JSONObject.parseObject(beanJson, DepotHead.class); + try{ + depotHeadMapper.updateByPrimaryKeySelective(depotHead); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + /**入库和出库处理预付款信息*/ + if(BusinessConstants.PAY_TYPE_PREPAID.equals(depotHead.getPayType())){ + if(depotHead.getOrganId()!=null){ + supplierService.updateAdvanceIn(depotHead.getOrganId(), BigDecimal.ZERO.subtract(depotHead.getTotalPrice().subtract(preTotalPrice))); + } + } + /**入库和出库处理单据子表信息*/ + depotItemService.saveDetials(rows,depotHead.getId(),tenantId,request); + logService.insertLog("单据", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(depotHead.getNumber()).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + } + + public BigDecimal getBuyAndSaleStatistics(String type, String subType, Integer hasSupplier, String beginTime, String endTime) { + return depotHeadMapperEx.getBuyAndSaleStatistics(type, subType, hasSupplier, beginTime, endTime); + } + + public BigDecimal getBuyAndSaleRetailStatistics(String type, String subType, Integer hasSupplier, String beginTime, String endTime) { + return depotHeadMapperEx.getBuyAndSaleRetailStatistics(type, subType, hasSupplier, beginTime, endTime); + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemComponent.java new file mode 100644 index 000000000..8fe8713d4 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemComponent.java @@ -0,0 +1,75 @@ +package com.jsh.erp.service.depotItem; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "depotItem_component") +@DepotItemResource +public class DepotItemComponent implements ICommonQuery { + + @Resource + private DepotItemService depotItemService; + + @Override + public Object selectOne(Long id) throws Exception { + return depotItemService.getDepotItem(id); + } + + @Override + public List select(Map map)throws Exception { + return getDepotItemList(map); + } + + private List getDepotItemList(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + Integer type = StringUtil.parseInteger(StringUtil.getInfo(search, "type")); + String remark = StringUtil.getInfo(search, "remark"); + String order = QueryUtils.order(map); + return depotItemService.select(name, type, remark, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + Integer type = StringUtil.parseInteger(StringUtil.getInfo(search, "type")); + String remark = StringUtil.getInfo(search, "remark"); + return depotItemService.countDepotItem(name, type, remark); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return depotItemService.insertDepotItem(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return depotItemService.updateDepotItem(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return depotItemService.deleteDepotItem(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return depotItemService.batchDeleteDepotItem(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return depotItemService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemResource.java new file mode 100644 index 000000000..6bdad6e1c --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.depotItem; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "depotItem") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface DepotItemResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java new file mode 100644 index 000000000..d258fa0ac --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java @@ -0,0 +1,530 @@ +package com.jsh.erp.service.depotItem; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.mappers.*; +import com.jsh.erp.datasource.vo.DepotItemStockWarningCount; +import com.jsh.erp.datasource.vo.DepotItemVo4Stock; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.materialExtend.MaterialExtendService; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.material.MaterialService; +import com.jsh.erp.service.serialNumber.SerialNumberService; +import com.jsh.erp.service.systemConfig.SystemConfigService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Service +public class DepotItemService { + private Logger logger = LoggerFactory.getLogger(DepotItemService.class); + + private final static String TYPE = "入库"; + private final static String SUM_TYPE = "number"; + private final static String IN = "in"; + private final static String OUT = "out"; + + @Resource + private DepotItemMapper depotItemMapper; + @Resource + private DepotItemMapperEx depotItemMapperEx; + @Resource + private MaterialService materialService; + @Resource + private MaterialExtendService materialExtendService; + @Resource + SerialNumberMapperEx serialNumberMapperEx; + @Resource + private DepotHeadMapper depotHeadMapper; + @Resource + SerialNumberService serialNumberService; + @Resource + private UserService userService; + @Resource + private SystemConfigService systemConfigService; + @Resource + private MaterialCurrentStockMapper materialCurrentStockMapper; + @Resource + private LogService logService; + + public DepotItem getDepotItem(long id)throws Exception { + DepotItem result=null; + try{ + result=depotItemMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getDepotItem()throws Exception { + DepotItemExample example = new DepotItemExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=depotItemMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String name, Integer type, String remark, int offset, int rows)throws Exception { + List list=null; + try{ + list=depotItemMapperEx.selectByConditionDepotItem(name, type, remark, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long countDepotItem(String name, Integer type, String remark) throws Exception{ + Long result =null; + try{ + result=depotItemMapperEx.countsByDepotItem(name, type, remark); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertDepotItem(JSONObject obj, HttpServletRequest request)throws Exception { + DepotItem depotItem = JSONObject.parseObject(obj.toJSONString(), DepotItem.class); + int result =0; + try{ + result=depotItemMapper.insertSelective(depotItem); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateDepotItem(JSONObject obj, HttpServletRequest request)throws Exception { + DepotItem depotItem = JSONObject.parseObject(obj.toJSONString(), DepotItem.class); + int result =0; + try{ + result=depotItemMapper.updateByPrimaryKeySelective(depotItem); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteDepotItem(Long id, HttpServletRequest request)throws Exception { + int result =0; + try{ + result=depotItemMapper.deleteByPrimaryKey(id); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteDepotItem(String ids, HttpServletRequest request)throws Exception { + List idList = StringUtil.strToLongList(ids); + DepotItemExample example = new DepotItemExample(); + example.createCriteria().andIdIn(idList); + int result =0; + try{ + result=depotItemMapper.deleteByExample(example); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int checkIsNameExist(Long id, String name)throws Exception { + DepotItemExample example = new DepotItemExample(); + example.createCriteria().andIdNotEqualTo(id).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list =null; + try{ + list=depotItemMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + + public List findDetailByTypeAndMaterialIdList(Map map)throws Exception { + String mIdStr = map.get("mId"); + Long mId = null; + if(!StringUtil.isEmpty(mIdStr)) { + mId = Long.parseLong(mIdStr); + } + List list =null; + try{ + list = depotItemMapperEx.findDetailByTypeAndMaterialIdList(mId, QueryUtils.offset(map), QueryUtils.rows(map)); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long findDetailByTypeAndMaterialIdCounts(Map map)throws Exception { + String mIdStr = map.get("mId"); + Long mId = null; + if(!StringUtil.isEmpty(mIdStr)) { + mId = Long.parseLong(mIdStr); + } + Long result =null; + try{ + result = depotItemMapperEx.findDetailByTypeAndMaterialIdCounts(mId); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertDepotItemWithObj(DepotItem depotItem)throws Exception { + int result =0; + try{ + result = depotItemMapper.insertSelective(depotItem); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateDepotItemWithObj(DepotItem depotItem)throws Exception { + int result =0; + try{ + result = depotItemMapper.updateByPrimaryKeySelective(depotItem); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public List getListByHeaderId(Long headerId)throws Exception { + List list =null; + try{ + DepotItemExample example = new DepotItemExample(); + example.createCriteria().andHeaderIdEqualTo(headerId); + list = depotItemMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getDetailList(Long headerId)throws Exception { + List list =null; + try{ + list = depotItemMapperEx.getDetailList(headerId); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List findByAll(String materialParam, String endTime, Integer offset, Integer rows)throws Exception { + List list =null; + try{ + list = depotItemMapperEx.findByAll(materialParam, endTime, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public int findByAllCount(String materialParam, String endTime)throws Exception { + int result=0; + try{ + result = depotItemMapperEx.findByAllCount(materialParam, endTime); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public BigDecimal buyOrSale(String type, String subType, Long MId, String MonthTime, String sumType) throws Exception{ + BigDecimal result= BigDecimal.ZERO; + try{ + if (SUM_TYPE.equals(sumType)) { + result= depotItemMapperEx.buyOrSaleNumber(type, subType, MId, MonthTime, sumType); + } else { + result= depotItemMapperEx.buyOrSalePrice(type, subType, MId, MonthTime, sumType); + } + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + + } + + /** + * 统计采购或销售的总金额 + * @param type + * @param subType + * @param MonthTime + * @return + * @throws Exception + */ + public BigDecimal inOrOutPrice(String type, String subType, String MonthTime) throws Exception{ + BigDecimal result= BigDecimal.ZERO; + try{ + result = depotItemMapperEx.inOrOutPrice(type, subType, MonthTime); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public void saveDetials(String rows, Long headerId, Long tenantId, HttpServletRequest request) throws Exception{ + //查询单据主表信息 + DepotHead depotHead =depotHeadMapper.selectByPrimaryKey(headerId); + //获得当前操作人 + User userInfo=userService.getCurrentUser(); + //首先回收序列号,如果是调拨,不用处理序列号 + if(BusinessConstants.DEPOTHEAD_TYPE_OUT.equals(depotHead.getType()) + &&!BusinessConstants.SUB_TYPE_TRANSFER.equals(depotHead.getSubType())){ + List depotItemList = getListByHeaderId(headerId); + for(DepotItem depotItem : depotItemList){ + Material material= materialService.getMaterial(depotItem.getMaterialId()); + if(material==null){ + continue; + } + if(BusinessConstants.ENABLE_SERIAL_NUMBER_ENABLED.equals(material.getEnableSerialNumber())){ + serialNumberService.cancelSerialNumber(depotItem.getMaterialId(),depotItem.getHeaderId(), + (depotItem.getBasicNumber()==null?0:depotItem.getBasicNumber()).intValue(), userInfo); + } + } + } + //删除单据的明细 + deleteDepotItemHeadId(headerId); + JSONArray rowArr = JSONArray.parseArray(rows); + if (null != rowArr) { + for (int i = 0; i < rowArr.size(); i++) { + DepotItem depotItem = new DepotItem(); + JSONObject rowObj = JSONObject.parseObject(rowArr.getString(i)); + depotItem.setHeaderId(headerId); + String barCode = rowObj.getString("barCode"); + MaterialExtend materialExtend = materialExtendService.getInfoByBarCode(barCode); + depotItem.setMaterialId(materialExtend.getMaterialId()); + depotItem.setMaterialExtendId(materialExtend.getId()); + depotItem.setMaterialUnit(rowObj.getString("unit")); + if (StringUtil.isExist(rowObj.get("operNumber"))) { + depotItem.setOperNumber(rowObj.getBigDecimal("operNumber")); + String unit = rowObj.get("unit").toString(); + BigDecimal oNumber = rowObj.getBigDecimal("operNumber"); + //以下进行单位换算 + Unit unitInfo = materialService.findUnit(materialExtend.getMaterialId()); //查询计量单位信息 + if (StringUtil.isNotEmpty(unitInfo.getName())) { + String basicUnit = unitInfo.getBasicUnit(); //基本单位 + String otherUnit = unitInfo.getOtherUnit(); //副单位 + Integer ratio = unitInfo.getRatio(); //比例 + if (unit.equals(basicUnit)) { //如果等于基础单位 + depotItem.setBasicNumber(oNumber); //数量一致 + } else if (unit.equals(otherUnit)) { //如果等于副单位 + depotItem.setBasicNumber(oNumber.multiply(new BigDecimal(ratio)) ); //数量乘以比例 + } + } else { + depotItem.setBasicNumber(oNumber); //其他情况 + } + } + if (StringUtil.isExist(rowObj.get("unitPrice"))) { + depotItem.setUnitPrice(rowObj.getBigDecimal("unitPrice")); + } + if (StringUtil.isExist(rowObj.get("taxUnitPrice"))) { + depotItem.setTaxUnitPrice(rowObj.getBigDecimal("taxUnitPrice")); + } + if (StringUtil.isExist(rowObj.get("allPrice"))) { + depotItem.setAllPrice(rowObj.getBigDecimal("allPrice")); + } + if (StringUtil.isExist(rowObj.get("depotId"))) { + depotItem.setDepotId(rowObj.getLong("depotId")); + } else { + throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_DEPOT_FAILED_CODE, + String.format(ExceptionConstants.DEPOT_HEAD_DEPOT_FAILED_MSG)); + } + if(BusinessConstants.SUB_TYPE_TRANSFER.equals(depotHead.getSubType())) { + if (StringUtil.isExist(rowObj.get("anotherDepotId"))) { + depotItem.setAnotherDepotId(rowObj.getLong("anotherDepotId")); + } else { + throw new BusinessRunTimeException(ExceptionConstants.DEPOT_HEAD_ANOTHER_DEPOT_FAILED_CODE, + String.format(ExceptionConstants.DEPOT_HEAD_ANOTHER_DEPOT_FAILED_MSG)); + } + } + if (StringUtil.isExist(rowObj.get("taxRate"))) { + depotItem.setTaxRate(rowObj.getBigDecimal("taxRate")); + } + if (StringUtil.isExist(rowObj.get("taxMoney"))) { + depotItem.setTaxMoney(rowObj.getBigDecimal("taxMoney")); + } + if (StringUtil.isExist(rowObj.get("taxLastMoney"))) { + depotItem.setTaxLastMoney(rowObj.getBigDecimal("taxLastMoney")); + } + if (StringUtil.isExist(rowObj.get("mType"))) { + depotItem.setMaterialType(rowObj.getString("mType")); + } + if (StringUtil.isExist(rowObj.get("remark"))) { + depotItem.setRemark(rowObj.getString("remark")); + } + //出库时判断库存是否充足 + if(BusinessConstants.DEPOTHEAD_TYPE_OUT.equals(depotHead.getType())){ + if(depotItem==null){ + continue; + } + Material material= materialService.getMaterial(depotItem.getMaterialId()); + if(material==null){ + continue; + } + BigDecimal stock = getStockByParam(depotItem.getDepotId(),depotItem.getMaterialId(),null,null,tenantId); + BigDecimal thisBasicNumber = depotItem.getBasicNumber()==null?BigDecimal.ZERO:depotItem.getBasicNumber(); + if(systemConfigService.getMinusStockFlag() == false && stock.compareTo(thisBasicNumber)<0){ + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_STOCK_NOT_ENOUGH_CODE, + String.format(ExceptionConstants.MATERIAL_STOCK_NOT_ENOUGH_MSG,material==null?"":material.getName())); + } + //出库时处理序列号 + if(!BusinessConstants.SUB_TYPE_TRANSFER.equals(depotHead.getSubType())) { + //判断商品是否开启序列号,开启的收回序列号,未开启的跳过 + if(BusinessConstants.ENABLE_SERIAL_NUMBER_ENABLED.equals(material.getEnableSerialNumber())) { + //查询单据子表中开启序列号的数据列表 + serialNumberService.checkAndUpdateSerialNumber(depotItem, userInfo); + } + } + } + this.insertDepotItemWithObj(depotItem); + //更新当前库存 + updateCurrentStock(depotItem,tenantId); + } + } + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public void deleteDepotItemHeadId(Long headerId)throws Exception { + DepotItemExample example = new DepotItemExample(); + example.createCriteria().andHeaderIdEqualTo(headerId); + try{ + depotItemMapper.deleteByExample(example); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public List findStockWarningCount(Integer offset, Integer rows, String materialParam, Long depotId) { + List list = null; + try{ + list =depotItemMapperEx.findStockWarningCount(offset, rows, materialParam, depotId); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int findStockWarningCountTotal(String materialParam, Long depotId) { + int result = 0; + try{ + result =depotItemMapperEx.findStockWarningCountTotal(materialParam, depotId); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + /** + * 库存统计 + * @param depotId + * @param mId + * @param beginTime + * @param endTime + * @return + */ + public BigDecimal getStockByParam(Long depotId, Long mId, String beginTime, String endTime, Long tenantId){ + //初始库存 + BigDecimal initStock = materialService.getInitStockByMid(depotId, mId); + //盘点复盘后数量的变动 + BigDecimal stockCheckSum = depotItemMapperEx.getStockCheckSum(depotId, mId, beginTime, endTime); + DepotItemVo4Stock stockObj = depotItemMapperEx.getStockByParam(depotId, mId, beginTime, endTime, tenantId); + BigDecimal intNum = stockObj.getInNum(); + BigDecimal outNum = stockObj.getOutNum(); + return initStock.add(intNum).subtract(outNum).add(stockCheckSum); + } + + /** + * 入库统计 + * @param depotId + * @param mId + * @param beginTime + * @param endTime + * @return + */ + public BigDecimal getInNumByParam(Long depotId, Long mId, String beginTime, String endTime, Long tenantId){ + DepotItemVo4Stock stockObj = depotItemMapperEx.getStockByParam(depotId, mId, beginTime, endTime, tenantId); + return stockObj.getInNum(); + } + + /** + * 出库统计 + * @param depotId + * @param mId + * @param beginTime + * @param endTime + * @return + */ + public BigDecimal getOutNumByParam(Long depotId, Long mId, String beginTime, String endTime, Long tenantId){ + DepotItemVo4Stock stockObj = depotItemMapperEx.getStockByParam(depotId, mId, beginTime, endTime, tenantId); + return stockObj.getOutNum(); + } + + /** + * 根据单据明细来批量更新当前库存 + * @param depotItem + * @param tenantId + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public void updateCurrentStock(DepotItem depotItem, Long tenantId){ + updateCurrentStockFun(depotItem.getMaterialId(), depotItem.getDepotId(),tenantId); + if(depotItem.getAnotherDepotId()!=null){ + updateCurrentStockFun(depotItem.getMaterialId(), depotItem.getAnotherDepotId(),tenantId); + } + } + + /** + * 根据商品和仓库来更新当前库存 + * @param mId + * @param dId + * @param tenantId + */ + public void updateCurrentStockFun(Long mId, Long dId, Long tenantId) { + MaterialCurrentStockExample example = new MaterialCurrentStockExample(); + example.createCriteria().andMaterialIdEqualTo(mId).andDepotIdEqualTo(dId) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list = materialCurrentStockMapper.selectByExample(example); + MaterialCurrentStock materialCurrentStock = new MaterialCurrentStock(); + materialCurrentStock.setMaterialId(mId); + materialCurrentStock.setDepotId(dId); + materialCurrentStock.setCurrentNumber(getStockByParam(dId,mId,null,null,tenantId)); + if(list!=null && list.size()>0) { + Long mcsId = list.get(0).getId(); + materialCurrentStock.setId(mcsId); + materialCurrentStockMapper.updateByPrimaryKeySelective(materialCurrentStock); + } else { + materialCurrentStockMapper.insertSelective(materialCurrentStock); + } + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/functions/FunctionComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/functions/FunctionComponent.java new file mode 100644 index 000000000..8dafacffb --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/functions/FunctionComponent.java @@ -0,0 +1,73 @@ +package com.jsh.erp.service.functions; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "function_component") +@FunctionResource +public class FunctionComponent implements ICommonQuery { + + @Resource + private FunctionService functionService; + + @Override + public Object selectOne(Long id) throws Exception { + return functionService.getFunction(id); + } + + @Override + public List select(Map map)throws Exception { + return getFunctionsList(map); + } + + private List getFunctionsList(Map map) throws Exception{ + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + String type = StringUtil.getInfo(search, "type"); + String order = QueryUtils.order(map); + return functionService.select(name, type, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map) throws Exception{ + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + String type = StringUtil.getInfo(search, "type"); + return functionService.countFunction(name, type); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return functionService.insertFunction(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return functionService.updateFunction(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return functionService.deleteFunction(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return functionService.batchDeleteFunction(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return functionService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/functions/FunctionResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/functions/FunctionResource.java new file mode 100644 index 000000000..703448430 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/functions/FunctionResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.functions; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "function") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface FunctionResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/functions/FunctionService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/functions/FunctionService.java new file mode 100644 index 000000000..eb5afdeb6 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/functions/FunctionService.java @@ -0,0 +1,209 @@ +package com.jsh.erp.service.functions; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.datasource.entities.Function; +import com.jsh.erp.datasource.entities.FunctionExample; +import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.mappers.FunctionMapper; +import com.jsh.erp.datasource.mappers.FunctionMapperEx; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Service +public class FunctionService { + private Logger logger = LoggerFactory.getLogger(FunctionService.class); + + @Resource + private FunctionMapper functionsMapper; + + @Resource + private FunctionMapperEx functionMapperEx; + @Resource + private UserService userService; + @Resource + private LogService logService; + + public Function getFunction(long id)throws Exception { + Function result=null; + try{ + result=functionsMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getFunctionListByIds(String ids)throws Exception { + List idList = StringUtil.strToLongList(ids); + List list = new ArrayList<>(); + try{ + FunctionExample example = new FunctionExample(); + example.createCriteria().andIdIn(idList); + list = functionsMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getFunction()throws Exception { + FunctionExample example = new FunctionExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=functionsMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String name, String type, int offset, int rows)throws Exception { + List list=null; + try{ + list= functionMapperEx.selectByConditionFunction(name, type, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long countFunction(String name, String type)throws Exception { + Long result=null; + try{ + result= functionMapperEx.countsByFunction(name, type); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertFunction(JSONObject obj, HttpServletRequest request)throws Exception { + Function functions = JSONObject.parseObject(obj.toJSONString(), Function.class); + int result=0; + try{ + result=functionsMapper.insertSelective(functions); + logService.insertLog("功能", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(functions.getName()).toString(),request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateFunction(JSONObject obj, HttpServletRequest request) throws Exception{ + Function functions = JSONObject.parseObject(obj.toJSONString(), Function.class); + int result=0; + try{ + result=functionsMapper.updateByPrimaryKeySelective(functions); + logService.insertLog("功能", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(functions.getName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteFunction(Long id, HttpServletRequest request)throws Exception { + return batchDeleteFunctionByIds(id.toString()); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteFunction(String ids, HttpServletRequest request)throws Exception { + return batchDeleteFunctionByIds(ids); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteFunctionByIds(String ids)throws Exception { + StringBuffer sb = new StringBuffer(); + sb.append(BusinessConstants.LOG_OPERATION_TYPE_DELETE); + List list = getFunctionListByIds(ids); + for(Function functions: list){ + sb.append("[").append(functions.getName()).append("]"); + } + logService.insertLog("功能", sb.toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + User userInfo=userService.getCurrentUser(); + String [] idArray=ids.split(","); + int result=0; + try{ + result = functionMapperEx.batchDeleteFunctionByIds(new Date(),userInfo==null?null:userInfo.getId(),idArray); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int checkIsNameExist(Long id, String name)throws Exception { + FunctionExample example = new FunctionExample(); + example.createCriteria().andIdNotEqualTo(id).andNameEqualTo(name).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list = functionsMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + + public List getRoleFunction(String pNumber)throws Exception { + FunctionExample example = new FunctionExample(); + example.createCriteria().andEnabledEqualTo(true).andParentNumberEqualTo(pNumber) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + example.setOrderByClause("Sort"); + List list=null; + try{ + list = functionsMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List findRoleFunction(String pnumber)throws Exception{ + FunctionExample example = new FunctionExample(); + example.createCriteria().andEnabledEqualTo(true).andParentNumberEqualTo(pnumber) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + example.setOrderByClause("Sort"); + List list=null; + try{ + list =functionsMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List findByIds(String functionsIds)throws Exception{ + List idList = StringUtil.strToLongList(functionsIds); + FunctionExample example = new FunctionExample(); + example.createCriteria().andEnabledEqualTo(true).andIdIn(idList) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + example.setOrderByClause("Sort asc"); + List list=null; + try{ + list =functionsMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/inOutItem/InOutItemComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/inOutItem/InOutItemComponent.java new file mode 100644 index 000000000..1aa752c04 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/inOutItem/InOutItemComponent.java @@ -0,0 +1,75 @@ +package com.jsh.erp.service.inOutItem; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "inOutItem_component") +@InOutItemResource +public class InOutItemComponent implements ICommonQuery { + + @Resource + private InOutItemService inOutItemService; + + @Override + public Object selectOne(Long id) throws Exception { + return inOutItemService.getInOutItem(id); + } + + @Override + public List select(Map map)throws Exception { + return getFunctionsList(map); + } + + private List getFunctionsList(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + String type = StringUtil.getInfo(search, "type"); + String remark = StringUtil.getInfo(search, "remark"); + String order = QueryUtils.order(map); + return inOutItemService.select(name, type, remark, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + String type = StringUtil.getInfo(search, "type"); + String remark = StringUtil.getInfo(search, "remark"); + return inOutItemService.countInOutItem(name, type, remark); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return inOutItemService.insertInOutItem(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return inOutItemService.updateInOutItem(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return inOutItemService.deleteInOutItem(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return inOutItemService.batchDeleteInOutItem(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return inOutItemService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/inOutItem/InOutItemResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/inOutItem/InOutItemResource.java new file mode 100644 index 000000000..fdaba3744 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/inOutItem/InOutItemResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.inOutItem; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "inOutItem") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface InOutItemResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/inOutItem/InOutItemService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/inOutItem/InOutItemService.java new file mode 100644 index 000000000..75d38ddef --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/inOutItem/InOutItemService.java @@ -0,0 +1,202 @@ +package com.jsh.erp.service.inOutItem; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.mappers.AccountItemMapperEx; +import com.jsh.erp.datasource.mappers.InOutItemMapper; +import com.jsh.erp.datasource.mappers.InOutItemMapperEx; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Service +public class InOutItemService { + private Logger logger = LoggerFactory.getLogger(InOutItemService.class); + + @Resource + private InOutItemMapper inOutItemMapper; + + @Resource + private InOutItemMapperEx inOutItemMapperEx; + @Resource + private UserService userService; + @Resource + private LogService logService; + @Resource + private AccountItemMapperEx accountItemMapperEx; + + public InOutItem getInOutItem(long id)throws Exception { + InOutItem result=null; + try{ + result=inOutItemMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getInOutItemListByIds(String ids)throws Exception { + List idList = StringUtil.strToLongList(ids); + List list = new ArrayList<>(); + try{ + InOutItemExample example = new InOutItemExample(); + example.createCriteria().andIdIn(idList); + list = inOutItemMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getInOutItem()throws Exception { + InOutItemExample example = new InOutItemExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=inOutItemMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String name, String type, String remark, int offset, int rows)throws Exception { + List list=null; + try{ + list=inOutItemMapperEx.selectByConditionInOutItem(name, type, remark, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long countInOutItem(String name, String type, String remark)throws Exception { + Long result=null; + try{ + result=inOutItemMapperEx.countsByInOutItem(name, type, remark); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertInOutItem(JSONObject obj, HttpServletRequest request)throws Exception { + InOutItem inOutItem = JSONObject.parseObject(obj.toJSONString(), InOutItem.class); + int result=0; + try{ + result=inOutItemMapper.insertSelective(inOutItem); + logService.insertLog("收支项目", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(inOutItem.getName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateInOutItem(JSONObject obj, HttpServletRequest request)throws Exception { + InOutItem inOutItem = JSONObject.parseObject(obj.toJSONString(), InOutItem.class); + int result=0; + try{ + result=inOutItemMapper.updateByPrimaryKeySelective(inOutItem); + logService.insertLog("收支项目", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(inOutItem.getName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteInOutItem(Long id, HttpServletRequest request)throws Exception { + return batchDeleteInOutItemByIds(id.toString()); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteInOutItem(String ids, HttpServletRequest request)throws Exception { + return batchDeleteInOutItemByIds(ids); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteInOutItemByIds(String ids)throws Exception { + int result = 0; + String [] idArray=ids.split(","); + //校验财务子表 jsh_accountitem + List accountItemList=null; + try{ + accountItemList=accountItemMapperEx.getAccountItemListByInOutItemIds(idArray); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if(accountItemList!=null&&accountItemList.size()>0){ + logger.error("异常码[{}],异常提示[{}],参数,InOutItemIds[{}]", + ExceptionConstants.DELETE_FORCE_CONFIRM_CODE,ExceptionConstants.DELETE_FORCE_CONFIRM_MSG,ids); + throw new BusinessRunTimeException(ExceptionConstants.DELETE_FORCE_CONFIRM_CODE, + ExceptionConstants.DELETE_FORCE_CONFIRM_MSG); + } + //校验通过执行删除操作 + StringBuffer sb = new StringBuffer(); + sb.append(BusinessConstants.LOG_OPERATION_TYPE_DELETE); + List list = getInOutItemListByIds(ids); + for(InOutItem inOutItem: list){ + sb.append("[").append(inOutItem.getName()).append("]"); + } + logService.insertLog("收支项目", sb.toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + User userInfo=userService.getCurrentUser(); + try{ + result=inOutItemMapperEx.batchDeleteInOutItemByIds(new Date(),userInfo==null?null:userInfo.getId(),idArray); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public int checkIsNameExist(Long id, String name)throws Exception { + InOutItemExample example = new InOutItemExample(); + example.createCriteria().andIdNotEqualTo(id).andNameEqualTo(name).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list = null; + try{ + list=inOutItemMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + + return list==null?0:list.size(); + } + + public List findBySelect(String type)throws Exception { + InOutItemExample example = new InOutItemExample(); + if (type.equals("in")) { + example.createCriteria().andTypeEqualTo("收入").andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } else if (type.equals("out")) { + example.createCriteria().andTypeEqualTo("支出").andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } + example.setOrderByClause("id desc"); + List list = null; + try{ + list=inOutItemMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/log/LogComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/log/LogComponent.java new file mode 100644 index 000000000..bf753e5dc --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/log/LogComponent.java @@ -0,0 +1,83 @@ +package com.jsh.erp.service.log; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "log_component") +@LogResource +public class LogComponent implements ICommonQuery { + + @Resource + private LogService logService; + + @Override + public Object selectOne(Long id) throws Exception { + return logService.getLog(id); + } + + @Override + public List select(Map map)throws Exception { + return getLogList(map); + } + + private List getLogList(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String operation = StringUtil.getInfo(search, "operation"); + Integer userId = StringUtil.parseInteger(StringUtil.getInfo(search, "userId")); + String clientIp = StringUtil.getInfo(search, "clientIp"); + Integer status = StringUtil.parseInteger(StringUtil.getInfo(search, "status")); + String beginTime = StringUtil.getInfo(search, "beginTime"); + String endTime = StringUtil.getInfo(search, "endTime"); + String content = StringUtil.getInfo(search, "content"); + return logService.select(operation, userId, clientIp, status, beginTime, endTime, content, + QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String operation = StringUtil.getInfo(search, "operation"); + Integer userId = StringUtil.parseInteger(StringUtil.getInfo(search, "userId")); + String clientIp = StringUtil.getInfo(search, "clientIp"); + Integer status = StringUtil.parseInteger(StringUtil.getInfo(search, "status")); + String beginTime = StringUtil.getInfo(search, "beginTime"); + String endTime = StringUtil.getInfo(search, "endTime"); + String content = StringUtil.getInfo(search, "content"); + return logService.countLog(operation, userId, clientIp, status, beginTime, endTime, content); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return logService.insertLog(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return logService.updateLog(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return logService.deleteLog(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return logService.batchDeleteLog(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return 0; + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/log/LogResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/log/LogResource.java new file mode 100644 index 000000000..61775eb33 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/log/LogResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.log; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "log") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface LogResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/log/LogService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/log/LogService.java new file mode 100644 index 000000000..a65016a16 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/log/LogService.java @@ -0,0 +1,180 @@ +package com.jsh.erp.service.log; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.Log; +import com.jsh.erp.datasource.entities.LogExample; +import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.mappers.LogMapper; +import com.jsh.erp.datasource.mappers.LogMapperEx; +import com.jsh.erp.datasource.vo.LogVo4List; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.redis.RedisService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import com.jsh.erp.utils.Tools; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.Date; +import java.util.List; + +import static com.jsh.erp.utils.Tools.getLocalIp; + +@Service +public class LogService { + private Logger logger = LoggerFactory.getLogger(LogService.class); + @Resource + private LogMapper logMapper; + + @Resource + private LogMapperEx logMapperEx; + + @Resource + private UserService userService; + + @Resource + private RedisService redisService; + + public Log getLog(long id)throws Exception { + Log result=null; + try{ + result=logMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getLog()throws Exception { + LogExample example = new LogExample(); + List list=null; + try{ + list=logMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String operation, Integer userId, String clientIp, Integer status, String beginTime, String endTime, + String content, int offset, int rows)throws Exception { + List list=null; + try{ + list=logMapperEx.selectByConditionLog(operation, userId, clientIp, status, beginTime, endTime, + content, offset, rows); + if (null != list) { + for (LogVo4List log : list) { + log.setCreateTimeStr(Tools.getCenternTime(log.getCreateTime())); + } + } + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long countLog(String operation, Integer userId, String clientIp, Integer status, String beginTime, String endTime, + String content)throws Exception { + Long result=null; + try{ + result=logMapperEx.countsByLog(operation, userId, clientIp, status, beginTime, endTime, content); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertLog(JSONObject obj, HttpServletRequest request) throws Exception{ + Log log = JSONObject.parseObject(obj.toJSONString(), Log.class); + int result=0; + try{ + result=logMapper.insertSelective(log); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateLog(JSONObject obj, HttpServletRequest request)throws Exception { + Log log = JSONObject.parseObject(obj.toJSONString(), Log.class); + int result=0; + try{ + result=logMapper.updateByPrimaryKeySelective(log); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteLog(Long id, HttpServletRequest request)throws Exception { + int result=0; + try{ + result=logMapper.deleteByPrimaryKey(id); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteLog(String ids, HttpServletRequest request)throws Exception { + List idList = StringUtil.strToLongList(ids); + LogExample example = new LogExample(); + example.createCriteria().andIdIn(idList); + int result=0; + try{ + result=logMapper.deleteByExample(example); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public void insertLog(String moduleName, String content, HttpServletRequest request)throws Exception{ + try{ + Long userId = userService.getUserId(request); + if(userId!=null) { + Log log = new Log(); + log.setUserId(userId); + log.setOperation(moduleName); + log.setClientIp(getLocalIp(request)); + log.setCreateTime(new Date()); + Byte status = 0; + log.setStatus(status); + log.setContent(content); + logMapper.insertSelective(log); + } + }catch(Exception e){ + JshException.writeFail(logger, e); + } + } + + public void insertLogWithUserId(Long userId, Long tenantId, String moduleName, String content, HttpServletRequest request)throws Exception{ + try{ + if(userId!=null) { + Log log = new Log(); + log.setUserId(userId); + log.setOperation(moduleName); + log.setClientIp(getLocalIp(request)); + log.setCreateTime(new Date()); + Byte status = 0; + log.setStatus(status); + log.setContent(content); + log.setTenantId(tenantId); + logMapper.insertSelective(log); + } + }catch(Exception e){ + JshException.writeFail(logger, e); + } + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/material/MaterialComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/material/MaterialComponent.java new file mode 100644 index 000000000..8d9970122 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/material/MaterialComponent.java @@ -0,0 +1,82 @@ +package com.jsh.erp.service.material; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.service.depot.DepotResource; +import com.jsh.erp.service.depot.DepotService; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "material_component") +@MaterialResource +public class MaterialComponent implements ICommonQuery { + + @Resource + private MaterialService materialService; + + @Override + public Object selectOne(Long id) throws Exception { + return materialService.getMaterial(id); + } + + @Override + public List select(Map map)throws Exception { + return getMaterialList(map); + } + + private List getMaterialList(Map map) throws Exception{ + String search = map.get(Constants.SEARCH); + String categoryId = StringUtil.getInfo(search, "categoryId"); + String barCode = StringUtil.getInfo(search, "barCode"); + String name = StringUtil.getInfo(search, "name"); + String standard = StringUtil.getInfo(search, "standard"); + String model = StringUtil.getInfo(search, "model"); + String mpList = StringUtil.getInfo(search, "mpList"); + return materialService.select(barCode, name, standard, model,categoryId,mpList, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String categoryId = StringUtil.getInfo(search, "categoryId"); + String barCode = StringUtil.getInfo(search, "barCode"); + String name = StringUtil.getInfo(search, "name"); + String standard = StringUtil.getInfo(search, "standard"); + String model = StringUtil.getInfo(search, "model"); + String mpList = StringUtil.getInfo(search, "mpList"); + return materialService.countMaterial(barCode, name, standard, model,categoryId,mpList); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request) throws Exception{ + return materialService.insertMaterial(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return materialService.updateMaterial(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return materialService.deleteMaterial(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return materialService.batchDeleteMaterial(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return materialService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/material/MaterialResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/material/MaterialResource.java new file mode 100644 index 000000000..80582f543 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/material/MaterialResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.material; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "material") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface MaterialResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/material/MaterialService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/material/MaterialService.java new file mode 100644 index 000000000..967ba9462 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/material/MaterialService.java @@ -0,0 +1,796 @@ +package com.jsh.erp.service.material; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.mappers.*; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.materialExtend.MaterialExtendService; +import com.jsh.erp.service.depot.DepotService; +import com.jsh.erp.service.depotItem.DepotItemService; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.materialCategory.MaterialCategoryService; +import com.jsh.erp.service.unit.UnitService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.BaseResponseInfo; +import com.jsh.erp.utils.ExcelUtils; +import com.jsh.erp.utils.StringUtil; +import jxl.Sheet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.util.*; + +@Service +public class MaterialService { + private Logger logger = LoggerFactory.getLogger(MaterialService.class); + + @Resource + private MaterialMapper materialMapper; + @Resource + private MaterialExtendMapper materialExtendMapper; + @Resource + private MaterialMapperEx materialMapperEx; + @Resource + private MaterialCategoryMapperEx materialCategoryMapperEx; + @Resource + private MaterialExtendMapperEx materialExtendMapperEx; + @Resource + private LogService logService; + @Resource + private UserService userService; + @Resource + private DepotItemMapperEx depotItemMapperEx; + @Resource + private DepotItemService depotItemService; + @Resource + private MaterialCategoryService materialCategoryService; + @Resource + private UnitService unitService; + @Resource + private MaterialInitialStockMapper materialInitialStockMapper; + @Resource + private MaterialCurrentStockMapper materialCurrentStockMapper; + @Resource + private DepotService depotService; + @Resource + private MaterialExtendService materialExtendService; + + public Material getMaterial(long id)throws Exception { + Material result=null; + try{ + result=materialMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getMaterialListByIds(String ids)throws Exception { + List idList = StringUtil.strToLongList(ids); + List list = new ArrayList<>(); + try{ + MaterialExample example = new MaterialExample(); + example.createCriteria().andIdIn(idList); + list = materialMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getMaterial() throws Exception{ + MaterialExample example = new MaterialExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=materialMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String barCode, String name, String standard, String model, String categoryId,String mpList, int offset, int rows) + throws Exception{ + String[] mpArr = new String[]{}; + if(StringUtil.isNotEmpty(mpList)){ + mpArr= mpList.split(","); + } + List resList = new ArrayList<>(); + List list =null; + try{ + List idList = new ArrayList<>(); + if(StringUtil.isNotEmpty(categoryId)){ + idList = getListByParentId(Long.parseLong(categoryId)); + } + list= materialMapperEx.selectByConditionMaterial(barCode, name, standard, model, idList, mpList, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if (null != list) { + for (MaterialVo4Unit m : list) { + //扩展信息 + String materialOther = ""; + for (int i = 0; i < mpArr.length; i++) { + if (mpArr[i].equals("制造商")) { + materialOther = materialOther + ((m.getMfrs() == null || m.getMfrs().equals("")) ? "" : "(" + m.getMfrs() + ")"); + } + if (mpArr[i].equals("自定义1")) { + materialOther = materialOther + ((m.getOtherField1() == null || m.getOtherField1().equals("")) ? "" : "(" + m.getOtherField1() + ")"); + } + if (mpArr[i].equals("自定义2")) { + materialOther = materialOther + ((m.getOtherField2() == null || m.getOtherField2().equals("")) ? "" : "(" + m.getOtherField2() + ")"); + } + if (mpArr[i].equals("自定义3")) { + materialOther = materialOther + ((m.getOtherField3() == null || m.getOtherField3().equals("")) ? "" : "(" + m.getOtherField3() + ")"); + } + } + m.setMaterialOther(materialOther); + Long tenantId = m.getTenantId(); + m.setStock(depotItemService.getStockByParam(null,m.getId(),null,null,tenantId)); + resList.add(m); + } + } + return resList; + } + + public Long countMaterial(String barCode, String name, String standard, String model, String categoryId,String mpList)throws Exception { + Long result =null; + try{ + List idList = new ArrayList<>(); + if(StringUtil.isNotEmpty(categoryId)){ + idList = getListByParentId(Long.parseLong(categoryId)); + } + result= materialMapperEx.countsByMaterial(barCode, name, standard, model, idList, mpList); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertMaterial(JSONObject obj, HttpServletRequest request)throws Exception { + Material m = JSONObject.parseObject(obj.toJSONString(), Material.class); + m.setEnabled(true); + try{ + Long mId = null; + materialMapper.insertSelective(m); + List materials = getMaterialListByParam(m.getName(),m.getModel(),m.getColor(), + m.getStandard(), m.getMfrs(),m.getUnit(),m.getUnitId()); + if(materials!=null && materials.size()>0) { + mId = materials.get(0).getId(); + } + materialExtendService.saveDetials(obj, obj.getString("sortList"), mId); + if(obj.get("stock")!=null) { + JSONArray stockArr = obj.getJSONArray("stock"); + for (int i = 0; i < stockArr.size(); i++) { + JSONObject jsonObj = stockArr.getJSONObject(i); + if(jsonObj.get("id")!=null && jsonObj.get("initStock")!=null) { + String number = jsonObj.getString("initStock"); + Long depotId = jsonObj.getLong("id"); + if(StringUtil.isNotEmpty(number) && Double.valueOf(number)>0) { + insertStockByMaterialAndDepot(depotId, mId, parseBigDecimalEx(number)); + } + } + } + } + logService.insertLog("商品", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(m.getName()).toString(), request); + return 1; + }catch(Exception e){ + JshException.writeFail(logger, e); + return 0; + } + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateMaterial(JSONObject obj, HttpServletRequest request) throws Exception{ + Material material = JSONObject.parseObject(obj.toJSONString(), Material.class); + try{ + materialMapper.updateByPrimaryKeySelective(material); + if(material.getUnitId() == null) { + materialMapperEx.setUnitIdToNull(material.getId()); + } + materialExtendService.saveDetials(obj, obj.getString("sortList"),material.getId()); + if(obj.get("stock")!=null) { + JSONArray stockArr = obj.getJSONArray("stock"); + for (int i = 0; i < stockArr.size(); i++) { + JSONObject jsonObj = stockArr.getJSONObject(i); + if (jsonObj.get("id") != null && jsonObj.get("initStock") != null) { + String number = jsonObj.getString("initStock"); + Long depotId = jsonObj.getLong("id"); + //先清除再插入 + MaterialInitialStockExample example = new MaterialInitialStockExample(); + example.createCriteria().andMaterialIdEqualTo(material.getId()).andDepotIdEqualTo(depotId); + materialInitialStockMapper.deleteByExample(example); + if (StringUtil.isNotEmpty(number) && Double.valueOf(number) > 0) { + insertStockByMaterialAndDepot(depotId, material.getId(), parseBigDecimalEx(number)); + } + } + } + } + logService.insertLog("商品", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(material.getName()).toString(), request); + return 1; + }catch(Exception e){ + JshException.writeFail(logger, e); + return 0; + } + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteMaterial(Long id, HttpServletRequest request)throws Exception { + return batchDeleteMaterialByIds(id.toString()); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteMaterial(String ids, HttpServletRequest request)throws Exception { + return batchDeleteMaterialByIds(ids); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteMaterialByIds(String ids) throws Exception{ + String [] idArray=ids.split(","); + //校验单据子表 jsh_depot_item + List depotItemList =null; + try{ + depotItemList= depotItemMapperEx.getDepotItemListListByMaterialIds(idArray); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if(depotItemList!=null&&depotItemList.size()>0){ + logger.error("异常码[{}],异常提示[{}],参数,MaterialIds[{}]", + ExceptionConstants.DELETE_FORCE_CONFIRM_CODE,ExceptionConstants.DELETE_FORCE_CONFIRM_MSG,ids); + throw new BusinessRunTimeException(ExceptionConstants.DELETE_FORCE_CONFIRM_CODE, + ExceptionConstants.DELETE_FORCE_CONFIRM_MSG); + } + //记录日志 + StringBuffer sb = new StringBuffer(); + sb.append(BusinessConstants.LOG_OPERATION_TYPE_DELETE); + List list = getMaterialListByIds(ids); + for(Material material: list){ + sb.append("[").append(material.getName()).append("]"); + } + logService.insertLog("商品", sb.toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + User userInfo=userService.getCurrentUser(); + //校验通过执行删除操作 + try{ + //逻辑删除商品 + materialMapperEx.batchDeleteMaterialByIds(new Date(),userInfo==null?null:userInfo.getId(),idArray); + //逻辑删除商品价格扩展 + materialExtendMapperEx.batchDeleteMaterialExtendByMIds(idArray); + return 1; + }catch(Exception e){ + JshException.writeFail(logger, e); + return 0; + } + } + + public int checkIsNameExist(Long id, String name)throws Exception { + MaterialExample example = new MaterialExample(); + example.createCriteria().andIdNotEqualTo(id).andNameEqualTo(name).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list =null; + try{ + list= materialMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + + public int checkIsExist(Long id, String name, String model, String color, String standard, String mfrs, + String otherField1, String otherField2, String otherField3, String unit, Long unitId)throws Exception { + MaterialExample example = new MaterialExample(); + MaterialExample.Criteria criteria = example.createCriteria(); + criteria.andNameEqualTo(name).andModelEqualTo(model).andColorEqualTo(color) + .andStandardEqualTo(standard).andMfrsEqualTo(mfrs) + .andOtherField1EqualTo(otherField1).andOtherField2EqualTo(otherField2).andOtherField2EqualTo(otherField3) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + if (id > 0) { + criteria.andIdNotEqualTo(id); + } + if (!StringUtil.isEmpty(unit)) { + criteria.andUnitEqualTo(unit); + } + if (unitId !=null) { + criteria.andUnitIdEqualTo(unitId); + } + List list =null; + try{ + list= materialMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchSetStatus(Boolean status, String ids)throws Exception { + logService.insertLog("商品", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(ids).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + List materialIds = StringUtil.strToLongList(ids); + Material material = new Material(); + material.setEnabled(status); + MaterialExample example = new MaterialExample(); + example.createCriteria().andIdIn(materialIds); + int result =0; + try{ + result= materialMapper.updateByExampleSelective(material, example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public Unit findUnit(Long mId)throws Exception{ + Unit unit = new Unit(); + try{ + List list = materialMapperEx.findUnitList(mId); + if(list!=null && list.size()>0) { + unit = list.get(0); + } + }catch(Exception e){ + JshException.readFail(logger, e); + } + return unit; + } + + public List findById(Long id)throws Exception{ + List list =null; + try{ + list= materialMapperEx.findById(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List findByIdWithBarCode(Long meId)throws Exception{ + List list =null; + try{ + list= materialMapperEx.findByIdWithBarCode(meId); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getListByParentId(Long parentId) { + List idList = new ArrayList(); + List list = materialCategoryMapperEx.getListByParentId(parentId); + idList.add(parentId); + if(list!=null && list.size()>0) { + getIdListByParentId(idList, parentId); + } + return idList; + } + + public List getIdListByParentId(List idList, Long parentId){ + List list = materialCategoryMapperEx.getListByParentId(parentId); + if(list!=null && list.size()>0) { + for(MaterialCategory mc : list){ + idList.add(mc.getId()); + getIdListByParentId(idList, mc.getId()); + } + } + return idList; + } + + public List findBySelectWithBarCode(Long categoryId, String q, Integer offset, Integer rows)throws Exception{ + List list =null; + try{ + List idList = new ArrayList<>(); + if(categoryId!=null){ + Long parentId = categoryId; + idList = getListByParentId(parentId); + } + if(StringUtil.isNotEmpty(q)) { + q = q.replace("'", ""); + } + list= materialMapperEx.findBySelectWithBarCode(idList, q, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public int findBySelectWithBarCodeCount(Long categoryId, String q)throws Exception{ + int result=0; + try{ + List idList = new ArrayList<>(); + if(categoryId!=null){ + Long parentId = categoryId; + idList = getListByParentId(parentId); + } + if(StringUtil.isNotEmpty(q)) { + q = q.replace("'", ""); + } + result = materialMapperEx.findBySelectWithBarCodeCount(idList, q); + }catch(Exception e){ + logger.error("异常码[{}],异常提示[{}],异常[{}]", + ExceptionConstants.DATA_READ_FAIL_CODE,ExceptionConstants.DATA_READ_FAIL_MSG,e); + throw new BusinessRunTimeException(ExceptionConstants.DATA_READ_FAIL_CODE, + ExceptionConstants.DATA_READ_FAIL_MSG); + } + return result; + } + + public List findByAll(String barCode, String name, String standard, String model, String categoryId)throws Exception { + List resList = new ArrayList<>(); + List list =null; + try{ + List idList = new ArrayList<>(); + if(StringUtil.isNotEmpty(categoryId)){ + idList = getListByParentId(Long.parseLong(categoryId)); + } + list= materialMapperEx.findByAll(barCode, name, standard, model, idList); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if (null != list) { + for (MaterialVo4Unit m : list) { + resList.add(m); + } + } + return resList; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public BaseResponseInfo importExcel(Sheet src) throws Exception { + List depotList= depotService.getDepot(); + int depotCount = depotList.size(); + List mList = new ArrayList<>(); + for (int i = 2; i < src.getRows(); i++) { + String name = ExcelUtils.getContent(src, i, 0); //名称 + String standard = ExcelUtils.getContent(src, i, 1); //规格 + String model = ExcelUtils.getContent(src, i, 2); //型号 + String color = ExcelUtils.getContent(src, i, 3); //颜色 + String categoryName = ExcelUtils.getContent(src, i, 4); //类别 + String safetyStock = ExcelUtils.getContent(src, i, 5); //安全存量 + String unit = ExcelUtils.getContent(src, i, 6); //基础单位 + //校验名称、型号、单位是否为空 + if(StringUtil.isNotEmpty(name) && StringUtil.isNotEmpty(model) && StringUtil.isNotEmpty(unit)) { + MaterialWithInitStock m = new MaterialWithInitStock(); + m.setName(name); + m.setStandard(standard); + m.setModel(model); + m.setColor(color); + Long categoryId = materialCategoryService.getCategoryIdByName(categoryName); + m.setCategoryId(categoryId); + m.setSafetyStock(parseBigDecimalEx(safetyStock)); + String manyUnit = ExcelUtils.getContent(src, i, 7); //副单位 + String barCode = ExcelUtils.getContent(src, i, 8); //基础条码 + String manyBarCode = ExcelUtils.getContent(src, i, 9); //副条码 + String ratio = ExcelUtils.getContent(src, i, 10); //比例 + String purchaseDecimal = ExcelUtils.getContent(src, i, 11); //采购价 + String commodityDecimal = ExcelUtils.getContent(src, i, 12); //零售价 + String wholesaleDecimal = ExcelUtils.getContent(src, i, 13); //销售价 + String lowDecimal = ExcelUtils.getContent(src, i, 14); //最低售价 + JSONObject materialExObj = new JSONObject(); + JSONObject basicObj = new JSONObject(); + basicObj.put("barCode", barCode); + basicObj.put("commodityUnit", unit); + basicObj.put("purchaseDecimal", purchaseDecimal); + basicObj.put("commodityDecimal", commodityDecimal); + basicObj.put("wholesaleDecimal", wholesaleDecimal); + basicObj.put("lowDecimal", lowDecimal); + materialExObj.put("basic", basicObj); + if(StringUtil.isNotEmpty(manyUnit.trim())){ //多单位 + String manyUnitAll = unit + "," + manyUnit + "(1:" + ratio + ")"; + Long unitId = unitService.getUnitIdByName(manyUnitAll); + m.setUnitId(unitId); + JSONObject otherObj = new JSONObject(); + otherObj.put("barCode", manyBarCode); + otherObj.put("commodityUnit", manyUnit); + otherObj.put("purchaseDecimal", parsePrice(purchaseDecimal,ratio)); + otherObj.put("commodityDecimal", parsePrice(commodityDecimal,ratio)); + otherObj.put("wholesaleDecimal", parsePrice(wholesaleDecimal,ratio)); + otherObj.put("lowDecimal", parsePrice(lowDecimal,ratio)); + materialExObj.put("other", otherObj); + } else { + m.setUnit(unit); + } + m.setMaterialExObj(materialExObj); + String enabled = ExcelUtils.getContent(src, i, 15); //状态 + m.setEnabled(enabled.equals("1")? true: false); + //缓存各个仓库的库存信息 + Map stockMap = new HashMap(); + for(int j=1; j<=depotCount;j++) { + int col = 15+j; + if(col < src.getColumns()){ + String depotName = ExcelUtils.getContent(src, 1, col); //获取仓库名称 + Long depotId = depotService.getIdByName(depotName); + if(depotId!=0L){ + String stockStr = ExcelUtils.getContent(src, i, col); + if(StringUtil.isNotEmpty(stockStr)) { + stockMap.put(depotId, parseBigDecimalEx(stockStr)); + } + } + } + } + m.setStockMap(stockMap); + mList.add(m); + } + } + logService.insertLog("商品", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_IMPORT).append(mList.size()).append(BusinessConstants.LOG_DATA_UNIT).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + BaseResponseInfo info = new BaseResponseInfo(); + try { + Long mId = 0L; + for(MaterialWithInitStock m: mList) { + //判断该商品是否存在,如果不存在就新增,如果存在就更新 + List materials = getMaterialListByParam(m.getName(),m.getModel(),m.getColor(),m.getStandard(), + m.getMfrs(),m.getUnit(),m.getUnitId()); + if(materials.size()<=0) { + materialMapper.insertSelective(m); + List newList = getMaterialListByParam(m.getName(),m.getModel(),m.getColor(),m.getStandard(), + m.getMfrs(),m.getUnit(),m.getUnitId()); + if(newList!=null && newList.size()>0) { + mId = newList.get(0).getId(); + } + } else { + mId = materials.get(0).getId(); + String materialJson = JSON.toJSONString(m); + Material material = JSONObject.parseObject(materialJson, Material.class); + material.setId(mId); + materialMapper.updateByPrimaryKeySelective(material); + } + //给商品新增条码与价格相关信息 + User user = userService.getCurrentUser(); + JSONObject materialExObj = m.getMaterialExObj(); + if(StringUtil.isExist(materialExObj.get("basic"))){ + String basicStr = materialExObj.getString("basic"); + MaterialExtend basicMaterialExtend = JSONObject.parseObject(basicStr, MaterialExtend.class); + basicMaterialExtend.setMaterialId(mId); + basicMaterialExtend.setDefaultFlag("1"); + basicMaterialExtend.setCreateTime(new Date()); + basicMaterialExtend.setUpdateTime(System.currentTimeMillis()); + basicMaterialExtend.setCreateSerial(user.getLoginName()); + basicMaterialExtend.setUpdateSerial(user.getLoginName()); + Long meId = materialExtendService.selectIdByMaterialIdAndDefaultFlag(mId, "1"); + if(meId==0L){ + materialExtendMapper.insertSelective(basicMaterialExtend); + } else { + basicMaterialExtend.setId(meId); + materialExtendMapper.updateByPrimaryKeySelective(basicMaterialExtend); + } + } + if(StringUtil.isExist(materialExObj.get("other"))) { + String otherStr = materialExObj.getString("other"); + MaterialExtend otherMaterialExtend = JSONObject.parseObject(otherStr, MaterialExtend.class); + otherMaterialExtend.setMaterialId(mId); + otherMaterialExtend.setDefaultFlag("0"); + otherMaterialExtend.setCreateTime(new Date()); + otherMaterialExtend.setUpdateTime(System.currentTimeMillis()); + otherMaterialExtend.setCreateSerial(user.getLoginName()); + otherMaterialExtend.setUpdateSerial(user.getLoginName()); + Long meId = materialExtendService.selectIdByMaterialIdAndDefaultFlag(mId, "0"); + if(meId==0L){ + materialExtendMapper.insertSelective(otherMaterialExtend); + } else { + otherMaterialExtend.setId(meId); + materialExtendMapper.updateByPrimaryKeySelective(otherMaterialExtend); + } + } + //给商品初始化库存getAllListWithStock + Map stockMap = m.getStockMap(); + Long depotId = null; + for(Depot depot: depotList){ + BigDecimal stock = stockMap.get(depot.getId()); + //先清除再插入 + MaterialInitialStockExample example = new MaterialInitialStockExample(); + example.createCriteria().andMaterialIdEqualTo(mId).andDepotIdEqualTo(depot.getId()); + materialInitialStockMapper.deleteByExample(example); + if(stock!=null && stock.compareTo(BigDecimal.ZERO)!=0) { + depotId = depot.getId(); + insertStockByMaterialAndDepot(depotId, mId, stock); + } + } + } + info.code = 200; + info.data = "导入成功"; + } catch (Exception e) { + e.printStackTrace(); + info.code = 500; + info.data = "导入失败"; + } + return info; + } + + /** + * 根据条件返回产品列表 + * @param name + * @param model + * @param color + * @param standard + * @param mfrs + * @param unit + * @param unitId + * @return + */ + private List getMaterialListByParam(String name, String model, String color, + String standard, String mfrs, String unit, Long unitId) { + MaterialExample example = new MaterialExample(); + MaterialExample.Criteria criteria = example.createCriteria(); + criteria.andNameEqualTo(name); + if (StringUtil.isNotEmpty(model)) { + criteria.andModelEqualTo(model); + } + if (StringUtil.isNotEmpty(color)) { + criteria.andColorEqualTo(color); + } + if (StringUtil.isNotEmpty(standard)) { + criteria.andStandardEqualTo(standard); + } + if (StringUtil.isNotEmpty(mfrs)) { + criteria.andMfrsEqualTo(mfrs); + } + if (StringUtil.isNotEmpty(unit)) { + criteria.andUnitEqualTo(unit); + } + if (unitId !=null) { + criteria.andUnitIdEqualTo(unitId); + } + criteria.andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list = materialMapper.selectByExample(example); + return list; + } + + /** + * 写入初始库存 + * @param depotId + * @param mId + * @param stock + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public void insertStockByMaterialAndDepot(Long depotId, Long mId, BigDecimal stock){ + MaterialInitialStock materialInitialStock = new MaterialInitialStock(); + materialInitialStock.setDepotId(depotId); + materialInitialStock.setMaterialId(mId); + materialInitialStock.setNumber(stock); + materialInitialStockMapper.insertSelective(materialInitialStock); //存入初始库存 + } + + public List getMaterialEnableSerialNumberList(String q, Integer offset, Integer rows)throws Exception { + List list =null; + try{ + list= materialMapperEx.getMaterialEnableSerialNumberList(q, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long getMaterialEnableSerialNumberCount(String q)throws Exception { + Long count =null; + try{ + count= materialMapperEx.getMaterialEnableSerialNumberCount(q); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return count; + } + + public BigDecimal parseBigDecimalEx(String str) throws Exception{ + if(!StringUtil.isEmpty(str)) { + return new BigDecimal(str); + } else { + return null; + } + } + + public BigDecimal parsePrice(String price, String ratio) throws Exception{ + if(StringUtil.isEmpty(price) || StringUtil.isEmpty(ratio)) { + return BigDecimal.ZERO; + } else { + BigDecimal pr=new BigDecimal(price); + BigDecimal r=new BigDecimal(ratio); + return pr.multiply(r); + } + } + + /** + * 根据商品获取初始库存,仓库为空的时候查全部库存 + * @param materialId + * @return + */ + public BigDecimal getInitStockByMid(Long depotId, Long materialId) { + BigDecimal stock = BigDecimal.ZERO; + MaterialInitialStockExample example = new MaterialInitialStockExample(); + if(depotId!=null) { + example.createCriteria().andMaterialIdEqualTo(materialId).andDepotIdEqualTo(depotId) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } else { + example.createCriteria().andMaterialIdEqualTo(materialId) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } + List list = materialInitialStockMapper.selectByExample(example); + if(list!=null && list.size()>0) { + for(MaterialInitialStock ms: list) { + if(ms!=null) { + stock = stock.add(ms.getNumber()); + } + } + } + return stock; + } + + /** + * 根据商品和仓库获取初始库存 + * @param materialId + * @param depotId + * @return + */ + public BigDecimal getInitStock(Long materialId, Long depotId) { + BigDecimal stock = BigDecimal.ZERO; + MaterialInitialStockExample example = new MaterialInitialStockExample(); + example.createCriteria().andMaterialIdEqualTo(materialId).andDepotIdEqualTo(depotId) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list = materialInitialStockMapper.selectByExample(example); + if(list!=null && list.size()>0) { + stock = list.get(0).getNumber(); + } + return stock; + } + + /** + * 根据商品和仓库获取当前库存 + * @param materialId + * @param depotId + * @return + */ + public BigDecimal getCurrentStock(Long materialId, Long depotId) { + BigDecimal stock = BigDecimal.ZERO; + MaterialCurrentStockExample example = new MaterialCurrentStockExample(); + example.createCriteria().andMaterialIdEqualTo(materialId).andDepotIdEqualTo(depotId) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list = materialCurrentStockMapper.selectByExample(example); + if(list!=null && list.size()>0) { + stock = list.get(0).getCurrentNumber(); + } else { + stock = getInitStock(materialId,depotId); + } + return stock; + } + + public List getMaterialByMeId(Long meId) { + List result = new ArrayList(); + try{ + if(meId!=null) { + result= materialMapperEx.getMaterialByMeId(meId); + } + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public String getMaxBarCode() { + String maxBarCodeOld = materialMapperEx.getMaxBarCode(); + return Long.parseLong(maxBarCodeOld)+""; + } + + public List getMaterialNameList() { + return materialMapperEx.getMaterialNameList(); + } + + public List getMaterialByBarCode(String barCode) { + return materialMapperEx.getMaterialByBarCode(barCode); + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryComponent.java new file mode 100644 index 000000000..718955f49 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryComponent.java @@ -0,0 +1,75 @@ +package com.jsh.erp.service.materialCategory; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.service.materialProperty.MaterialPropertyResource; +import com.jsh.erp.service.materialProperty.MaterialPropertyService; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "materialCategory_component") +@MaterialCategoryResource +public class MaterialCategoryComponent implements ICommonQuery { + + @Resource + private MaterialCategoryService materialCategoryService; + + @Override + public Object selectOne(Long id) throws Exception { + return materialCategoryService.getMaterialCategory(id); + } + + @Override + public List select(Map map)throws Exception { + return getMaterialCategoryList(map); + } + + private List getMaterialCategoryList(Map map) throws Exception{ + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + Integer parentId = StringUtil.parseInteger(StringUtil.getInfo(search, "parentId")); + String order = QueryUtils.order(map); + return materialCategoryService.select(name, parentId, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + Integer parentId = StringUtil.parseInteger(StringUtil.getInfo(search, "parentId")); + return materialCategoryService.countMaterialCategory(name, parentId); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return materialCategoryService.insertMaterialCategory(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return materialCategoryService.updateMaterialCategory(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return materialCategoryService.deleteMaterialCategory(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return materialCategoryService.batchDeleteMaterialCategory(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return materialCategoryService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryResource.java new file mode 100644 index 000000000..dc2f006b4 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.materialCategory; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "materialCategory") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface MaterialCategoryResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryService.java new file mode 100644 index 000000000..570c297a9 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryService.java @@ -0,0 +1,374 @@ +package com.jsh.erp.service.materialCategory; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.mappers.MaterialCategoryMapper; +import com.jsh.erp.datasource.mappers.MaterialCategoryMapperEx; +import com.jsh.erp.datasource.mappers.MaterialMapperEx; +import com.jsh.erp.datasource.vo.TreeNode; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Service +public class MaterialCategoryService { + private Logger logger = LoggerFactory.getLogger(MaterialCategoryService.class); + + @Resource + private MaterialCategoryMapper materialCategoryMapper; + @Resource + private MaterialCategoryMapperEx materialCategoryMapperEx; + @Resource + private UserService userService; + @Resource + private LogService logService; + @Resource + private MaterialMapperEx materialMapperEx; + + public MaterialCategory getMaterialCategory(long id)throws Exception { + MaterialCategory result=null; + try{ + result=materialCategoryMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getMaterialCategoryListByIds(String ids)throws Exception { + List idList = StringUtil.strToLongList(ids); + List list = new ArrayList<>(); + try{ + MaterialCategoryExample example = new MaterialCategoryExample(); + example.createCriteria().andIdIn(idList); + list = materialCategoryMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getMaterialCategory()throws Exception { + MaterialCategoryExample example = new MaterialCategoryExample(); + List list=null; + try{ + list=materialCategoryMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getAllList(Long parentId)throws Exception { + List list=null; + try{ + list = getMCList(parentId); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getMCList(Long parentId)throws Exception { + List res= new ArrayList(); + List list=null; + MaterialCategoryExample example = new MaterialCategoryExample(); + example.createCriteria().andParentIdEqualTo(parentId).andIdNotEqualTo(1L); + example.setOrderByClause("id"); + list=materialCategoryMapper.selectByExample(example); + if(list!=null && list.size()>0) { + res.addAll(list); + for(MaterialCategory mc : list) { + List mcList = getMCList(mc.getId()); + if(mcList!=null && mcList.size()>0) { + res.addAll(mcList); + } + } + } + return res; + } + + public List select(String name, Integer parentId, int offset, int rows) throws Exception{ + List list=null; + try{ + list=materialCategoryMapperEx.selectByConditionMaterialCategory(name, parentId, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long countMaterialCategory(String name, Integer parentId) throws Exception{ + Long result=null; + try{ + result=materialCategoryMapperEx.countsByMaterialCategory(name, parentId); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertMaterialCategory(JSONObject obj, HttpServletRequest request)throws Exception { + MaterialCategory materialCategory = JSONObject.parseObject(obj.toJSONString(), MaterialCategory.class); + materialCategory.setCreateTime(new Date()); + materialCategory.setUpdateTime(new Date()); + int result=0; + try{ + result=materialCategoryMapper.insertSelective(materialCategory); + logService.insertLog("商品类型", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(materialCategory.getName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateMaterialCategory(JSONObject obj, HttpServletRequest request) throws Exception{ + MaterialCategory materialCategory = JSONObject.parseObject(obj.toJSONString(), MaterialCategory.class); + materialCategory.setUpdateTime(new Date()); + int result=0; + try{ + result=materialCategoryMapper.updateByPrimaryKeySelective(materialCategory); + logService.insertLog("商品类型", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(materialCategory.getName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteMaterialCategory(Long id, HttpServletRequest request)throws Exception { + return batchDeleteMaterialCategoryByIds(id.toString()); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteMaterialCategory(String ids, HttpServletRequest request)throws Exception { + return batchDeleteMaterialCategoryByIds(ids); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteMaterialCategoryByIds(String ids) throws Exception { + int result=0; + String [] idArray=ids.split(","); + //校验产品表 jsh_material + List materialList=null; + try{ + materialList= materialMapperEx.getMaterialListByCategoryIds(idArray); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if(materialList!=null&&materialList.size()>0){ + logger.error("异常码[{}],异常提示[{}],参数,CategoryIds[{}]", + ExceptionConstants.DELETE_FORCE_CONFIRM_CODE,ExceptionConstants.DELETE_FORCE_CONFIRM_MSG,ids); + throw new BusinessRunTimeException(ExceptionConstants.DELETE_FORCE_CONFIRM_CODE, + ExceptionConstants.DELETE_FORCE_CONFIRM_MSG); + } + //校验产品类型表 jsh_material_category + List materialCategoryList=null; + try{ + materialCategoryList= materialCategoryMapperEx.getMaterialCategoryListByCategoryIds(idArray); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if(materialCategoryList!=null&&materialCategoryList.size()>0){ + logger.error("异常码[{}],异常提示[{}],参数,CategoryIds[{}]", + ExceptionConstants.DELETE_FORCE_CONFIRM_CODE,ExceptionConstants.DELETE_FORCE_CONFIRM_MSG,ids); + throw new BusinessRunTimeException(ExceptionConstants.DELETE_FORCE_CONFIRM_CODE, + ExceptionConstants.DELETE_FORCE_CONFIRM_MSG); + } + StringBuffer sb = new StringBuffer(); + sb.append(BusinessConstants.LOG_OPERATION_TYPE_DELETE); + List list = getMaterialCategoryListByIds(ids); + for(MaterialCategory materialCategory: list){ + sb.append("[").append(materialCategory.getName()).append("]"); + } + logService.insertLog("商品类型", sb.toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + //更新时间 + Date updateDate =new Date(); + //更新人 + User userInfo=userService.getCurrentUser(); + Long updater=userInfo==null?null:userInfo.getId(); + String strArray[]=ids.split(","); + if(strArray.length<1){ + return 0; + } + try{ + result=materialCategoryMapperEx.batchDeleteMaterialCategoryByIds(updateDate,updater,strArray); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int checkIsNameExist(Long id, String name)throws Exception { + return 0; + } + + public List findById(Long id)throws Exception { + List list=null; + if(id!=null) { + MaterialCategoryExample example = new MaterialCategoryExample(); + example.createCriteria().andIdEqualTo(id); + try{ + list=materialCategoryMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + } + return list; + } + /** + * create by: cjl + * description: + *获取商品类别树数据 + * create time: 2019/2/19 14:30 + * @Param: + * @return java.util.List + */ + public List getMaterialCategoryTree(Long id) throws Exception{ + List list=null; + try{ + list=materialCategoryMapperEx.getNodeTree(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + /** + * create by: cjl + * description: + * 新增商品类别信息 + * create time: 2019/2/19 16:30 + * @Param: mc + * @return void + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int addMaterialCategory(MaterialCategory mc) throws Exception { + logService.insertLog("商品类型", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(mc.getName()).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + if(mc==null){ + return 0; + } + if(mc.getParentId()==null){ + //没有给定父级目录的id,默认设置父级目录为根目录的父目录 + mc.setParentId(BusinessConstants.MATERIAL_CATEGORY_ROOT_PARENT_ID); + } + //检查商品类型编号是否已存在 + checkMaterialCategorySerialNo(mc); + //数据状态新增时默认设置为启用 + Date date=new Date(); + User userInfo=userService.getCurrentUser(); + //创建时间 + mc.setCreateTime(date); + //更新时间 + mc.setUpdateTime(date); + int result=0; + try{ + result=materialCategoryMapperEx.addMaterialCategory(mc); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int editMaterialCategory(MaterialCategory mc) throws Exception{ + logService.insertLog("商品类型", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(mc.getName()).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + if(mc.getParentId()==null){ + //没有给定父级目录的id,默认设置父级目录为根目录的父目录 + mc.setParentId(BusinessConstants.MATERIAL_CATEGORY_ROOT_PARENT_ID); + } + //检查商品类型编号是否已存在 + checkMaterialCategorySerialNo(mc); + //更新时间 + mc.setUpdateTime(new Date()); + //更新人 + User userInfo=userService.getCurrentUser(); + int result=0; + try{ + result= materialCategoryMapperEx.editMaterialCategory(mc); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + /** + * 根据商品类别编号判断商品类别是否已存在 + * */ + public void checkMaterialCategorySerialNo(MaterialCategory mc)throws Exception { + if(mc==null){ + return; + } + if(StringUtil.isEmpty(mc.getSerialNo())){ + return; + } + //根据商品类别编号查询商品类别 + List mList=null; + try{ + mList= materialCategoryMapperEx.getMaterialCategoryBySerialNo(mc.getSerialNo(), mc.getId()); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if(mList==null||mList.size()<1){ + //未查询到对应数据,编号可用 + return; + } + if(mList.size()>1){ + //查询到的数据条数大于1,编号已存在 + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_CATEGORY_SERIAL_ALREADY_EXISTS_CODE, + ExceptionConstants.MATERIAL_CATEGORY_SERIAL_ALREADY_EXISTS_MSG); + } + if(mc.getId()==null){ + //新增时,编号已存在 + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_CATEGORY_SERIAL_ALREADY_EXISTS_CODE, + ExceptionConstants.MATERIAL_CATEGORY_SERIAL_ALREADY_EXISTS_MSG); + } + /** + * 包装类型用equals来比较 + * */ + if(mc.getId().equals(mList.get(0).getId())){ + //修改时,相同编号,id不同 + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_CATEGORY_SERIAL_ALREADY_EXISTS_CODE, + ExceptionConstants.MATERIAL_CATEGORY_SERIAL_ALREADY_EXISTS_MSG); + } + } + + /** + * 根据名称获取类型 + * @param name + */ + public Long getCategoryIdByName(String name){ + Long categoryId = 0L; + MaterialCategoryExample example = new MaterialCategoryExample(); + example.createCriteria().andNameEqualTo(name).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list = materialCategoryMapper.selectByExample(example); + if(list!=null && list.size()>0) { + categoryId = list.get(0).getId(); + } + return categoryId; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/materialExtend/MaterialExtendComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/materialExtend/MaterialExtendComponent.java new file mode 100644 index 000000000..bfc0738d2 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/materialExtend/MaterialExtendComponent.java @@ -0,0 +1,65 @@ +package com.jsh.erp.service.materialExtend; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "material_extend") +@MaterialExtendResource +public class MaterialExtendComponent implements ICommonQuery { + + @Resource + private MaterialExtendService materialExtendService; + + @Override + public Object selectOne(Long id) throws Exception { + return materialExtendService.getMaterialExtend(id); + } + + @Override + public List select(Map map)throws Exception { + return getMaterialList(map); + } + + private List getMaterialList(Map map) throws Exception{ + + return null; + } + + @Override + public Long counts(Map map)throws Exception { + + return 0L; + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request) throws Exception{ + return materialExtendService.insertMaterialExtend(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return materialExtendService.updateMaterialExtend(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return materialExtendService.deleteMaterialExtend(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return materialExtendService.batchDeleteMaterialExtendByIds(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return materialExtendService.checkIsExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/materialExtend/MaterialExtendResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/materialExtend/MaterialExtendResource.java new file mode 100644 index 000000000..0c6665029 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/materialExtend/MaterialExtendResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.materialExtend; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "materialExtend") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface MaterialExtendResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/materialExtend/MaterialExtendService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/materialExtend/MaterialExtendService.java new file mode 100644 index 000000000..60b173f41 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/materialExtend/MaterialExtendService.java @@ -0,0 +1,362 @@ +package com.jsh.erp.service.materialExtend; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.datasource.entities.MaterialExtend; +import com.jsh.erp.datasource.entities.MaterialExtendExample; +import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.mappers.MaterialExtendMapper; +import com.jsh.erp.datasource.mappers.MaterialExtendMapperEx; +import com.jsh.erp.datasource.vo.MaterialExtendVo4List; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.redis.RedisService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +@Service +public class MaterialExtendService { + private Logger logger = LoggerFactory.getLogger(MaterialExtendService.class); + + @Resource + private MaterialExtendMapper materialExtendMapper; + @Resource + private MaterialExtendMapperEx materialExtendMapperEx; + @Resource + private LogService logService; + @Resource + private UserService userService; + @Resource + private RedisService redisService; + + public MaterialExtend getMaterialExtend(long id)throws Exception { + MaterialExtend result=null; + try{ + result=materialExtendMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + public List getDetailList(Long materialId) { + List list=null; + try{ + list = materialExtendMapperEx.getDetailList(materialId); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getListByMIds(List idList) { + List meList = null; + try{ + Long [] idArray= StringUtil.listToLongArray(idList); + if(idArray!=null && idArray.length>0) { + meList = materialExtendMapperEx.getListByMId(idArray); + } + }catch(Exception e){ + JshException.readFail(logger, e); + } + return meList; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public String saveDetials(JSONObject obj, String sortList, Long materialId) throws Exception { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + JSONArray meArr = obj.getJSONArray("meList"); + JSONArray insertedJson = new JSONArray(); + JSONArray updatedJson = new JSONArray(); + JSONArray deletedJson = new JSONArray(); + List barCodeList=new ArrayList<>(); + if (null != meArr) { + for (int i = 0; i < meArr.size(); i++) { + JSONObject tempJson = meArr.getJSONObject(i); + String barCode = tempJson.getString("barCode"); + barCodeList.add(barCode); + MaterialExtend materialExtend = getInfoByBarCode(barCode); + if(materialExtend.getBarCode() == null){ + insertedJson.add(tempJson); + } else { + updatedJson.add(tempJson); + } + } + List materialExtendList = getMeListByBarCodeAndMid(barCodeList, materialId); + for (MaterialExtend meObj: materialExtendList) { + JSONObject deleteObj = new JSONObject(); + deleteObj.put("id", meObj.getId()); + deletedJson.add(deleteObj); + } + } + JSONArray sortJson = JSONArray.parseArray(sortList); + if (null != insertedJson) { + for (int i = 0; i < insertedJson.size(); i++) { + MaterialExtend materialExtend = new MaterialExtend(); + JSONObject tempInsertedJson = JSONObject.parseObject(insertedJson.getString(i)); + materialExtend.setMaterialId(materialId); + if (StringUtils.isNotEmpty(tempInsertedJson.getString("barCode"))) { + materialExtend.setBarCode(tempInsertedJson.getString("barCode")); + } + if (StringUtils.isNotEmpty(tempInsertedJson.getString("commodityUnit"))) { + materialExtend.setCommodityUnit(tempInsertedJson.getString("commodityUnit")); + } + if (StringUtils.isNotEmpty(tempInsertedJson.getString("purchaseDecimal"))) { + materialExtend.setPurchaseDecimal(tempInsertedJson.getBigDecimal("purchaseDecimal")); + } + if (StringUtils.isNotEmpty(tempInsertedJson.getString("commodityDecimal"))) { + materialExtend.setCommodityDecimal(tempInsertedJson.getBigDecimal("commodityDecimal")); + } + if (StringUtils.isNotEmpty(tempInsertedJson.getString("wholesaleDecimal"))) { + materialExtend.setWholesaleDecimal(tempInsertedJson.getBigDecimal("wholesaleDecimal")); + } + if (StringUtils.isNotEmpty(tempInsertedJson.getString("lowDecimal"))) { + materialExtend.setLowDecimal(tempInsertedJson.getBigDecimal("lowDecimal")); + } + this.insertMaterialExtend(materialExtend); + } + } + if (null != deletedJson) { + StringBuffer bf=new StringBuffer(); + for (int i = 0; i < deletedJson.size(); i++) { + JSONObject tempDeletedJson = JSONObject.parseObject(deletedJson.getString(i)); + bf.append(tempDeletedJson.getLong("id")); + if(i<(deletedJson.size()-1)){ + bf.append(","); + } + } + this.batchDeleteMaterialExtendByIds(bf.toString(), request); + } + if (null != updatedJson) { + for (int i = 0; i < updatedJson.size(); i++) { + JSONObject tempUpdatedJson = JSONObject.parseObject(updatedJson.getString(i)); + MaterialExtend materialExtend = new MaterialExtend(); + materialExtend.setId(tempUpdatedJson.getLong("id")); + if (StringUtils.isNotEmpty(tempUpdatedJson.getString("barCode"))) { + materialExtend.setBarCode(tempUpdatedJson.getString("barCode")); + } + if (StringUtils.isNotEmpty(tempUpdatedJson.getString("commodityUnit"))) { + materialExtend.setCommodityUnit(tempUpdatedJson.getString("commodityUnit")); + } + if (StringUtils.isNotEmpty(tempUpdatedJson.getString("purchaseDecimal"))) { + materialExtend.setPurchaseDecimal(tempUpdatedJson.getBigDecimal("purchaseDecimal")); + } + if (StringUtils.isNotEmpty(tempUpdatedJson.getString("commodityDecimal"))) { + materialExtend.setCommodityDecimal(tempUpdatedJson.getBigDecimal("commodityDecimal")); + } + if (StringUtils.isNotEmpty(tempUpdatedJson.getString("wholesaleDecimal"))) { + materialExtend.setWholesaleDecimal(tempUpdatedJson.getBigDecimal("wholesaleDecimal")); + } + if (StringUtils.isNotEmpty(tempUpdatedJson.getString("lowDecimal"))) { + materialExtend.setLowDecimal(tempUpdatedJson.getBigDecimal("lowDecimal")); + } + this.updateMaterialExtend(materialExtend); + } + } + //处理条码的排序,基础单位排第一个 + if (null != sortJson && sortJson.size()>0) { + //此处为更新的逻辑 + for (int i = 0; i < sortJson.size(); i++) { + JSONObject tempSortJson = JSONObject.parseObject(sortJson.getString(i)); + MaterialExtend materialExtend = new MaterialExtend(); + if(StringUtil.isExist(tempSortJson.get("id"))) { + materialExtend.setId(tempSortJson.getLong("id")); + } + if(StringUtil.isExist(tempSortJson.get("defaultFlag"))) { + materialExtend.setDefaultFlag(tempSortJson.getString("defaultFlag")); + } + this.updateMaterialExtend(materialExtend); + } + } else { + //新增的时候将第一条记录设置为默认基础单位 + MaterialExtendExample example = new MaterialExtendExample(); + example.createCriteria().andMaterialIdEqualTo(materialId).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List meList = materialExtendMapper.selectByExample(example); + if(meList!=null) { + for(int i=0; i 0) { + criteria.andIdNotEqualTo(id); + } + List list =null; + try{ + list= materialExtendMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteMaterialExtend(Long id, HttpServletRequest request)throws Exception { + int result =0; + MaterialExtend materialExtend = new MaterialExtend(); + materialExtend.setId(id); + materialExtend.setDeleteFlag(BusinessConstants.DELETE_FLAG_DELETED); + Long userId = Long.parseLong(redisService.getObjectFromSessionByKey(request,"userId").toString()); + User user = userService.getUser(userId); + materialExtend.setUpdateTime(new Date().getTime()); + materialExtend.setUpdateSerial(user.getLoginName()); + try{ + result= materialExtendMapper.updateByPrimaryKeySelective(materialExtend); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteMaterialExtendByIds(String ids, HttpServletRequest request) throws Exception{ + String [] idArray=ids.split(","); + int result = 0; + try{ + result = materialExtendMapperEx.batchDeleteMaterialExtendByIds(idArray); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int insertMaterialExtend(JSONObject obj, HttpServletRequest request) throws Exception{ + MaterialExtend materialExtend = JSONObject.parseObject(obj.toJSONString(), MaterialExtend.class); + int result=0; + try{ + result = materialExtendMapper.insertSelective(materialExtend); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int updateMaterialExtend(JSONObject obj, HttpServletRequest request)throws Exception { + MaterialExtend materialExtend = JSONObject.parseObject(obj.toJSONString(), MaterialExtend.class); + int result=0; + try{ + result = materialExtendMapper.insertSelective(materialExtend); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public List getMaterialExtendByTenantAndTime(Long tenantId, Long lastTime, Long syncNum)throws Exception { + List list=new ArrayList(); + try{ + //先获取最大的时间戳,再查两个时间戳之间的数据,这样同步能够防止丢失数据(应为时间戳有重复) + Long maxTime = materialExtendMapperEx.getMaxTimeByTenantAndTime(tenantId, lastTime, syncNum); + if(tenantId!=null && lastTime!=null && maxTime!=null) { + MaterialExtendExample example = new MaterialExtendExample(); + example.createCriteria().andTenantIdEqualTo(tenantId) + .andUpdateTimeGreaterThan(lastTime) + .andUpdateTimeLessThanOrEqualTo(maxTime); + list=materialExtendMapper.selectByExample(example); + } + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public Long selectIdByMaterialIdAndDefaultFlag(Long materialId, String defaultFlag)throws Exception { + Long id = 0L; + MaterialExtendExample example = new MaterialExtendExample(); + example.createCriteria().andMaterialIdEqualTo(materialId).andDefaultFlagEqualTo(defaultFlag) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list = materialExtendMapper.selectByExample(example); + if(list!=null && list.size()>0) { + id = list.get(0).getId(); + } + return id; + } + + public MaterialExtend getInfoByBarCode(String barCode)throws Exception { + MaterialExtend materialExtend = new MaterialExtend(); + MaterialExtendExample example = new MaterialExtendExample(); + example.createCriteria().andBarCodeEqualTo(barCode) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list = materialExtendMapper.selectByExample(example); + if(list!=null && list.size()>0) { + materialExtend = list.get(0); + } + return materialExtend; + } + + /** + * 查询某个商品里面被清除的条码信息 + * @param barCodeList + * @param mId + * @return + * @throws Exception + */ + public List getMeListByBarCodeAndMid(List barCodeList, Long mId)throws Exception { + MaterialExtend materialExtend = new MaterialExtend(); + MaterialExtendExample example = new MaterialExtendExample(); + example.createCriteria().andBarCodeNotIn(barCodeList).andMaterialIdEqualTo(mId) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list = materialExtendMapper.selectByExample(example); + return list; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/materialProperty/MaterialPropertyComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/materialProperty/MaterialPropertyComponent.java new file mode 100644 index 000000000..d9e9efbc7 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/materialProperty/MaterialPropertyComponent.java @@ -0,0 +1,71 @@ +package com.jsh.erp.service.materialProperty; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "materialProperty_component") +@MaterialPropertyResource +public class MaterialPropertyComponent implements ICommonQuery { + + @Resource + private MaterialPropertyService materialPropertyService; + + @Override + public Object selectOne(Long id) throws Exception { + return materialPropertyService.getMaterialProperty(id); + } + + @Override + public List select(Map map)throws Exception { + return getMaterialPropertyList(map); + } + + private List getMaterialPropertyList(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + String order = QueryUtils.order(map); + return materialPropertyService.select(name, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + return materialPropertyService.countMaterialProperty(name); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return materialPropertyService.insertMaterialProperty(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return materialPropertyService.updateMaterialProperty(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return materialPropertyService.deleteMaterialProperty(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return materialPropertyService.batchDeleteMaterialProperty(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return materialPropertyService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/materialProperty/MaterialPropertyResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/materialProperty/MaterialPropertyResource.java new file mode 100644 index 000000000..cb53cd1fb --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/materialProperty/MaterialPropertyResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.materialProperty; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "materialProperty") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface MaterialPropertyResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/materialProperty/MaterialPropertyService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/materialProperty/MaterialPropertyService.java new file mode 100644 index 000000000..a239b981e --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/materialProperty/MaterialPropertyService.java @@ -0,0 +1,141 @@ +package com.jsh.erp.service.materialProperty; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.MaterialProperty; +import com.jsh.erp.datasource.entities.MaterialPropertyExample; +import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.mappers.MaterialPropertyMapper; +import com.jsh.erp.datasource.mappers.MaterialPropertyMapperEx; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.Date; +import java.util.List; + +@Service +public class MaterialPropertyService { + private Logger logger = LoggerFactory.getLogger(MaterialPropertyService.class); + + @Resource + private MaterialPropertyMapper materialPropertyMapper; + + @Resource + private MaterialPropertyMapperEx materialPropertyMapperEx; + @Resource + private UserService userService; + @Resource + private LogService logService; + + public MaterialProperty getMaterialProperty(long id)throws Exception { + MaterialProperty result=null; + try{ + result=materialPropertyMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getMaterialProperty()throws Exception { + MaterialPropertyExample example = new MaterialPropertyExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=materialPropertyMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String name, int offset, int rows)throws Exception { + List list=null; + try{ + list=materialPropertyMapperEx.selectByConditionMaterialProperty(name, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long countMaterialProperty(String name)throws Exception { + Long result=null; + try{ + result=materialPropertyMapperEx.countsByMaterialProperty(name); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertMaterialProperty(JSONObject obj, HttpServletRequest request)throws Exception { + MaterialProperty materialProperty = JSONObject.parseObject(obj.toJSONString(), MaterialProperty.class); + int result=0; + try{ + result=materialPropertyMapper.insertSelective(materialProperty); + logService.insertLog("商品属性", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(materialProperty.getNativeName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateMaterialProperty(JSONObject obj, HttpServletRequest request)throws Exception { + MaterialProperty materialProperty = JSONObject.parseObject(obj.toJSONString(), MaterialProperty.class); + int result=0; + try{ + result=materialPropertyMapper.updateByPrimaryKeySelective(materialProperty); + logService.insertLog("商品属性", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(materialProperty.getNativeName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteMaterialProperty(Long id, HttpServletRequest request)throws Exception { + return batchDeleteMaterialPropertyByIds(id.toString()); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteMaterialProperty(String ids, HttpServletRequest request)throws Exception { + return batchDeleteMaterialPropertyByIds(ids); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteMaterialPropertyByIds(String ids) throws Exception{ + logService.insertLog("商品属性", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_DELETE).append(ids).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + User userInfo=userService.getCurrentUser(); + String [] idArray=ids.split(","); + int result=0; + try{ + result=materialPropertyMapperEx.batchDeleteMaterialPropertyByIds(new Date(),userInfo==null?null:userInfo.getId(),idArray); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int checkIsNameExist(Long id, String name)throws Exception { + return 0; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/msg/MsgComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/msg/MsgComponent.java new file mode 100644 index 000000000..f39d280e1 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/msg/MsgComponent.java @@ -0,0 +1,72 @@ +package com.jsh.erp.service.msg; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "msg_component") +@MsgResource +public class MsgComponent implements ICommonQuery { + + @Resource + private MsgService msgService; + + @Override + public Object selectOne(Long id) throws Exception { + return msgService.getMsg(id); + } + + @Override + public List select(Map map)throws Exception { + return getMsgList(map); + } + + private List getMsgList(Map map) throws Exception{ + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + String order = QueryUtils.order(map); + String filter = QueryUtils.filter(map); + return msgService.select(name, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map) throws Exception{ + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + return msgService.countMsg(name); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return msgService.insertMsg(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return msgService.updateMsg(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return msgService.deleteMsg(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return msgService.batchDeleteMsg(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return msgService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/msg/MsgResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/msg/MsgResource.java new file mode 100644 index 000000000..2f5aba741 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/msg/MsgResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.msg; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2019-9-7 22:52:35 + */ +@ResourceInfo(value = "msg") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface MsgResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/msg/MsgService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/msg/MsgService.java new file mode 100644 index 000000000..2475fae8a --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/msg/MsgService.java @@ -0,0 +1,252 @@ +package com.jsh.erp.service.msg; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.Msg; +import com.jsh.erp.datasource.entities.MsgExample; +import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.mappers.MsgMapper; +import com.jsh.erp.datasource.mappers.MsgMapperEx; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.depotHead.DepotHeadService; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +@Service +public class MsgService { + private Logger logger = LoggerFactory.getLogger(MsgService.class); + @Resource + private MsgMapper msgMapper; + + @Resource + private MsgMapperEx msgMapperEx; + + @Resource + private DepotHeadService depotHeadService; + + @Resource + private UserService userService; + + @Resource + private LogService logService; + + public Msg getMsg(long id)throws Exception { + Msg result=null; + try{ + result=msgMapper.selectByPrimaryKey(id); + }catch(Exception e){ + logger.error("异常码[{}],异常提示[{}],异常[{}]", + ExceptionConstants.DATA_READ_FAIL_CODE, ExceptionConstants.DATA_READ_FAIL_MSG,e); + throw new BusinessRunTimeException(ExceptionConstants.DATA_READ_FAIL_CODE, + ExceptionConstants.DATA_READ_FAIL_MSG); + } + return result; + } + + public List getMsg()throws Exception { + MsgExample example = new MsgExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=msgMapper.selectByExample(example); + }catch(Exception e){ + logger.error("异常码[{}],异常提示[{}],异常[{}]", + ExceptionConstants.DATA_READ_FAIL_CODE, ExceptionConstants.DATA_READ_FAIL_MSG,e); + throw new BusinessRunTimeException(ExceptionConstants.DATA_READ_FAIL_CODE, + ExceptionConstants.DATA_READ_FAIL_MSG); + } + return list; + } + + public List select(String name, int offset, int rows)throws Exception { + List list=null; + try{ + list=msgMapperEx.selectByConditionMsg(name, offset, rows); + }catch(Exception e){ + logger.error("异常码[{}],异常提示[{}],异常[{}]", + ExceptionConstants.DATA_READ_FAIL_CODE, ExceptionConstants.DATA_READ_FAIL_MSG,e); + throw new BusinessRunTimeException(ExceptionConstants.DATA_READ_FAIL_CODE, + ExceptionConstants.DATA_READ_FAIL_MSG); + } + return list; + } + + public Long countMsg(String name)throws Exception { + Long result=null; + try{ + result=msgMapperEx.countsByMsg(name); + }catch(Exception e){ + logger.error("异常码[{}],异常提示[{}],异常[{}]", + ExceptionConstants.DATA_READ_FAIL_CODE, ExceptionConstants.DATA_READ_FAIL_MSG,e); + throw new BusinessRunTimeException(ExceptionConstants.DATA_READ_FAIL_CODE, + ExceptionConstants.DATA_READ_FAIL_MSG); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertMsg(JSONObject obj, HttpServletRequest request)throws Exception { + Msg msg = JSONObject.parseObject(obj.toJSONString(), Msg.class); + int result=0; + try{ + result=msgMapper.insertSelective(msg); + logService.insertLog("消息", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(msg.getMsgTitle()).toString(), request); + }catch(Exception e){ + logger.error("异常码[{}],异常提示[{}],异常[{}]", + ExceptionConstants.DATA_WRITE_FAIL_CODE, ExceptionConstants.DATA_WRITE_FAIL_MSG,e); + throw new BusinessRunTimeException(ExceptionConstants.DATA_WRITE_FAIL_CODE, + ExceptionConstants.DATA_WRITE_FAIL_MSG); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateMsg(JSONObject obj, HttpServletRequest request) throws Exception{ + Msg msg = JSONObject.parseObject(obj.toJSONString(), Msg.class); + int result=0; + try{ + result=msgMapper.updateByPrimaryKeySelective(msg); + logService.insertLog("消息", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(msg.getMsgTitle()).toString(), request); + }catch(Exception e){ + logger.error("异常码[{}],异常提示[{}],异常[{}]", + ExceptionConstants.DATA_WRITE_FAIL_CODE, ExceptionConstants.DATA_WRITE_FAIL_MSG,e); + throw new BusinessRunTimeException(ExceptionConstants.DATA_WRITE_FAIL_CODE, + ExceptionConstants.DATA_WRITE_FAIL_MSG); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteMsg(Long id, HttpServletRequest request)throws Exception { + int result=0; + try{ + result=msgMapper.deleteByPrimaryKey(id); + logService.insertLog("消息", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_DELETE).append(id).toString(), request); + }catch(Exception e){ + logger.error("异常码[{}],异常提示[{}],异常[{}]", + ExceptionConstants.DATA_WRITE_FAIL_CODE, ExceptionConstants.DATA_WRITE_FAIL_MSG,e); + throw new BusinessRunTimeException(ExceptionConstants.DATA_WRITE_FAIL_CODE, + ExceptionConstants.DATA_WRITE_FAIL_MSG); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteMsg(String ids, HttpServletRequest request) throws Exception{ + List idList = StringUtil.strToLongList(ids); + MsgExample example = new MsgExample(); + example.createCriteria().andIdIn(idList); + int result=0; + try{ + result=msgMapper.deleteByExample(example); + logService.insertLog("消息", "批量删除,id集:" + ids, request); + }catch(Exception e){ + logger.error("异常码[{}],异常提示[{}],异常[{}]", + ExceptionConstants.DATA_WRITE_FAIL_CODE, ExceptionConstants.DATA_WRITE_FAIL_MSG,e); + throw new BusinessRunTimeException(ExceptionConstants.DATA_WRITE_FAIL_CODE, + ExceptionConstants.DATA_WRITE_FAIL_MSG); + } + return result; + } + + public int checkIsNameExist(Long id, String name)throws Exception { + MsgExample example = new MsgExample(); + example.createCriteria().andIdNotEqualTo(id).andMsgTitleEqualTo(name).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list= msgMapper.selectByExample(example); + }catch(Exception e){ + logger.error("异常码[{}],异常提示[{}],异常[{}]", + ExceptionConstants.DATA_READ_FAIL_CODE, ExceptionConstants.DATA_READ_FAIL_MSG,e); + throw new BusinessRunTimeException(ExceptionConstants.DATA_READ_FAIL_CODE, + ExceptionConstants.DATA_READ_FAIL_MSG); + } + return list==null?0:list.size(); + } + + /** + * create by: qiankunpingtai + * 逻辑删除角色信息 + * create time: 2019/3/28 15:44 + * @Param: ids + * @return int + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteMsgByIds(String ids) throws Exception{ + logService.insertLog("序列号", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_DELETE).append(ids).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + String [] idArray=ids.split(","); + int result=0; + try{ + result=msgMapperEx.batchDeleteMsgByIds(idArray); + }catch(Exception e){ + logger.error("异常码[{}],异常提示[{}],异常[{}]", + ExceptionConstants.DATA_WRITE_FAIL_CODE, ExceptionConstants.DATA_WRITE_FAIL_MSG,e); + throw new BusinessRunTimeException(ExceptionConstants.DATA_WRITE_FAIL_CODE, + ExceptionConstants.DATA_WRITE_FAIL_MSG); + } + return result; + } + + public List getMsgByStatus(String status)throws Exception { + MsgExample example = new MsgExample(); + example.createCriteria().andStatusEqualTo(status).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=msgMapper.selectByExample(example); + }catch(Exception e){ + logger.error("异常码[{}],异常提示[{}],异常[{}]", + ExceptionConstants.DATA_READ_FAIL_CODE, ExceptionConstants.DATA_READ_FAIL_MSG,e); + throw new BusinessRunTimeException(ExceptionConstants.DATA_READ_FAIL_CODE, + ExceptionConstants.DATA_READ_FAIL_MSG); + } + return list; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public void batchUpdateStatus(String ids, String status) throws Exception{ + List idList = StringUtil.strToLongList(ids); + Msg msg = new Msg(); + msg.setStatus(status); + MsgExample example = new MsgExample(); + example.createCriteria().andIdIn(idList); + try{ + msgMapper.updateByExampleSelective(msg, example); + }catch(Exception e){ + logger.error("异常码[{}],异常提示[{}],异常[{}]", + ExceptionConstants.DATA_WRITE_FAIL_CODE, ExceptionConstants.DATA_WRITE_FAIL_MSG,e); + throw new BusinessRunTimeException(ExceptionConstants.DATA_WRITE_FAIL_CODE, + ExceptionConstants.DATA_WRITE_FAIL_MSG); + } + } + + public Long getMsgCountByStatus(String status)throws Exception { + Long result=null; + try{ + User userInfo=userService.getCurrentUser(); + result=msgMapperEx.getMsgCountByStatus(status, userInfo.getId()); + }catch(Exception e){ + logger.error("异常码[{}],异常提示[{}],异常[{}]", + ExceptionConstants.DATA_READ_FAIL_CODE, ExceptionConstants.DATA_READ_FAIL_MSG,e); + throw new BusinessRunTimeException(ExceptionConstants.DATA_READ_FAIL_CODE, + ExceptionConstants.DATA_READ_FAIL_MSG); + } + return result; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelComponent.java new file mode 100644 index 000000000..a24bfbad1 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelComponent.java @@ -0,0 +1,67 @@ +package com.jsh.erp.service.orgaUserRel; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.service.organization.OrganizationResource; +import com.jsh.erp.service.organization.OrganizationService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/3/11 18:10 + */ +@Service(value = "orgaUserRel_component") +@OrgaUserRelResource +public class OrgaUserRelComponent implements ICommonQuery { + @Resource + private OrgaUserRelService orgaUserRelService; + + @Override + public Object selectOne(Long id) throws Exception { + return orgaUserRelService.getOrgaUserRel(id); + } + + @Override + public List select(Map parameterMap)throws Exception { + return getOrgaUserRelList(parameterMap); + } + private List getOrgaUserRelList(Map map)throws Exception { + return null; + } + @Override + public Long counts(Map parameterMap)throws Exception { + return null; + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return orgaUserRelService.insertOrgaUserRel(obj,request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return orgaUserRelService.updateOrgaUserRel(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return orgaUserRelService.deleteOrgaUserRel(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return orgaUserRelService.batchDeleteOrgaUserRel(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return 0; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelResource.java new file mode 100644 index 000000000..a12ce1f7b --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelResource.java @@ -0,0 +1,19 @@ +package com.jsh.erp.service.orgaUserRel; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * Description + * 机构用户关系 + * @Author: cjl + * @Date: 2019/3/11 18:11 + */ +@ResourceInfo(value = "orgaUserRel") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface OrgaUserRelResource { + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelService.java new file mode 100644 index 000000000..01814b5a1 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelService.java @@ -0,0 +1,222 @@ +package com.jsh.erp.service.orgaUserRel; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.OrgaUserRel; +import com.jsh.erp.datasource.entities.OrgaUserRelExample; +import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.mappers.OrgaUserRelMapper; +import com.jsh.erp.datasource.mappers.OrgaUserRelMapperEx; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.organization.OrganizationService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/3/11 18:11 + */ +@Service +public class OrgaUserRelService { + private Logger logger = LoggerFactory.getLogger(OrganizationService.class); + + @Resource + private OrgaUserRelMapper orgaUserRelMapper; + @Resource + private OrgaUserRelMapperEx orgaUserRelMapperEx; + @Resource + private UserService userService; + @Resource + private OrganizationService organizationService; + @Resource + private LogService logService; + + public OrgaUserRel getOrgaUserRel(long id) throws Exception{ + return orgaUserRelMapper.selectByPrimaryKey(id); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertOrgaUserRel(JSONObject obj, HttpServletRequest request) throws Exception{ + OrgaUserRel orgaUserRel = JSONObject.parseObject(obj.toJSONString(), OrgaUserRel.class); + int result=0; + try{ + result=orgaUserRelMapper.insertSelective(orgaUserRel); + logService.insertLog("用户与机构关系", BusinessConstants.LOG_OPERATION_TYPE_ADD, request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateOrgaUserRel(JSONObject obj, HttpServletRequest request) throws Exception{ + OrgaUserRel orgaUserRel = JSONObject.parseObject(obj.toJSONString(), OrgaUserRel.class); + int result=0; + try{ + result=orgaUserRelMapper.updateByPrimaryKeySelective(orgaUserRel); + logService.insertLog("用户与机构关系", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(orgaUserRel.getId()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteOrgaUserRel(Long id, HttpServletRequest request)throws Exception { + int result=0; + try{ + result=orgaUserRelMapper.deleteByPrimaryKey(id); + logService.insertLog("用户与机构关系", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_DELETE).append(id).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteOrgaUserRel(String ids, HttpServletRequest request)throws Exception { + List idList = StringUtil.strToLongList(ids); + OrgaUserRelExample example = new OrgaUserRelExample(); + example.createCriteria().andIdIn(idList); + int result=0; + try{ + result=orgaUserRelMapper.deleteByExample(example); + logService.insertLog("用户与机构关系", "批量删除,id集:" + ids, request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + /** + * create by: cjl + * description: + * 新增机构用户关联关系,反显id + * create time: 2019/3/12 9:40 + * @Param: orgaUserRel + * @return void + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public OrgaUserRel addOrgaUserRel(OrgaUserRel orgaUserRel) throws Exception{ + Date date = new Date(); + User userInfo=userService.getCurrentUser(); + //创建时间 + if(orgaUserRel.getCreateTime()==null){ + orgaUserRel.setCreateTime(date); + } + //创建人 + if(orgaUserRel.getCreator()==null){ + orgaUserRel.setCreator(userInfo==null?null:userInfo.getId()); + } + //更新时间 + if(orgaUserRel.getUpdateTime()==null){ + orgaUserRel.setUpdateTime(date); + } + //更新人 + if(orgaUserRel.getUpdater()==null){ + orgaUserRel.setUpdater(userInfo==null?null:userInfo.getId()); + } + orgaUserRel.setDeleteFlag(BusinessConstants.DELETE_FLAG_EXISTS); + int result=0; + try{ + result=orgaUserRelMapperEx.addOrgaUserRel(orgaUserRel); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + if(result>0){ + return orgaUserRel; + } + return null; + } + /** + * create by: cjl + * description: + * 更新机构用户关联关系 + * create time: 2019/3/12 9:40 + * @Param: orgaUserRel + * @return void + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public OrgaUserRel updateOrgaUserRel(OrgaUserRel orgaUserRel) throws Exception{ + User userInfo=userService.getCurrentUser(); + //更新时间 + if(orgaUserRel.getUpdateTime()==null){ + orgaUserRel.setUpdateTime(new Date()); + } + //更新人 + if(orgaUserRel.getUpdater()==null){ + orgaUserRel.setUpdater(userInfo==null?null:userInfo.getId()); + } + int result=0; + try{ + result=orgaUserRelMapperEx.updateOrgaUserRel(orgaUserRel); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + if(result>0){ + return orgaUserRel; + } + return null; + } + + /** + * 根据用户id获取用户id列表 + * @param userId + * @return + * @throws Exception + */ + public String getUserIdListByUserId(Long userId) throws Exception{ + OrgaUserRel our = new OrgaUserRel(); + OrgaUserRelExample example = new OrgaUserRelExample(); + example.createCriteria().andUserIdEqualTo(userId); + List list = orgaUserRelMapper.selectByExample(example); + if(list!=null && list.size()>0) { + our = list.get(0); + } + List userIdList = getUserIdListByOrgId(our.getOrgaId()); + String users = ""; + for(Long u: userIdList){ + users = users + u + ","; + } + if(users.length()>0){ + users = users.substring(0,users.length()-1); + } + return users; + } + + /** + * 根据组织id获取所属的用户id列表(包含组织的递归) + * @param orgId + * @return + */ + public List getUserIdListByOrgId(Long orgId) { + List orgIdList = organizationService.getOrgIdByParentId(orgId); + List userIdList = new ArrayList(); + OrgaUserRelExample example = new OrgaUserRelExample(); + if(orgIdList!=null && orgIdList.size()>0) { + example.createCriteria().andOrgaIdIn(orgIdList).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } else { + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } + List list = orgaUserRelMapper.selectByExample(example); + if(list!=null && list.size()>0) { + for(OrgaUserRel our: list) { + userIdList.add(our.getUserId()); + } + } + return userIdList; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/organization/OrganizationComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/organization/OrganizationComponent.java new file mode 100644 index 000000000..51e69af1d --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/organization/OrganizationComponent.java @@ -0,0 +1,68 @@ +package com.jsh.erp.service.organization; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/3/6 15:09 + */ +@Service(value = "organization_component") +@OrganizationResource +public class OrganizationComponent implements ICommonQuery { + @Resource + private OrganizationService organizationService; + + @Override + public Object selectOne(Long id) throws Exception { + return organizationService.getOrganization(id); + } + + @Override + public List select(Map parameterMap)throws Exception { + return getOrganizationList(parameterMap); + } + private List getOrganizationList(Map map)throws Exception { + return null; + } + @Override + public Long counts(Map parameterMap)throws Exception { + return null; + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return organizationService.insertOrganization(obj,request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return organizationService.updateOrganization(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return organizationService.deleteOrganization(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return organizationService.batchDeleteOrganization(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return 0; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/organization/OrganizationResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/organization/OrganizationResource.java new file mode 100644 index 000000000..f84d766a7 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/organization/OrganizationResource.java @@ -0,0 +1,18 @@ +package com.jsh.erp.service.organization; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * Description + * 机构 + * @Author: cjl + * @Date: 2019/3/6 15:10 + */ +@ResourceInfo(value = "organization") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface OrganizationResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/organization/OrganizationService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/organization/OrganizationService.java new file mode 100644 index 000000000..fea294996 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/organization/OrganizationService.java @@ -0,0 +1,306 @@ +package com.jsh.erp.service.organization; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.MaterialProperty; +import com.jsh.erp.datasource.entities.Organization; +import com.jsh.erp.datasource.entities.OrganizationExample; +import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.mappers.OrganizationMapper; +import com.jsh.erp.datasource.mappers.OrganizationMapperEx; +import com.jsh.erp.datasource.vo.TreeNode; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/3/6 15:10 + */ +@Service +public class OrganizationService { + private Logger logger = LoggerFactory.getLogger(OrganizationService.class); + + @Resource + private OrganizationMapper organizationMapper; + @Resource + private OrganizationMapperEx organizationMapperEx; + @Resource + private UserService userService; + @Resource + private LogService logService; + + public Organization getOrganization(long id) throws Exception { + return organizationMapper.selectByPrimaryKey(id); + } + + public List getOrganizationListByIds(String ids)throws Exception { + List idList = StringUtil.strToLongList(ids); + List list = new ArrayList<>(); + try{ + OrganizationExample example = new OrganizationExample(); + example.createCriteria().andIdIn(idList); + list = organizationMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertOrganization(JSONObject obj, HttpServletRequest request)throws Exception { + Organization organization = JSONObject.parseObject(obj.toJSONString(), Organization.class); + organization.setCreateTime(new Date()); + organization.setUpdateTime(new Date()); + int result=0; + try{ + result=organizationMapper.insertSelective(organization); + logService.insertLog("机构", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(organization.getOrgFullName()).toString(),request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateOrganization(JSONObject obj, HttpServletRequest request)throws Exception { + Organization organization = JSONObject.parseObject(obj.toJSONString(), Organization.class); + organization.setUpdateTime(new Date()); + int result=0; + try{ + result=organizationMapper.updateByPrimaryKeySelective(organization); + logService.insertLog("机构", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(organization.getOrgFullName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteOrganization(Long id, HttpServletRequest request)throws Exception { + return batchDeleteOrganizationByIds(id.toString()); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteOrganization(String ids, HttpServletRequest request)throws Exception { + return batchDeleteOrganizationByIds(ids); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteOrganizationByIds(String ids) throws Exception{ + StringBuffer sb = new StringBuffer(); + sb.append(BusinessConstants.LOG_OPERATION_TYPE_DELETE); + List list = getOrganizationListByIds(ids); + for(Organization organization: list){ + sb.append("[").append(organization.getOrgFullName()).append("]"); + } + logService.insertLog("机构", sb.toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + User userInfo=userService.getCurrentUser(); + String [] idArray=ids.split(","); + int result=0; + try{ + result=organizationMapperEx.batchDeleteOrganizationByIds( + new Date(),userInfo==null?null:userInfo.getId(),idArray); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int addOrganization(Organization org) throws Exception{ + logService.insertLog("机构", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(org.getOrgFullName()).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + //新增时间 + Date date=new Date(); + User userInfo=userService.getCurrentUser(); + org.setCreateTime(date); + //修改时间 + org.setUpdateTime(date); + /** + *添加的时候检测机构编号是否已存在 + * */ + if(StringUtil.isNotEmpty(org.getOrgNo())){ + checkOrgNoIsExists(org.getOrgNo(),null); + } + /** + * 未指定父级机构的时候默认为根机构 + * */ + if(org.getParentId()!=null){ + org.setParentId(null); + } + int result=0; + try{ + result=organizationMapperEx.addOrganization(org); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int editOrganization(Organization org)throws Exception { + logService.insertLog("机构", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(org.getOrgFullName()).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + //修改时间 + org.setUpdateTime(new Date()); + User userInfo=userService.getCurrentUser(); + /** + * 修改的时候检测机构编号是否已存在 + * */ + if(StringUtil.isNotEmpty(org.getOrgNo())){ + checkOrgNoIsExists(org.getOrgNo(),org.getId()); + } + /** + * 未指定父级机构的时候默认为根机构 + * */ + if(org.getParentId()!=null){ + org.setParentId(null); + } + int result=0; + try{ + result=organizationMapperEx.editOrganization(org); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public List getOrganizationTree(Long id)throws Exception { + List list=null; + try{ + list=organizationMapperEx.getNodeTree(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List findById(Long id) throws Exception{ + OrganizationExample example = new OrganizationExample(); + example.createCriteria().andIdEqualTo(id); + List list=null; + try{ + list=organizationMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List findByParentId(Long parentId)throws Exception { + List list=null; + if(parentId!=null){ + OrganizationExample example = new OrganizationExample(); + example.createCriteria().andIdEqualTo(parentId).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + try{ + list=organizationMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + } + return list; + } + + public List findByOrgNo(String orgNo)throws Exception { + OrganizationExample example = new OrganizationExample(); + example.createCriteria().andOrgNoEqualTo(orgNo).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=organizationMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + /** + * create by: cjl + * description: + * 检查机构编号是否已经存在 + * create time: 2019/3/7 10:01 + * @Param: orgNo + * @return void + */ + public void checkOrgNoIsExists(String orgNo,Long id)throws Exception { + List orgList=findByOrgNo(orgNo); + if(orgList!=null&&orgList.size()>0){ + if(orgList.size()>1){ + logger.error("异常码[{}],异常提示[{}],参数,orgNo[{}]", + ExceptionConstants.ORGANIZATION_NO_ALREADY_EXISTS_CODE,ExceptionConstants.ORGANIZATION_NO_ALREADY_EXISTS_MSG,orgNo); + //获取的数据条数大于1,机构编号已存在 + throw new BusinessRunTimeException(ExceptionConstants.ORGANIZATION_NO_ALREADY_EXISTS_CODE, + ExceptionConstants.ORGANIZATION_NO_ALREADY_EXISTS_MSG); + } + if(id!=null){ + if(!orgList.get(0).getId().equals(id)){ + //数据条数等于1,但是和编辑的数据的id不相同 + logger.error("异常码[{}],异常提示[{}],参数,orgNo[{}],id[{}]", + ExceptionConstants.ORGANIZATION_NO_ALREADY_EXISTS_CODE,ExceptionConstants.ORGANIZATION_NO_ALREADY_EXISTS_MSG,orgNo,id); + throw new BusinessRunTimeException(ExceptionConstants.ORGANIZATION_NO_ALREADY_EXISTS_CODE, + ExceptionConstants.ORGANIZATION_NO_ALREADY_EXISTS_MSG); + } + }else{ + logger.error("异常码[{}],异常提示[{}],参数,orgNo[{}]", + ExceptionConstants.ORGANIZATION_NO_ALREADY_EXISTS_CODE,ExceptionConstants.ORGANIZATION_NO_ALREADY_EXISTS_MSG,orgNo); + //数据条数等于1,但此时是新增 + throw new BusinessRunTimeException(ExceptionConstants.ORGANIZATION_NO_ALREADY_EXISTS_CODE, + ExceptionConstants.ORGANIZATION_NO_ALREADY_EXISTS_MSG); + } + } + + } + + /** + * 根据父级id递归获取子集组织id + * @return + */ + public List getOrgIdByParentId(Long orgId) { + List idList = new ArrayList(); + OrganizationExample example = new OrganizationExample(); + example.createCriteria().andIdEqualTo(orgId).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List orgList = organizationMapper.selectByExample(example); + if(orgList!=null && orgList.size()>0) { + idList.add(orgId); + getOrgIdByParentNo(idList, orgList.get(0).getId()); + } + return idList; + } + + /** + * 根据组织编号递归获取下级编号 + * @param id + * @return + */ + public void getOrgIdByParentNo(List idList,Long id) { + List list = new ArrayList(); + OrganizationExample example = new OrganizationExample(); + example.createCriteria().andParentIdNotEqualTo(id).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List orgList = organizationMapper.selectByExample(example); + if(orgList!=null && orgList.size()>0) { + for(Organization o: orgList) { + idList.add(o.getId()); + getOrgIdByParentNo(idList, o.getId()); + } + } + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/person/PersonComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/person/PersonComponent.java new file mode 100644 index 000000000..7c70dd5a2 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/person/PersonComponent.java @@ -0,0 +1,75 @@ +package com.jsh.erp.service.person; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.service.depot.DepotResource; +import com.jsh.erp.service.depot.DepotService; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "person_component") +@PersonResource +public class PersonComponent implements ICommonQuery { + + @Resource + private PersonService personService; + + @Override + public Object selectOne(Long id) throws Exception { + return personService.getPerson(id); + } + + @Override + public List select(Map map)throws Exception { + return getPersonList(map); + } + + private List getPersonList(Map map) throws Exception{ + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + String type = StringUtil.getInfo(search, "type"); + String order = QueryUtils.order(map); + return personService.select(name, type, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map) throws Exception{ + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + String type = StringUtil.getInfo(search, "type"); + return personService.countPerson(name, type); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return personService.insertPerson(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return personService.updatePerson(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return personService.deletePerson(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return personService.batchDeletePerson(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return personService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/person/PersonResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/person/PersonResource.java new file mode 100644 index 000000000..df660e574 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/person/PersonResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.person; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "person") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface PersonResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/person/PersonService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/person/PersonService.java new file mode 100644 index 000000000..a0b54170b --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/person/PersonService.java @@ -0,0 +1,233 @@ +package com.jsh.erp.service.person; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.mappers.AccountHeadMapperEx; +import com.jsh.erp.datasource.mappers.DepotHeadMapperEx; +import com.jsh.erp.datasource.mappers.PersonMapper; +import com.jsh.erp.datasource.mappers.PersonMapperEx; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Service +public class PersonService { + private Logger logger = LoggerFactory.getLogger(PersonService.class); + + @Resource + private PersonMapper personMapper; + + @Resource + private PersonMapperEx personMapperEx; + @Resource + private UserService userService; + @Resource + private LogService logService; + @Resource + private AccountHeadMapperEx accountHeadMapperEx; + @Resource + private DepotHeadMapperEx depotHeadMapperEx; + + public Person getPerson(long id)throws Exception { + Person result=null; + try{ + result=personMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getPersonListByIds(String ids)throws Exception { + List idList = StringUtil.strToLongList(ids); + List list = new ArrayList<>(); + try{ + PersonExample example = new PersonExample(); + example.createCriteria().andIdIn(idList); + list = personMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getPerson()throws Exception { + PersonExample example = new PersonExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=personMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String name, String type, int offset, int rows)throws Exception { + List list=null; + try{ + list=personMapperEx.selectByConditionPerson(name, type, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long countPerson(String name, String type)throws Exception { + Long result=null; + try{ + result=personMapperEx.countsByPerson(name, type); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertPerson(JSONObject obj, HttpServletRequest request)throws Exception { + Person person = JSONObject.parseObject(obj.toJSONString(), Person.class); + int result=0; + try{ + result=personMapper.insertSelective(person); + logService.insertLog("经手人", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(person.getName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updatePerson(JSONObject obj, HttpServletRequest request)throws Exception { + Person person = JSONObject.parseObject(obj.toJSONString(), Person.class); + int result=0; + try{ + result=personMapper.updateByPrimaryKeySelective(person); + logService.insertLog("经手人", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(person.getName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deletePerson(Long id, HttpServletRequest request)throws Exception { + return batchDeletePersonByIds(id.toString()); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeletePerson(String ids, HttpServletRequest request) throws Exception{ + return batchDeletePersonByIds(ids); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeletePersonByIds(String ids)throws Exception { + int result =0; + String [] idArray=ids.split(","); + //校验财务主表 jsh_accounthead + List accountHeadList =null; + try{ + accountHeadList=accountHeadMapperEx.getAccountHeadListByHandsPersonIds(idArray); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if(accountHeadList!=null&&accountHeadList.size()>0){ + logger.error("异常码[{}],异常提示[{}],参数,HandsPersonIds[{}]", + ExceptionConstants.DELETE_FORCE_CONFIRM_CODE,ExceptionConstants.DELETE_FORCE_CONFIRM_MSG,ids); + throw new BusinessRunTimeException(ExceptionConstants.DELETE_FORCE_CONFIRM_CODE, + ExceptionConstants.DELETE_FORCE_CONFIRM_MSG); + } + //校验单据主表 jsh_depot_head + List depotHeadList =null; + try{ + depotHeadList=depotHeadMapperEx.getDepotHeadListByCreator(idArray); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if(depotHeadList!=null&&depotHeadList.size()>0){ + logger.error("异常码[{}],异常提示[{}],参数,HandsPersonIds[{}]", + ExceptionConstants.DELETE_FORCE_CONFIRM_CODE,ExceptionConstants.DELETE_FORCE_CONFIRM_MSG,ids); + throw new BusinessRunTimeException(ExceptionConstants.DELETE_FORCE_CONFIRM_CODE, + ExceptionConstants.DELETE_FORCE_CONFIRM_MSG); + } + //记录日志 + StringBuffer sb = new StringBuffer(); + sb.append(BusinessConstants.LOG_OPERATION_TYPE_DELETE); + List list = getPersonListByIds(ids); + for(Person person: list){ + sb.append("[").append(person.getName()).append("]"); + } + logService.insertLog("经手人", sb.toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + //删除经手人 + try{ + result=personMapperEx.batchDeletePersonByIds(idArray); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int checkIsNameExist(Long id, String name) throws Exception{ + PersonExample example = new PersonExample(); + example.createCriteria().andIdNotEqualTo(id).andNameEqualTo(name).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list =null; + try{ + list=personMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + + public String getPersonByIds(String personIDs)throws Exception { + List ids = StringUtil.strToLongList(personIDs); + PersonExample example = new PersonExample(); + example.createCriteria().andIdIn(ids).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + example.setOrderByClause("id asc"); + List list =null; + try{ + list=personMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + StringBuffer sb = new StringBuffer(); + if (null != list) { + for (Person person : list) { + sb.append(person.getName() + " "); + } + } + return sb.toString(); + } + + public List getPersonByType(String type)throws Exception { + PersonExample example = new PersonExample(); + example.createCriteria().andTypeEqualTo(type).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + example.setOrderByClause("id asc"); + List list =null; + try{ + list=personMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/platformConfig/PlatformConfigComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/platformConfig/PlatformConfigComponent.java new file mode 100644 index 000000000..b74d3e9af --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/platformConfig/PlatformConfigComponent.java @@ -0,0 +1,70 @@ +package com.jsh.erp.service.platformConfig; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "platformConfig_component") +@PlatformConfigResource +public class PlatformConfigComponent implements ICommonQuery { + + @Resource + private PlatformConfigService platformConfigService; + + @Override + public Object selectOne(Long id) throws Exception { + return platformConfigService.getPlatformConfig(id); + } + + @Override + public List select(Map map)throws Exception { + return getPlatformConfigList(map); + } + + private List getPlatformConfigList(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String key = StringUtil.getInfo(search, "key"); + return platformConfigService.select(key, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String key = StringUtil.getInfo(search, "key"); + return platformConfigService.countPlatformConfig(key); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return platformConfigService.insertSystemConfig(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return platformConfigService.updateSystemConfig(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return platformConfigService.deleteSystemConfig(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return platformConfigService.batchDeleteSystemConfig(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return 0; + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/platformConfig/PlatformConfigResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/platformConfig/PlatformConfigResource.java new file mode 100644 index 000000000..85322830a --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/platformConfig/PlatformConfigResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.platformConfig; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2020-10-16 22:26:27 + */ +@ResourceInfo(value = "platformConfig") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface PlatformConfigResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/platformConfig/PlatformConfigService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/platformConfig/PlatformConfigService.java new file mode 100644 index 000000000..31aa9e8d9 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/platformConfig/PlatformConfigService.java @@ -0,0 +1,148 @@ +package com.jsh.erp.service.platformConfig; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.datasource.entities.PlatformConfig; +import com.jsh.erp.datasource.entities.PlatformConfigExample; +import com.jsh.erp.datasource.mappers.PlatformConfigMapper; +import com.jsh.erp.datasource.mappers.PlatformConfigMapperEx; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +@Service +public class PlatformConfigService { + private Logger logger = LoggerFactory.getLogger(PlatformConfigService.class); + + @Resource + private PlatformConfigMapper platformConfigMapper; + + @Resource + private PlatformConfigMapperEx platformConfigMapperEx; + + public PlatformConfig getPlatformConfig(long id)throws Exception { + PlatformConfig result=null; + try{ + result=platformConfigMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getPlatformConfig()throws Exception { + PlatformConfigExample example = new PlatformConfigExample(); + example.createCriteria(); + List list=null; + try{ + list=platformConfigMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String key, int offset, int rows)throws Exception { + List list=null; + try{ + list=platformConfigMapperEx.selectByConditionPlatformConfig(key, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long countPlatformConfig(String key)throws Exception { + Long result=null; + try{ + result=platformConfigMapperEx.countsByPlatformConfig(key); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertSystemConfig(JSONObject obj, HttpServletRequest request) throws Exception{ + PlatformConfig platformConfig = JSONObject.parseObject(obj.toJSONString(), PlatformConfig.class); + int result=0; + try{ + result=platformConfigMapper.insertSelective(platformConfig); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateSystemConfig(JSONObject obj, HttpServletRequest request) throws Exception{ + PlatformConfig platformConfig = JSONObject.parseObject(obj.toJSONString(), PlatformConfig.class); + int result=0; + try{ + result = platformConfigMapper.updateByPrimaryKeySelective(platformConfig); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteSystemConfig(Long id, HttpServletRequest request)throws Exception { + int result=0; + try{ + result=platformConfigMapper.deleteByPrimaryKey(id); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteSystemConfig(String ids, HttpServletRequest request)throws Exception { + List idList = StringUtil.strToLongList(ids); + PlatformConfigExample example = new PlatformConfigExample(); + example.createCriteria().andIdIn(idList); + int result=0; + try{ + result=platformConfigMapper.deleteByExample(example); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int updatePlatformConfigByKey(String platformKey, String platformValue)throws Exception { + int result=0; + try{ + PlatformConfig platformConfig = new PlatformConfig(); + platformConfig.setPlatformValue(platformValue); + PlatformConfigExample example = new PlatformConfigExample(); + example.createCriteria().andPlatformKeyEqualTo(platformKey); + result = platformConfigMapper.updateByExampleSelective(platformConfig, example); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public PlatformConfig getPlatformConfigByKey(String platformKey)throws Exception { + PlatformConfig platformConfig = new PlatformConfig(); + try{ + PlatformConfigExample example = new PlatformConfigExample(); + example.createCriteria().andPlatformKeyEqualTo(platformKey); + List list=platformConfigMapper.selectByExample(example); + if(list!=null && list.size()>0){ + platformConfig = list.get(0); + } + }catch(Exception e){ + JshException.readFail(logger, e); + } + return platformConfig; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/redis/RedisService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/redis/RedisService.java new file mode 100644 index 000000000..a11bdd866 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/redis/RedisService.java @@ -0,0 +1,98 @@ +package com.jsh.erp.service.redis; + +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.utils.StringUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.concurrent.TimeUnit; + +/** + * Description + * + * @author jisheng hua + * @Date: 2021/1/28 18:10 + */ +@Component +public class RedisService { + + @Resource + public RedisTemplate redisTemplate; + + public static final String ACCESS_TOKEN = "X-Access-Token"; + + @Autowired(required = false) + public void setRedisTemplate(RedisTemplate redisTemplate) { + RedisSerializer stringSerializer = new StringRedisSerializer(); + redisTemplate.setKeySerializer(stringSerializer); + redisTemplate.setValueSerializer(stringSerializer); + redisTemplate.setHashKeySerializer(stringSerializer); + redisTemplate.setHashValueSerializer(stringSerializer); + this.redisTemplate = redisTemplate; + } + + /** + * @author jisheng hua + * description: + * 从session中获取信息 + *@date: 2021/1/28 18:10 + * @Param: request + * @Param: key + * @return Object + */ + public Object getObjectFromSessionByKey(HttpServletRequest request, String key){ + Object obj=null; + if(request==null){ + return null; + } + String token = request.getHeader(ACCESS_TOKEN); + if(token!=null) { + //开启redis,用户数据放在redis中,从redis中获取 + if(redisTemplate.opsForHash().hasKey(token,key)){ + //redis中存在,拿出来使用 + obj=redisTemplate.opsForHash().get(token,key); + redisTemplate.expire(token, BusinessConstants.MAX_SESSION_IN_SECONDS, TimeUnit.SECONDS); + } + } + return obj; + } + /** + * @author jisheng hua + * description: + * 将信息放入session或者redis中 + *@date: 2021/1/28 18:10 + * @Param: request + * @Param: key + * @Param: obj + * @return + */ + public void storageObjectBySession(String token, String key, Object obj) { + //开启redis,用户数据放到redis中 + redisTemplate.opsForHash().put(token, key, obj.toString()); + redisTemplate.expire(token, BusinessConstants.MAX_SESSION_IN_SECONDS, TimeUnit.SECONDS); + } + /** + * @author jisheng hua + * description: + * 将信息从session或者redis中移除 + *@date: 2021/1/28 18:10 + * @Param: request + * @Param: key + * @Param: obj + * @return + */ + public void deleteObjectBySession(HttpServletRequest request, String key){ + if(request!=null){ + String token = request.getHeader(ACCESS_TOKEN); + if(StringUtil.isNotEmpty(token)){ + //开启redis,用户数据放在redis中,从redis中删除 + redisTemplate.opsForHash().delete(token, key); + } + } + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/role/RoleComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/role/RoleComponent.java new file mode 100644 index 000000000..6db85c7cc --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/role/RoleComponent.java @@ -0,0 +1,70 @@ +package com.jsh.erp.service.role; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "role_component") +@RoleResource +public class RoleComponent implements ICommonQuery { + + @Resource + private RoleService roleService; + + @Override + public Object selectOne(Long id) throws Exception { + return roleService.getRole(id); + } + + @Override + public List select(Map map)throws Exception { + return getRoleList(map); + } + + private List getRoleList(Map map) throws Exception{ + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + return roleService.select(name, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map) throws Exception{ + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + return roleService.countRole(name); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return roleService.insertRole(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return roleService.updateRole(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return roleService.deleteRole(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return roleService.batchDeleteRole(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return roleService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/role/RoleResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/role/RoleResource.java new file mode 100644 index 000000000..050bf0e1d --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/role/RoleResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.role; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "role") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface RoleResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/role/RoleService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/role/RoleService.java new file mode 100644 index 000000000..14ef78b3c --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/role/RoleService.java @@ -0,0 +1,186 @@ +package com.jsh.erp.service.role; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.Role; +import com.jsh.erp.datasource.entities.RoleExample; +import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.mappers.RoleMapper; +import com.jsh.erp.datasource.mappers.RoleMapperEx; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Service +public class RoleService { + private Logger logger = LoggerFactory.getLogger(RoleService.class); + @Resource + private RoleMapper roleMapper; + + @Resource + private RoleMapperEx roleMapperEx; + @Resource + private LogService logService; + @Resource + private UserService userService; + + public Role getRole(long id)throws Exception { + Role result=null; + try{ + result=roleMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getRoleListByIds(String ids)throws Exception { + List idList = StringUtil.strToLongList(ids); + List list = new ArrayList<>(); + try{ + RoleExample example = new RoleExample(); + example.createCriteria().andIdIn(idList); + list = roleMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getRole()throws Exception { + RoleExample example = new RoleExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=roleMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String name, int offset, int rows)throws Exception { + List list=null; + try{ + list=roleMapperEx.selectByConditionRole(name, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long countRole(String name)throws Exception { + Long result=null; + try{ + result=roleMapperEx.countsByRole(name); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertRole(JSONObject obj, HttpServletRequest request)throws Exception { + Role role = JSONObject.parseObject(obj.toJSONString(), Role.class); + int result=0; + try{ + result=roleMapper.insertSelective(role); + logService.insertLog("角色", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(role.getName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateRole(JSONObject obj, HttpServletRequest request) throws Exception{ + Role role = JSONObject.parseObject(obj.toJSONString(), Role.class); + int result=0; + try{ + result=roleMapper.updateByPrimaryKeySelective(role); + logService.insertLog("角色", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(role.getName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteRole(Long id, HttpServletRequest request)throws Exception { + return batchDeleteRoleByIds(id.toString()); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteRole(String ids, HttpServletRequest request) throws Exception{ + return batchDeleteRoleByIds(ids); + } + + public int checkIsNameExist(Long id, String name) throws Exception{ + RoleExample example = new RoleExample(); + example.createCriteria().andIdNotEqualTo(id).andNameEqualTo(name).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list =null; + try{ + list=roleMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + + public List findUserRole()throws Exception{ + RoleExample example = new RoleExample(); + example.setOrderByClause("Id"); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=roleMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + /** + * create by: qiankunpingtai + * 逻辑删除角色信息 + * create time: 2019/3/28 15:44 + * @Param: ids + * @return int + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteRoleByIds(String ids) throws Exception{ + StringBuffer sb = new StringBuffer(); + sb.append(BusinessConstants.LOG_OPERATION_TYPE_DELETE); + List list = getRoleListByIds(ids); + for(Role role: list){ + sb.append("[").append(role.getName()).append("]"); + } + logService.insertLog("角色", sb.toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + User userInfo=userService.getCurrentUser(); + String [] idArray=ids.split(","); + int result=0; + try{ + result=roleMapperEx.batchDeleteRoleByIds(new Date(),userInfo==null?null:userInfo.getId(),idArray); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/sequence/SequenceComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/sequence/SequenceComponent.java new file mode 100644 index 000000000..85abd740b --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/sequence/SequenceComponent.java @@ -0,0 +1,74 @@ +package com.jsh.erp.service.sequence; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +/** + * Description + * + * @Author: jishenghua + * @Date: 2021/3/16 16:33 + */ +@Service(value = "sequence_component") +@SequenceResource +public class SequenceComponent implements ICommonQuery { + @Resource + private SequenceService sequenceService; + + @Override + public Object selectOne(Long id) throws Exception { + return sequenceService.getSequence(id); + } + + @Override + public List select(Map map)throws Exception { + return getSequenceList(map); + } + + private List getSequenceList(Map map) throws Exception{ + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + return sequenceService.select(name,QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + return sequenceService.countSequence(name); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return sequenceService.insertSequence(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return sequenceService.updateSequence(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return sequenceService.deleteSequence(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return sequenceService.batchDeleteSequence(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name) throws Exception{ + return sequenceService.checkIsNameExist(id, name); + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/sequence/SequenceResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/sequence/SequenceResource.java new file mode 100644 index 000000000..21e62c419 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/sequence/SequenceResource.java @@ -0,0 +1,18 @@ +package com.jsh.erp.service.sequence; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * Description + * + * @Author: jishenghua + * @Date: 2021/3/16 16:33 + */ +@ResourceInfo(value = "sequence") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface SequenceResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/sequence/SequenceService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/sequence/SequenceService.java new file mode 100644 index 000000000..fbfdb75c7 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/sequence/SequenceService.java @@ -0,0 +1,100 @@ +package com.jsh.erp.service.sequence; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.mappers.*; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * Description + * + * @Author: jishenghua + * @Date: 2021/3/16 16:33 + */ +@Service +public class SequenceService { + private Logger logger = LoggerFactory.getLogger(SequenceService.class); + + @Resource + private SequenceMapperEx sequenceMapperEx; + + public SerialNumber getSequence(long id)throws Exception { + return null; + } + + public List select(String name, Integer offset, Integer rows)throws Exception { + return null; + } + + public Long countSequence(String name)throws Exception { + return null; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertSequence(JSONObject obj, HttpServletRequest request)throws Exception { + return 0; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateSequence(JSONObject obj, HttpServletRequest request) throws Exception{ + return 0; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteSequence(Long id, HttpServletRequest request)throws Exception { + return 0; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteSequence(String ids, HttpServletRequest request)throws Exception { + return 0; + } + + public int checkIsNameExist(Long id, String serialNumber)throws Exception { + return 0; + } + + /** + * 创建一个唯一的序列号 + * */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public String buildOnlyNumber()throws Exception{ + Long buildOnlyNumber=null; + synchronized (this){ + try{ + sequenceMapperEx.updateBuildOnlyNumber(); //编号+1 + buildOnlyNumber= sequenceMapperEx.getBuildOnlyNumber(BusinessConstants.DEPOT_NUMBER_SEQ); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + } + if(buildOnlyNumber select(Map map)throws Exception { + return getSerialNumberList(map); + } + + private List getSerialNumberList(Map map) throws Exception{ + String search = map.get(Constants.SEARCH); + String serialNumber = StringUtil.getInfo(search, "serialNumber"); + String materialName = StringUtil.getInfo(search, "materialName"); + return serialNumberService.select(serialNumber,materialName,QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String serialNumber = StringUtil.getInfo(search, "serialNumber"); + String materialName = StringUtil.getInfo(search, "materialName"); + return serialNumberService.countSerialNumber(serialNumber, materialName); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return serialNumberService.insertSerialNumber(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return serialNumberService.updateSerialNumber(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return serialNumberService.deleteSerialNumber(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return serialNumberService.batchDeleteSerialNumber(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String serialNumber) throws Exception{ + return serialNumberService.checkIsNameExist(id, serialNumber); + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/serialNumber/SerialNumberResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/serialNumber/SerialNumberResource.java new file mode 100644 index 000000000..210df4150 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/serialNumber/SerialNumberResource.java @@ -0,0 +1,18 @@ +package com.jsh.erp.service.serialNumber; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * Description + * + * @Author: jishenghua + * @Date: 2019/1/21 16:33 + */ +@ResourceInfo(value = "serialNumber") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface SerialNumberResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/serialNumber/SerialNumberService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/serialNumber/SerialNumberService.java new file mode 100644 index 000000000..a6b0c8826 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/serialNumber/SerialNumberService.java @@ -0,0 +1,461 @@ +package com.jsh.erp.service.serialNumber; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.mappers.*; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.depotItem.DepotItemService; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.material.MaterialService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/1/21 16:33 + */ +@Service +public class SerialNumberService { + private Logger logger = LoggerFactory.getLogger(SerialNumberService.class); + + @Resource + private SerialNumberMapper serialNumberMapper; + @Resource + private SerialNumberMapperEx serialNumberMapperEx; + @Resource + private MaterialMapperEx materialMapperEx; + @Resource + private MaterialMapper materialMapper; + @Resource + private MaterialService materialService; + @Resource + private UserService userService; + @Resource + private LogService logService; + + + public SerialNumber getSerialNumber(long id)throws Exception { + SerialNumber result=null; + try{ + result=serialNumberMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getSerialNumberListByIds(String ids)throws Exception { + List idList = StringUtil.strToLongList(ids); + List list = new ArrayList<>(); + try{ + SerialNumberExample example = new SerialNumberExample(); + example.createCriteria().andIdIn(idList); + list = serialNumberMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getSerialNumber()throws Exception { + SerialNumberExample example = new SerialNumberExample(); + List list=null; + try{ + list=serialNumberMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String serialNumber, String materialName, Integer offset, Integer rows)throws Exception { + List list=null; + try{ + list=serialNumberMapperEx.selectByConditionSerialNumber(serialNumber, materialName,offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + + } + + public Long countSerialNumber(String serialNumber,String materialName)throws Exception { + Long result=null; + try{ + result=serialNumberMapperEx.countSerialNumber(serialNumber, materialName); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertSerialNumber(JSONObject obj, HttpServletRequest request)throws Exception { + int result=0; + try{ + SerialNumberEx serialNumberEx = JSONObject.parseObject(obj.toJSONString(), SerialNumberEx.class); + /**处理商品id*/ + serialNumberEx.setMaterialId(getSerialNumberMaterialIdByBarCode(serialNumberEx.getMaterialCode())); + //删除标记,默认未删除 + serialNumberEx.setDeleteFlag(BusinessConstants.DELETE_FLAG_EXISTS); + //已卖出,默认未否 + serialNumberEx.setIsSell(BusinessConstants.IS_SELL_HOLD); + Date date=new Date(); + serialNumberEx.setCreateTime(date); + serialNumberEx.setUpdateTime(date); + User userInfo=userService.getCurrentUser(); + serialNumberEx.setCreator(userInfo==null?null:userInfo.getId()); + serialNumberEx.setUpdater(userInfo==null?null:userInfo.getId()); + result = serialNumberMapperEx.addSerialNumber(serialNumberEx); + logService.insertLog("序列号",BusinessConstants.LOG_OPERATION_TYPE_ADD, + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateSerialNumber(JSONObject obj, HttpServletRequest request) throws Exception{ + SerialNumberEx serialNumberEx = JSONObject.parseObject(obj.toJSONString(), SerialNumberEx.class); + int result=0; + try{ + serialNumberEx.setMaterialId(getSerialNumberMaterialIdByBarCode(serialNumberEx.getMaterialCode())); + Date date=new Date(); + serialNumberEx.setUpdateTime(date); + User userInfo=userService.getCurrentUser(); + serialNumberEx.setUpdater(userInfo==null?null:userInfo.getId()); + result = serialNumberMapperEx.updateSerialNumber(serialNumberEx); + logService.insertLog("序列号", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(serialNumberEx.getId()).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteSerialNumber(Long id, HttpServletRequest request)throws Exception { + return batchDeleteSerialNumberByIds(id.toString()); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteSerialNumber(String ids, HttpServletRequest request)throws Exception { + return batchDeleteSerialNumberByIds(ids); + } + + /** + * create by: qiankunpingtai + * 逻辑删除序列号信息 + * create time: 2019/3/27 17:43 + * @Param: ids + * @return + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteSerialNumberByIds(String ids) throws Exception{ + StringBuffer sb = new StringBuffer(); + sb.append(BusinessConstants.LOG_OPERATION_TYPE_DELETE); + List list = getSerialNumberListByIds(ids); + for(SerialNumber serialNumber: list){ + sb.append("[").append(serialNumber.getSerialNumber()).append("]"); + } + logService.insertLog("序列号", sb.toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + User userInfo=userService.getCurrentUser(); + String [] idArray=ids.split(","); + int result=0; + try{ + result = serialNumberMapperEx.batchDeleteSerialNumberByIds(new Date(),userInfo==null?null:userInfo.getId(),idArray); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int checkIsNameExist(Long id, String serialNumber)throws Exception { + SerialNumberExample example = new SerialNumberExample(); + example.createCriteria().andIdNotEqualTo(id).andSerialNumberEqualTo(serialNumber).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=serialNumberMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + + public List findById(Long id)throws Exception{ + List list=null; + try{ + list=serialNumberMapperEx.findById(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public void checkIsExist(Long id, String materialName, String serialNumber) throws Exception{ + /** + * 商品名称不为空时,检查商品名称是否存在 + * */ + if(StringUtil.isNotEmpty(materialName)){ + List mlist=null; + try{ + mlist = materialMapperEx.findByMaterialName(materialName); + }catch(Exception e){ + JshException.readFail(logger, e); + } + + if(mlist==null||mlist.size()<1){ + //商品名称不存在 + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_EXISTS_CODE, + ExceptionConstants.MATERIAL_NOT_EXISTS_MSG); + }else if(mlist.size()>1){ + //商品信息不唯一 + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_ONLY_CODE, + ExceptionConstants.MATERIAL_NOT_ONLY_MSG); + + } + } + /*** + * 判断序列号是否已存在 + * */ + List list=null; + try{ + list = serialNumberMapperEx.findBySerialNumber(serialNumber); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if(list!=null&&list.size()>0){ + if(list.size()>1){ + //存在多个同名序列号 + throw new BusinessRunTimeException(ExceptionConstants.SERIAL_NUMBERE_ALREADY_EXISTS_CODE, + ExceptionConstants.SERIAL_NUMBERE_ALREADY_EXISTS_MSG); + }else{ + //存在一个序列号 + if(id==null){ + //新增,存在要添加的序列号 + throw new BusinessRunTimeException(ExceptionConstants.SERIAL_NUMBERE_ALREADY_EXISTS_CODE, + ExceptionConstants.SERIAL_NUMBERE_ALREADY_EXISTS_MSG); + } + if(id.equals(list.get(0).getId())){ + //修改的是同一条数据 + }else{ + //存在一条不同的序列号信息 + throw new BusinessRunTimeException(ExceptionConstants.SERIAL_NUMBERE_ALREADY_EXISTS_CODE, + ExceptionConstants.SERIAL_NUMBERE_ALREADY_EXISTS_MSG); + } + } + + } + } + /** + * create by: cjl + * description: + * 根据商品名称判断商品名称是否有效 + * create time: 2019/1/23 17:04 + * @Param: materialName + * @return Long 满足使用条件的商品的id + */ + public Long checkMaterialName(String materialName)throws Exception{ + if(StringUtil.isNotEmpty(materialName)) { + List mlist=null; + try{ + mlist = materialMapperEx.findByMaterialName(materialName); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if (mlist == null || mlist.size() < 1) { + //商品名称不存在 + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_EXISTS_CODE, + ExceptionConstants.MATERIAL_NOT_EXISTS_MSG); + } + if (mlist.size() > 1) { + //商品信息不唯一 + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_ONLY_CODE, + ExceptionConstants.MATERIAL_NOT_ONLY_MSG); + + } + //获得唯一商品 + if (BusinessConstants.ENABLE_SERIAL_NUMBER_NOT_ENABLED.equals(mlist.get(0).getEnableSerialNumber())) { + //商品未开启序列号 + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_ENABLE_SERIAL_NUMBER_CODE, + ExceptionConstants.MATERIAL_NOT_ENABLE_SERIAL_NUMBER_MSG); + } + return mlist.get(0).getId(); + } + return null; + } + /** + * create by: cjl + * description: + * 根据商品名称判断给商品添加序列号是否可行 + * 1、根据商品名称必须查询到唯一的商品 + * 2、该商品必须已经启用序列号 + * 3、该商品已绑定序列号数量小于商品现有库存 + * 2019-02-01 + * 用商品的库存去限制序列号的添加有点不合乎道理,去掉此限制 + * create time: 2019/1/23 17:04 + * @Param: materialName + * @return Long 满足使用条件的商品的id + */ + public Long getSerialNumberMaterialIdByBarCode(String materialCode)throws Exception{ + if(StringUtil.isNotEmpty(materialCode)){ + //计算商品库存和目前占用的可用序列号数量关系 + //库存=入库-出库 + //入库数量 + Long materialId = 0L; + List list = materialService.getMaterialByBarCode(materialCode); + if(list!=null && list.size()>0) { + materialId = list.get(0).getId(); + } + return materialId; + } + return null; + } + + /** + * create by: cjl + * description: + * 出库时判断序列号库存是否足够, + * 同时将对应的序列号绑定单据 + * create time: 2019/1/24 16:24 + * @Param: List + * @return void + */ + public void checkAndUpdateSerialNumber(DepotItem depotItem,User userInfo) throws Exception{ + if(depotItem!=null){ + //查询商品下已分配的可用序列号数量 + int SerialNumberSum= serialNumberMapperEx.countSerialNumberByMaterialIdAndDepotheadId(depotItem.getMaterialId(),null,BusinessConstants.IS_SELL_HOLD); + //BasicNumber=OperNumber*ratio + if((depotItem.getBasicNumber()==null?0:depotItem.getBasicNumber()).intValue()>SerialNumberSum){ + //获取商品名称 + Material material= materialMapper.selectByPrimaryKey(depotItem.getMaterialId()); + throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_CODE, + String.format(ExceptionConstants.MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_MSG,material==null?"":material.getName())); + } + //商品下序列号充足,分配序列号 + sellSerialNumber(depotItem.getMaterialId(),depotItem.getHeaderId(),(depotItem.getBasicNumber()==null?0:depotItem.getBasicNumber()).intValue(),userInfo); + } + } + /** + * + * + * */ + /** + * create by: cjl + * description: + * 卖出序列号 + * create time: 2019/1/25 9:17 + * @Param: materialId +  * @Param: depotheadId +  * @Param: isSell 卖出'1' +  * @Param: Count 卖出或者赎回的数量 + * @return com.jsh.erp.datasource.entities.SerialNumberEx + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int sellSerialNumber(Long materialId, Long depotHeadId,int count,User user) throws Exception{ + int result=0; + try{ + result = serialNumberMapperEx.sellSerialNumber(materialId,depotHeadId,count,new Date(),user==null?null:user.getId()); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + /** + * create by: cjl + * description: + * 赎回序列号 + * create time: 2019/1/25 9:17 + * @Param: materialId +  * @Param: depotheadId +  * @Param: isSell 赎回'0' +  * @Param: Count 卖出或者赎回的数量 + * @return com.jsh.erp.datasource.entities.SerialNumberEx + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int cancelSerialNumber(Long materialId, Long depotHeadId,int count,User user) throws Exception{ + int result=0; + try{ + result = serialNumberMapperEx.cancelSerialNumber(materialId,depotHeadId,count,new Date(),user==null?null:user.getId()); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + /** + * create by: cjl + * description: + *批量添加序列号,最多500个 + * create time: 2019/1/29 15:11 + * @Param: materialName + * @Param: serialNumberPrefix + * @Param: batAddTotal + * @Param: remark + * @return java.lang.Object + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batAddSerialNumber(String materialCode, String serialNumberPrefix, Integer batAddTotal, String remark)throws Exception { + int result=0; + try { + if (StringUtil.isNotEmpty(materialCode)) { + //查询商品id + Long materialId = getSerialNumberMaterialIdByBarCode(materialCode); + List list = null; + //当前用户 + User userInfo = userService.getCurrentUser(); + Long userId = userInfo == null ? null : userInfo.getId(); + Date date = null; + Long million = null; + synchronized (this) { + date = new Date(); + million = date.getTime(); + } + int insertNum = 0; + StringBuffer prefixBuf = new StringBuffer(serialNumberPrefix).append(million); + list = new ArrayList(); + int forNum = BusinessConstants.BATCH_INSERT_MAX_NUMBER >= batAddTotal ? batAddTotal : BusinessConstants.BATCH_INSERT_MAX_NUMBER; + for (int i = 0; i < forNum; i++) { + insertNum++; + SerialNumberEx each = new SerialNumberEx(); + each.setMaterialId(materialId); + each.setCreator(userId); + each.setCreateTime(date); + each.setUpdater(userId); + each.setUpdateTime(date); + each.setRemark(remark); + each.setSerialNumber(new StringBuffer(prefixBuf.toString()).append(insertNum).toString()); + list.add(each); + } + result = serialNumberMapperEx.batAddSerialNumber(list); + logService.insertLog("序列号", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_BATCH_ADD).append(batAddTotal).append(BusinessConstants.LOG_DATA_UNIT).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + } + } catch (Exception e) { + JshException.writeFail(logger, e); + } + return result; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/supplier/SupplierComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/supplier/SupplierComponent.java new file mode 100644 index 000000000..1201c5db3 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/supplier/SupplierComponent.java @@ -0,0 +1,79 @@ +package com.jsh.erp.service.supplier; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.service.depot.DepotResource; +import com.jsh.erp.service.depot.DepotService; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "supplier_component") +@SupplierResource +public class SupplierComponent implements ICommonQuery { + + @Resource + private SupplierService supplierService; + + @Override + public Object selectOne(Long id) throws Exception { + return supplierService.getSupplier(id); + } + + @Override + public List select(Map map)throws Exception { + return getSupplierList(map); + } + + private List getSupplierList(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String supplier = StringUtil.getInfo(search, "supplier"); + String type = StringUtil.getInfo(search, "type"); + String phonenum = StringUtil.getInfo(search, "phonenum"); + String telephone = StringUtil.getInfo(search, "telephone"); + String order = QueryUtils.order(map); + return supplierService.select(supplier, type, phonenum, telephone, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String supplier = StringUtil.getInfo(search, "supplier"); + String type = StringUtil.getInfo(search, "type"); + String phonenum = StringUtil.getInfo(search, "phonenum"); + String telephone = StringUtil.getInfo(search, "telephone"); + return supplierService.countSupplier(supplier, type, phonenum, telephone); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return supplierService.insertSupplier(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return supplierService.updateSupplier(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return supplierService.deleteSupplier(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return supplierService.batchDeleteSupplier(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return supplierService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/supplier/SupplierResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/supplier/SupplierResource.java new file mode 100644 index 000000000..03f06d40a --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/supplier/SupplierResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.supplier; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "supplier") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface SupplierResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/supplier/SupplierService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/supplier/SupplierService.java new file mode 100644 index 000000000..8f9a41778 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/supplier/SupplierService.java @@ -0,0 +1,390 @@ +package com.jsh.erp.service.supplier; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.mappers.AccountHeadMapperEx; +import com.jsh.erp.datasource.mappers.DepotHeadMapperEx; +import com.jsh.erp.datasource.mappers.SupplierMapper; +import com.jsh.erp.datasource.mappers.SupplierMapperEx; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.accountHead.AccountHeadService; +import com.jsh.erp.service.depotHead.DepotHeadService; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.BaseResponseInfo; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.util.*; + +import static com.jsh.erp.utils.Tools.getNow3; + +@Service +public class SupplierService { + private Logger logger = LoggerFactory.getLogger(SupplierService.class); + + @Resource + private SupplierMapper supplierMapper; + + @Resource + private SupplierMapperEx supplierMapperEx; + @Resource + private LogService logService; + @Resource + private UserService userService; + @Resource + private AccountHeadMapperEx accountHeadMapperEx; + @Resource + private DepotHeadMapperEx depotHeadMapperEx; + @Resource + private DepotHeadService depotHeadService; + @Resource + private AccountHeadService accountHeadService; + + public Supplier getSupplier(long id)throws Exception { + Supplier result=null; + try{ + result=supplierMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getSupplierListByIds(String ids)throws Exception { + List idList = StringUtil.strToLongList(ids); + List list = new ArrayList<>(); + try{ + SupplierExample example = new SupplierExample(); + example.createCriteria().andIdIn(idList); + list = supplierMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getSupplier()throws Exception { + SupplierExample example = new SupplierExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=supplierMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String supplier, String type, String phonenum, String telephone, int offset, int rows) throws Exception{ + List resList = new ArrayList(); + try{ + List list = supplierMapperEx.selectByConditionSupplier(supplier, type, phonenum, telephone, offset, rows); + for(Supplier s : list) { + Integer supplierId = s.getId().intValue(); + String endTime = getNow3(); + String supType = null; + if(("客户").equals(s.getType())) { + supType = "customer"; + } else if(("供应商").equals(s.getType())) { + supType = "vendor"; + } + BigDecimal sum = BigDecimal.ZERO; + BigDecimal beginNeedGet = s.getBeginNeedGet(); + if(beginNeedGet==null) { + beginNeedGet = BigDecimal.ZERO; + } + BigDecimal beginNeedPay = s.getBeginNeedPay(); + if(beginNeedPay==null) { + beginNeedPay = BigDecimal.ZERO; + } + sum = sum.add(depotHeadService.findTotalPay(supplierId, endTime, supType)); + sum = sum.add(accountHeadService.findTotalPay(supplierId, endTime, supType)); + if(("客户").equals(s.getType())) { + sum = sum.add(beginNeedGet).subtract(beginNeedPay); + s.setAllNeedGet(sum); + s.setAllNeedPay(BigDecimal.ZERO); + } else if(("供应商").equals(s.getType())) { + sum = sum.add(beginNeedPay).subtract(beginNeedGet); + s.setAllNeedGet(BigDecimal.ZERO); + s.setAllNeedPay(sum); + } + resList.add(s); + } + }catch(Exception e){ + JshException.readFail(logger, e); + } + return resList; + } + + public Long countSupplier(String supplier, String type, String phonenum, String telephone) throws Exception{ + Long result=null; + try{ + result=supplierMapperEx.countsBySupplier(supplier, type, phonenum, telephone); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertSupplier(JSONObject obj, HttpServletRequest request)throws Exception { + Supplier supplier = JSONObject.parseObject(obj.toJSONString(), Supplier.class); + int result=0; + try{ + supplier.setEnabled(true); + result=supplierMapper.insertSelective(supplier); + logService.insertLog("商家", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(supplier.getSupplier()).toString(),request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateSupplier(JSONObject obj, HttpServletRequest request)throws Exception { + Supplier supplier = JSONObject.parseObject(obj.toJSONString(), Supplier.class); + if(supplier.getBeginNeedPay() == null) { + supplier.setBeginNeedPay(BigDecimal.ZERO); + } + if(supplier.getBeginNeedGet() == null) { + supplier.setBeginNeedGet(BigDecimal.ZERO); + } + int result=0; + try{ + result=supplierMapper.updateByPrimaryKeySelective(supplier); + logService.insertLog("商家", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(supplier.getSupplier()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteSupplier(Long id, HttpServletRequest request)throws Exception { + return batchDeleteSupplierByIds(id.toString()); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteSupplier(String ids, HttpServletRequest request) throws Exception{ + return batchDeleteSupplierByIds(ids); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteSupplierByIds(String ids)throws Exception { + int result=0; + String [] idArray=ids.split(","); + //校验财务主表 jsh_accounthead + List accountHeadList=null; + try{ + accountHeadList = accountHeadMapperEx.getAccountHeadListByOrganIds(idArray); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if(accountHeadList!=null&&accountHeadList.size()>0){ + logger.error("异常码[{}],异常提示[{}],参数,OrganIds[{}]", + ExceptionConstants.DELETE_FORCE_CONFIRM_CODE,ExceptionConstants.DELETE_FORCE_CONFIRM_MSG,ids); + throw new BusinessRunTimeException(ExceptionConstants.DELETE_FORCE_CONFIRM_CODE, + ExceptionConstants.DELETE_FORCE_CONFIRM_MSG); + } + //校验单据主表 jsh_depot_head + List depotHeadList=null; + try{ + depotHeadList = depotHeadMapperEx.getDepotHeadListByOrganIds(idArray); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if(depotHeadList!=null&&depotHeadList.size()>0){ + logger.error("异常码[{}],异常提示[{}],参数,OrganIds[{}]", + ExceptionConstants.DELETE_FORCE_CONFIRM_CODE,ExceptionConstants.DELETE_FORCE_CONFIRM_MSG,ids); + throw new BusinessRunTimeException(ExceptionConstants.DELETE_FORCE_CONFIRM_CODE, + ExceptionConstants.DELETE_FORCE_CONFIRM_MSG); + } + //记录日志 + StringBuffer sb = new StringBuffer(); + sb.append(BusinessConstants.LOG_OPERATION_TYPE_DELETE); + List list = getSupplierListByIds(ids); + for(Supplier supplier: list){ + sb.append("[").append(supplier.getSupplier()).append("]"); + } + logService.insertLog("商家", sb.toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + User userInfo=userService.getCurrentUser(); + //校验通过执行删除操作 + try{ + result = supplierMapperEx.batchDeleteSupplierByIds(new Date(),userInfo==null?null:userInfo.getId(),idArray); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int checkIsNameExist(Long id, String name)throws Exception { + SupplierExample example = new SupplierExample(); + example.createCriteria().andIdNotEqualTo(id).andSupplierEqualTo(name).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list= supplierMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateAdvanceIn(Long supplierId, BigDecimal advanceIn)throws Exception{ + logService.insertLog("商家", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(supplierId).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + Supplier supplier=null; + try{ + supplier = supplierMapper.selectByPrimaryKey(supplierId); + }catch(Exception e){ + JshException.readFail(logger, e); + } + int result=0; + try{ + if(supplier!=null){ + supplier.setAdvanceIn(supplier.getAdvanceIn().add(advanceIn)); //增加预收款的金额,可能增加的是负值 + result=supplierMapper.updateByPrimaryKeySelective(supplier); + } + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public List findBySelectCus()throws Exception { + SupplierExample example = new SupplierExample(); + example.createCriteria().andTypeLike("客户").andEnabledEqualTo(true).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + example.setOrderByClause("id desc"); + List list=null; + try{ + list = supplierMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List findBySelectSup()throws Exception { + SupplierExample example = new SupplierExample(); + example.createCriteria().andTypeLike("供应商").andEnabledEqualTo(true) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + example.setOrderByClause("id desc"); + List list=null; + try{ + list = supplierMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List findBySelectRetail()throws Exception { + SupplierExample example = new SupplierExample(); + example.createCriteria().andTypeLike("会员").andEnabledEqualTo(true) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + example.setOrderByClause("id desc"); + List list=null; + try{ + list = supplierMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List findById(Long supplierId)throws Exception { + SupplierExample example = new SupplierExample(); + example.createCriteria().andIdEqualTo(supplierId) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + example.setOrderByClause("id desc"); + List list=null; + try{ + list = supplierMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchSetStatus(Boolean status, String ids)throws Exception { + logService.insertLog("商家", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(ids).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + List supplierIds = StringUtil.strToLongList(ids); + Supplier supplier = new Supplier(); + supplier.setEnabled(status); + SupplierExample example = new SupplierExample(); + example.createCriteria().andIdIn(supplierIds); + int result=0; + try{ + result = supplierMapper.updateByExampleSelective(supplier, example); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public List findUserCustomer()throws Exception{ + SupplierExample example = new SupplierExample(); + example.createCriteria().andTypeEqualTo("客户") + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + example.setOrderByClause("id desc"); + List list=null; + try{ + list = supplierMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List findByAll(String supplier, String type, String phonenum, String telephone) throws Exception{ + List list=null; + try{ + list = supplierMapperEx.findByAll(supplier, type, phonenum, telephone); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public BaseResponseInfo importExcel(List mList) throws Exception { + logService.insertLog("商家", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_IMPORT).append(mList.size()).append(BusinessConstants.LOG_DATA_UNIT).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + BaseResponseInfo info = new BaseResponseInfo(); + Map data = new HashMap(); + try { + for(Supplier s: mList) { + supplierMapper.insertSelective(s); + } + info.code = 200; + data.put("message", "成功"); + } catch (Exception e) { + e.printStackTrace(); + info.code = 500; + data.put("message", e.getMessage()); + } + info.data = data; + return info; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/systemConfig/SystemConfigComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/systemConfig/SystemConfigComponent.java new file mode 100644 index 000000000..9da7ee44e --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/systemConfig/SystemConfigComponent.java @@ -0,0 +1,73 @@ +package com.jsh.erp.service.systemConfig; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.service.systemConfig.SystemConfigResource; +import com.jsh.erp.service.systemConfig.SystemConfigService; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "systemConfig_component") +@SystemConfigResource +public class SystemConfigComponent implements ICommonQuery { + + @Resource + private SystemConfigService systemConfigService; + + @Override + public Object selectOne(Long id) throws Exception { + return systemConfigService.getSystemConfig(id); + } + + @Override + public List select(Map map)throws Exception { + return getSystemConfigList(map); + } + + private List getSystemConfigList(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String companyName = StringUtil.getInfo(search, "companyName"); + String order = QueryUtils.order(map); + return systemConfigService.select(companyName, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String companyName = StringUtil.getInfo(search, "companyName"); + return systemConfigService.countSystemConfig(companyName); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return systemConfigService.insertSystemConfig(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return systemConfigService.updateSystemConfig(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return systemConfigService.deleteSystemConfig(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return systemConfigService.batchDeleteSystemConfig(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return systemConfigService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/systemConfig/SystemConfigResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/systemConfig/SystemConfigResource.java new file mode 100644 index 000000000..b3720fb2b --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/systemConfig/SystemConfigResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.systemConfig; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "systemConfig") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface SystemConfigResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/systemConfig/SystemConfigService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/systemConfig/SystemConfigService.java new file mode 100644 index 000000000..fb1e81214 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/systemConfig/SystemConfigService.java @@ -0,0 +1,208 @@ +package com.jsh.erp.service.systemConfig; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.Supplier; +import com.jsh.erp.datasource.entities.SystemConfig; +import com.jsh.erp.datasource.entities.SystemConfigExample; +import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.mappers.SystemConfigMapper; +import com.jsh.erp.datasource.mappers.SystemConfigMapperEx; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.Date; +import java.util.List; + +@Service +public class SystemConfigService { + private Logger logger = LoggerFactory.getLogger(SystemConfigService.class); + + @Resource + private SystemConfigMapper systemConfigMapper; + + @Resource + private SystemConfigMapperEx systemConfigMapperEx; + @Resource + private UserService userService; + @Resource + private LogService logService; + + public SystemConfig getSystemConfig(long id)throws Exception { + SystemConfig result=null; + try{ + result=systemConfigMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getSystemConfig()throws Exception { + SystemConfigExample example = new SystemConfigExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=systemConfigMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + public List select(String companyName, int offset, int rows)throws Exception { + List list=null; + try{ + list=systemConfigMapperEx.selectByConditionSystemConfig(companyName, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long countSystemConfig(String companyName)throws Exception { + Long result=null; + try{ + result=systemConfigMapperEx.countsBySystemConfig(companyName); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertSystemConfig(JSONObject obj, HttpServletRequest request) throws Exception{ + SystemConfig systemConfig = JSONObject.parseObject(obj.toJSONString(), SystemConfig.class); + int result=0; + try{ + if(userService.checkIsTestUser()) { + result=-1; + } else { + result=systemConfigMapper.insertSelective(systemConfig); + logService.insertLog("系统配置", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(systemConfig.getCompanyName()).toString(), request); + } + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateSystemConfig(JSONObject obj, HttpServletRequest request) throws Exception{ + SystemConfig systemConfig = JSONObject.parseObject(obj.toJSONString(), SystemConfig.class); + int result=0; + try{ + if(userService.checkIsTestUser()) { + result=-1; + } else { + result = systemConfigMapper.updateByPrimaryKeySelective(systemConfig); + logService.insertLog("系统配置", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(systemConfig.getCompanyName()).toString(), request); + } + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteSystemConfig(Long id, HttpServletRequest request)throws Exception { + return batchDeleteSystemConfigByIds(id.toString()); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteSystemConfig(String ids, HttpServletRequest request)throws Exception { + return batchDeleteSystemConfigByIds(ids); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteSystemConfigByIds(String ids)throws Exception { + logService.insertLog("系统配置", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_DELETE).append(ids).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + User userInfo=userService.getCurrentUser(); + String [] idArray=ids.split(","); + int result=0; + try{ + result=systemConfigMapperEx.batchDeleteSystemConfigByIds(new Date(),userInfo==null?null:userInfo.getId(),idArray); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int checkIsNameExist(Long id, String name) throws Exception{ + SystemConfigExample example = new SystemConfigExample(); + example.createCriteria().andIdNotEqualTo(id).andCompanyNameEqualTo(name).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list =null; + try{ + list=systemConfigMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + + /** + * 获取仓库开关 + * @return + * @throws Exception + */ + public boolean getDepotFlag() throws Exception { + boolean depotFlag = false; + List list = getSystemConfig(); + if(list.size()>0) { + String flag = list.get(0).getDepotFlag(); + if(("1").equals(flag)) { + depotFlag = true; + } + } + return depotFlag; + } + + /** + * 获取客户开关 + * @return + * @throws Exception + */ + public boolean getCustomerFlag() throws Exception { + boolean customerFlag = false; + List list = getSystemConfig(); + if(list.size()>0) { + String flag = list.get(0).getCustomerFlag(); + if(("1").equals(flag)) { + customerFlag = true; + } + } + return customerFlag; + } + + /** + * 获取负库存开关 + * @return + * @throws Exception + */ + public boolean getMinusStockFlag() throws Exception { + boolean minusStockFlag = false; + List list = getSystemConfig(); + if(list.size()>0) { + String flag = list.get(0).getMinusStockFlag(); + if(("1").equals(flag)) { + minusStockFlag = true; + } + } + return minusStockFlag; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/tenant/TenantComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/tenant/TenantComponent.java new file mode 100644 index 000000000..7b3f0d722 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/tenant/TenantComponent.java @@ -0,0 +1,72 @@ +package com.jsh.erp.service.tenant; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.service.user.UserResource; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "tenant_component") +@TenantResource +public class TenantComponent implements ICommonQuery { + + @Resource + private TenantService tenantService; + + @Override + public Object selectOne(Long id) throws Exception { + return tenantService.getTenant(id); + } + + @Override + public List select(Map map)throws Exception { + return getTenantList(map); + } + + private List getTenantList(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String loginName = StringUtil.getInfo(search, "loginName"); + return tenantService.select(loginName, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String loginName = StringUtil.getInfo(search, "loginName"); + return tenantService.countTenant(loginName); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return tenantService.insertTenant(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return tenantService.updateTenant(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return tenantService.deleteTenant(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return tenantService.batchDeleteTenant(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return tenantService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/tenant/TenantResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/tenant/TenantResource.java new file mode 100644 index 000000000..159e4e4bb --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/tenant/TenantResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.tenant; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2019-6-27 22:56:56 + */ +@ResourceInfo(value = "tenant") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface TenantResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/tenant/TenantService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/tenant/TenantService.java new file mode 100644 index 000000000..6406647c2 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/tenant/TenantService.java @@ -0,0 +1,153 @@ +package com.jsh.erp.service.tenant; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.mappers.TenantMapper; +import com.jsh.erp.datasource.mappers.TenantMapperEx; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.*; + +@Service +public class TenantService { + private Logger logger = LoggerFactory.getLogger(TenantService.class); + + @Resource + private TenantMapper tenantMapper; + + @Resource + private TenantMapperEx tenantMapperEx; + + @Value("${tenant.userNumLimit}") + private Integer userNumLimit; + + @Value("${tenant.billsNumLimit}") + private Integer billsNumLimit; + + + public Tenant getTenant(long id)throws Exception { + Tenant result=null; + try{ + result=tenantMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getTenant()throws Exception { + TenantExample example = new TenantExample(); + List list=null; + try{ + list=tenantMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String loginName, int offset, int rows)throws Exception { + List list=null; + try{ + list=tenantMapperEx.selectByConditionTenant(loginName, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long countTenant(String loginName)throws Exception { + Long result=null; + try{ + result=tenantMapperEx.countsByTenant(loginName); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertTenant(JSONObject obj, HttpServletRequest request)throws Exception { + Tenant tenant = JSONObject.parseObject(obj.toJSONString(), Tenant.class); + int result=0; + try{ + tenant.setUserNumLimit(userNumLimit); //默认用户限制数量 + tenant.setBillsNumLimit(billsNumLimit); //默认单据限制数量 + tenant.setCreateTime(new Date()); + result=tenantMapper.insertSelective(tenant); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateTenant(JSONObject obj, HttpServletRequest request)throws Exception { + Tenant tenant = JSONObject.parseObject(obj.toJSONString(), Tenant.class); + int result=0; + try{ + result=tenantMapper.updateByPrimaryKeySelective(tenant); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteTenant(Long id, HttpServletRequest request)throws Exception { + int result=0; + try{ + result= tenantMapper.deleteByPrimaryKey(id); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteTenant(String ids, HttpServletRequest request)throws Exception { + List idList = StringUtil.strToLongList(ids); + TenantExample example = new TenantExample(); + example.createCriteria().andIdIn(idList); + int result=0; + try{ + result= tenantMapper.deleteByExample(example); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int checkIsNameExist(Long id, String name)throws Exception { + TenantExample example = new TenantExample(); + example.createCriteria().andIdEqualTo(id); + List list=null; + try{ + list= tenantMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + + public Tenant getTenantByTenantId(long tenantId) { + Tenant tenant = new Tenant(); + TenantExample example = new TenantExample(); + example.createCriteria().andTenantIdEqualTo(tenantId); + List list = tenantMapper.selectByExample(example); + if(list.size()>0) { + tenant = list.get(0); + } + return tenant; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/unit/UnitComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/unit/UnitComponent.java new file mode 100644 index 000000000..591a5a0a4 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/unit/UnitComponent.java @@ -0,0 +1,71 @@ +package com.jsh.erp.service.unit; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "unit_component") +@UnitResource +public class UnitComponent implements ICommonQuery { + + @Resource + private UnitService unitService; + + @Override + public Object selectOne(Long id) throws Exception { + return unitService.getUnit(id); + } + + @Override + public List select(Map map)throws Exception { + return getUnitList(map); + } + + private List getUnitList(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + String order = QueryUtils.order(map); + return unitService.select(name, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String name = StringUtil.getInfo(search, "name"); + return unitService.countUnit(name); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return unitService.insertUnit(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return unitService.updateUnit(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return unitService.deleteUnit(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return unitService.batchDeleteUnit(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return unitService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/unit/UnitResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/unit/UnitResource.java new file mode 100644 index 000000000..db70e4e0c --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/unit/UnitResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.unit; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "unit") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface UnitResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/unit/UnitService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/unit/UnitService.java new file mode 100644 index 000000000..bb0d78041 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/unit/UnitService.java @@ -0,0 +1,202 @@ +package com.jsh.erp.service.unit; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.mappers.MaterialMapperEx; +import com.jsh.erp.datasource.mappers.UnitMapper; +import com.jsh.erp.datasource.mappers.UnitMapperEx; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Service +public class UnitService { + private Logger logger = LoggerFactory.getLogger(UnitService.class); + + @Resource + private UnitMapper unitMapper; + + @Resource + private UnitMapperEx unitMapperEx; + @Resource + private UserService userService; + @Resource + private LogService logService; + @Resource + private MaterialMapperEx materialMapperEx; + + public Unit getUnit(long id)throws Exception { + Unit result=null; + try{ + result=unitMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getUnitListByIds(String ids)throws Exception { + List idList = StringUtil.strToLongList(ids); + List list = new ArrayList<>(); + try{ + UnitExample example = new UnitExample(); + example.createCriteria().andIdIn(idList); + list = unitMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getUnit()throws Exception { + UnitExample example = new UnitExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=unitMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String name, int offset, int rows)throws Exception { + List list=null; + try{ + list=unitMapperEx.selectByConditionUnit(name, offset, rows); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long countUnit(String name)throws Exception { + Long result=null; + try{ + result=unitMapperEx.countsByUnit(name); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertUnit(JSONObject obj, HttpServletRequest request)throws Exception { + Unit unit = JSONObject.parseObject(obj.toJSONString(), Unit.class); + int result=0; + try{ + unit.setName(unit.getBasicUnit() + "," + unit.getOtherUnit() + "(1:" + unit.getRatio() + ")"); + result=unitMapper.insertSelective(unit); + logService.insertLog("计量单位", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(unit.getName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateUnit(JSONObject obj, HttpServletRequest request)throws Exception { + Unit unit = JSONObject.parseObject(obj.toJSONString(), Unit.class); + int result=0; + try{ + unit.setName(unit.getBasicUnit() + "," + unit.getOtherUnit() + "(1:" + unit.getRatio() + ")"); + result=unitMapper.updateByPrimaryKeySelective(unit); + logService.insertLog("计量单位", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(unit.getName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteUnit(Long id, HttpServletRequest request)throws Exception { + return batchDeleteUnitByIds(id.toString()); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteUnit(String ids, HttpServletRequest request) throws Exception{ + return batchDeleteUnitByIds(ids); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteUnitByIds(String ids)throws Exception { + int result=0; + String [] idArray=ids.split(","); + //校验产品表 jsh_material + List materialList=null; + try{ + materialList=materialMapperEx.getMaterialListByUnitIds(idArray); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if(materialList!=null&&materialList.size()>0){ + logger.error("异常码[{}],异常提示[{}],参数,UnitIds[{}]", + ExceptionConstants.DELETE_FORCE_CONFIRM_CODE,ExceptionConstants.DELETE_FORCE_CONFIRM_MSG,ids); + throw new BusinessRunTimeException(ExceptionConstants.DELETE_FORCE_CONFIRM_CODE, + ExceptionConstants.DELETE_FORCE_CONFIRM_MSG); + } + //记录日志 + StringBuffer sb = new StringBuffer(); + sb.append(BusinessConstants.LOG_OPERATION_TYPE_DELETE); + List list = getUnitListByIds(ids); + for(Unit unit: list){ + sb.append("[").append(unit.getName()).append("]"); + } + logService.insertLog("计量单位", sb.toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + User userInfo=userService.getCurrentUser(); + //校验通过执行删除操作 + try{ + result=unitMapperEx.batchDeleteUnitByIds(new Date(),userInfo==null?null:userInfo.getId(),idArray); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int checkIsNameExist(Long id, String name)throws Exception { + UnitExample example = new UnitExample(); + example.createCriteria().andIdNotEqualTo(id).andNameEqualTo(name).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=unitMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + + /** + * 根据名称获取类型 + * @param name + */ + public Long getUnitIdByName(String name){ + Long unitId = 0L; + UnitExample example = new UnitExample(); + example.createCriteria().andNameEqualTo(name).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list = unitMapper.selectByExample(example); + if(list!=null && list.size()>0) { + unitId = list.get(0).getId(); + } + return unitId; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/user/UserComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/user/UserComponent.java new file mode 100644 index 000000000..4203ac6ad --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/user/UserComponent.java @@ -0,0 +1,73 @@ +package com.jsh.erp.service.user; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.*; + +@Service(value = "user_component") +@UserResource +public class UserComponent implements ICommonQuery { + + @Resource + private UserService userService; + + @Override + public Object selectOne(Long id) throws Exception { + return userService.getUser(id); + } + + @Override + public List select(Map map)throws Exception { + return getUserList(map); + } + + private List getUserList(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String userName = StringUtil.getInfo(search, "userName"); + String loginName = StringUtil.getInfo(search, "loginName"); + String order = QueryUtils.order(map); + String filter = QueryUtils.filter(map); + return userService.select(userName, loginName, QueryUtils.offset(map), QueryUtils.rows(map)); + } + + @Override + public Long counts(Map map)throws Exception { + String search = map.get(Constants.SEARCH); + String userName = StringUtil.getInfo(search, "userName"); + String loginName = StringUtil.getInfo(search, "loginName"); + return userService.countUser(userName, loginName); + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request)throws Exception { + return userService.insertUser(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return userService.updateUser(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return userService.deleteUser(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return userService.batchDeleteUser(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return userService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/user/UserResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/user/UserResource.java new file mode 100644 index 000000000..ae36e44ae --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/user/UserResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.user; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "user") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface UserResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/user/UserService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/user/UserService.java new file mode 100644 index 000000000..5aa921a55 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/user/UserService.java @@ -0,0 +1,745 @@ +package com.jsh.erp.service.user; + +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.service.redis.RedisService; +import com.jsh.erp.service.role.RoleService; +import org.springframework.util.StringUtils; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.mappers.UserMapper; +import com.jsh.erp.datasource.mappers.UserMapperEx; +import com.jsh.erp.datasource.vo.TreeNodeEx; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.orgaUserRel.OrgaUserRelService; +import com.jsh.erp.service.tenant.TenantService; +import com.jsh.erp.service.userBusiness.UserBusinessService; +import com.jsh.erp.utils.ExceptionCodeConstants; +import com.jsh.erp.utils.StringUtil; +import com.jsh.erp.utils.Tools; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@Service +public class UserService { + private Logger logger = LoggerFactory.getLogger(UserService.class); + + private static final String TEST_USER = "jsh"; + + @Value("${demonstrate.open}") + private boolean demonstrateOpen; + + @Resource + private UserMapper userMapper; + + @Resource + private UserMapperEx userMapperEx; + @Resource + private OrgaUserRelService orgaUserRelService; + @Resource + private LogService logService; + @Resource + private UserService userService; + @Resource + private TenantService tenantService; + @Resource + private UserBusinessService userBusinessService; + @Resource + private RoleService roleService; + @Resource + private RedisService redisService; + + public User getUser(long id)throws Exception { + User result=null; + try{ + result=userMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getUserListByIds(String ids)throws Exception { + List idList = StringUtil.strToLongList(ids); + List list = new ArrayList<>(); + try{ + UserExample example = new UserExample(); + example.createCriteria().andIdIn(idList); + list = userMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getUser()throws Exception { + UserExample example = new UserExample(); + example.createCriteria().andStatusEqualTo(BusinessConstants.USER_STATUS_NORMAL); + List list=null; + try{ + list=userMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List select(String userName, String loginName, int offset, int rows)throws Exception { + List list=null; + try{ + list=userMapperEx.selectByConditionUser(userName, loginName, offset, rows); + for(UserEx ue: list){ + String userType = ""; + if(demonstrateOpen && TEST_USER.equals(ue.getLoginName())){ + userType = "演示用户"; + } else { + if (ue.getId().equals(ue.getTenantId())) { + userType = "租户"; + } else if(ue.getTenantId() == null){ + userType = "超管"; + } else { + userType = "普通"; + } + } + ue.setUserType(userType); + } + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long countUser(String userName, String loginName)throws Exception { + Long result=null; + try{ + result=userMapperEx.countsByUser(userName, loginName); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + /** + * create by: cjl + * description: + * 添加事务控制 + * create time: 2019/1/11 14:30 + * @Param: beanJson +  * @Param: request + * @return int + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertUser(JSONObject obj, HttpServletRequest request)throws Exception { + User user = JSONObject.parseObject(obj.toJSONString(), User.class); + String password = "123456"; + //因密码用MD5加密,需要对密码进行转化 + try { + password = Tools.md5Encryp(password); + user.setPassword(password); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + logger.error(">>>>>>>>>>>>>>转化MD5字符串错误 :" + e.getMessage()); + } + int result=0; + try{ + result=userMapper.insertSelective(user); + logService.insertLog("用户", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_ADD).append(user.getLoginName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + /** + * create by: cjl + * description: + * 添加事务控制 + * create time: 2019/1/11 14:31 + * @Param: beanJson +  * @Param: id + * @return int + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateUser(JSONObject obj, HttpServletRequest request) throws Exception{ + User user = JSONObject.parseObject(obj.toJSONString(), User.class); + int result=0; + try{ + result=userMapper.updateByPrimaryKeySelective(user); + logService.insertLog("用户", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(user.getLoginName()).toString(), request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + /** + * create by: cjl + * description: + * 添加事务控制 + * create time: 2019/1/11 14:32 + * @Param: user + * @return int + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateUserByObj(User user) throws Exception{ + logService.insertLog("用户", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(user.getId()).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + int result=0; + try{ + result=userMapper.updateByPrimaryKeySelective(user); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + /** + * create by: cjl + * description: + * 添加事务控制 + * create time: 2019/1/11 14:33 + * @Param: md5Pwd +  * @Param: id + * @return int + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int resetPwd(String md5Pwd, Long id) throws Exception{ + int result=0; + logService.insertLog("用户", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(id).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + User u = getUser(id); + String loginName = u.getLoginName(); + if("admin".equals(loginName)){ + logger.info("禁止重置超管密码"); + } else { + User user = new User(); + user.setId(id); + user.setPassword(md5Pwd); + try{ + result=userMapper.updateByPrimaryKeySelective(user); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteUser(Long id, HttpServletRequest request)throws Exception { + return batDeleteUser(id.toString()); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteUser(String ids, HttpServletRequest request)throws Exception { + return batDeleteUser(ids); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batDeleteUser(String ids) throws Exception{ + int result=0; + StringBuffer sb = new StringBuffer(); + sb.append(BusinessConstants.LOG_OPERATION_TYPE_DELETE); + List list = getUserListByIds(ids); + for(User user: list){ + sb.append("[").append(user.getLoginName()).append("]"); + } + logService.insertLog("用户", sb.toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + String idsArray[]=ids.split(","); + try{ + result=userMapperEx.batDeleteOrUpdateUser(idsArray,BusinessConstants.USER_STATUS_DELETE); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + if(result<1){ + logger.error("异常码[{}],异常提示[{}],参数,ids:[{}]", + ExceptionConstants.USER_DELETE_FAILED_CODE,ExceptionConstants.USER_DELETE_FAILED_MSG,ids); + throw new BusinessRunTimeException(ExceptionConstants.USER_DELETE_FAILED_CODE, + ExceptionConstants.USER_DELETE_FAILED_MSG); + } + return result; + } + + public int validateUser(String loginName, String password) throws Exception { + /**默认是可以登录的*/ + List list = null; + try { + UserExample example = new UserExample(); + example.createCriteria().andLoginNameEqualTo(loginName); + list = userMapper.selectByExample(example); + if (null != list && list.size() == 0) { + return ExceptionCodeConstants.UserExceptionCode.USER_NOT_EXIST; + } else if(list.size() ==1) { + if(list.get(0).getStatus()!=0) { + return ExceptionCodeConstants.UserExceptionCode.BLACK_USER; + } + } + } catch (Exception e) { + logger.error(">>>>>>>>访问验证用户姓名是否存在后台信息异常", e); + return ExceptionCodeConstants.UserExceptionCode.USER_ACCESS_EXCEPTION; + } + try { + UserExample example = new UserExample(); + example.createCriteria().andLoginNameEqualTo(loginName).andPasswordEqualTo(password) + .andStatusEqualTo(BusinessConstants.USER_STATUS_NORMAL); + list = userMapper.selectByExample(example); + if (null != list && list.size() == 0) { + return ExceptionCodeConstants.UserExceptionCode.USER_PASSWORD_ERROR; + } + } catch (Exception e) { + logger.error(">>>>>>>>>>访问验证用户密码后台信息异常", e); + return ExceptionCodeConstants.UserExceptionCode.USER_ACCESS_EXCEPTION; + } + return ExceptionCodeConstants.UserExceptionCode.USER_CONDITION_FIT; + } + + public User getUserByLoginName(String loginName)throws Exception { + UserExample example = new UserExample(); + example.createCriteria().andLoginNameEqualTo(loginName).andStatusEqualTo(BusinessConstants.USER_STATUS_NORMAL); + List list=null; + try{ + list= userMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + User user =null; + if(list!=null&&list.size()>0){ + user = list.get(0); + } + return user; + } + + public int checkIsNameExist(Long id, String name)throws Exception { + UserExample example = new UserExample(); + List userStatus=new ArrayList(); + userStatus.add(BusinessConstants.USER_STATUS_DELETE); + userStatus.add(BusinessConstants.USER_STATUS_BANNED); + example.createCriteria().andIdNotEqualTo(id).andLoginNameEqualTo(name).andStatusNotIn(userStatus); + List list=null; + try{ + list= userMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list==null?0:list.size(); + } + /** + * create by: cjl + * description: + * 获取当前用户信息 + * create time: 2019/1/24 10:01 + * @Param: + * @return com.jsh.erp.datasource.entities.User + */ + public User getCurrentUser()throws Exception{ + HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); + Long userId = Long.parseLong(redisService.getObjectFromSessionByKey(request,"userId").toString()); + return getUser(userId); + } + + /** + * 检查当前用户是否是演示用户 + * @return + */ + public Boolean checkIsTestUser() throws Exception{ + Boolean result = false; + try { + if (demonstrateOpen) { + User user = getCurrentUser(); + if (TEST_USER.equals(user.getLoginName())) { + result = true; + } + } + } catch (Exception e) { + JshException.readFail(logger, e); + } + return result; + } + + /** + * 根据用户名查询id + * @param loginName + * @return + */ + public Long getIdByLoginName(String loginName) { + Long userId = 0L; + UserExample example = new UserExample(); + example.createCriteria().andLoginNameEqualTo(loginName).andStatusEqualTo(BusinessConstants.USER_STATUS_NORMAL); + List list = userMapper.selectByExample(example); + if(list!=null) { + userId = list.get(0).getId(); + } + return userId; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public void addUserAndOrgUserRel(UserEx ue) throws Exception{ + if(BusinessConstants.DEFAULT_MANAGER.equals(ue.getLoginName())) { + throw new BusinessRunTimeException(ExceptionConstants.USER_NAME_LIMIT_USE_CODE, + ExceptionConstants.USER_NAME_LIMIT_USE_MSG); + } else { + logService.insertLog("用户", + BusinessConstants.LOG_OPERATION_TYPE_ADD, + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + //检查用户名和登录名 + checkUserNameAndLoginName(ue); + //新增用户信息 + ue= this.addUser(ue); + if(ue==null){ + logger.error("异常码[{}],异常提示[{}],参数,[{}]", + ExceptionConstants.USER_ADD_FAILED_CODE,ExceptionConstants.USER_ADD_FAILED_MSG); + throw new BusinessRunTimeException(ExceptionConstants.USER_ADD_FAILED_CODE, + ExceptionConstants.USER_ADD_FAILED_MSG); + } + //用户id,根据用户名查询id + Long userId = getIdByLoginName(ue.getLoginName()); + if(ue.getRoleId()!=null){ + JSONObject ubObj = new JSONObject(); + ubObj.put("type", "UserRole"); + ubObj.put("keyid", userId); + ubObj.put("value", "[" + ue.getRoleId() + "]"); + userBusinessService.insertUserBusiness(ubObj, null); + } + if(ue.getOrgaId()==null){ + //如果没有选择机构,就不建机构和用户的关联关系 + return; + } + //新增用户和机构关联关系 + OrgaUserRel oul=new OrgaUserRel(); + //机构id + oul.setOrgaId(ue.getOrgaId()); + oul.setUserId(userId); + //用户在机构中的排序 + oul.setUserBlngOrgaDsplSeq(ue.getUserBlngOrgaDsplSeq()); + oul=orgaUserRelService.addOrgaUserRel(oul); + if(oul==null){ + logger.error("异常码[{}],异常提示[{}],参数,[{}]", + ExceptionConstants.ORGA_USER_REL_ADD_FAILED_CODE,ExceptionConstants.ORGA_USER_REL_ADD_FAILED_MSG); + throw new BusinessRunTimeException(ExceptionConstants.ORGA_USER_REL_ADD_FAILED_CODE, + ExceptionConstants.ORGA_USER_REL_ADD_FAILED_MSG); + } + } + } + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public UserEx addUser(UserEx ue) throws Exception{ + /** + * 新增用户默认设置 + * 1、密码默认123456 + * 2是否系统自带默认为非系统自带 + * 3是否管理者默认为员工 + * 4默认用户状态为正常 + * */ + ue.setPassword(Tools.md5Encryp(BusinessConstants.USER_DEFAULT_PASSWORD)); + ue.setIsystem(BusinessConstants.USER_NOT_SYSTEM); + if(ue.getIsmanager()==null){ + ue.setIsmanager(BusinessConstants.USER_NOT_MANAGER); + } + ue.setStatus(BusinessConstants.USER_STATUS_NORMAL); + int result=0; + try{ + result= userMapper.insertSelective(ue); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + if(result>0){ + return ue; + } + return null; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public UserEx registerUser(UserEx ue, Integer manageRoleId, HttpServletRequest request) throws Exception{ + /** + * create by: qiankunpingtai + * create time: 2019/4/9 18:00 + * 多次创建事务,事物之间无法协同,应该在入口处创建一个事务以做协调 + */ + if(BusinessConstants.DEFAULT_MANAGER.equals(ue.getLoginName())) { + throw new BusinessRunTimeException(ExceptionConstants.USER_NAME_LIMIT_USE_CODE, + ExceptionConstants.USER_NAME_LIMIT_USE_MSG); + } else { + ue.setPassword(Tools.md5Encryp(ue.getPassword())); + ue.setIsystem(BusinessConstants.USER_NOT_SYSTEM); + if (ue.getIsmanager() == null) { + ue.setIsmanager(BusinessConstants.USER_NOT_MANAGER); + } + ue.setStatus(BusinessConstants.USER_STATUS_NORMAL); + int result=0; + try{ + result= userMapper.insertSelective(ue); + Long userId = getIdByLoginName(ue.getLoginName()); + ue.setId(userId); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + //更新租户id + User user = new User(); + user.setId(ue.getId()); + user.setTenantId(ue.getId()); + userService.updateUserTenant(user); + //新增用户与角色的关系 + JSONObject ubObj = new JSONObject(); + ubObj.put("type", "UserRole"); + ubObj.put("keyid", ue.getId()); + JSONArray ubArr = new JSONArray(); + ubArr.add(manageRoleId); + ubObj.put("value", ubArr.toString()); + userBusinessService.insertUserBusiness(ubObj, ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + //创建租户信息 + JSONObject tenantObj = new JSONObject(); + tenantObj.put("tenantId", ue.getId()); + tenantObj.put("loginName",ue.getLoginName()); + tenantService.insertTenant(tenantObj, request); + logger.info("===============创建租户信息完成==============="); + if (result > 0) { + return ue; + } + return null; + } + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public void updateUserTenant(User user) throws Exception{ + UserExample example = new UserExample(); + example.createCriteria().andIdEqualTo(user.getId()); + try{ + userMapper.updateByPrimaryKeySelective(user); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public void updateUserAndOrgUserRel(UserEx ue) throws Exception{ + if(BusinessConstants.DEFAULT_MANAGER.equals(ue.getLoginName())) { + throw new BusinessRunTimeException(ExceptionConstants.USER_NAME_LIMIT_USE_CODE, + ExceptionConstants.USER_NAME_LIMIT_USE_MSG); + } else { + logService.insertLog("用户", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(ue.getId()).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + //检查用户名和登录名 + checkUserNameAndLoginName(ue); + //更新用户信息 + ue = this.updateUser(ue); + if (ue == null) { + logger.error("异常码[{}],异常提示[{}],参数,[{}]", + ExceptionConstants.USER_EDIT_FAILED_CODE, ExceptionConstants.USER_EDIT_FAILED_MSG); + throw new BusinessRunTimeException(ExceptionConstants.USER_EDIT_FAILED_CODE, + ExceptionConstants.USER_EDIT_FAILED_MSG); + } + if(ue.getRoleId()!=null){ + JSONObject ubObj = new JSONObject(); + ubObj.put("type", "UserRole"); + ubObj.put("keyid", ue.getId()); + ubObj.put("value", "[" + ue.getRoleId() + "]"); + Long ubId = userBusinessService.checkIsValueExist("UserRole", ue.getId().toString()); + if(ubId!=null) { + ubObj.put("id", ubId); + userBusinessService.updateUserBusiness(ubObj, null); + } else { + userBusinessService.insertUserBusiness(ubObj, null); + } + } + if (ue.getOrgaId() == null) { + //如果没有选择机构,就不建机构和用户的关联关系 + return; + } + //更新用户和机构关联关系 + OrgaUserRel oul = new OrgaUserRel(); + //机构和用户关联关系id + oul.setId(ue.getOrgaUserRelId()); + //机构id + oul.setOrgaId(ue.getOrgaId()); + //用户id + oul.setUserId(ue.getId()); + //用户在机构中的排序 + oul.setUserBlngOrgaDsplSeq(ue.getUserBlngOrgaDsplSeq()); + if (oul.getId() != null) { + //已存在机构和用户的关联关系,更新 + oul = orgaUserRelService.updateOrgaUserRel(oul); + } else { + //不存在机构和用户的关联关系,新建 + oul = orgaUserRelService.addOrgaUserRel(oul); + } + if (oul == null) { + logger.error("异常码[{}],异常提示[{}],参数,[{}]", + ExceptionConstants.ORGA_USER_REL_EDIT_FAILED_CODE, ExceptionConstants.ORGA_USER_REL_EDIT_FAILED_MSG); + throw new BusinessRunTimeException(ExceptionConstants.ORGA_USER_REL_EDIT_FAILED_CODE, + ExceptionConstants.ORGA_USER_REL_EDIT_FAILED_MSG); + } + } + } + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public UserEx updateUser(UserEx ue)throws Exception{ + int result =0; + try{ + result=userMapper.updateByPrimaryKeySelective(ue); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + if(result>0){ + return ue; + } + return null; + } + /** + * create by: cjl + * description: + * 检查用户名称和登录名不能重复 + * create time: 2019/3/12 11:36 + * @Param: userEx + * @return void + */ + public void checkUserNameAndLoginName(UserEx userEx)throws Exception{ + List list=null; + if(userEx==null){ + return; + } + Long userId=userEx.getId(); + //检查登录名 + if(!StringUtils.isEmpty(userEx.getLoginName())){ + String loginName=userEx.getLoginName(); + list=this.getUserListByloginName(loginName); + if(list!=null&&list.size()>0){ + if(list.size()>1){ + //超过一条数据存在,该登录名已存在 + logger.error("异常码[{}],异常提示[{}],参数,loginName:[{}]", + ExceptionConstants.USER_LOGIN_NAME_ALREADY_EXISTS_CODE,ExceptionConstants.USER_LOGIN_NAME_ALREADY_EXISTS_MSG,loginName); + throw new BusinessRunTimeException(ExceptionConstants.USER_LOGIN_NAME_ALREADY_EXISTS_CODE, + ExceptionConstants.USER_LOGIN_NAME_ALREADY_EXISTS_MSG); + } + //一条数据,新增时抛出异常,修改时和当前的id不同时抛出异常 + if(list.size()==1){ + if(userId==null||(userId!=null&&!userId.equals(list.get(0).getId()))){ + logger.error("异常码[{}],异常提示[{}],参数,loginName:[{}]", + ExceptionConstants.USER_LOGIN_NAME_ALREADY_EXISTS_CODE,ExceptionConstants.USER_LOGIN_NAME_ALREADY_EXISTS_MSG,loginName); + throw new BusinessRunTimeException(ExceptionConstants.USER_LOGIN_NAME_ALREADY_EXISTS_CODE, + ExceptionConstants.USER_LOGIN_NAME_ALREADY_EXISTS_MSG); + } + } + + } + } + //检查用户名 + if(!StringUtils.isEmpty(userEx.getUsername())){ + String userName=userEx.getUsername(); + list=this.getUserListByUserName(userName); + if(list!=null&&list.size()>0){ + if(list.size()>1){ + //超过一条数据存在,该用户名已存在 + logger.error("异常码[{}],异常提示[{}],参数,userName:[{}]", + ExceptionConstants.USER_USER_NAME_ALREADY_EXISTS_CODE,ExceptionConstants.USER_USER_NAME_ALREADY_EXISTS_MSG,userName); + throw new BusinessRunTimeException(ExceptionConstants.USER_USER_NAME_ALREADY_EXISTS_CODE, + ExceptionConstants.USER_USER_NAME_ALREADY_EXISTS_MSG); + } + //一条数据,新增时抛出异常,修改时和当前的id不同时抛出异常 + if(list.size()==1){ + if(userId==null||(userId!=null&&!userId.equals(list.get(0).getId()))){ + logger.error("异常码[{}],异常提示[{}],参数,userName:[{}]", + ExceptionConstants.USER_USER_NAME_ALREADY_EXISTS_CODE,ExceptionConstants.USER_USER_NAME_ALREADY_EXISTS_MSG,userName); + throw new BusinessRunTimeException(ExceptionConstants.USER_USER_NAME_ALREADY_EXISTS_CODE, + ExceptionConstants.USER_USER_NAME_ALREADY_EXISTS_MSG); + } + } + + } + } + + } + /** + * 通过用户名获取用户列表 + * */ + public List getUserListByUserName(String userName)throws Exception{ + List list =null; + try{ + list=userMapperEx.getUserListByUserNameOrLoginName(userName,null); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + /** + * 通过登录名获取用户列表 + * */ + public List getUserListByloginName(String loginName){ + List list =null; + try{ + list=userMapperEx.getUserListByUserNameOrLoginName(null,loginName); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public List getOrganizationUserTree()throws Exception { + List list =null; + try{ + list=userMapperEx.getNodeTree(); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + /** + * 根据用户id查询角色类型 + * @param userId + * @return + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public String getRoleTypeByUserId(long userId) throws Exception { + List list = userBusinessService.getBasicData(String.valueOf(userId), "UserRole"); + UserBusiness ub = null; + if(list.size() > 0) { + ub = list.get(0); + String values = ub.getValue(); + String roleId = null; + if(values!=null) { + values = values.replaceAll("\\[\\]",",").replace("[","").replace("]",""); + } + String [] valueArray=values.split(","); + if(valueArray.length>0) { + roleId = valueArray[0]; + } + Role role = roleService.getRole(Long.parseLong(roleId)); + if(role!=null) { + return role.getType(); + } else { + return null; + } + } else { + return null; + } + } + + /** + * 获取用户id + * @param request + * @return + */ + public Long getUserId(HttpServletRequest request) throws Exception{ + Object userIdObj = redisService.getObjectFromSessionByKey(request,"userId"); + Long userId = null; + if(userIdObj != null) { + userId = Long.parseLong(userIdObj.toString()); + } + return userId; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/userBusiness/UserBusinessComponent.java b/jshERP-boot/src/main/java/com/jsh/erp/service/userBusiness/UserBusinessComponent.java new file mode 100644 index 000000000..acccebcdb --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/userBusiness/UserBusinessComponent.java @@ -0,0 +1,69 @@ +package com.jsh.erp.service.userBusiness; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.service.depot.DepotResource; +import com.jsh.erp.service.depot.DepotService; +import com.jsh.erp.utils.Constants; +import com.jsh.erp.utils.QueryUtils; +import com.jsh.erp.utils.StringUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@Service(value = "userBusiness_component") +@UserBusinessResource +public class UserBusinessComponent implements ICommonQuery { + + @Resource + private UserBusinessService userBusinessService; + + @Override + public Object selectOne(Long id) throws Exception { + return userBusinessService.getUserBusiness(id); + } + + @Override + public List select(Map map)throws Exception { + return getUserBusinessList(map); + } + + private List getUserBusinessList(Map map)throws Exception { + return null; + } + + @Override + public Long counts(Map map)throws Exception { + return BusinessConstants.DEFAULT_LIST_NULL_NUMBER; + } + + @Override + public int insert(JSONObject obj, HttpServletRequest request) throws Exception { + return userBusinessService.insertUserBusiness(obj, request); + } + + @Override + public int update(JSONObject obj, HttpServletRequest request)throws Exception { + return userBusinessService.updateUserBusiness(obj, request); + } + + @Override + public int delete(Long id, HttpServletRequest request)throws Exception { + return userBusinessService.deleteUserBusiness(id, request); + } + + @Override + public int deleteBatch(String ids, HttpServletRequest request)throws Exception { + return userBusinessService.batchDeleteUserBusiness(ids, request); + } + + @Override + public int checkIsNameExist(Long id, String name)throws Exception { + return userBusinessService.checkIsNameExist(id, name); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/userBusiness/UserBusinessResource.java b/jshERP-boot/src/main/java/com/jsh/erp/service/userBusiness/UserBusinessResource.java new file mode 100644 index 000000000..7939a359e --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/userBusiness/UserBusinessResource.java @@ -0,0 +1,15 @@ +package com.jsh.erp.service.userBusiness; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +@ResourceInfo(value = "userBusiness") +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface UserBusinessResource { +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/userBusiness/UserBusinessService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/userBusiness/UserBusinessService.java new file mode 100644 index 000000000..1c31b8284 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/userBusiness/UserBusinessService.java @@ -0,0 +1,198 @@ +package com.jsh.erp.service.userBusiness; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.mappers.UserBusinessMapper; +import com.jsh.erp.datasource.mappers.UserBusinessMapperEx; +import com.jsh.erp.exception.JshException; +import com.jsh.erp.service.CommonQueryManager; +import com.jsh.erp.service.functions.FunctionService; +import com.jsh.erp.service.log.LogService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.*; + +@Service +public class UserBusinessService { + private Logger logger = LoggerFactory.getLogger(UserBusinessService.class); + + @Resource + private UserBusinessMapper userBusinessMapper; + @Resource + private UserBusinessMapperEx userBusinessMapperEx; + @Resource + private LogService logService; + @Resource + private UserService userService; + + @Resource + private FunctionService functionService; + + @Resource + private CommonQueryManager configResourceManager; + + public UserBusiness getUserBusiness(long id)throws Exception { + UserBusiness result=null; + try{ + result=userBusinessMapper.selectByPrimaryKey(id); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return result; + } + + public List getUserBusiness()throws Exception { + UserBusinessExample example = new UserBusinessExample(); + example.createCriteria().andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list=userBusinessMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertUserBusiness(JSONObject obj, HttpServletRequest request) throws Exception { + UserBusiness userBusiness = JSONObject.parseObject(obj.toJSONString(), UserBusiness.class); + int result=0; + try{ + String value = userBusiness.getValue(); + String newValue = value.replaceAll(",","\\]\\["); + userBusiness.setValue(newValue); + result=userBusinessMapper.insertSelective(userBusiness); + logService.insertLog("关联关系", BusinessConstants.LOG_OPERATION_TYPE_ADD, request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateUserBusiness(JSONObject obj, HttpServletRequest request) throws Exception { + UserBusiness userBusiness = JSONObject.parseObject(obj.toJSONString(), UserBusiness.class); + int result=0; + try{ + String value = userBusiness.getValue(); + String newValue = value.replaceAll(",","\\]\\["); + userBusiness.setValue(newValue); + result=userBusinessMapper.updateByPrimaryKeySelective(userBusiness); + logService.insertLog("关联关系", BusinessConstants.LOG_OPERATION_TYPE_EDIT, request); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteUserBusiness(Long id, HttpServletRequest request)throws Exception { + return batchDeleteUserBusinessByIds(id.toString()); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteUserBusiness(String ids, HttpServletRequest request)throws Exception { + return batchDeleteUserBusinessByIds(ids); + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteUserBusinessByIds(String ids) throws Exception{ + logService.insertLog("关联关系", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_DELETE).append(ids).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + User userInfo=userService.getCurrentUser(); + String [] idArray=ids.split(","); + int result=0; + try{ + result= userBusinessMapperEx.batchDeleteUserBusinessByIds(new Date(),userInfo==null?null:userInfo.getId(),idArray); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } + + public int checkIsNameExist(Long id, String name)throws Exception { + return 1; + } + + public List getBasicData(String keyId, String type)throws Exception{ + UserBusinessExample example = new UserBusinessExample(); + example.createCriteria().andKeyIdEqualTo(keyId).andTypeEqualTo(type) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list= userBusinessMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + return list; + } + + public Long checkIsValueExist(String type, String keyId)throws Exception { + UserBusinessExample example = new UserBusinessExample(); + example.createCriteria().andTypeEqualTo(type).andKeyIdEqualTo(keyId) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + List list=null; + try{ + list= userBusinessMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + Long id = null; + if(list!=null&&list.size() > 0) { + id = list.get(0).getId(); + } + return id; + } + + public Boolean checkIsUserBusinessExist(String TypeVale, String KeyIdValue, String UBValue)throws Exception { + UserBusinessExample example = new UserBusinessExample(); + String newVaule = "%" + UBValue + "%"; + if(TypeVale !=null && KeyIdValue !=null) { + example.createCriteria().andTypeEqualTo(TypeVale).andKeyIdEqualTo(KeyIdValue).andValueLike(newVaule) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } else { + example.createCriteria().andValueLike(newVaule) + .andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED); + } + List list=null; + try{ + list= userBusinessMapper.selectByExample(example); + }catch(Exception e){ + JshException.readFail(logger, e); + } + if(list!=null&&list.size() > 0) { + return true; + } else { + return false; + } + } + + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateBtnStr(Long userBusinessId, String btnStr) throws Exception{ + logService.insertLog("关联关系", + new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(userBusinessId).toString(), + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); + UserBusiness userBusiness = new UserBusiness(); + userBusiness.setBtnStr(btnStr); + UserBusinessExample example = new UserBusinessExample(); + example.createCriteria().andIdEqualTo(userBusinessId); + int result=0; + try{ + result= userBusinessMapper.updateByExampleSelective(userBusiness, example); + }catch(Exception e){ + JshException.writeFail(logger, e); + } + return result; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/AnnotationUtils.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/AnnotationUtils.java new file mode 100644 index 000000000..f3b5a80be --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/AnnotationUtils.java @@ -0,0 +1,28 @@ +package com.jsh.erp.utils; + +import java.lang.annotation.Annotation; +import java.lang.annotation.Documented; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +public class AnnotationUtils { + public static A getAnnotation(Class cls, Class annotationClass) { + A res = cls.getAnnotation(annotationClass); + if (res == null) { + for (Annotation annotation : cls.getAnnotations()) { + if (annotation instanceof Documented) { + break; + } + res = getAnnotation(annotation.annotationType(), annotationClass); + if (res != null) + break; + } + } + return res; + } + + public static A getAnnotation(T obj, Class annotationClass) { + return getAnnotation(obj.getClass(), annotationClass); + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/BaseResponseInfo.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/BaseResponseInfo.java new file mode 100644 index 000000000..f27deb829 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/BaseResponseInfo.java @@ -0,0 +1,11 @@ +package com.jsh.erp.utils; + +public class BaseResponseInfo { + public int code; + public Object data; + + public BaseResponseInfo() { + code = 400; + data = null; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/ColumnPropertyUtil.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/ColumnPropertyUtil.java new file mode 100644 index 000000000..f3e7ad24a --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/ColumnPropertyUtil.java @@ -0,0 +1,65 @@ +package com.jsh.erp.utils; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +public class ColumnPropertyUtil { + + /** + * 将数据库字段转换成属性 + */ + public static String columnToProperty(String column) { + StringBuilder result = new StringBuilder(); + // 快速检查 + if (StringUtil.isEmpty(column)) { + // 没必要转换 + return ""; + } else if (!column.contains("_")) { + // 不做转换 + return column; + } else { + // 用下划线将原始字符串分割 + String[] columns = column.split("_"); + for (String columnSplit : columns) { + // 跳过原始字符串中开头、结尾的下换线或双重下划线 + if (StringUtil.isEmpty(columnSplit)) { + continue; + } + // 处理真正的驼峰片段 + if (result.length() == 0) { + // 第一个驼峰片段,全部字母都小写 + result.append(columnSplit.toLowerCase()); + } else { + // 其他的驼峰片段,首字母大写 + result.append(columnSplit.substring(0, 1).toUpperCase()).append(columnSplit.substring(1).toLowerCase()); + } + } + return result.toString(); + } + + } + + + /** + * 驼峰转换下划线 + */ + public static String propertyToColumn(String property) { + if (StringUtil.isEmpty(property)) { + return ""; + } + StringBuilder column = new StringBuilder(); + column.append(property.substring(0, 1).toLowerCase()); + for (int i = 1; i < property.length(); i++) { + String s = property.substring(i, i + 1); + // 在小写字母前添加下划线 + if (!Character.isDigit(s.charAt(0)) && s.equals(s.toUpperCase())) { + column.append("_"); + } + // 其他字符直接转成小写 + column.append(s.toLowerCase()); + } + + return column.toString(); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/ComputerInfo.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/ComputerInfo.java new file mode 100644 index 000000000..4e248cf6d --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/ComputerInfo.java @@ -0,0 +1,155 @@ +package com.jsh.erp.utils; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.InetAddress; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/* + * <取网卡物理地址-- + * 1.在Windows,Linux系统下均可用; + * 2.通过ipconifg,ifconfig获得计算机信息; + * 3.再用模式匹配方式查找MAC地址,与操作系统的语言无关> + * + * //* Description: <取计算机名--从环境变量中取> + * abstract 限制继承/创建实例 + */ +public abstract class ComputerInfo { + private static String macAddressStr = null; + private static String computerName = System.getenv().get("COMPUTERNAME"); + + private static final String[] windowsCommand = { "ipconfig", "/all" }; + private static final String[] linuxCommand = { "/sbin/ifconfig", "-a" }; + private static final Pattern macPattern = Pattern.compile(".*((:?[0-9a-f]{2}[-:]){5}[0-9a-f]{2}).*", + Pattern.CASE_INSENSITIVE); + + /** + * 获取多个网卡地址 + * + * @return + * @throws IOException + */ + private final static List getMacAddressList() throws IOException { + final ArrayList macAddressList = new ArrayList(); + final String os = System.getProperty("os.name"); + final String command[]; + + if (os.startsWith("Windows")) { + command = windowsCommand; + } else if (os.startsWith("Linux")) { + command = linuxCommand; + } else { + throw new IOException("Unknow operating system:" + os); + } + // 执行命令 + final Process process = Runtime.getRuntime().exec(command); + + BufferedReader bufReader = new BufferedReader(new InputStreamReader(process.getInputStream())); + for (String line = null; (line = bufReader.readLine()) != null;) { + Matcher matcher = macPattern.matcher(line); + if (matcher.matches()) { + macAddressList.add(matcher.group(1)); + // macAddressList.add(matcher.group(1).replaceAll("[-:]", + // ""));//去掉MAC中的“-” + } + } + + process.destroy(); + bufReader.close(); + return macAddressList; + } + + /** + * 获取一个网卡地址(多个网卡时从中获取一个) + * + * @return + */ + public static String getMacAddress() { + if (macAddressStr == null || macAddressStr.equals("")) { + StringBuffer sb = new StringBuffer(); // 存放多个网卡地址用,目前只取一个非0000000000E0隧道的值 + try { + List macList = getMacAddressList(); + for (Iterator iter = macList.iterator(); iter.hasNext();) { + String amac = iter.next(); + if (!amac.equals("0000000000E0")) { + sb.append(amac); + break; + } + } + } catch (IOException e) { + e.printStackTrace(); + } + + macAddressStr = sb.toString(); + + } + + return macAddressStr; + } + + /** + * 获取电脑名 + * + * @return + */ + public static String getComputerName() { + if (computerName == null || computerName.equals("")) { + computerName = System.getenv().get("COMPUTERNAME"); + } + return computerName; + } + + /** + * 获取客户端IP地址 + * + * @return + */ + public static String getIpAddrAndName() throws IOException { + return InetAddress.getLocalHost().toString(); + } + + /** + * 获取客户端IP地址 + * + * @return + */ + public static String getIpAddr() throws IOException { + return InetAddress.getLocalHost().getHostAddress().toString(); + } + + /** + * 获取电脑唯一标识 + * + * @return + */ + public static String getComputerID() { + String id = getMacAddress(); + if (id == null || id.equals("")) { + try { + id = getIpAddrAndName(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return computerName; + } + + /** + * 限制创建实例 + */ + private ComputerInfo() { + + } + + public static void main(String[] args) throws IOException { + System.out.println(ComputerInfo.getMacAddress()); + System.out.println(ComputerInfo.getComputerName()); + System.out.println(ComputerInfo.getIpAddr()); + System.out.println(ComputerInfo.getIpAddrAndName()); + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/Constants.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/Constants.java new file mode 100644 index 000000000..28a8455ca --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/Constants.java @@ -0,0 +1,34 @@ +package com.jsh.erp.utils; + +import java.util.UUID; + +/** + * by jishenghua qq-752718920 2018-10-7 12:01:36 + */ +public class Constants { + + //查询参数 + public final static String PAGE_SIZE = "pageSize"; + public final static String CURRENT_PAGE = "currentPage"; + public final static String ORDER = "order"; + public final static String FILTER = "filter"; + public final static String SPLIT = ","; + public final static String SEARCH = "search"; + public final static String DEVICE_ID = "deviceId"; + public final static String OFFSET = "offset"; + public final static String ROWS = "rows"; + public final static String IS_RECURSION = "isRecursion"; + public final static String IS_RECURSION_VALUE = "1"; + public final static String IS_QUERYBYNODEID = "isquerybyid"; + public final static String IS_QUERYBYNODEID_VALUE = "1"; + + //级联类别 + public final static String TYPE = "type"; + + //转发 + public final static String TEAM = "team"; + + //增加了角色等级常量 + public final static String LEVEL="level"; + +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/ErpInfo.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/ErpInfo.java new file mode 100644 index 000000000..26b4c21c2 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/ErpInfo.java @@ -0,0 +1,37 @@ +package com.jsh.erp.utils; + +/** + * + */ +public enum ErpInfo { + //通过构造传递参数 + OK(200, "成功"), + BAD_REQUEST(400, "请求错误或参数错误"), + UNAUTHORIZED(401, "未认证用户"), + INVALID_VERIFY_CODE(461, "错误的验证码"), + ERROR(500, "服务内部错误"), + WARING_MSG(201, "提醒信息"), + REDIRECT(301, "session失效,重定向"), + FORWARD_REDIRECT(302, "转发请求session失效"), + FORWARD_FAILED(303, "转发请求失败!"), + TEST_USER(-1, "演示用户禁止操作"); + + public final int code; + public final String name; + + public int getCode() { + return code; + } + + public String getName() { + return name; + } + + /** + * 定义枚举构造函数 + */ + ErpInfo(int code, String name) { + this.code = code; + this.name = name; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/ExcelUtils.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/ExcelUtils.java new file mode 100644 index 000000000..4f4a5260c --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/ExcelUtils.java @@ -0,0 +1,240 @@ +package com.jsh.erp.utils; + +import java.io.File; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.springframework.util.StringUtils; +import jxl.Cell; +import jxl.Sheet; +import jxl.Workbook; +import jxl.format.*; +import jxl.write.Label; +import jxl.write.WritableCellFormat; +import jxl.write.WritableFont; +import jxl.write.WritableSheet; +import jxl.write.WritableWorkbook; + +public class ExcelUtils { + + public static WritableFont arial14font = null; + + public static File exportObjects(String fileName, String[] names, + String title, List objects) throws Exception { + File excelFile = new File("fileName.xls"); + WritableWorkbook wtwb = Workbook.createWorkbook(excelFile); + WritableSheet sheet = wtwb.createSheet(title, 0); + sheet.getSettings().setDefaultColumnWidth(20); + WritableFont wfont = new WritableFont(WritableFont.createFont("楷书"), 15); + WritableCellFormat format = new WritableCellFormat(wfont); + WritableFont wfc = new WritableFont(WritableFont.ARIAL, 20, + WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, + jxl.format.Colour.BLACK); + WritableCellFormat wcfFC = new WritableCellFormat(wfc); + wcfFC.setAlignment(Alignment.CENTRE); + wcfFC.setVerticalAlignment(VerticalAlignment.CENTRE); + // CellView cellView = new CellView(); + // cellView.setAutosize(true); //设置自动大小 + format.setAlignment(Alignment.LEFT); + format.setVerticalAlignment(VerticalAlignment.TOP); + sheet.mergeCells(0, 0, names.length - 1, 0); + sheet.addCell(new Label(0, 0, title, wcfFC)); + int rowNum = 2; + for (int i = 0; i < names.length; i++) { + sheet.addCell(new Label(i, 1, names[i], format)); + } + for (int j = 0; j < objects.size(); j++) { + String[] obj = objects.get(j); + for (int h = 0; h < obj.length; h++) { + sheet.addCell(new Label(h, rowNum, obj[h], format)); + } + rowNum = rowNum + 1; + + } + wtwb.write(); + wtwb.close(); + return excelFile; + } + + /** + * 导出excel,不需要第一行的title + * + * @param fileName + * @param names + * @param title + * @param objects + * @return + * @throws Exception + */ + public static File exportObjectsWithoutTitle(String fileName, + String[] names, String title, List objects) + throws Exception { + File excelFile = new File(fileName); + WritableWorkbook wtwb = Workbook.createWorkbook(excelFile); + WritableSheet sheet = wtwb.createSheet(title, 0); + sheet.getSettings().setDefaultColumnWidth(20); + + // 第一行的格式 + WritableFont wfc = new WritableFont(WritableFont.ARIAL, 15, + WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, + jxl.format.Colour.BLACK); + WritableCellFormat wcfFC = new WritableCellFormat(wfc); + wcfFC.setVerticalAlignment(VerticalAlignment.CENTRE); + + // 设置字体以及单元格格式 + WritableFont wfont = new WritableFont(WritableFont.createFont("楷书"), 15); + WritableCellFormat format = new WritableCellFormat(wfont); + format.setAlignment(Alignment.LEFT); + format.setVerticalAlignment(VerticalAlignment.TOP); + + // 第一行写入标题 + for (int i = 0; i < names.length; i++) { + sheet.addCell(new Label(i, 0, names[i], wcfFC)); + } + + // 其余行依次写入数据 + int rowNum = 1; + for (int j = 0; j < objects.size(); j++) { + String[] obj = objects.get(j); + for (int h = 0; h < obj.length; h++) { + sheet.addCell(new Label(h, rowNum, obj[h], format)); + } + rowNum = rowNum + 1; + } + wtwb.write(); + wtwb.close(); + return excelFile; + } + + public static String createTempFile(String[] names, String title, List objects) throws Exception { + File excelFile = File.createTempFile(System.currentTimeMillis() + "", ".xls"); + WritableWorkbook wtwb = Workbook.createWorkbook(excelFile); + WritableSheet sheet = wtwb.createSheet(title, 0); + sheet.getSettings().setDefaultColumnWidth(20); + WritableFont wfont = new WritableFont(WritableFont.createFont("楷书"), 15); + WritableCellFormat format = new WritableCellFormat(wfont); + WritableFont wfc = new WritableFont(WritableFont.ARIAL, 20, + WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, + jxl.format.Colour.BLACK); + WritableCellFormat wcfFC = new WritableCellFormat(wfc); + wcfFC.setAlignment(Alignment.CENTRE); + wcfFC.setVerticalAlignment(VerticalAlignment.CENTRE); + // CellView cellView = new CellView(); + // cellView.setAutosize(true); //设置自动大小 + format.setAlignment(Alignment.LEFT); + format.setVerticalAlignment(VerticalAlignment.TOP); + sheet.mergeCells(0, 0, names.length - 1, 0); + sheet.addCell(new Label(0, 0, title, wcfFC)); + int rowNum = 2; + for (int i = 0; i < names.length; i++) { + sheet.addCell(new Label(i, 1, names[i], format)); + } + for (int j = 0; j < objects.size(); j++) { + String[] obj = objects.get(j); + for (int h = 0; h < obj.length; h++) { + sheet.addCell(new Label(h, rowNum, obj[h], format)); + } + rowNum = rowNum + 1; + } + wtwb.write(); + wtwb.close(); + return excelFile.getName(); + } + + public static String createCheckRandomTempFile(String[] names, String title, List objects,Map infoMap) throws Exception { + File excelFile = File.createTempFile(System.currentTimeMillis() + "", ".xls"); + WritableWorkbook wtwb = Workbook.createWorkbook(excelFile); + WritableSheet sheet = wtwb.createSheet(title, 0); + sheet.getSettings().setDefaultColumnWidth(20); + WritableFont wfont = new WritableFont(WritableFont.createFont("楷书"), 14); + + WritableCellFormat format = new WritableCellFormat(wfont); + format.setBorder(Border.ALL, BorderLineStyle.THIN); + format.setAlignment(Alignment.CENTRE); + format.setVerticalAlignment(VerticalAlignment.CENTRE); + + WritableFont wfc = new WritableFont(WritableFont.ARIAL, 20, + WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, + jxl.format.Colour.BLACK); + WritableCellFormat wcfFC = new WritableCellFormat(wfc); + wcfFC.setAlignment(Alignment.LEFT); + wcfFC.setVerticalAlignment(VerticalAlignment.CENTRE); + + WritableFont nameWfc = new WritableFont(WritableFont.ARIAL, 14, + WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, + jxl.format.Colour.BLACK); + WritableCellFormat nameFormat = new WritableCellFormat(nameWfc); + nameFormat.setBorder(Border.ALL, BorderLineStyle.THIN); + nameFormat.setAlignment(Alignment.CENTRE); + nameFormat.setVerticalAlignment(VerticalAlignment.CENTRE); + + WritableCellFormat infoFormat = new WritableCellFormat(wfont); + infoFormat.setAlignment(Alignment.LEFT); + infoFormat.setVerticalAlignment(VerticalAlignment.CENTRE); + + + sheet.mergeCells(0, 0, names.length - 1, 0); + sheet.addCell(new Label(0, 0, infoMap.get("title"), wcfFC)); + + sheet.addCell(new Label(0, 2, infoMap.get("info"), infoFormat)); + sheet.addCell(new Label(2, 2, infoMap.get("dvrnvr"), infoFormat)); + sheet.addCell(new Label(4, 2, infoMap.get("char"), infoFormat)); + sheet.addCell(new Label(0, 3, infoMap.get("infoPercent"), infoFormat)); + sheet.addCell(new Label(2, 3, infoMap.get("dvrnvrPercent"), infoFormat)); + sheet.addCell(new Label(4, 3, infoMap.get("charPercent"), infoFormat)); + + int rowNum = 5; + for (int i = 0; i < names.length; i++) { + sheet.addCell(new Label(i, 4, names[i], nameFormat)); + } + for (int j = 0; j < objects.size(); j++) { + String[] obj = objects.get(j); + for (int h = 0; h < obj.length; h++) { + sheet.addCell(new Label(h, rowNum, obj[h], format)); + } + rowNum = rowNum + 1; + } + wtwb.write(); + wtwb.close(); + return excelFile.getName(); + } + + + + public static String getContent(Sheet src, int rowNum, int colNum) { + return src.getRow(rowNum)[colNum].getContents().trim(); + } + + /** + * 从第i行开始到最后检测指定列的唯一性 + * + * @param src + * @param colNum + * @param fromRow + * 起始行 + * @return + */ + public static Boolean checkUnique(Sheet src, int colNum, int fromRow) { + Cell[] colCells = src.getColumn(colNum); + Set set = new HashSet(); + for (int i = fromRow; i < colCells.length; i++) { + if (!StringUtils.isEmpty(colCells[i].getContents()) + && !set.add(colCells[i].getContents())) { + return false; + } + } + return true; + } + + public static File getTempFile(String fileName) { + String dir = System.getProperty("java.io.tmpdir"); // 获取系统临时目录 + return new File(dir + File.separator + fileName); + } + + public static void main(String[] args) throws Exception { + String msg = "12345"; + System.out.println(msg.indexOf("@")); + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/ExceptionCodeConstants.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/ExceptionCodeConstants.java new file mode 100644 index 000000000..9c235d8ce --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/ExceptionCodeConstants.java @@ -0,0 +1,33 @@ +package com.jsh.erp.utils; + +public interface ExceptionCodeConstants { + /** + * 用户错误码定义 + */ + public class UserExceptionCode { + /** + * 用户不存在 + */ + public static final int USER_NOT_EXIST = 1; + + /** + * 用户密码错误 + */ + public static final int USER_PASSWORD_ERROR = 2; + + /** + * 被加入黑名单 + */ + public static final int BLACK_USER = 3; + + /** + * 可以登录 + */ + public static final int USER_CONDITION_FIT = 4; + + /** + * 访问数据库异常 + */ + public static final int USER_ACCESS_EXCEPTION = 5; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/ExportExecUtil.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/ExportExecUtil.java new file mode 100644 index 000000000..69aee9e39 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/ExportExecUtil.java @@ -0,0 +1,28 @@ +package com.jsh.erp.utils; + +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.OutputStream; + +public class ExportExecUtil { + + public static void showExec(File excelFile,String fileName,HttpServletResponse response) throws Exception{ + response.setContentType("application/octet-stream"); + fileName = new String(fileName.getBytes("gbk"),"ISO8859_1"); + response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + ".xls" + "\""); + FileInputStream fis = new FileInputStream(excelFile); + OutputStream out = response.getOutputStream(); + + int SIZE = 1024 * 1024; + byte[] bytes = new byte[SIZE]; + int LENGTH = -1; + while((LENGTH = fis.read(bytes)) != -1){ + out.write(bytes,0,LENGTH); + } + + out.flush(); + fis.close(); + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/ExtJsonUtils.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/ExtJsonUtils.java new file mode 100644 index 000000000..0b61b5fe5 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/ExtJsonUtils.java @@ -0,0 +1,141 @@ +package com.jsh.erp.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.parser.ParserConfig; +import com.alibaba.fastjson.parser.deserializer.ExtraProcessor; +import com.alibaba.fastjson.parser.deserializer.FieldDeserializer; +import com.alibaba.fastjson.serializer.*; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +public class ExtJsonUtils { + private static class NPFloatCodec extends FloatCodec { + public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType) throws IOException { + SerializeWriter out = serializer.getWriter(); + + if (object == null) { + if (serializer.isEnabled(SerializerFeature.WriteNullNumberAsZero)) { + out.write('0'); + } else { + out.writeNull(); + } + return; + } + + float floatValue = (Float) object; + + if (Float.isNaN(floatValue)) { + out.writeNull(); + } else if (Float.isInfinite(floatValue)) { + out.writeNull(); + } else { + String floatText = Float.toString(floatValue); + out.write(floatText); + + if (serializer.isEnabled(SerializerFeature.WriteClassName)) { + out.write('F'); + } + } + } + } + + private static class NPDoubleSerializer extends DoubleSerializer { + public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType) throws IOException { + SerializeWriter out = serializer.getWriter(); + + if (object == null) { + if (!serializer.isEnabled(SerializerFeature.WriteNullNumberAsZero)) { + out.writeNull(); + } else { + out.write('0'); + } + return; + } + + double doubleValue = (Double) object; + + if (Double.isNaN(doubleValue)) { + out.writeNull(); + } else if (Double.isInfinite(doubleValue)) { + out.writeNull(); + } else { + String doubleText; + doubleText = Double.toString(doubleValue); + out.append(doubleText); + + if (serializer.isEnabled(SerializerFeature.WriteClassName)) { + out.write('D'); + } + } + } + } + + private static final String EXT_NAME = "ext"; + + static class ExtFilter extends AfterFilter implements PropertyFilter { + static { + SerializeConfig.getGlobalInstance().put(Float.class, new NPFloatCodec()); + SerializeConfig.getGlobalInstance().put(float.class, new NPFloatCodec()); + SerializeConfig.getGlobalInstance().put(Double.class, new NPDoubleSerializer()); + SerializeConfig.getGlobalInstance().put(double.class, new NPDoubleSerializer()); + } + + private Map map = new HashMap<>(); + + private Map> ignoredKey = new HashMap<>(); + + @Override + public boolean apply(Object object, String name, Object value) { + if (name.equals(EXT_NAME) && value instanceof String) { + map.put(object, JSON.parseObject((String) value)); + return false; + } + if (!map.containsKey(object)) { + ignoredKey.put(object, new HashSet()); + } + ignoredKey.get(object).add(name); +// if (value instanceof Float || value instanceof Double) { +// if (!floatMap.containsKey(object)) { +// floatMap.put(object, new HashMap()); +// } +// floatMap.get(object).put(name, value); +// return false; +// } + return true; + } + + @Override + public void writeAfter(Object object) { + if (map.containsKey(object)) { + Set ignoredKeys; + if (ignoredKey.containsKey(object)) { + ignoredKeys = ignoredKey.get(object); + } else { + ignoredKeys = new HashSet<>(); + } + for (Map.Entry entry : map.get(object).entrySet()) { + if (!ignoredKeys.contains(entry.getKey())) { + writeKeyValue(entry.getKey(), entry.getValue()); + } + } + } + } + } + + public static String toJSONString(Object object) { + return JSON.toJSONString(object, new ExtFilter()); + } + + public interface ExtExtractor { + String getExt(Object bean); + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/FileUtils.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/FileUtils.java new file mode 100644 index 000000000..6fed21fe0 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/FileUtils.java @@ -0,0 +1,333 @@ +package com.jsh.erp.utils; + +import org.springframework.util.StringUtils; +import java.io.*; +import java.util.*; + +/** + * + * 文件处理工具类 + * + */ +public class FileUtils { + + /** + * 功 能: 创建文件夹 + * + * @param path + * 参 数:要创建的文件夹名称 + * @return 返回值: 如果成功true;否则false 如:FileUtils.mkdir("/usr/apps/upload/"); + */ + public static boolean makedir(String path) { + File file = new File(path); + if (!file.exists()) + return file.mkdirs(); + else + return true; + } + + /** + * 保存文件 + * + * @param stream + * @param path + * 存放路径 + * @param filename + * 文件名 + * @throws IOException + */ + public static void SaveFileFromInputStream(InputStream stream, String path, String filename) + throws IOException { + File file = new File(path); + boolean flag=true; + if(!file.exists()){ + flag=file.mkdirs(); + } + if(flag){ + FileOutputStream fs = new FileOutputStream(new File(path+filename)); + byte[] buffer = new byte[1024 * 1024]; + int byteread = 0; + while ((byteread = stream.read(buffer)) != -1) { + fs.write(buffer, 0, byteread); + fs.flush(); + } + fs.close(); + stream.close(); + } + } + + + /** + * 列出某个目录下的所有文件,子目录不列出 + * @param folderPath:文件夹路径 + * @return + */ + public static List listFile(String folderPath){ + List fileList = new ArrayList(); //FileViewer.getListFiles(destPath, null, false); + File f = new File(folderPath); + File[] t = f.listFiles(); + for(int i = 0; i < t.length; i++){ + fileList.add(t[i].getAbsolutePath()); + } + return fileList; + } + + + /** + * 判断文件是否存在 + * + * @param fileName + * @return + */ + public static boolean exists(String fileName) { + File file = new File(fileName); + if (file.exists()) { + return true; + } else { + return false; + } + } + + /** + * 取当前路径 + * + * @return + */ + public static String getCurrentPath() { + File directory = new File("."); + String nowPath = ""; + try { + nowPath = directory.getCanonicalFile().toString(); + } catch (IOException e) { + e.printStackTrace(); + } + return nowPath; + } + + /** + * 获取文件扩展名 + * + * @param fileName + * @return + * */ + public static String getFileExtendName(String fileName) { + if (fileName == null) { + return ""; + } else { + return fileName.substring(fileName.lastIndexOf(".") + 1, fileName + .length()); + } + } + + /** + * 创建一个新文件,如果存在则报错 + * + * @param filePath + * @param fileName + * @return + */ + public static void createFile(String filePath, String fileName) + throws RuntimeException { + String file = null; + if (filePath == null) { + file = fileName; + } else { + file = filePath + File.separator + fileName; + } + createFile(file); + } + + /** + * 创建一个新文件(含路径),如果存在则报错 + * + * @param fileName + * 含有路径的文件名 + * @return + */ + public static void createFile(String fileName) throws RuntimeException { + File f = new File(fileName); + if (f.exists()) { + throw new RuntimeException("FILE_EXIST_ERROR"); + } else { + try { + File fileFolder = f.getParentFile(); + if (!fileFolder.exists()) + fileFolder.mkdirs(); + f.createNewFile(); + } catch (IOException ie) { + System.out.println("文件" + fileName + "创建失败:" + ie.getMessage()); + throw new RuntimeException("FILE_CREATE_ERROR"); + } + } + } + + + /** + * 创建目录,如果存在则不创建 + * + * @param path + * @return 返回结果null则创建成功,否则返回的是错误信息 + * @return + */ + public static String createDir(String path, boolean isCreateSubPah) { + String msg = null; + File dir = new File(path); + + if (dir == null) { + msg = "不能创建空目录"; + return msg; + } + if (dir.isFile()) { + msg = "已有同名文件存在"; + return msg; + } + if (!dir.exists()) { + if (isCreateSubPah && !dir.mkdirs()) { + msg = "目录创建失败,原因不明"; + } else if (!dir.mkdir()) { + msg = "目录创建失败,原因不明"; + } + } + return msg; + } + + /** + * 删除指定目录或文件。 如果要删除是目录,同时删除子目录下所有的文件 + * + * @file:File 目录 + * */ + public static void delFileOrFolder(String fileName) { + if (!exists(fileName)) + return; + File file = new File(fileName); + delFileOrFolder(file); + } + + /** + * 删除指定目录或文件。 如果要删除是目录,同时删除子目录下所有的文件 + * + * @file:File 目录 + * */ + public static void delFileOrFolder(File file) { + if (!file.exists()) + return; + if (file.isFile()) { + file.delete(); + } else { + File[] sub = file.listFiles(); + if (sub == null || sub.length <= 0) { + file.delete(); + } else { + for (int i = 0; i < sub.length; i++) { + delFileOrFolder(sub[i]); + } + file.delete(); + } + } + } + + /** + * 从Properties格式配置文件中获取所有参数并保存到HashMap中。 + * 配置中的key值即map表中的key值,如果配置文件保存时用的中文,则返回结果也会转成中文。 + * + * @param file + * @return + * @throws IOException + */ + @SuppressWarnings("unchecked") + public static HashMap readPropertyFile(String file, String charsetName) throws IOException { + if (charsetName==null || charsetName.trim().length()==0){ + charsetName="gbk"; + } + HashMap map = new HashMap(); + InputStream is =null; + if(file.startsWith("file:")) + is=new FileInputStream(new File(file.substring(5))); + else + is=FileUtils.class.getClassLoader().getResourceAsStream(file); + Properties properties = new Properties(); + properties.load(is); + Enumeration en = properties.propertyNames(); + while (en.hasMoreElements()) { + String key = (String) en.nextElement(); + String code = new String(properties.getProperty(key).getBytes( + "ISO-8859-1"), charsetName); + map.put(key, code); + } + return map; + } + /** + * + * @param path + * 文件路径 + * @param suffix + * 后缀名 + * @param isdepth + * 是否遍历子目录 + * @return + */ + @SuppressWarnings("unchecked") + public static List getListFiles(String path, String suffix, boolean isdepth) { + File file = new File(path); + return FileUtils.listFile(file, suffix, isdepth); + } + + /** + * @param f + * @param suffix:后缀名 + * @param isdepth:是否遍历子目录 + * @return + */ + @SuppressWarnings("unchecked") + public static List listFile(File f, String suffix, boolean isdepth) { + // 是目录,同时需要遍历子目录 + List fileList = new ArrayList(); + if (f.isDirectory() && isdepth == true) { + File[] t = f.listFiles(); + for (int i = 0; i < t.length; i++) { + listFile(t[i], suffix, isdepth); + } + } else { + String filePath = f.getAbsolutePath(); + + if (suffix != null) { + int begIndex = filePath.lastIndexOf(".");// 最后一个.(即后缀名前面的.)的索引 + String tempsuffix = ""; + + if (begIndex != -1)// 防止是文件但却没有后缀名结束的文件 + { + tempsuffix = filePath.substring(begIndex + 1, filePath + .length()); + } + + if (tempsuffix.equals(suffix)) { + fileList.add(filePath); + } + } else { + // 后缀名为null则为所有文件 + fileList.add(filePath); + } + + } + + return fileList; + } + + /** + * 方法追加文件:使用FileWriter + * + * @param fileName + * @param content + */ + public static void appendMethod(String fileName, String content) { + try { + // 打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件 + FileWriter writer = new FileWriter(fileName, true); + writer.write(content + "\r\n"); + writer.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/HttpClient.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/HttpClient.java new file mode 100644 index 000000000..03047d07d --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/HttpClient.java @@ -0,0 +1,88 @@ +package com.jsh.erp.utils; + +import com.alibaba.fastjson.JSONObject; +import org.apache.http.HttpEntity; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.EntityBuilder; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +import static org.apache.http.HttpStatus.SC_OK; + +public final class HttpClient { + private static Logger logger = LoggerFactory.getLogger(HttpClient.class); + + private static final RequestConfig REQUEST_CONFIG = RequestConfig.custom().setSocketTimeout(15000).setConnectTimeout(10000).build(); + + /** + * 采用Get方式发送请求,获取响应数据 + * @param url + * @return + */ + public static JSONObject httpGet(String url){ + CloseableHttpClient client = HttpClientBuilder.create().build(); + HttpGet httpGet = new HttpGet(url); + httpGet.setConfig(REQUEST_CONFIG); + try { + CloseableHttpResponse chr = client.execute(httpGet); + int statusCode = chr.getStatusLine().getStatusCode(); + if (SC_OK != statusCode) { + throw new RuntimeException(String.format("%s查询出现异常", url)); + } + String entity = EntityUtils.toString(chr.getEntity(), StandardCharsets.UTF_8); + JSONObject object = JSONObject.parseObject(entity); + return object; + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(String.format("%s", url) + "查询出现异常"); + } finally { + try { + client.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + /** + * 采用Post方式发送请求,获取响应数据 + * + * @param url url地址 + * @param param 参数值键值对的字符串 + * @return + */ + public static String httpPost(String url, String param) { + CloseableHttpClient client = HttpClientBuilder.create().build(); + try { + HttpPost post = new HttpPost(url); + EntityBuilder builder = EntityBuilder.create(); + builder.setContentType(ContentType.APPLICATION_JSON); + builder.setText(param); + post.setEntity(builder.build()); + + CloseableHttpResponse response = client.execute(post); + int statusCode = response.getStatusLine().getStatusCode(); + + HttpEntity entity = response.getEntity(); + String data = EntityUtils.toString(entity, StandardCharsets.UTF_8); + logger.info("状态:"+statusCode+"数据:"+data); + return data; + } catch(Exception e){ + throw new RuntimeException(e.getMessage()); + } finally { + try{ + client.close(); + }catch(Exception ex){ } + } + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/JsonUtils.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/JsonUtils.java new file mode 100644 index 000000000..131684cf2 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/JsonUtils.java @@ -0,0 +1,22 @@ +package com.jsh.erp.utils; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +/** + * Created by jishenghua 2018-5-11 09:48:08 + * + * @author jishenghua + */ +public class JsonUtils { + + public static JSONObject ok(){ + JSONObject obj = new JSONObject(); + JSONObject tmp = new JSONObject(); + tmp.put("message", "成功"); + obj.put("code", 200); + obj.put("data", tmp); + return obj; + } + +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/OrderUtils.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/OrderUtils.java new file mode 100644 index 000000000..38a312ca6 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/OrderUtils.java @@ -0,0 +1,69 @@ +package com.jsh.erp.utils; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +public class OrderUtils { + + /** + * 将指定字段排序 + * + * @param orders 格式 属性名,排序方式 例如( name,asc或ip,desc) + * @return 排序字符串 例如:(name asc 或 ip desc) + */ + public static String getOrderString(String orders) { + if (StringUtil.isNotEmpty(orders)) { + String[] splits = orders.split(Constants.SPLIT); + if (splits.length == 2) { + String column = ColumnPropertyUtil.propertyToColumn(splits[0]); + if (column.equals("audit_status")) { + // TODO: 2015/12/24 这么处理不好,得相伴办法调整 + return "IF(`audit_status`=3,-1,`audit_status`) " + splits[1]; + } else if (column.equals("create_time") || column.equals("modify_time")) { + // TODO: 2015/12/24 这么处理不好,得相伴办法调整 + return column + " " + splits[1]; + } else { + return "convert(" + column + " using gbk) " + splits[1]; + } + } + } + return ""; + } + + public static String getJoinTablesOrderString(String orders, String tableName) { + if (StringUtil.isNotEmpty(orders)) { + String[] splits = orders.split(Constants.SPLIT); + if (splits.length == 2) { + return "convert(" + tableName + "." + ColumnPropertyUtil.propertyToColumn(splits[0]) + " using gbk) " + splits[1]; + } + } + return ""; + } + + + /** + * 将指定字段排序 + * inet_aton:mysql将IP 转成 long类别函数 + * + * @param orders 格式 属性名,排序方式 例如( name,asc或ip,desc) + * @param ipPropertyName 如果需要按IP属性排序,需要将属性名传入(可不传) + * @return 排序字符串 例如:(name asc 或 ip desc) + */ + public static String getOrderString(String orders, String... ipPropertyName) { + if (StringUtil.isNotEmpty(orders)) { + String[] splits = orders.split(Constants.SPLIT); + if (splits.length == 2) { + String column = ColumnPropertyUtil.propertyToColumn(splits[0]); + if (ipPropertyName != null && ipPropertyName.length > 0) { + for (String ip : ipPropertyName) { + if (ip.equals(column)) { + return "inet_aton(" + column + ") " + splits[1]; + } + } + } + return column + " " + splits[1]; + } + } + return ""; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/PageQueryInfo.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/PageQueryInfo.java new file mode 100644 index 000000000..7747e009a --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/PageQueryInfo.java @@ -0,0 +1,30 @@ +package com.jsh.erp.utils; + +import java.util.List; + +/** + * 分页查询结果 + * + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +public class PageQueryInfo { + + private Long total; + private List rows; + + public Long getTotal() { + return total; + } + + public void setTotal(Long total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/ParamUtils.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/ParamUtils.java new file mode 100644 index 000000000..43c7fa689 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/ParamUtils.java @@ -0,0 +1,57 @@ +package com.jsh.erp.utils; + +import javax.servlet.http.HttpServletRequest; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +public class ParamUtils { + public static String getPageOffset(Integer currentPage, Integer pageSize) { + if (currentPage != null && pageSize != null) { + int offset = (currentPage - 1) * pageSize; + if (offset <= 0) { + return "0"; + } else { + return new StringBuffer().append(offset).toString(); + } + } + return null; + } + public static Integer getNumberPageOffset(Integer currentPage, Integer pageSize) { + if (currentPage != null && pageSize != null) { + int offset = (currentPage - 1) * pageSize; + if (offset <= 0) { + return 0; + } else { + return offset; + } + } + return null; + } + public static Integer getNumberPageRows(Integer currentPage, Integer pageSize) { + if (currentPage != null && pageSize != null) { + int rows = (currentPage) * pageSize; + if (rows <= 0) { + return 0; + } else { + return rows; + } + } + return null; + } + + public static HashMap requestToMap(HttpServletRequest request) { + + HashMap parameterMap = new HashMap(); + Enumeration names = request.getParameterNames(); + if (names != null) { + for (String name : Collections.list(names)) { + parameterMap.put(name, request.getParameter(name)); + } + } + return parameterMap; + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/QueryUtils.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/QueryUtils.java new file mode 100644 index 000000000..3d7c1cc0d --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/QueryUtils.java @@ -0,0 +1,142 @@ +package com.jsh.erp.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.springframework.util.Assert; + +import java.util.List; +import java.util.Map; + +import static com.jsh.erp.utils.Constants.CURRENT_PAGE; +import static com.jsh.erp.utils.Constants.PAGE_SIZE; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +public class QueryUtils { + public static String filterSqlSpecialChar(String search) { + return search != null ? search + .replaceAll("_", "\\\\_") + .replaceAll("!", "\\\\!") + .replaceAll("\\[", "\\\\[") + .replaceAll("\\]", "\\\\]") + .replaceAll("\\^", "\\\\^") : null; + } + + public static T list2One(List list, String label) { + Assert.notNull(label); + Assert.notEmpty(list, label + "对应的记录不存在"); + Assert.isTrue(list.size() == 1, label + "对应的记录不止一个"); + return list.get(0); + } + + public static T list2One(List list, String label, T defaultValue) { + Assert.notNull(list); + Assert.notNull(label); + if (list.isEmpty()) + return defaultValue; + else { + Assert.isTrue(list.size() == 1, label + "对应的记录不止一个"); + return list.get(0); + } + } + + public static List search(Map map) { + List search = null; + + String str = map.get(Constants.SEARCH); + if (StringUtil.isNotEmpty(str)) { + search = StringUtil.searchCondition(str); + } + return search; + } + + public static int rows(Map map) { + return Integer.parseInt(map.get(PAGE_SIZE)); + } + + public static int offset(Map map) { + return (currentPage(map) - 1) * pageSize(map); + } + + public static int pageSize(Map map) { + return Integer.parseInt(map.get(PAGE_SIZE)); + } + + public static int currentPage(Map map) { + int val = Integer.parseInt(map.get(CURRENT_PAGE)); + if (val < 1) + throw new RuntimeException("当前页数目:" + val + " 必须大于0"); + return val; + } + + public static String order(Map map) { + String orderString = OrderUtils.getOrderString(map.get(Constants.ORDER)); + return orderString.trim().isEmpty() ? null : orderString; + } + + public static Integer level(Map map) { + String levelString = map.get(Constants.LEVEL); + return StringUtil.isEmpty(levelString) ? null : Integer.parseInt(levelString); + } + + public static boolean isRecursion(Map map) { + String isRecursion = map.get(Constants.IS_RECURSION); + return StringUtil.isNotEmpty(isRecursion) && Constants.IS_RECURSION_VALUE.equals(isRecursion); + } + + public static int type(Map map) { + return Integer.parseInt(map.get(Constants.TYPE)); + } + + public static String filter(Map map) { + if (map.containsKey(Constants.FILTER)) { + JSONArray array = JSON.parseArray(map.get(Constants.FILTER)); + if (array.isEmpty()) { + return null; + } else { + boolean first = true; + StringBuilder builder = new StringBuilder(); + for (int idx = 0; idx < array.size(); ++idx) { + JSONObject object = array.getJSONObject(idx); + if (object.get("value") instanceof JSONArray) { + + JSONArray value = object.getJSONArray("value"); + + if (!value.isEmpty()) { + if (!first) { + builder.append(" AND "); + } else { + first = false; + } + + String key = object.getString("name"); + + builder.append("("); + + builder.append("`").append(key).append("`"); + + builder.append(" IN "); + + builder.append("("); + + for (int vidx = 0; vidx < value.size(); ++vidx) { + if (vidx != 0) { + builder.append(","); + } + builder.append(value.getString(vidx)); + } + builder.append(")"); + + builder.append(")"); + } + } + } + return builder.toString(); + } + } else { + return null; + } + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/RandImageUtil.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/RandImageUtil.java new file mode 100644 index 000000000..f9ffd0ca6 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/RandImageUtil.java @@ -0,0 +1,140 @@ +package com.jsh.erp.utils; + +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletResponse; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Base64; +import java.util.Random; + +/** + * 登录验证码工具类 + */ +public class RandImageUtil { + + public static final String key = "JEECG_LOGIN_KEY"; + + /** + * 定义图形大小 + */ + private static final int width = 105; + /** + * 定义图形大小 + */ + private static final int height = 35; + + /** + * 定义干扰线数量 + */ + private static final int count = 200; + + /** + * 干扰线的长度=1.414*lineWidth + */ + private static final int lineWidth = 2; + + /** + * 图片格式 + */ + private static final String IMG_FORMAT = "JPEG"; + + /** + * base64 图片前缀 + */ + private static final String BASE64_PRE = "data:image/jpg;base64,"; + + /** + * 直接通过response 返回图片 + * @param response + * @param resultCode + * @throws IOException + */ + public static void generate(HttpServletResponse response, String resultCode) throws IOException { + BufferedImage image = getImageBuffer(resultCode); + // 输出图象到页面 + ImageIO.write(image, IMG_FORMAT, response.getOutputStream()); + } + + /** + * 生成base64字符串 + * @param resultCode + * @return + * @throws IOException + */ + public static String generate(String resultCode) throws IOException { + BufferedImage image = getImageBuffer(resultCode); + + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + //写入流中 + ImageIO.write(image, IMG_FORMAT, byteStream); + //转换成字节 + byte[] bytes = byteStream.toByteArray(); + //转换成base64串 + String base64 = Base64.getEncoder().encodeToString(bytes).trim(); + base64 = base64.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\n + + //写到指定位置 + //ImageIO.write(bufferedImage, "png", new File("")); + + return BASE64_PRE+base64; + } + + private static BufferedImage getImageBuffer(String resultCode){ + // 在内存中创建图象 + final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + // 获取图形上下文 + final Graphics2D graphics = (Graphics2D) image.getGraphics(); + // 设定背景颜色 + graphics.setColor(Color.WHITE); // ---1 + graphics.fillRect(0, 0, width, height); + // 设定边框颜色 +// graphics.setColor(getRandColor(100, 200)); // ---2 + graphics.drawRect(0, 0, width - 1, height - 1); + + final Random random = new Random(); + // 随机产生干扰线,使图象中的认证码不易被其它程序探测到 + for (int i = 0; i < count; i++) { + graphics.setColor(getRandColor(150, 200)); // ---3 + + final int x = random.nextInt(width - lineWidth - 1) + 1; // 保证画在边框之内 + final int y = random.nextInt(height - lineWidth - 1) + 1; + final int xl = random.nextInt(lineWidth); + final int yl = random.nextInt(lineWidth); + graphics.drawLine(x, y, x + xl, y + yl); + } + // 取随机产生的认证码 + for (int i = 0; i < resultCode.length(); i++) { + // 将认证码显示到图象中,调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 + // graphics.setColor(new Color(20 + random.nextInt(130), 20 + random + // .nextInt(130), 20 + random.nextInt(130))); + // 设置字体颜色 + graphics.setColor(Color.BLACK); + // 设置字体样式 +// graphics.setFont(new Font("Arial Black", Font.ITALIC, 18)); + graphics.setFont(new Font("Times New Roman", Font.BOLD, 24)); + // 设置字符,字符间距,上边距 + graphics.drawString(String.valueOf(resultCode.charAt(i)), (23 * i) + 8, 26); + } + // 图象生效 + graphics.dispose(); + return image; + } + + private static Color getRandColor(int fc, int bc) { // 取得给定范围随机颜色 + final Random random = new Random(); + if (fc > 255) { + fc = 255; + } + if (bc > 255) { + bc = 255; + } + + final int r = fc + random.nextInt(bc - fc); + final int g = fc + random.nextInt(bc - fc); + final int b = fc + random.nextInt(bc - fc); + + return new Color(r, g, b); + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/RegExpTools.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/RegExpTools.java new file mode 100644 index 000000000..56d0f9a10 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/RegExpTools.java @@ -0,0 +1,154 @@ +package com.jsh.erp.utils; + +import org.springframework.util.Assert; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Adm on 2015/12/14. + * + * @author yubiao + *

+ * mysql匹配正则表达式 + */ +public class RegExpTools { + /** + * @param search 模糊匹配字符串数组 + */ + public static String regexp(List search) { + if (search == null || search.isEmpty()) + return null; + String regexp = ""; + for (String s : search) { + if (!regexp.isEmpty()) { + regexp = regexp + "|"; + } + regexp = regexp + ".*"; + regexp = regexp + s.replaceAll("\\.", "\\\\."); + regexp = regexp + ".*"; + } + return regexp; + } + + /** + * @param key json字段key + * @param search 模糊匹配字符串数组 + * json的mysql匹配正则表达式 + */ + public static String regexp(String key, List search) { + if (search == null || search.isEmpty()) + return null; + StringBuilder sb = new StringBuilder(); + for (String s : search) { + if (sb.length() == 0) { + sb.append(".*\\\"").append(key).append("\\\":\\\"[a-zA-Z0-9]*("); + } else { + sb.append("|"); + } + sb.append(s); + } + sb.append(")[a-zA-Z0-9]*\\\".*"); + return sb.toString(); + } + + public static class RegExp { + public static final String ANY = ".*"; + public static final String QUOTE = "\\\""; + public static final String LFT_PAREN = "("; + public static final String RHT_PAREN = ")"; + public static final String COLON = ":"; + public static final String OR = "|"; + + private final StringBuilder builder = new StringBuilder(); + + public RegExp any() { + builder.append(ANY); + return this; + } + + public RegExp lftParen() { + builder.append(LFT_PAREN); + return this; + } + + public RegExp rhtParen() { + builder.append(RHT_PAREN); + return this; + } + + public RegExp colon() { + builder.append(COLON); + return this; + + } + + public RegExp quote() { + builder.append(QUOTE); + return this; + } + + public RegExp quote(String str) { + Assert.notNull(str, "str为空"); + builder.append(QUOTE).append(str).append(QUOTE); + return this; + } + + public RegExp value(String str) { + Assert.notNull(str, "str为空"); + builder.append(str); + return this; + } + + public RegExp or() { + builder.append(OR); + return this; + } + + public RegExp or(List values) { + Assert.notEmpty(values, "values必须非空"); + lftParen(); + boolean first = true; + for (String value : values) { + if (first) { + builder.append(value); + first = false; + } else { + builder.append(OR).append(value); + } + } + rhtParen(); + return this; + } + + @Override + public String toString() { + return builder.toString(); + } + + public static void main(String[] args) { + List values = new ArrayList(); + + values.add("310"); + values.add(String.valueOf(2)); + values.add(String.valueOf(3)); + + RegExp exp = new RegExp(); + + exp.any(); + exp.quote("fullKbNum").colon() + .quote() + .value("[a-zA-Z0-9]*").or(values).value("[a-zA-Z0-9]*") + .quote(); + exp.or(); + exp.quote("gbId[a-f0-9-]{36}").colon() + .quote() + .value("[0-9]*").or(values).value("[0-9]*") + .quote(); + exp.any(); + + System.out.println(exp); + } + + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/ResponseCode.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/ResponseCode.java new file mode 100644 index 000000000..b7072ac68 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/ResponseCode.java @@ -0,0 +1,24 @@ +package com.jsh.erp.utils; + +import com.alibaba.fastjson.annotation.JSONCreator; +import com.alibaba.fastjson.annotation.JSONField; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +public class ResponseCode { + + public final int code; + public final Object data; + + /** + * + * @param code + * @param data + */ + @JSONCreator + public ResponseCode(@JSONField(name = "code") int code, @JSONField(name = "data")Object data) { + this.code = code; + this.data = data; + } +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/ResponseJsonUtil.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/ResponseJsonUtil.java new file mode 100644 index 000000000..2f7fee303 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/ResponseJsonUtil.java @@ -0,0 +1,83 @@ +package com.jsh.erp.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.alibaba.fastjson.serializer.ValueFilter; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.TimeZone; + +public class ResponseJsonUtil { + public static final SimpleDateFormat FORMAT = new SimpleDateFormat("yyyy-MM-dd"); + + static { + FORMAT.setTimeZone(TimeZone.getTimeZone("GMT+8")); + } + + /** + * 响应过滤器 + */ + public static final class ResponseFilter extends ExtJsonUtils.ExtFilter implements ValueFilter { + @Override + public Object process(Object object, String name, Object value) { + if (name.equals("createTime") || name.equals("modifyTime")||name.equals("updateTime")) { + return value; + } else if (value instanceof Date) { + return FORMAT.format(value); + } else { + return value; + } + } + } + + /** + * + * @param responseCode + * @return + */ + public static String backJson4HttpApi(ResponseCode responseCode) { + if (responseCode != null) { + String result = JSON.toJSONString(responseCode, new ResponseFilter(), + SerializerFeature.DisableCircularReferenceDetect, + SerializerFeature.WriteNonStringKeyAsString); + result = result.replaceFirst("\"data\":\\{", ""); + return result.substring(0, result.length() - 1); + } + return null; + } + + /** + * 验证失败的json串 + * @param code + * @return + */ + public static String backJson4VerifyFailure(int code) { + Map map = new HashMap(); + map.put("message", "未通过验证"); + return JSON.toJSONString(new ResponseCode(code, map), new ResponseFilter(), + SerializerFeature.DisableCircularReferenceDetect, + SerializerFeature.WriteNonStringKeyAsString); + } + + /** + * 成功的json串 + * @param responseCode + * @return + */ + public static String backJson(ResponseCode responseCode) { + if (responseCode != null) { + return JSON.toJSONString(responseCode, new ResponseFilter(), + SerializerFeature.DisableCircularReferenceDetect, + SerializerFeature.WriteNonStringKeyAsString); + } + return null; + } + + public static String returnJson(Map map, String message, int code) { + map.put("message", message); + return backJson(new ResponseCode(code, map)); + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/StringUtil.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/StringUtil.java new file mode 100644 index 000000000..90934d41b --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/StringUtil.java @@ -0,0 +1,257 @@ +package com.jsh.erp.utils; + +import org.springframework.util.StringUtils; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * @author jishenghua qq752718920 2018-10-7 15:26:27 + */ +public class StringUtil { + + private StringUtil() { + + } + + private static String DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss"; + + public static String filterNull(String str) { + if (str == null) { + return ""; + } else { + return str.trim(); + } + } + + public static boolean stringEquels(String source,String target) { + if(isEmpty(source)||isEmpty(target)){ + return false; + }else{ + return source.equals(target); + } + } + + public static boolean isEmpty(String str) { + return str == null || "".equals(str.trim()); + } + + public static boolean isNotEmpty(String str) { + return !isEmpty(str); + } + + public static String getSysDate(String format) { + if (StringUtil.isEmpty(format)) { + format = DEFAULT_FORMAT; + } + SimpleDateFormat df = new SimpleDateFormat(format); + return df.format(new Date()); + } + + public static Date getDateByString(String date, String format) { + if (StringUtil.isEmpty(format)) { + format = DEFAULT_FORMAT; + } + if (StringUtil.isNotEmpty(date)) { + SimpleDateFormat sdf = new SimpleDateFormat(format); + try { + return sdf.parse(date); + } catch (ParseException e) { + throw new RuntimeException("转换为日期类型错误:DATE:" + date + " FORMAT:" + format); + } + } else { + return null; + } + } + + public static Date getDateByLongDate(Long millis) { + if (millis == null) { + return new Date(); + } + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(millis); + return cal.getTime(); + + } + + public static UUID stringToUUID(String id) { + if (StringUtil.isNotEmpty(id)) { + return UUID.fromString(id); + } else { + return null; + } + } + + public static Integer parseInteger(String str) { + if (StringUtil.isNotEmpty(str)) { + return Integer.parseInt(str); + } else { + return null; + } + } + + public static List listToUUID(List listStrs) { + if (listStrs != null && listStrs.size() > 0) { + List uuidList = new ArrayList(); + for (String str : listStrs) { + uuidList.add(UUID.fromString(str)); + } + return uuidList; + } else { + return null; + } + } + + public static List arrayToUUIDList(String[] uuids) { + if (uuids != null && uuids.length > 0) { + List uuidList = new ArrayList(); + for (String str : uuids) { + uuidList.add(UUID.fromString(str)); + } + return uuidList; + } else { + return null; + } + } + + //是否是JSON + public static boolean containsAny(String str, String... flag) { + if (str != null) { + if (flag == null || flag.length == 0) { + flag = "[-{-}-]-,".split("-"); + } + for (String s : flag) { + if (str.contains(s)) { + return true; + } + } + } + return false; + } + + public static String getModifyOrgOperateData(UUID resourceId, UUID orgId) { + if (resourceId != null && orgId != null) { + Map map = new HashMap(); + map.put(resourceId, orgId); + return JSON.toJSONString(map); + } + return ""; + } + + public static String[] listToStringArray(List list) { + if (list != null && !list.isEmpty()) { + return list.toArray(new String[list.size()]); + } + return new String[0]; + } + + public static Long[] listToLongArray(List list) { + if (list != null && !list.isEmpty()) { + return list.toArray(new Long[list.size()]); + } + return new Long[0]; + } + + public static List stringToListArray(String[] strings) { + if (strings != null && strings.length > 0) { + return Arrays.asList(strings); + } + return new ArrayList(); + } + + /** + * String字符串转成List数据格式 + * String str = "1,2,3,4,5,6" -> List listLong [1,2,3,4,5,6]; + * + * @param strArr + * @return + */ + public static List strToLongList(String strArr) { + List idList=new ArrayList(); + String[] d=strArr.split(","); + for (int i = 0, size = d.length; i < size; i++) { + if(d[i]!=null) { + idList.add(Long.parseLong(d[i])); + } + } + return idList; + } + + /** + * String字符串转成List数据格式 + * String str = "1,2,3,4,5,6" -> List listLong [1,2,3,4,5,6]; + * + * @param strArr + * @return + */ + public static List strToStringList(String strArr) { + if(StringUtils.isEmpty(strArr)){ + return null; + } + List idList=new ArrayList(); + String[] d=strArr.split(","); + for (int i = 0, size = d.length; i < size; i++) { + if(d[i]!=null) { + idList.add(d[i].toString()); + } + } + return idList; + } + + public static List searchCondition(String search) { + if (isEmpty(search)) { + return new ArrayList(); + }else{ + //String[] split = search.split(" "); + String[] split = search.split("#"); + return stringToListArray(split); + } + } + + public static String getInfo(String search, String key){ + String value = null; + if(StringUtil.isNotEmpty(search)) { + search = search.replace("{}",""); + if(StringUtil.isNotEmpty(search)) { + JSONObject obj = JSONObject.parseObject(search); + if (obj.get(key) != null) { + value = obj.getString(key); + if (value.equals("")) { + value = null; + } + } else { + value = null; + } + } + } + return value; + } + + public static String toNull(String value) { + if(("").equals(value)) { + value = null; + } + return value; + } + + public static boolean isExist(Object value) { + if(value!=null) { + String str = value.toString(); + if("".equals(str.trim())) { + return false; + } else { + return true; + } + } else { + return false; + } + } + + public static void main(String[] args) { + int i = 10/3; + System.out.println(i); + } +} diff --git a/jshERP-boot/src/main/java/com/jsh/erp/utils/Tools.java b/jshERP-boot/src/main/java/com/jsh/erp/utils/Tools.java new file mode 100644 index 000000000..67a517b20 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/utils/Tools.java @@ -0,0 +1,696 @@ +package com.jsh.erp.utils; + +import org.springframework.util.StringUtils; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.math.BigInteger; +import java.net.InetAddress; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.net.UnknownHostException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.regex.Pattern; + +/** + * 工具类 + * + * @author jishenghua qq:7-5-2-7-1-8-9-2-0 + */ +public class Tools { + /** + * 获得32位唯一序列号 + * + * @return 32为ID字符串 + */ + public static String getUUID_32() { + return UUID.randomUUID().toString().replaceAll("-", ""); + } + + /** + * 获得当天时间,格式为yyyy-MM-dd + * + * @return 格式化后的日期格式 + */ + public static String getNow() { + return new SimpleDateFormat("yyyy-MM-dd").format(new Date()); + } + + /** + * 获取当前月 yyyy-MM + * + * @return + */ + public static String getCurrentMonth() { + return new SimpleDateFormat("yyyy-MM").format(new Date()); + } + + /** + * 获取指定日期格式 yyyy-MM-dd + * + * @return + */ + public static String getCurrentMonth(Date date) { + return new SimpleDateFormat("yyyy-MM-dd").format(date); + } + + /** + * 获得当天时间,格式为yyyyMMddHHmmss + * + * @return 格式化后的日期格式 + */ + public static String getNow2(Date date) { + return new SimpleDateFormat("yyyyMMddHHmmss").format(date); + } + + /** + * 获得当天时间,格式为yyyy-MM-dd HH:mm:ss + * + * @return 格式化后的日期格式 + */ + public static String getNow3() { + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + } + + /** + * 获得指定时间,格式为yyyy-MM-dd HH:mm:ss + * + * @return 格式化后的日期格式 + */ + public static String getCenternTime(Date date) { + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); + } + + /** + * 获得指定时间,格式为mm:ss + * + * @return 格式化后的日期格式 + */ + public static String getTimeInfo(Date date) { + return new SimpleDateFormat("mm:ss").format(date); + } + + /** + * 获取当前日期是星期几 + * return 星期几 + */ + public static String getWeekDay() { + Calendar c = Calendar.getInstance(Locale.CHINA); + c.setTime(new Date()); + int day = c.get(Calendar.DAY_OF_WEEK); + String weekDay = ""; + switch (day) { + case 1: + weekDay = "星期日"; + break; + case 2: + weekDay = "星期一"; + break; + case 3: + weekDay = "星期二"; + break; + case 4: + weekDay = "星期三"; + break; + case 5: + weekDay = "星期四"; + break; + case 6: + weekDay = "星期五"; + break; + case 7: + weekDay = "星期六"; + break; + default: + break; + } + return weekDay; + } + + /** + * 判断字符串是否全部为数字 + * + * @param accountWaste + * @return boolean值 + */ + public static boolean checkStrIsNum(String checkStr) { + if (checkStr == null || checkStr.length() == 0) + return false; + return Pattern.compile("^[0-9]*.{1}[0-9]*$").matcher(checkStr).matches(); +// return Pattern.compile(":^[0-9]+(.[0-9])*$").matcher(checkStr).matches(); + } + + /** + * 获得前一天的时间 + * + * @return 前一天日期 + */ + public static String getPreviousDate() { + Calendar cal = Calendar.getInstance(); + cal.add(Calendar.DATE, -1); + return new SimpleDateFormat("yyyy-MM").format(cal.getTime()); + } + + /** + * 获取当前月份的前6个月(含当前月) + * @param size 月数 + * @return + */ + public static List getLastMonths(int size) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); + Calendar c = Calendar.getInstance(); + c.setTime(new Date()); + List list = new ArrayList(size); + for (int i=0;i cutLeng) + return beforeStr.substring(0, cutLeng) + "..."; + return beforeStr; + } + + /** + * 生成随机字符串,字母和数字混合 + * + * @return 组合后的字符串 ^[0-9a-zA-Z] + */ + public static String getRandomChar() { + //生成一个0、1、2的随机数字 + int rand = (int) Math.round(Math.random() * 1); + long itmp = 0; + char ctmp = '\u0000'; + switch (rand) { + //生成大写字母 + 1000以内数字 + case 1: + itmp = Math.round(Math.random() * 25 + 65); + ctmp = (char) itmp; + return String.valueOf(ctmp) + (int) Math.random() * 1000; + //生成小写字母 + case 2: + itmp = Math.round(Math.random() * 25 + 97); + ctmp = (char) itmp; + return String.valueOf(ctmp) + (int) Math.random() * 1000; + //生成数字 + default: + itmp = Math.round(Math.random() * 1000); + return itmp + ""; + } + } + + /** + * 判断首字母以数字开头,字符串包括数字、字母%以及空格 + * + * @param str 检查字符串 + * @return 是否以数字开头 + */ + public static boolean CheckIsStartWithNum(String str) { + return Pattern.compile("^[0-9][a-zA-Z0-9%,\\s]*$").matcher(str).matches(); + } + + /** + * 判断首字母以","开头,字符串包括数字、字母%以及空格 + * + * @param str 检查字符串 + * @return 是否以数字开头 + */ + public static boolean CheckIsStartWithSpec(String str) { + return Pattern.compile("^[,][a-zA-Z0-9%,\\s]*$").matcher(str).matches(); + } + + /** + * 字符转码 + * + * @param aValue + * @return + * @see 转码后的字符串 + */ + public static String encodeValue(String aValue) { + if (aValue.trim().length() == 0) { + return ""; + } + String valueAfterTransCode = null; + try { + valueAfterTransCode = URLEncoder.encode(aValue, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.getMessage(); + } + return valueAfterTransCode; + } + + /** + * 字符转码 + * + * @param aValue + * @return + * @see 转码后的字符串 + */ + public static String decodeValue(String aValue) { + if (aValue.trim().length() == 0) { + return ""; + } + String valueAfterTransCode = null; + try { + valueAfterTransCode = URLDecoder.decode(aValue, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.getMessage(); + } + return valueAfterTransCode; + } + + /** + * 去除str中的' + * + * @param str + * @return 除去'后的字符串 + * @see [类、类#方法、类#成员] + */ + public static String afterDealStr(String str) { + return str.replace("'", ""); + } + + /** + * 获取用户IP地址(停用) + * + * @return 用户IP + * @see [类、类#方法、类#成员] + */ + public static String getCurrentUserIP() { + try { + return InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + e.printStackTrace(); + return "127.0.0.1"; + } + } + + /** + * 从Request对象中获得客户端IP,处理了HTTP代理服务器和Nginx的反向代理截取了ip + * + * @param request + * @return ip + */ + public static String getLocalIp(HttpServletRequest request) { + String remoteAddr = getIpAddr(request); + String forwarded = request.getHeader("X-Forwarded-For"); + String realIp = request.getHeader("X-Real-IP"); + + String ip = null; + if (realIp == null) { + if (forwarded == null) { + ip = remoteAddr; + } else { + ip = remoteAddr + "/" + forwarded.split(",")[0]; + } + } else { + if (realIp.equals(forwarded)) { + ip = realIp; + } else { + if (forwarded != null) { + forwarded = forwarded.split(",")[0]; + } + ip = realIp + "/" + forwarded; + } + } + return ip; + } + /** + * 获取访问者IP + * + * 在一般情况下使用Request.getRemoteAddr()即可,但是经过nginx等反向代理软件后,这个方法会失效。 + * + * 本方法先从Header中获取X-Real-IP,如果不存在再从X-Forwarded-For获得第一个IP(用,分割), + * 如果还不存在则调用Request .getRemoteAddr()。 + * + * @param request + * @return + */ + public static String getIpAddr(HttpServletRequest request) { + String ip = request.getHeader("X-Real-IP"); + if (!StringUtils.isEmpty(ip) && !"unknown".equalsIgnoreCase(ip)) { + return ip; + } + ip = request.getHeader("X-Forwarded-For"); + if (!StringUtils.isEmpty(ip) && !"unknown".equalsIgnoreCase(ip)) { + // 多次反向代理后会有多个IP值,第一个为真实IP。 + int index = ip.indexOf(','); + if (index != -1) { + return ip.substring(0, index); + } else { + return ip; + } + } else { + return request.getRemoteAddr(); + } + } + + /** + * 转化前台批量传入的ID值 + * + * @param data + * @return 转化后的ID值数组 + */ + public static int[] changeDataForm(String data) { + String[] dataStr = data.split(","); + int[] dataInt = new int[dataStr.length]; + for (int i = 0; i < dataStr.length; i++) + dataInt[i] = Integer.parseInt(dataStr[i]); + return dataInt; + } + + /** + * 解决导出文件中文乱码问题firefox和ie下中文乱码 + */ + public static String changeUnicode(String fileName, String browserType) { + String returnFileName = ""; + try { + if (browserType.equalsIgnoreCase("MSIE")) { + returnFileName = URLEncoder.encode(fileName, "ISO8859-1"); + returnFileName = returnFileName.replace(" ", "%20"); + if (returnFileName.length() > 150) { + returnFileName = new String(fileName.getBytes("GB2312"), "ISO8859-1"); + returnFileName = returnFileName.replace(" ", "%20"); + } + } else if (browserType.equalsIgnoreCase("Firefox")) { + returnFileName = new String(fileName.getBytes("ISO8859-1"), "ISO8859-1"); + returnFileName = returnFileName.replace(" ", "%20"); + } else { + returnFileName = URLEncoder.encode(fileName, "ISO8859-1"); + returnFileName = returnFileName.replace(" ", "%20"); + if (returnFileName.length() > 150) { + + returnFileName = new String(returnFileName.getBytes("GB2312"), "ISO8859-1"); + returnFileName = returnFileName.replace(" ", "%20"); + } + } + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return returnFileName; + } + + /** + * 写理财日志内容转化特殊字符 + * + * @param str 需要转化的字符 + * @return 转化后的字符 + */ + public static String htmlspecialchars(String str) { + str = str.replaceAll("&", "&"); + str = str.replaceAll("<", "<"); + str = str.replaceAll(">", ">"); + str = str.replaceAll("\"", """); + return str; + } + + /** + * 根据消费日期获取消费月 + * + * @param consumeDate 消费日期 + * @return 返回消费月信息 + */ + public static String getConsumeMonth(String consumeDate) { + return consumeDate.substring(0, 7); + } + + /** + * 获取当前日期的前XX个月 + * + * @param 之前的第几个月 + * @return 前XX个月字符串 + */ + public static String getBeforeMonth(int beforeMonth) { + Calendar c = Calendar.getInstance(); + c.add(Calendar.MONTH, -beforeMonth); + return new SimpleDateFormat("yyyy-MM").format(c.getTime()); + } + + /** + * 根据月份获取当月最后一天 + * @param monthTime + * @return + * @throws ParseException + */ + public static String lastDayOfMonth(String monthTime) throws ParseException { + Date date = new SimpleDateFormat("yyyy-MM").parse(monthTime); + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.set(Calendar.DAY_OF_MONTH, 1); + cal.roll(Calendar.DAY_OF_MONTH, -1); + return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()); + } + + /** + * 获取email用户姓名 + * + * @param args + */ + public static String getEmailUserName(String emailAddress) { + return emailAddress.substring(0, emailAddress.lastIndexOf("@")); + } + + /** + * 获取中文编码,邮件附件乱码问题解决 + * + * @param str + * @return + */ + public static String getChineseString(String emailAttchmentTitle) { + if (emailAttchmentTitle != null && !emailAttchmentTitle.equals("")) { + try { + return new String(emailAttchmentTitle.getBytes(), "ISO-8859-1"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + return emailAttchmentTitle; + } + + /** + * 判断userTel是否合法,userTel只能是数字 + * + * @param userTel + * @return true 合法 false不合法 + */ + public static boolean isTelNumber(String userTel) { + String reg_phone = "^(\\(\\d{3,4}\\)|\\d{3,4}-)?\\d{7,8}$"; + String reg_tel = "^(1[0-9][0-9]|1[0-9][0|3|6|8|9])\\d{8}$"; + boolean b_phpne = Pattern.compile(reg_phone).matcher(userTel).matches(); + boolean b_tel = Pattern.compile(reg_tel).matcher(userTel).matches(); + return (b_phpne || b_tel); + } + + /** + * 模糊判断电话号码是否合法,只能是数字 + * + * @param macAddress + * @return + */ + public static boolean isTelNumberBySlur(String userTel) { + return Pattern.compile("^([\\s0-9]{0,12}$)").matcher(userTel).matches(); + } + + /** + * 获取当前时间的字符串类型 + * + * @return 处理后的字符串类型 + */ + public static String getNowTime() { + return new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime()); + } + + /** + * 开打指定文件 + * + * @param filePath 文件的绝对路径 + */ + public static void openFile(String filePath) { + String viewFilePath = filePath.replace("\\", "/"); + // Runtime.getRuntime().exec("cmd /c start "+filePath); + // 解决路径中带空格问题 + Runtime r = Runtime.getRuntime(); + String[] cmdArray = new String[]{"cmd.exe", "/c", viewFilePath}; + try { + r.exec(cmdArray); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 判断字符串中是否含有中文 + * + * @param str + * @return + * @author jishenghua + */ + public static boolean isContainsChinese(String str) { + return Pattern.compile("[\u4e00-\u9fa5]").matcher(str).matches(); + } + + /** + * 过滤html文件中的文本 + * + * @param content + * @return过滤后的文本 + */ + public static String filterText(String content) { + return content.replace("/<(?:.|\\s)*?>/g", ""); + } + + /** + * 去掉字符串中所有符号,不论是全角,还是半角的,或是货币符号或者空格等 + * + * @param s + * @return + * @author jishenghua + */ + public static String removeSymbolForString(String s) { + StringBuffer buffer = new StringBuffer(); + char[] chars = s.toCharArray(); + for (int i = 0; i < chars.length; i++) { + if ((chars[i] >= 19968 && chars[i] <= 40869) || (chars[i] >= 97 && chars[i] <= 122) || (chars[i] >= 65 && chars[i] <= 90)) { + buffer.append(chars[i]); + } + } + return buffer.toString(); + } + + /** + * 获取一个字符串的MD5 + * + * @param msg + * @return 加密后的MD5字符串 + * @throws NoSuchAlgorithmException + */ + public static String md5Encryp(String msg) throws NoSuchAlgorithmException { + // 生成一个MD5加密计算摘要 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 计算md5函数 + md.update(msg.getBytes()); + return new BigInteger(1, md.digest()).toString(16); + } + + /** + * 判断是否插件URL + * + * @return + */ + public static boolean isPluginUrl(String url) { + if (url != null && (url.startsWith("/plugin"))) { + return true; + } + return false; + } + + /** + * 处理字符串null值 + * + * @param beforeStr 处理前字符串 + * @return 处理后的字符串 + */ + public static String dealNullStr(String beforeStr) { + if (null == beforeStr || beforeStr.length() == 0) + return ""; + return beforeStr; + } + + /** + * 根据token截取租户id + * @param token + * @return + */ + public static Long getTenantIdByToken(String token) { + Long tenantId = 0L; + if(StringUtil.isNotEmpty(token) && token.indexOf("_")>-1) { + String[] tokenArr = token.split("_"); + if (tokenArr.length == 2) { + tenantId = Long.parseLong(tokenArr[1]); + } + } + return tenantId; + } + + /** + * 使用参数Format将字符串转为Date + * + * @param strDate + * @param pattern + * @return + * @throws ParseException + * @author jishenghua + */ + public static Date parse(String strDate, String pattern) + throws ParseException { + return new SimpleDateFormat(pattern).parse(strDate); + } + + /** + * 生成随机数字和字母组合 + * @param length + * @return + */ + public static String getCharAndNum(int length) { + Random random = new Random(); + StringBuffer valSb = new StringBuffer(); + String charStr = "0123456789abcdefghijklmnopqrstuvwxyz"; + int charLength = charStr.length(); + for (int i = 0; i < length; i++) { + int index = random.nextInt(charLength); + valSb.append(charStr.charAt(index)); + } + return valSb.toString(); + } + +// /** +// * 过滤html文件中的图片文件 +// * @param content +// * @return +// */ +// public static String filterImg(String content) +// { +// return content.matches("//g"); +// } + + public static void main(String[] args) { + String aa = "的付的反对法的发的说法"; + char[] bb = aa.toCharArray(); + for (char c : bb) { + System.out.println(c); + } + System.out.println(getBeforeMonth(1)); + + try { + System.out.println(md5Encryp("guest")); + System.out.println(md5Encryp("admin")); + } catch (NoSuchAlgorithmException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + String value = "2333"; + System.out.println(checkStrIsNum(value)); + + for (int i = 0; i < 100; i++) { + System.out.print(getRandomChar() + " || "); + } + } +} diff --git a/jshERP-boot/src/main/resources/application.properties b/jshERP-boot/src/main/resources/application.properties new file mode 100644 index 000000000..27fd04b25 --- /dev/null +++ b/jshERP-boot/src/main/resources/application.properties @@ -0,0 +1,28 @@ +server.port=8888 +#登录超时-秒 +server.servlet.session.timeout=36000 +#服务路径 +server.servlet.context-path=/jshERP-boot +#数据库连接 +spring.datasource.url=jdbc:mysql://127.0.0.1:3306/jsh_erp_boot?useUnicode=true&characterEncoding=utf8&useCursorFetch=true&defaultFetchSize=500&allowMultiQueries=true&rewriteBatchedStatements=true&useSSL=false +spring.datasource.driverClassName=com.mysql.jdbc.Driver +spring.datasource.username=root +spring.datasource.password=123456 +#mybatis-plus配置 +mybatis-plus.mapper-locations=classpath:./mapper_xml/*.xml +# Redis +spring.redis.host=127.0.0.1 +spring.redis.port=6379 +spring.redis.password=1234abcd +#租户对应的角色id +manage.roleId=10 +#租户允许创建的用户数 +tenant.userNumLimit=1000000 +#租户允许创建的单据数 +tenant.billsNumLimit=100000000 +#演示模式开关-默认关闭:false +demonstrate.open=false +#插件配置 +plugin.runMode=prod +plugin.pluginPath=plugins +plugin.pluginConfigFilePath=pluginConfig \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/logback-spring.xml b/jshERP-boot/src/main/resources/logback-spring.xml new file mode 100644 index 000000000..86291bb21 --- /dev/null +++ b/jshERP-boot/src/main/resources/logback-spring.xml @@ -0,0 +1,34 @@ + + + + + + + ${LOG_PATTERN} + + + + + ${LOG_FILE}.log + + ${LOG_PATTERN} + + + ${LOG_FILE}.%d{yyyy-MM-dd}.%i.log + 10 + 1GB + + 100MB + + + + + + + + + + + + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/AccountHeadMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/AccountHeadMapper.xml new file mode 100644 index 000000000..6b0f68721 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/AccountHeadMapper.xml @@ -0,0 +1,338 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, type, organ_id, hands_person_id, creator, change_amount, total_price, account_id, + bill_no, bill_time, remark, tenant_id, delete_flag + + + + + delete from jsh_account_head + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_account_head + + + + + + insert into jsh_account_head (id, type, organ_id, + hands_person_id, creator, change_amount, + total_price, account_id, bill_no, + bill_time, remark, tenant_id, + delete_flag) + values (#{id,jdbcType=BIGINT}, #{type,jdbcType=VARCHAR}, #{organId,jdbcType=BIGINT}, + #{handsPersonId,jdbcType=BIGINT}, #{creator,jdbcType=BIGINT}, #{changeAmount,jdbcType=DECIMAL}, + #{totalPrice,jdbcType=DECIMAL}, #{accountId,jdbcType=BIGINT}, #{billNo,jdbcType=VARCHAR}, + #{billTime,jdbcType=TIMESTAMP}, #{remark,jdbcType=VARCHAR}, #{tenantId,jdbcType=BIGINT}, + #{deleteFlag,jdbcType=VARCHAR}) + + + insert into jsh_account_head + + + id, + + + type, + + + organ_id, + + + hands_person_id, + + + creator, + + + change_amount, + + + total_price, + + + account_id, + + + bill_no, + + + bill_time, + + + remark, + + + tenant_id, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{type,jdbcType=VARCHAR}, + + + #{organId,jdbcType=BIGINT}, + + + #{handsPersonId,jdbcType=BIGINT}, + + + #{creator,jdbcType=BIGINT}, + + + #{changeAmount,jdbcType=DECIMAL}, + + + #{totalPrice,jdbcType=DECIMAL}, + + + #{accountId,jdbcType=BIGINT}, + + + #{billNo,jdbcType=VARCHAR}, + + + #{billTime,jdbcType=TIMESTAMP}, + + + #{remark,jdbcType=VARCHAR}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_account_head + + + id = #{record.id,jdbcType=BIGINT}, + + + type = #{record.type,jdbcType=VARCHAR}, + + + organ_id = #{record.organId,jdbcType=BIGINT}, + + + hands_person_id = #{record.handsPersonId,jdbcType=BIGINT}, + + + creator = #{record.creator,jdbcType=BIGINT}, + + + change_amount = #{record.changeAmount,jdbcType=DECIMAL}, + + + total_price = #{record.totalPrice,jdbcType=DECIMAL}, + + + account_id = #{record.accountId,jdbcType=BIGINT}, + + + bill_no = #{record.billNo,jdbcType=VARCHAR}, + + + bill_time = #{record.billTime,jdbcType=TIMESTAMP}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_account_head + set id = #{record.id,jdbcType=BIGINT}, + type = #{record.type,jdbcType=VARCHAR}, + organ_id = #{record.organId,jdbcType=BIGINT}, + hands_person_id = #{record.handsPersonId,jdbcType=BIGINT}, + creator = #{record.creator,jdbcType=BIGINT}, + change_amount = #{record.changeAmount,jdbcType=DECIMAL}, + total_price = #{record.totalPrice,jdbcType=DECIMAL}, + account_id = #{record.accountId,jdbcType=BIGINT}, + bill_no = #{record.billNo,jdbcType=VARCHAR}, + bill_time = #{record.billTime,jdbcType=TIMESTAMP}, + remark = #{record.remark,jdbcType=VARCHAR}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_account_head + + + type = #{type,jdbcType=VARCHAR}, + + + organ_id = #{organId,jdbcType=BIGINT}, + + + hands_person_id = #{handsPersonId,jdbcType=BIGINT}, + + + creator = #{creator,jdbcType=BIGINT}, + + + change_amount = #{changeAmount,jdbcType=DECIMAL}, + + + total_price = #{totalPrice,jdbcType=DECIMAL}, + + + account_id = #{accountId,jdbcType=BIGINT}, + + + bill_no = #{billNo,jdbcType=VARCHAR}, + + + bill_time = #{billTime,jdbcType=TIMESTAMP}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_account_head + set type = #{type,jdbcType=VARCHAR}, + organ_id = #{organId,jdbcType=BIGINT}, + hands_person_id = #{handsPersonId,jdbcType=BIGINT}, + creator = #{creator,jdbcType=BIGINT}, + change_amount = #{changeAmount,jdbcType=DECIMAL}, + total_price = #{totalPrice,jdbcType=DECIMAL}, + account_id = #{accountId,jdbcType=BIGINT}, + bill_no = #{billNo,jdbcType=VARCHAR}, + bill_time = #{billTime,jdbcType=TIMESTAMP}, + remark = #{remark,jdbcType=VARCHAR}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/AccountHeadMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/AccountHeadMapperEx.xml new file mode 100644 index 000000000..f28879544 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/AccountHeadMapperEx.xml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + update jsh_account_head + set delete_flag='1' + where 1=1 + and id in ( + + #{id} + + ) + + + + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/AccountItemMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/AccountItemMapper.xml new file mode 100644 index 000000000..87553b146 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/AccountItemMapper.xml @@ -0,0 +1,258 @@ + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, header_id, account_id, in_out_item_id, each_amount, remark, tenant_id, delete_flag + + + + + delete from jsh_account_item + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_account_item + + + + + + insert into jsh_account_item (id, header_id, account_id, + in_out_item_id, each_amount, remark, + tenant_id, delete_flag) + values (#{id,jdbcType=BIGINT}, #{headerId,jdbcType=BIGINT}, #{accountId,jdbcType=BIGINT}, + #{inOutItemId,jdbcType=BIGINT}, #{eachAmount,jdbcType=DECIMAL}, #{remark,jdbcType=VARCHAR}, + #{tenantId,jdbcType=BIGINT}, #{deleteFlag,jdbcType=VARCHAR}) + + + insert into jsh_account_item + + + id, + + + header_id, + + + account_id, + + + in_out_item_id, + + + each_amount, + + + remark, + + + tenant_id, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{headerId,jdbcType=BIGINT}, + + + #{accountId,jdbcType=BIGINT}, + + + #{inOutItemId,jdbcType=BIGINT}, + + + #{eachAmount,jdbcType=DECIMAL}, + + + #{remark,jdbcType=VARCHAR}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_account_item + + + id = #{record.id,jdbcType=BIGINT}, + + + header_id = #{record.headerId,jdbcType=BIGINT}, + + + account_id = #{record.accountId,jdbcType=BIGINT}, + + + in_out_item_id = #{record.inOutItemId,jdbcType=BIGINT}, + + + each_amount = #{record.eachAmount,jdbcType=DECIMAL}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_account_item + set id = #{record.id,jdbcType=BIGINT}, + header_id = #{record.headerId,jdbcType=BIGINT}, + account_id = #{record.accountId,jdbcType=BIGINT}, + in_out_item_id = #{record.inOutItemId,jdbcType=BIGINT}, + each_amount = #{record.eachAmount,jdbcType=DECIMAL}, + remark = #{record.remark,jdbcType=VARCHAR}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_account_item + + + header_id = #{headerId,jdbcType=BIGINT}, + + + account_id = #{accountId,jdbcType=BIGINT}, + + + in_out_item_id = #{inOutItemId,jdbcType=BIGINT}, + + + each_amount = #{eachAmount,jdbcType=DECIMAL}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_account_item + set header_id = #{headerId,jdbcType=BIGINT}, + account_id = #{accountId,jdbcType=BIGINT}, + in_out_item_id = #{inOutItemId,jdbcType=BIGINT}, + each_amount = #{eachAmount,jdbcType=DECIMAL}, + remark = #{remark,jdbcType=VARCHAR}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/AccountItemMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/AccountItemMapperEx.xml new file mode 100644 index 000000000..d92535d00 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/AccountItemMapperEx.xml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + update jsh_account_item + set delete_flag='1' + where 1=1 + and id in ( + + #{id} + + ) + + + + + + update jsh_account_item + set delete_flag='1' + where 1=1 + and header_id in ( + + #{id} + + ) + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/AccountMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/AccountMapper.xml new file mode 100644 index 000000000..ce6e500ac --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/AccountMapper.xml @@ -0,0 +1,276 @@ + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, name, serial_no, initial_amount, current_amount, remark, is_default, tenant_id, + delete_flag + + + + + delete from jsh_account + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_account + + + + + + insert into jsh_account (id, name, serial_no, + initial_amount, current_amount, remark, + is_default, tenant_id, delete_flag + ) + values (#{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{serialNo,jdbcType=VARCHAR}, + #{initialAmount,jdbcType=DECIMAL}, #{currentAmount,jdbcType=DECIMAL}, #{remark,jdbcType=VARCHAR}, + #{isDefault,jdbcType=BIT}, #{tenantId,jdbcType=BIGINT}, #{deleteFlag,jdbcType=VARCHAR} + ) + + + insert into jsh_account + + + id, + + + name, + + + serial_no, + + + initial_amount, + + + current_amount, + + + remark, + + + is_default, + + + tenant_id, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{name,jdbcType=VARCHAR}, + + + #{serialNo,jdbcType=VARCHAR}, + + + #{initialAmount,jdbcType=DECIMAL}, + + + #{currentAmount,jdbcType=DECIMAL}, + + + #{remark,jdbcType=VARCHAR}, + + + #{isDefault,jdbcType=BIT}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_account + + + id = #{record.id,jdbcType=BIGINT}, + + + name = #{record.name,jdbcType=VARCHAR}, + + + serial_no = #{record.serialNo,jdbcType=VARCHAR}, + + + initial_amount = #{record.initialAmount,jdbcType=DECIMAL}, + + + current_amount = #{record.currentAmount,jdbcType=DECIMAL}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + is_default = #{record.isDefault,jdbcType=BIT}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_account + set id = #{record.id,jdbcType=BIGINT}, + name = #{record.name,jdbcType=VARCHAR}, + serial_no = #{record.serialNo,jdbcType=VARCHAR}, + initial_amount = #{record.initialAmount,jdbcType=DECIMAL}, + current_amount = #{record.currentAmount,jdbcType=DECIMAL}, + remark = #{record.remark,jdbcType=VARCHAR}, + is_default = #{record.isDefault,jdbcType=BIT}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_account + + + name = #{name,jdbcType=VARCHAR}, + + + serial_no = #{serialNo,jdbcType=VARCHAR}, + + + initial_amount = #{initialAmount,jdbcType=DECIMAL}, + + + current_amount = #{currentAmount,jdbcType=DECIMAL}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + is_default = #{isDefault,jdbcType=BIT}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_account + set name = #{name,jdbcType=VARCHAR}, + serial_no = #{serialNo,jdbcType=VARCHAR}, + initial_amount = #{initialAmount,jdbcType=DECIMAL}, + current_amount = #{currentAmount,jdbcType=DECIMAL}, + remark = #{remark,jdbcType=VARCHAR}, + is_default = #{isDefault,jdbcType=BIT}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/AccountMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/AccountMapperEx.xml new file mode 100644 index 000000000..3cabcaf24 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/AccountMapperEx.xml @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + update jsh_account + set delete_flag='1' + where 1=1 + and id in ( + + #{id} + + ) + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/DepotHeadMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/DepotHeadMapper.xml new file mode 100644 index 000000000..4f00a422d --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/DepotHeadMapper.xml @@ -0,0 +1,608 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, type, sub_type, default_number, number, create_time, oper_time, organ_id, hands_person_id, + creator, account_id, change_amount, total_price, pay_type, bill_type, remark, sales_man, + account_id_list, account_money_list, discount, discount_money, discount_last_money, + other_money, other_money_list, other_money_item, account_day, status, link_number, + tenant_id, delete_flag + + + + + delete from jsh_depot_head + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_depot_head + + + + + + insert into jsh_depot_head (id, type, sub_type, + default_number, number, create_time, + oper_time, organ_id, hands_person_id, + creator, account_id, change_amount, + total_price, pay_type, bill_type, + remark, sales_man, account_id_list, + account_money_list, discount, discount_money, + discount_last_money, other_money, other_money_list, + other_money_item, account_day, status, + link_number, tenant_id, delete_flag + ) + values (#{id,jdbcType=BIGINT}, #{type,jdbcType=VARCHAR}, #{subType,jdbcType=VARCHAR}, + #{defaultNumber,jdbcType=VARCHAR}, #{number,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, + #{operTime,jdbcType=TIMESTAMP}, #{organId,jdbcType=BIGINT}, #{handsPersonId,jdbcType=BIGINT}, + #{creator,jdbcType=BIGINT}, #{accountId,jdbcType=BIGINT}, #{changeAmount,jdbcType=DECIMAL}, + #{totalPrice,jdbcType=DECIMAL}, #{payType,jdbcType=VARCHAR}, #{billType,jdbcType=VARCHAR}, + #{remark,jdbcType=VARCHAR}, #{salesMan,jdbcType=VARCHAR}, #{accountIdList,jdbcType=VARCHAR}, + #{accountMoneyList,jdbcType=VARCHAR}, #{discount,jdbcType=DECIMAL}, #{discountMoney,jdbcType=DECIMAL}, + #{discountLastMoney,jdbcType=DECIMAL}, #{otherMoney,jdbcType=DECIMAL}, #{otherMoneyList,jdbcType=VARCHAR}, + #{otherMoneyItem,jdbcType=VARCHAR}, #{accountDay,jdbcType=INTEGER}, #{status,jdbcType=VARCHAR}, + #{linkNumber,jdbcType=VARCHAR}, #{tenantId,jdbcType=BIGINT}, #{deleteFlag,jdbcType=VARCHAR} + ) + + + insert into jsh_depot_head + + + id, + + + type, + + + sub_type, + + + default_number, + + + number, + + + create_time, + + + oper_time, + + + organ_id, + + + hands_person_id, + + + creator, + + + account_id, + + + change_amount, + + + total_price, + + + pay_type, + + + bill_type, + + + remark, + + + sales_man, + + + account_id_list, + + + account_money_list, + + + discount, + + + discount_money, + + + discount_last_money, + + + other_money, + + + other_money_list, + + + other_money_item, + + + account_day, + + + status, + + + link_number, + + + tenant_id, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{type,jdbcType=VARCHAR}, + + + #{subType,jdbcType=VARCHAR}, + + + #{defaultNumber,jdbcType=VARCHAR}, + + + #{number,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{operTime,jdbcType=TIMESTAMP}, + + + #{organId,jdbcType=BIGINT}, + + + #{handsPersonId,jdbcType=BIGINT}, + + + #{creator,jdbcType=BIGINT}, + + + #{accountId,jdbcType=BIGINT}, + + + #{changeAmount,jdbcType=DECIMAL}, + + + #{totalPrice,jdbcType=DECIMAL}, + + + #{payType,jdbcType=VARCHAR}, + + + #{billType,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + + + #{salesMan,jdbcType=VARCHAR}, + + + #{accountIdList,jdbcType=VARCHAR}, + + + #{accountMoneyList,jdbcType=VARCHAR}, + + + #{discount,jdbcType=DECIMAL}, + + + #{discountMoney,jdbcType=DECIMAL}, + + + #{discountLastMoney,jdbcType=DECIMAL}, + + + #{otherMoney,jdbcType=DECIMAL}, + + + #{otherMoneyList,jdbcType=VARCHAR}, + + + #{otherMoneyItem,jdbcType=VARCHAR}, + + + #{accountDay,jdbcType=INTEGER}, + + + #{status,jdbcType=VARCHAR}, + + + #{linkNumber,jdbcType=VARCHAR}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_depot_head + + + id = #{record.id,jdbcType=BIGINT}, + + + type = #{record.type,jdbcType=VARCHAR}, + + + sub_type = #{record.subType,jdbcType=VARCHAR}, + + + default_number = #{record.defaultNumber,jdbcType=VARCHAR}, + + + number = #{record.number,jdbcType=VARCHAR}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + oper_time = #{record.operTime,jdbcType=TIMESTAMP}, + + + organ_id = #{record.organId,jdbcType=BIGINT}, + + + hands_person_id = #{record.handsPersonId,jdbcType=BIGINT}, + + + creator = #{record.creator,jdbcType=BIGINT}, + + + account_id = #{record.accountId,jdbcType=BIGINT}, + + + change_amount = #{record.changeAmount,jdbcType=DECIMAL}, + + + total_price = #{record.totalPrice,jdbcType=DECIMAL}, + + + pay_type = #{record.payType,jdbcType=VARCHAR}, + + + bill_type = #{record.billType,jdbcType=VARCHAR}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + sales_man = #{record.salesMan,jdbcType=VARCHAR}, + + + account_id_list = #{record.accountIdList,jdbcType=VARCHAR}, + + + account_money_list = #{record.accountMoneyList,jdbcType=VARCHAR}, + + + discount = #{record.discount,jdbcType=DECIMAL}, + + + discount_money = #{record.discountMoney,jdbcType=DECIMAL}, + + + discount_last_money = #{record.discountLastMoney,jdbcType=DECIMAL}, + + + other_money = #{record.otherMoney,jdbcType=DECIMAL}, + + + other_money_list = #{record.otherMoneyList,jdbcType=VARCHAR}, + + + other_money_item = #{record.otherMoneyItem,jdbcType=VARCHAR}, + + + account_day = #{record.accountDay,jdbcType=INTEGER}, + + + status = #{record.status,jdbcType=VARCHAR}, + + + link_number = #{record.linkNumber,jdbcType=VARCHAR}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_depot_head + set id = #{record.id,jdbcType=BIGINT}, + type = #{record.type,jdbcType=VARCHAR}, + sub_type = #{record.subType,jdbcType=VARCHAR}, + default_number = #{record.defaultNumber,jdbcType=VARCHAR}, + number = #{record.number,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + oper_time = #{record.operTime,jdbcType=TIMESTAMP}, + organ_id = #{record.organId,jdbcType=BIGINT}, + hands_person_id = #{record.handsPersonId,jdbcType=BIGINT}, + creator = #{record.creator,jdbcType=BIGINT}, + account_id = #{record.accountId,jdbcType=BIGINT}, + change_amount = #{record.changeAmount,jdbcType=DECIMAL}, + total_price = #{record.totalPrice,jdbcType=DECIMAL}, + pay_type = #{record.payType,jdbcType=VARCHAR}, + bill_type = #{record.billType,jdbcType=VARCHAR}, + remark = #{record.remark,jdbcType=VARCHAR}, + sales_man = #{record.salesMan,jdbcType=VARCHAR}, + account_id_list = #{record.accountIdList,jdbcType=VARCHAR}, + account_money_list = #{record.accountMoneyList,jdbcType=VARCHAR}, + discount = #{record.discount,jdbcType=DECIMAL}, + discount_money = #{record.discountMoney,jdbcType=DECIMAL}, + discount_last_money = #{record.discountLastMoney,jdbcType=DECIMAL}, + other_money = #{record.otherMoney,jdbcType=DECIMAL}, + other_money_list = #{record.otherMoneyList,jdbcType=VARCHAR}, + other_money_item = #{record.otherMoneyItem,jdbcType=VARCHAR}, + account_day = #{record.accountDay,jdbcType=INTEGER}, + status = #{record.status,jdbcType=VARCHAR}, + link_number = #{record.linkNumber,jdbcType=VARCHAR}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_depot_head + + + type = #{type,jdbcType=VARCHAR}, + + + sub_type = #{subType,jdbcType=VARCHAR}, + + + default_number = #{defaultNumber,jdbcType=VARCHAR}, + + + number = #{number,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + oper_time = #{operTime,jdbcType=TIMESTAMP}, + + + organ_id = #{organId,jdbcType=BIGINT}, + + + hands_person_id = #{handsPersonId,jdbcType=BIGINT}, + + + creator = #{creator,jdbcType=BIGINT}, + + + account_id = #{accountId,jdbcType=BIGINT}, + + + change_amount = #{changeAmount,jdbcType=DECIMAL}, + + + total_price = #{totalPrice,jdbcType=DECIMAL}, + + + pay_type = #{payType,jdbcType=VARCHAR}, + + + bill_type = #{billType,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + sales_man = #{salesMan,jdbcType=VARCHAR}, + + + account_id_list = #{accountIdList,jdbcType=VARCHAR}, + + + account_money_list = #{accountMoneyList,jdbcType=VARCHAR}, + + + discount = #{discount,jdbcType=DECIMAL}, + + + discount_money = #{discountMoney,jdbcType=DECIMAL}, + + + discount_last_money = #{discountLastMoney,jdbcType=DECIMAL}, + + + other_money = #{otherMoney,jdbcType=DECIMAL}, + + + other_money_list = #{otherMoneyList,jdbcType=VARCHAR}, + + + other_money_item = #{otherMoneyItem,jdbcType=VARCHAR}, + + + account_day = #{accountDay,jdbcType=INTEGER}, + + + status = #{status,jdbcType=VARCHAR}, + + + link_number = #{linkNumber,jdbcType=VARCHAR}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_depot_head + set type = #{type,jdbcType=VARCHAR}, + sub_type = #{subType,jdbcType=VARCHAR}, + default_number = #{defaultNumber,jdbcType=VARCHAR}, + number = #{number,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + oper_time = #{operTime,jdbcType=TIMESTAMP}, + organ_id = #{organId,jdbcType=BIGINT}, + hands_person_id = #{handsPersonId,jdbcType=BIGINT}, + creator = #{creator,jdbcType=BIGINT}, + account_id = #{accountId,jdbcType=BIGINT}, + change_amount = #{changeAmount,jdbcType=DECIMAL}, + total_price = #{totalPrice,jdbcType=DECIMAL}, + pay_type = #{payType,jdbcType=VARCHAR}, + bill_type = #{billType,jdbcType=VARCHAR}, + remark = #{remark,jdbcType=VARCHAR}, + sales_man = #{salesMan,jdbcType=VARCHAR}, + account_id_list = #{accountIdList,jdbcType=VARCHAR}, + account_money_list = #{accountMoneyList,jdbcType=VARCHAR}, + discount = #{discount,jdbcType=DECIMAL}, + discount_money = #{discountMoney,jdbcType=DECIMAL}, + discount_last_money = #{discountLastMoney,jdbcType=DECIMAL}, + other_money = #{otherMoney,jdbcType=DECIMAL}, + other_money_list = #{otherMoneyList,jdbcType=VARCHAR}, + other_money_item = #{otherMoneyItem,jdbcType=VARCHAR}, + account_day = #{accountDay,jdbcType=INTEGER}, + status = #{status,jdbcType=VARCHAR}, + link_number = #{linkNumber,jdbcType=VARCHAR}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/DepotHeadMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/DepotHeadMapperEx.xml new file mode 100644 index 000000000..51999b386 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/DepotHeadMapperEx.xml @@ -0,0 +1,441 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + update jsh_depot_head + set delete_flag='1' + where 1=1 + and id in ( + + #{id} + + ) + + + + + + + + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/DepotItemMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/DepotItemMapper.xml new file mode 100644 index 000000000..b6096c846 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/DepotItemMapper.xml @@ -0,0 +1,543 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, header_id, material_id, material_extend_id, material_unit, oper_number, basic_number, + unit_price, tax_unit_price, all_price, remark, img, incidentals, depot_id, another_depot_id, + tax_rate, tax_money, tax_last_money, other_field1, other_field2, other_field3, other_field4, + other_field5, material_type, tenant_id, delete_flag + + + + + delete from jsh_depot_item + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_depot_item + + + + + + insert into jsh_depot_item (id, header_id, material_id, + material_extend_id, material_unit, oper_number, + basic_number, unit_price, tax_unit_price, + all_price, remark, img, + incidentals, depot_id, another_depot_id, + tax_rate, tax_money, tax_last_money, + other_field1, other_field2, other_field3, + other_field4, other_field5, material_type, + tenant_id, delete_flag) + values (#{id,jdbcType=BIGINT}, #{headerId,jdbcType=BIGINT}, #{materialId,jdbcType=BIGINT}, + #{materialExtendId,jdbcType=BIGINT}, #{materialUnit,jdbcType=VARCHAR}, #{operNumber,jdbcType=DECIMAL}, + #{basicNumber,jdbcType=DECIMAL}, #{unitPrice,jdbcType=DECIMAL}, #{taxUnitPrice,jdbcType=DECIMAL}, + #{allPrice,jdbcType=DECIMAL}, #{remark,jdbcType=VARCHAR}, #{img,jdbcType=VARCHAR}, + #{incidentals,jdbcType=DECIMAL}, #{depotId,jdbcType=BIGINT}, #{anotherDepotId,jdbcType=BIGINT}, + #{taxRate,jdbcType=DECIMAL}, #{taxMoney,jdbcType=DECIMAL}, #{taxLastMoney,jdbcType=DECIMAL}, + #{otherField1,jdbcType=VARCHAR}, #{otherField2,jdbcType=VARCHAR}, #{otherField3,jdbcType=VARCHAR}, + #{otherField4,jdbcType=VARCHAR}, #{otherField5,jdbcType=VARCHAR}, #{materialType,jdbcType=VARCHAR}, + #{tenantId,jdbcType=BIGINT}, #{deleteFlag,jdbcType=VARCHAR}) + + + insert into jsh_depot_item + + + id, + + + header_id, + + + material_id, + + + material_extend_id, + + + material_unit, + + + oper_number, + + + basic_number, + + + unit_price, + + + tax_unit_price, + + + all_price, + + + remark, + + + img, + + + incidentals, + + + depot_id, + + + another_depot_id, + + + tax_rate, + + + tax_money, + + + tax_last_money, + + + other_field1, + + + other_field2, + + + other_field3, + + + other_field4, + + + other_field5, + + + material_type, + + + tenant_id, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{headerId,jdbcType=BIGINT}, + + + #{materialId,jdbcType=BIGINT}, + + + #{materialExtendId,jdbcType=BIGINT}, + + + #{materialUnit,jdbcType=VARCHAR}, + + + #{operNumber,jdbcType=DECIMAL}, + + + #{basicNumber,jdbcType=DECIMAL}, + + + #{unitPrice,jdbcType=DECIMAL}, + + + #{taxUnitPrice,jdbcType=DECIMAL}, + + + #{allPrice,jdbcType=DECIMAL}, + + + #{remark,jdbcType=VARCHAR}, + + + #{img,jdbcType=VARCHAR}, + + + #{incidentals,jdbcType=DECIMAL}, + + + #{depotId,jdbcType=BIGINT}, + + + #{anotherDepotId,jdbcType=BIGINT}, + + + #{taxRate,jdbcType=DECIMAL}, + + + #{taxMoney,jdbcType=DECIMAL}, + + + #{taxLastMoney,jdbcType=DECIMAL}, + + + #{otherField1,jdbcType=VARCHAR}, + + + #{otherField2,jdbcType=VARCHAR}, + + + #{otherField3,jdbcType=VARCHAR}, + + + #{otherField4,jdbcType=VARCHAR}, + + + #{otherField5,jdbcType=VARCHAR}, + + + #{materialType,jdbcType=VARCHAR}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_depot_item + + + id = #{record.id,jdbcType=BIGINT}, + + + header_id = #{record.headerId,jdbcType=BIGINT}, + + + material_id = #{record.materialId,jdbcType=BIGINT}, + + + material_extend_id = #{record.materialExtendId,jdbcType=BIGINT}, + + + material_unit = #{record.materialUnit,jdbcType=VARCHAR}, + + + oper_number = #{record.operNumber,jdbcType=DECIMAL}, + + + basic_number = #{record.basicNumber,jdbcType=DECIMAL}, + + + unit_price = #{record.unitPrice,jdbcType=DECIMAL}, + + + tax_unit_price = #{record.taxUnitPrice,jdbcType=DECIMAL}, + + + all_price = #{record.allPrice,jdbcType=DECIMAL}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + img = #{record.img,jdbcType=VARCHAR}, + + + incidentals = #{record.incidentals,jdbcType=DECIMAL}, + + + depot_id = #{record.depotId,jdbcType=BIGINT}, + + + another_depot_id = #{record.anotherDepotId,jdbcType=BIGINT}, + + + tax_rate = #{record.taxRate,jdbcType=DECIMAL}, + + + tax_money = #{record.taxMoney,jdbcType=DECIMAL}, + + + tax_last_money = #{record.taxLastMoney,jdbcType=DECIMAL}, + + + other_field1 = #{record.otherField1,jdbcType=VARCHAR}, + + + other_field2 = #{record.otherField2,jdbcType=VARCHAR}, + + + other_field3 = #{record.otherField3,jdbcType=VARCHAR}, + + + other_field4 = #{record.otherField4,jdbcType=VARCHAR}, + + + other_field5 = #{record.otherField5,jdbcType=VARCHAR}, + + + material_type = #{record.materialType,jdbcType=VARCHAR}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_depot_item + set id = #{record.id,jdbcType=BIGINT}, + header_id = #{record.headerId,jdbcType=BIGINT}, + material_id = #{record.materialId,jdbcType=BIGINT}, + material_extend_id = #{record.materialExtendId,jdbcType=BIGINT}, + material_unit = #{record.materialUnit,jdbcType=VARCHAR}, + oper_number = #{record.operNumber,jdbcType=DECIMAL}, + basic_number = #{record.basicNumber,jdbcType=DECIMAL}, + unit_price = #{record.unitPrice,jdbcType=DECIMAL}, + tax_unit_price = #{record.taxUnitPrice,jdbcType=DECIMAL}, + all_price = #{record.allPrice,jdbcType=DECIMAL}, + remark = #{record.remark,jdbcType=VARCHAR}, + img = #{record.img,jdbcType=VARCHAR}, + incidentals = #{record.incidentals,jdbcType=DECIMAL}, + depot_id = #{record.depotId,jdbcType=BIGINT}, + another_depot_id = #{record.anotherDepotId,jdbcType=BIGINT}, + tax_rate = #{record.taxRate,jdbcType=DECIMAL}, + tax_money = #{record.taxMoney,jdbcType=DECIMAL}, + tax_last_money = #{record.taxLastMoney,jdbcType=DECIMAL}, + other_field1 = #{record.otherField1,jdbcType=VARCHAR}, + other_field2 = #{record.otherField2,jdbcType=VARCHAR}, + other_field3 = #{record.otherField3,jdbcType=VARCHAR}, + other_field4 = #{record.otherField4,jdbcType=VARCHAR}, + other_field5 = #{record.otherField5,jdbcType=VARCHAR}, + material_type = #{record.materialType,jdbcType=VARCHAR}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_depot_item + + + header_id = #{headerId,jdbcType=BIGINT}, + + + material_id = #{materialId,jdbcType=BIGINT}, + + + material_extend_id = #{materialExtendId,jdbcType=BIGINT}, + + + material_unit = #{materialUnit,jdbcType=VARCHAR}, + + + oper_number = #{operNumber,jdbcType=DECIMAL}, + + + basic_number = #{basicNumber,jdbcType=DECIMAL}, + + + unit_price = #{unitPrice,jdbcType=DECIMAL}, + + + tax_unit_price = #{taxUnitPrice,jdbcType=DECIMAL}, + + + all_price = #{allPrice,jdbcType=DECIMAL}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + img = #{img,jdbcType=VARCHAR}, + + + incidentals = #{incidentals,jdbcType=DECIMAL}, + + + depot_id = #{depotId,jdbcType=BIGINT}, + + + another_depot_id = #{anotherDepotId,jdbcType=BIGINT}, + + + tax_rate = #{taxRate,jdbcType=DECIMAL}, + + + tax_money = #{taxMoney,jdbcType=DECIMAL}, + + + tax_last_money = #{taxLastMoney,jdbcType=DECIMAL}, + + + other_field1 = #{otherField1,jdbcType=VARCHAR}, + + + other_field2 = #{otherField2,jdbcType=VARCHAR}, + + + other_field3 = #{otherField3,jdbcType=VARCHAR}, + + + other_field4 = #{otherField4,jdbcType=VARCHAR}, + + + other_field5 = #{otherField5,jdbcType=VARCHAR}, + + + material_type = #{materialType,jdbcType=VARCHAR}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_depot_item + set header_id = #{headerId,jdbcType=BIGINT}, + material_id = #{materialId,jdbcType=BIGINT}, + material_extend_id = #{materialExtendId,jdbcType=BIGINT}, + material_unit = #{materialUnit,jdbcType=VARCHAR}, + oper_number = #{operNumber,jdbcType=DECIMAL}, + basic_number = #{basicNumber,jdbcType=DECIMAL}, + unit_price = #{unitPrice,jdbcType=DECIMAL}, + tax_unit_price = #{taxUnitPrice,jdbcType=DECIMAL}, + all_price = #{allPrice,jdbcType=DECIMAL}, + remark = #{remark,jdbcType=VARCHAR}, + img = #{img,jdbcType=VARCHAR}, + incidentals = #{incidentals,jdbcType=DECIMAL}, + depot_id = #{depotId,jdbcType=BIGINT}, + another_depot_id = #{anotherDepotId,jdbcType=BIGINT}, + tax_rate = #{taxRate,jdbcType=DECIMAL}, + tax_money = #{taxMoney,jdbcType=DECIMAL}, + tax_last_money = #{taxLastMoney,jdbcType=DECIMAL}, + other_field1 = #{otherField1,jdbcType=VARCHAR}, + other_field2 = #{otherField2,jdbcType=VARCHAR}, + other_field3 = #{otherField3,jdbcType=VARCHAR}, + other_field4 = #{otherField4,jdbcType=VARCHAR}, + other_field5 = #{otherField5,jdbcType=VARCHAR}, + material_type = #{materialType,jdbcType=VARCHAR}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/DepotItemMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/DepotItemMapperEx.xml new file mode 100644 index 000000000..a052b9fdc --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/DepotItemMapperEx.xml @@ -0,0 +1,418 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + delete from jsh_depot_item + where 1=1 + and header_id in + ( + + #{depotheadId} + + ) + + + + update jsh_depot_item + set delete_flag='1' + where 1=1 + and header_id in + ( + + #{depotheadId} + + ) + + + + update jsh_depot_item + set delete_flag='1' + where 1=1 + and id in ( + + #{id} + + ) + + + + + + + + + + diff --git a/jshERP-boot/src/main/resources/mapper_xml/DepotMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/DepotMapper.xml new file mode 100644 index 000000000..73506b2bc --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/DepotMapper.xml @@ -0,0 +1,383 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + id, name, address, warehousing, truckage, type, sort, remark, principal, tenant_id, + delete_Flag, is_default + + + + + + delete from jsh_depot + where id = #{id,jdbcType=BIGINT} + + + + delete from jsh_depot + + + + + + + insert into jsh_depot (id, name, address, + warehousing, truckage, type, + sort, remark, principal, + tenant_id, delete_Flag, is_default + ) + values (#{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{address,jdbcType=VARCHAR}, + #{warehousing,jdbcType=DECIMAL}, #{truckage,jdbcType=DECIMAL}, #{type,jdbcType=INTEGER}, + #{sort,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}, #{principal,jdbcType=BIGINT}, + #{tenantId,jdbcType=BIGINT}, #{deleteFlag,jdbcType=VARCHAR}, #{isDefault,jdbcType=BIT} + ) + + + + insert into jsh_depot + + + id, + + + name, + + + address, + + + warehousing, + + + truckage, + + + type, + + + sort, + + + remark, + + + principal, + + + tenant_id, + + + delete_Flag, + + + is_default, + + + + + #{id,jdbcType=BIGINT}, + + + #{name,jdbcType=VARCHAR}, + + + #{address,jdbcType=VARCHAR}, + + + #{warehousing,jdbcType=DECIMAL}, + + + #{truckage,jdbcType=DECIMAL}, + + + #{type,jdbcType=INTEGER}, + + + #{sort,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + + + #{principal,jdbcType=BIGINT}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + #{isDefault,jdbcType=BIT}, + + + + + + + update jsh_depot + + + id = #{record.id,jdbcType=BIGINT}, + + + name = #{record.name,jdbcType=VARCHAR}, + + + address = #{record.address,jdbcType=VARCHAR}, + + + warehousing = #{record.warehousing,jdbcType=DECIMAL}, + + + truckage = #{record.truckage,jdbcType=DECIMAL}, + + + type = #{record.type,jdbcType=INTEGER}, + + + sort = #{record.sort,jdbcType=VARCHAR}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + principal = #{record.principal,jdbcType=BIGINT}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_Flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + is_default = #{record.isDefault,jdbcType=BIT}, + + + + + + + + + update jsh_depot + set id = #{record.id,jdbcType=BIGINT}, + name = #{record.name,jdbcType=VARCHAR}, + address = #{record.address,jdbcType=VARCHAR}, + warehousing = #{record.warehousing,jdbcType=DECIMAL}, + truckage = #{record.truckage,jdbcType=DECIMAL}, + type = #{record.type,jdbcType=INTEGER}, + sort = #{record.sort,jdbcType=VARCHAR}, + remark = #{record.remark,jdbcType=VARCHAR}, + principal = #{record.principal,jdbcType=BIGINT}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_Flag = #{record.deleteFlag,jdbcType=VARCHAR}, + is_default = #{record.isDefault,jdbcType=BIT} + + + + + + + update jsh_depot + + + name = #{name,jdbcType=VARCHAR}, + + + address = #{address,jdbcType=VARCHAR}, + + + warehousing = #{warehousing,jdbcType=DECIMAL}, + + + truckage = #{truckage,jdbcType=DECIMAL}, + + + type = #{type,jdbcType=INTEGER}, + + + sort = #{sort,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + principal = #{principal,jdbcType=BIGINT}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_Flag = #{deleteFlag,jdbcType=VARCHAR}, + + + is_default = #{isDefault,jdbcType=BIT}, + + + where id = #{id,jdbcType=BIGINT} + + + + update jsh_depot + set name = #{name,jdbcType=VARCHAR}, + address = #{address,jdbcType=VARCHAR}, + warehousing = #{warehousing,jdbcType=DECIMAL}, + truckage = #{truckage,jdbcType=DECIMAL}, + type = #{type,jdbcType=INTEGER}, + sort = #{sort,jdbcType=VARCHAR}, + remark = #{remark,jdbcType=VARCHAR}, + principal = #{principal,jdbcType=BIGINT}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_Flag = #{deleteFlag,jdbcType=VARCHAR}, + is_default = #{isDefault,jdbcType=BIT} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/DepotMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/DepotMapperEx.xml new file mode 100644 index 000000000..e928ab4b6 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/DepotMapperEx.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + update jsh_depot + set delete_Flag='1' + where 1=1 + and id in ( + + #{id} + + ) + + + + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/FunctionMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/FunctionMapper.xml new file mode 100644 index 000000000..9e29d876d --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/FunctionMapper.xml @@ -0,0 +1,338 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, number, name, parent_number, url, component, state, sort, enabled, type, push_btn, + icon, delete_flag + + + + + delete from jsh_function + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_function + + + + + + insert into jsh_function (id, number, name, + parent_number, url, component, + state, sort, enabled, type, + push_btn, icon, delete_flag + ) + values (#{id,jdbcType=BIGINT}, #{number,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, + #{parentNumber,jdbcType=VARCHAR}, #{url,jdbcType=VARCHAR}, #{component,jdbcType=VARCHAR}, + #{state,jdbcType=BIT}, #{sort,jdbcType=VARCHAR}, #{enabled,jdbcType=BIT}, #{type,jdbcType=VARCHAR}, + #{pushBtn,jdbcType=VARCHAR}, #{icon,jdbcType=VARCHAR}, #{deleteFlag,jdbcType=VARCHAR} + ) + + + insert into jsh_function + + + id, + + + number, + + + name, + + + parent_number, + + + url, + + + component, + + + state, + + + sort, + + + enabled, + + + type, + + + push_btn, + + + icon, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{number,jdbcType=VARCHAR}, + + + #{name,jdbcType=VARCHAR}, + + + #{parentNumber,jdbcType=VARCHAR}, + + + #{url,jdbcType=VARCHAR}, + + + #{component,jdbcType=VARCHAR}, + + + #{state,jdbcType=BIT}, + + + #{sort,jdbcType=VARCHAR}, + + + #{enabled,jdbcType=BIT}, + + + #{type,jdbcType=VARCHAR}, + + + #{pushBtn,jdbcType=VARCHAR}, + + + #{icon,jdbcType=VARCHAR}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_function + + + id = #{record.id,jdbcType=BIGINT}, + + + number = #{record.number,jdbcType=VARCHAR}, + + + name = #{record.name,jdbcType=VARCHAR}, + + + parent_number = #{record.parentNumber,jdbcType=VARCHAR}, + + + url = #{record.url,jdbcType=VARCHAR}, + + + component = #{record.component,jdbcType=VARCHAR}, + + + state = #{record.state,jdbcType=BIT}, + + + sort = #{record.sort,jdbcType=VARCHAR}, + + + enabled = #{record.enabled,jdbcType=BIT}, + + + type = #{record.type,jdbcType=VARCHAR}, + + + push_btn = #{record.pushBtn,jdbcType=VARCHAR}, + + + icon = #{record.icon,jdbcType=VARCHAR}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_function + set id = #{record.id,jdbcType=BIGINT}, + number = #{record.number,jdbcType=VARCHAR}, + name = #{record.name,jdbcType=VARCHAR}, + parent_number = #{record.parentNumber,jdbcType=VARCHAR}, + url = #{record.url,jdbcType=VARCHAR}, + component = #{record.component,jdbcType=VARCHAR}, + state = #{record.state,jdbcType=BIT}, + sort = #{record.sort,jdbcType=VARCHAR}, + enabled = #{record.enabled,jdbcType=BIT}, + type = #{record.type,jdbcType=VARCHAR}, + push_btn = #{record.pushBtn,jdbcType=VARCHAR}, + icon = #{record.icon,jdbcType=VARCHAR}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_function + + + number = #{number,jdbcType=VARCHAR}, + + + name = #{name,jdbcType=VARCHAR}, + + + parent_number = #{parentNumber,jdbcType=VARCHAR}, + + + url = #{url,jdbcType=VARCHAR}, + + + component = #{component,jdbcType=VARCHAR}, + + + state = #{state,jdbcType=BIT}, + + + sort = #{sort,jdbcType=VARCHAR}, + + + enabled = #{enabled,jdbcType=BIT}, + + + type = #{type,jdbcType=VARCHAR}, + + + push_btn = #{pushBtn,jdbcType=VARCHAR}, + + + icon = #{icon,jdbcType=VARCHAR}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_function + set number = #{number,jdbcType=VARCHAR}, + name = #{name,jdbcType=VARCHAR}, + parent_number = #{parentNumber,jdbcType=VARCHAR}, + url = #{url,jdbcType=VARCHAR}, + component = #{component,jdbcType=VARCHAR}, + state = #{state,jdbcType=BIT}, + sort = #{sort,jdbcType=VARCHAR}, + enabled = #{enabled,jdbcType=BIT}, + type = #{type,jdbcType=VARCHAR}, + push_btn = #{pushBtn,jdbcType=VARCHAR}, + icon = #{icon,jdbcType=VARCHAR}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/FunctionMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/FunctionMapperEx.xml new file mode 100644 index 000000000..095ab5933 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/FunctionMapperEx.xml @@ -0,0 +1,43 @@ + + + + + + + update jsh_function + set delete_flag='1' + where 1=1 + and id in ( + + #{id} + + ) + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/InOutItemMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/InOutItemMapper.xml new file mode 100644 index 000000000..50c2d9493 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/InOutItemMapper.xml @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, name, type, remark, tenant_id, delete_flag + + + + + delete from jsh_in_out_item + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_in_out_item + + + + + + insert into jsh_in_out_item (id, name, type, + remark, tenant_id, delete_flag + ) + values (#{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, + #{remark,jdbcType=VARCHAR}, #{tenantId,jdbcType=BIGINT}, #{deleteFlag,jdbcType=VARCHAR} + ) + + + insert into jsh_in_out_item + + + id, + + + name, + + + type, + + + remark, + + + tenant_id, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{name,jdbcType=VARCHAR}, + + + #{type,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_in_out_item + + + id = #{record.id,jdbcType=BIGINT}, + + + name = #{record.name,jdbcType=VARCHAR}, + + + type = #{record.type,jdbcType=VARCHAR}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_in_out_item + set id = #{record.id,jdbcType=BIGINT}, + name = #{record.name,jdbcType=VARCHAR}, + type = #{record.type,jdbcType=VARCHAR}, + remark = #{record.remark,jdbcType=VARCHAR}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_in_out_item + + + name = #{name,jdbcType=VARCHAR}, + + + type = #{type,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_in_out_item + set name = #{name,jdbcType=VARCHAR}, + type = #{type,jdbcType=VARCHAR}, + remark = #{remark,jdbcType=VARCHAR}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/InOutItemMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/InOutItemMapperEx.xml new file mode 100644 index 000000000..d3315ec5d --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/InOutItemMapperEx.xml @@ -0,0 +1,48 @@ + + + + + + + update jsh_in_out_item + set delete_flag='1' + where 1=1 + and id in ( + + #{id} + + ) + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/LogMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/LogMapper.xml new file mode 100644 index 000000000..81c4e3440 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/LogMapper.xml @@ -0,0 +1,258 @@ + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, user_id, operation, client_ip, create_time, status, content, tenant_id + + + + + delete from jsh_log + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_log + + + + + + insert into jsh_log (id, user_id, operation, + client_ip, create_time, status, + content, tenant_id) + values (#{id,jdbcType=BIGINT}, #{userId,jdbcType=BIGINT}, #{operation,jdbcType=VARCHAR}, + #{clientIp,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{status,jdbcType=TINYINT}, + #{content,jdbcType=VARCHAR}, #{tenantId,jdbcType=BIGINT}) + + + insert into jsh_log + + + id, + + + user_id, + + + operation, + + + client_ip, + + + create_time, + + + status, + + + content, + + + tenant_id, + + + + + #{id,jdbcType=BIGINT}, + + + #{userId,jdbcType=BIGINT}, + + + #{operation,jdbcType=VARCHAR}, + + + #{clientIp,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{status,jdbcType=TINYINT}, + + + #{content,jdbcType=VARCHAR}, + + + #{tenantId,jdbcType=BIGINT}, + + + + + + update jsh_log + + + id = #{record.id,jdbcType=BIGINT}, + + + user_id = #{record.userId,jdbcType=BIGINT}, + + + operation = #{record.operation,jdbcType=VARCHAR}, + + + client_ip = #{record.clientIp,jdbcType=VARCHAR}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + status = #{record.status,jdbcType=TINYINT}, + + + content = #{record.content,jdbcType=VARCHAR}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + + + + + + update jsh_log + set id = #{record.id,jdbcType=BIGINT}, + user_id = #{record.userId,jdbcType=BIGINT}, + operation = #{record.operation,jdbcType=VARCHAR}, + client_ip = #{record.clientIp,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + status = #{record.status,jdbcType=TINYINT}, + content = #{record.content,jdbcType=VARCHAR}, + tenant_id = #{record.tenantId,jdbcType=BIGINT} + + + + + + update jsh_log + + + user_id = #{userId,jdbcType=BIGINT}, + + + operation = #{operation,jdbcType=VARCHAR}, + + + client_ip = #{clientIp,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + status = #{status,jdbcType=TINYINT}, + + + content = #{content,jdbcType=VARCHAR}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_log + set user_id = #{userId,jdbcType=BIGINT}, + operation = #{operation,jdbcType=VARCHAR}, + client_ip = #{clientIp,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + status = #{status,jdbcType=TINYINT}, + content = #{content,jdbcType=VARCHAR}, + tenant_id = #{tenantId,jdbcType=BIGINT} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/LogMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/LogMapperEx.xml new file mode 100644 index 000000000..c593800cb --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/LogMapperEx.xml @@ -0,0 +1,67 @@ + + + + + + + + + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/MaterialCategoryMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/MaterialCategoryMapper.xml new file mode 100644 index 000000000..7830e655e --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/MaterialCategoryMapper.xml @@ -0,0 +1,306 @@ + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, name, category_level, parent_id, sort, serial_no, remark, create_time, update_time, + tenant_id, delete_flag + + + + + delete from jsh_material_category + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_material_category + + + + + + insert into jsh_material_category (id, name, category_level, + parent_id, sort, serial_no, + remark, create_time, update_time, + tenant_id, delete_flag) + values (#{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{categoryLevel,jdbcType=SMALLINT}, + #{parentId,jdbcType=BIGINT}, #{sort,jdbcType=VARCHAR}, #{serialNo,jdbcType=VARCHAR}, + #{remark,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}, + #{tenantId,jdbcType=BIGINT}, #{deleteFlag,jdbcType=VARCHAR}) + + + insert into jsh_material_category + + + id, + + + name, + + + category_level, + + + parent_id, + + + sort, + + + serial_no, + + + remark, + + + create_time, + + + update_time, + + + tenant_id, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{name,jdbcType=VARCHAR}, + + + #{categoryLevel,jdbcType=SMALLINT}, + + + #{parentId,jdbcType=BIGINT}, + + + #{sort,jdbcType=VARCHAR}, + + + #{serialNo,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{updateTime,jdbcType=TIMESTAMP}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_material_category + + + id = #{record.id,jdbcType=BIGINT}, + + + name = #{record.name,jdbcType=VARCHAR}, + + + category_level = #{record.categoryLevel,jdbcType=SMALLINT}, + + + parent_id = #{record.parentId,jdbcType=BIGINT}, + + + sort = #{record.sort,jdbcType=VARCHAR}, + + + serial_no = #{record.serialNo,jdbcType=VARCHAR}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + update_time = #{record.updateTime,jdbcType=TIMESTAMP}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_material_category + set id = #{record.id,jdbcType=BIGINT}, + name = #{record.name,jdbcType=VARCHAR}, + category_level = #{record.categoryLevel,jdbcType=SMALLINT}, + parent_id = #{record.parentId,jdbcType=BIGINT}, + sort = #{record.sort,jdbcType=VARCHAR}, + serial_no = #{record.serialNo,jdbcType=VARCHAR}, + remark = #{record.remark,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + update_time = #{record.updateTime,jdbcType=TIMESTAMP}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_material_category + + + name = #{name,jdbcType=VARCHAR}, + + + category_level = #{categoryLevel,jdbcType=SMALLINT}, + + + parent_id = #{parentId,jdbcType=BIGINT}, + + + sort = #{sort,jdbcType=VARCHAR}, + + + serial_no = #{serialNo,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_material_category + set name = #{name,jdbcType=VARCHAR}, + category_level = #{categoryLevel,jdbcType=SMALLINT}, + parent_id = #{parentId,jdbcType=BIGINT}, + sort = #{sort,jdbcType=VARCHAR}, + serial_no = #{serialNo,jdbcType=VARCHAR}, + remark = #{remark,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + update_time = #{updateTime,jdbcType=TIMESTAMP}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/MaterialCategoryMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/MaterialCategoryMapperEx.xml new file mode 100644 index 000000000..765b1c956 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/MaterialCategoryMapperEx.xml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, name + + + + + + + insert into jsh_material_category + (name, category_level, parent_id, sort,status,serial_no,remark, + create_time, update_time) + values + (#{name},#{categoryLevel},#{parentId},#{sort},#{status},#{serialNo},#{remark}, + #{createTime},#{updateTime} + ) + + + update jsh_material_category + set update_time=#{updateTime},delete_flag='1' + where id in ( + + #{id} + + ) + + + update jsh_material_category + set update_time=#{updateTime}, + parent_id=#{parentId},sort=#{sort},serial_no=#{serialNo}, + name=#{name},remark=#{remark} + where id =#{id} + + + + + + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/MaterialCurrentStockMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/MaterialCurrentStockMapper.xml new file mode 100644 index 000000000..9d3ca6933 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/MaterialCurrentStockMapper.xml @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, material_id, depot_id, current_number, tenant_id, delete_flag + + + + + delete from jsh_material_current_stock + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_material_current_stock + + + + + + insert into jsh_material_current_stock (id, material_id, depot_id, + current_number, tenant_id, delete_flag + ) + values (#{id,jdbcType=BIGINT}, #{materialId,jdbcType=BIGINT}, #{depotId,jdbcType=BIGINT}, + #{currentNumber,jdbcType=DECIMAL}, #{tenantId,jdbcType=BIGINT}, #{deleteFlag,jdbcType=VARCHAR} + ) + + + insert into jsh_material_current_stock + + + id, + + + material_id, + + + depot_id, + + + current_number, + + + tenant_id, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{materialId,jdbcType=BIGINT}, + + + #{depotId,jdbcType=BIGINT}, + + + #{currentNumber,jdbcType=DECIMAL}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_material_current_stock + + + id = #{record.id,jdbcType=BIGINT}, + + + material_id = #{record.materialId,jdbcType=BIGINT}, + + + depot_id = #{record.depotId,jdbcType=BIGINT}, + + + current_number = #{record.currentNumber,jdbcType=DECIMAL}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_material_current_stock + set id = #{record.id,jdbcType=BIGINT}, + material_id = #{record.materialId,jdbcType=BIGINT}, + depot_id = #{record.depotId,jdbcType=BIGINT}, + current_number = #{record.currentNumber,jdbcType=DECIMAL}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_material_current_stock + + + material_id = #{materialId,jdbcType=BIGINT}, + + + depot_id = #{depotId,jdbcType=BIGINT}, + + + current_number = #{currentNumber,jdbcType=DECIMAL}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_material_current_stock + set material_id = #{materialId,jdbcType=BIGINT}, + depot_id = #{depotId,jdbcType=BIGINT}, + current_number = #{currentNumber,jdbcType=DECIMAL}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/MaterialExtendMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/MaterialExtendMapper.xml new file mode 100644 index 000000000..a90f29ef8 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/MaterialExtendMapper.xml @@ -0,0 +1,371 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, material_id, bar_code, commodity_unit, purchase_decimal, commodity_decimal, wholesale_decimal, + low_decimal, default_flag, create_time, create_serial, update_serial, update_time, + tenant_id, delete_Flag + + + + + delete from jsh_material_extend + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_material_extend + + + + + + insert into jsh_material_extend (id, material_id, bar_code, + commodity_unit, purchase_decimal, commodity_decimal, + wholesale_decimal, low_decimal, default_flag, + create_time, create_serial, update_serial, + update_time, tenant_id, delete_Flag + ) + values (#{id,jdbcType=BIGINT}, #{materialId,jdbcType=BIGINT}, #{barCode,jdbcType=VARCHAR}, + #{commodityUnit,jdbcType=VARCHAR}, #{purchaseDecimal,jdbcType=DECIMAL}, #{commodityDecimal,jdbcType=DECIMAL}, + #{wholesaleDecimal,jdbcType=DECIMAL}, #{lowDecimal,jdbcType=DECIMAL}, #{defaultFlag,jdbcType=VARCHAR}, + #{createTime,jdbcType=TIMESTAMP}, #{createSerial,jdbcType=VARCHAR}, #{updateSerial,jdbcType=VARCHAR}, + #{updateTime,jdbcType=BIGINT}, #{tenantId,jdbcType=BIGINT}, #{deleteFlag,jdbcType=VARCHAR} + ) + + + insert into jsh_material_extend + + + id, + + + material_id, + + + bar_code, + + + commodity_unit, + + + purchase_decimal, + + + commodity_decimal, + + + wholesale_decimal, + + + low_decimal, + + + default_flag, + + + create_time, + + + create_serial, + + + update_serial, + + + update_time, + + + tenant_id, + + + delete_Flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{materialId,jdbcType=BIGINT}, + + + #{barCode,jdbcType=VARCHAR}, + + + #{commodityUnit,jdbcType=VARCHAR}, + + + #{purchaseDecimal,jdbcType=DECIMAL}, + + + #{commodityDecimal,jdbcType=DECIMAL}, + + + #{wholesaleDecimal,jdbcType=DECIMAL}, + + + #{lowDecimal,jdbcType=DECIMAL}, + + + #{defaultFlag,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{createSerial,jdbcType=VARCHAR}, + + + #{updateSerial,jdbcType=VARCHAR}, + + + #{updateTime,jdbcType=BIGINT}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_material_extend + + + id = #{record.id,jdbcType=BIGINT}, + + + material_id = #{record.materialId,jdbcType=BIGINT}, + + + bar_code = #{record.barCode,jdbcType=VARCHAR}, + + + commodity_unit = #{record.commodityUnit,jdbcType=VARCHAR}, + + + purchase_decimal = #{record.purchaseDecimal,jdbcType=DECIMAL}, + + + commodity_decimal = #{record.commodityDecimal,jdbcType=DECIMAL}, + + + wholesale_decimal = #{record.wholesaleDecimal,jdbcType=DECIMAL}, + + + low_decimal = #{record.lowDecimal,jdbcType=DECIMAL}, + + + default_flag = #{record.defaultFlag,jdbcType=VARCHAR}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + create_serial = #{record.createSerial,jdbcType=VARCHAR}, + + + update_serial = #{record.updateSerial,jdbcType=VARCHAR}, + + + update_time = #{record.updateTime,jdbcType=BIGINT}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_Flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_material_extend + set id = #{record.id,jdbcType=BIGINT}, + material_id = #{record.materialId,jdbcType=BIGINT}, + bar_code = #{record.barCode,jdbcType=VARCHAR}, + commodity_unit = #{record.commodityUnit,jdbcType=VARCHAR}, + purchase_decimal = #{record.purchaseDecimal,jdbcType=DECIMAL}, + commodity_decimal = #{record.commodityDecimal,jdbcType=DECIMAL}, + wholesale_decimal = #{record.wholesaleDecimal,jdbcType=DECIMAL}, + low_decimal = #{record.lowDecimal,jdbcType=DECIMAL}, + default_flag = #{record.defaultFlag,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + create_serial = #{record.createSerial,jdbcType=VARCHAR}, + update_serial = #{record.updateSerial,jdbcType=VARCHAR}, + update_time = #{record.updateTime,jdbcType=BIGINT}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_Flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_material_extend + + + material_id = #{materialId,jdbcType=BIGINT}, + + + bar_code = #{barCode,jdbcType=VARCHAR}, + + + commodity_unit = #{commodityUnit,jdbcType=VARCHAR}, + + + purchase_decimal = #{purchaseDecimal,jdbcType=DECIMAL}, + + + commodity_decimal = #{commodityDecimal,jdbcType=DECIMAL}, + + + wholesale_decimal = #{wholesaleDecimal,jdbcType=DECIMAL}, + + + low_decimal = #{lowDecimal,jdbcType=DECIMAL}, + + + default_flag = #{defaultFlag,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + create_serial = #{createSerial,jdbcType=VARCHAR}, + + + update_serial = #{updateSerial,jdbcType=VARCHAR}, + + + update_time = #{updateTime,jdbcType=BIGINT}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_Flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_material_extend + set material_id = #{materialId,jdbcType=BIGINT}, + bar_code = #{barCode,jdbcType=VARCHAR}, + commodity_unit = #{commodityUnit,jdbcType=VARCHAR}, + purchase_decimal = #{purchaseDecimal,jdbcType=DECIMAL}, + commodity_decimal = #{commodityDecimal,jdbcType=DECIMAL}, + wholesale_decimal = #{wholesaleDecimal,jdbcType=DECIMAL}, + low_decimal = #{lowDecimal,jdbcType=DECIMAL}, + default_flag = #{defaultFlag,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + create_serial = #{createSerial,jdbcType=VARCHAR}, + update_serial = #{updateSerial,jdbcType=VARCHAR}, + update_time = #{updateTime,jdbcType=BIGINT}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_Flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/MaterialExtendMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/MaterialExtendMapperEx.xml new file mode 100644 index 000000000..a7577dac0 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/MaterialExtendMapperEx.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + update jsh_material_extend + set delete_Flag='1' + where 1=1 + and ifnull(delete_Flag,'0') !='1' + and id in ( + + #{id} + + ) + + + + update jsh_material_extend + set delete_Flag='1' + where 1=1 + and ifnull(delete_Flag,'0') !='1' + and material_id in ( + + #{id} + + ) + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/MaterialInitialStockMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/MaterialInitialStockMapper.xml new file mode 100644 index 000000000..99a9dffa1 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/MaterialInitialStockMapper.xml @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, material_id, depot_id, number, tenant_id, delete_flag + + + + + delete from jsh_material_initial_stock + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_material_initial_stock + + + + + + insert into jsh_material_initial_stock (id, material_id, depot_id, + number, tenant_id, delete_flag + ) + values (#{id,jdbcType=BIGINT}, #{materialId,jdbcType=BIGINT}, #{depotId,jdbcType=BIGINT}, + #{number,jdbcType=DECIMAL}, #{tenantId,jdbcType=BIGINT}, #{deleteFlag,jdbcType=VARCHAR} + ) + + + insert into jsh_material_initial_stock + + + id, + + + material_id, + + + depot_id, + + + number, + + + tenant_id, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{materialId,jdbcType=BIGINT}, + + + #{depotId,jdbcType=BIGINT}, + + + #{number,jdbcType=DECIMAL}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_material_initial_stock + + + id = #{record.id,jdbcType=BIGINT}, + + + material_id = #{record.materialId,jdbcType=BIGINT}, + + + depot_id = #{record.depotId,jdbcType=BIGINT}, + + + number = #{record.number,jdbcType=DECIMAL}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_material_initial_stock + set id = #{record.id,jdbcType=BIGINT}, + material_id = #{record.materialId,jdbcType=BIGINT}, + depot_id = #{record.depotId,jdbcType=BIGINT}, + number = #{record.number,jdbcType=DECIMAL}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_material_initial_stock + + + material_id = #{materialId,jdbcType=BIGINT}, + + + depot_id = #{depotId,jdbcType=BIGINT}, + + + number = #{number,jdbcType=DECIMAL}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_material_initial_stock + set material_id = #{materialId,jdbcType=BIGINT}, + depot_id = #{depotId,jdbcType=BIGINT}, + number = #{number,jdbcType=DECIMAL}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/MaterialMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/MaterialMapper.xml new file mode 100644 index 000000000..d2227d5fc --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/MaterialMapper.xml @@ -0,0 +1,418 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, category_id, name, mfrs, safety_stock, model, standard, color, unit, remark, + unit_id, enabled, other_field1, other_field2, other_field3, enable_serial_number, + tenant_id, delete_flag + + + + + delete from jsh_material + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_material + + + + + + insert into jsh_material (id, category_id, name, + mfrs, safety_stock, model, + standard, color, unit, + remark, unit_id, enabled, + other_field1, other_field2, other_field3, + enable_serial_number, tenant_id, delete_flag + ) + values (#{id,jdbcType=BIGINT}, #{categoryId,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, + #{mfrs,jdbcType=VARCHAR}, #{safetyStock,jdbcType=DECIMAL}, #{model,jdbcType=VARCHAR}, + #{standard,jdbcType=VARCHAR}, #{color,jdbcType=VARCHAR}, #{unit,jdbcType=VARCHAR}, + #{remark,jdbcType=VARCHAR}, #{unitId,jdbcType=BIGINT}, #{enabled,jdbcType=BIT}, + #{otherField1,jdbcType=VARCHAR}, #{otherField2,jdbcType=VARCHAR}, #{otherField3,jdbcType=VARCHAR}, + #{enableSerialNumber,jdbcType=VARCHAR}, #{tenantId,jdbcType=BIGINT}, #{deleteFlag,jdbcType=VARCHAR} + ) + + + insert into jsh_material + + + id, + + + category_id, + + + name, + + + mfrs, + + + safety_stock, + + + model, + + + standard, + + + color, + + + unit, + + + remark, + + + unit_id, + + + enabled, + + + other_field1, + + + other_field2, + + + other_field3, + + + enable_serial_number, + + + tenant_id, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{categoryId,jdbcType=BIGINT}, + + + #{name,jdbcType=VARCHAR}, + + + #{mfrs,jdbcType=VARCHAR}, + + + #{safetyStock,jdbcType=DECIMAL}, + + + #{model,jdbcType=VARCHAR}, + + + #{standard,jdbcType=VARCHAR}, + + + #{color,jdbcType=VARCHAR}, + + + #{unit,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + + + #{unitId,jdbcType=BIGINT}, + + + #{enabled,jdbcType=BIT}, + + + #{otherField1,jdbcType=VARCHAR}, + + + #{otherField2,jdbcType=VARCHAR}, + + + #{otherField3,jdbcType=VARCHAR}, + + + #{enableSerialNumber,jdbcType=VARCHAR}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_material + + + id = #{record.id,jdbcType=BIGINT}, + + + category_id = #{record.categoryId,jdbcType=BIGINT}, + + + name = #{record.name,jdbcType=VARCHAR}, + + + mfrs = #{record.mfrs,jdbcType=VARCHAR}, + + + safety_stock = #{record.safetyStock,jdbcType=DECIMAL}, + + + model = #{record.model,jdbcType=VARCHAR}, + + + standard = #{record.standard,jdbcType=VARCHAR}, + + + color = #{record.color,jdbcType=VARCHAR}, + + + unit = #{record.unit,jdbcType=VARCHAR}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + unit_id = #{record.unitId,jdbcType=BIGINT}, + + + enabled = #{record.enabled,jdbcType=BIT}, + + + other_field1 = #{record.otherField1,jdbcType=VARCHAR}, + + + other_field2 = #{record.otherField2,jdbcType=VARCHAR}, + + + other_field3 = #{record.otherField3,jdbcType=VARCHAR}, + + + enable_serial_number = #{record.enableSerialNumber,jdbcType=VARCHAR}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_material + set id = #{record.id,jdbcType=BIGINT}, + category_id = #{record.categoryId,jdbcType=BIGINT}, + name = #{record.name,jdbcType=VARCHAR}, + mfrs = #{record.mfrs,jdbcType=VARCHAR}, + safety_stock = #{record.safetyStock,jdbcType=DECIMAL}, + model = #{record.model,jdbcType=VARCHAR}, + standard = #{record.standard,jdbcType=VARCHAR}, + color = #{record.color,jdbcType=VARCHAR}, + unit = #{record.unit,jdbcType=VARCHAR}, + remark = #{record.remark,jdbcType=VARCHAR}, + unit_id = #{record.unitId,jdbcType=BIGINT}, + enabled = #{record.enabled,jdbcType=BIT}, + other_field1 = #{record.otherField1,jdbcType=VARCHAR}, + other_field2 = #{record.otherField2,jdbcType=VARCHAR}, + other_field3 = #{record.otherField3,jdbcType=VARCHAR}, + enable_serial_number = #{record.enableSerialNumber,jdbcType=VARCHAR}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_material + + + category_id = #{categoryId,jdbcType=BIGINT}, + + + name = #{name,jdbcType=VARCHAR}, + + + mfrs = #{mfrs,jdbcType=VARCHAR}, + + + safety_stock = #{safetyStock,jdbcType=DECIMAL}, + + + model = #{model,jdbcType=VARCHAR}, + + + standard = #{standard,jdbcType=VARCHAR}, + + + color = #{color,jdbcType=VARCHAR}, + + + unit = #{unit,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + unit_id = #{unitId,jdbcType=BIGINT}, + + + enabled = #{enabled,jdbcType=BIT}, + + + other_field1 = #{otherField1,jdbcType=VARCHAR}, + + + other_field2 = #{otherField2,jdbcType=VARCHAR}, + + + other_field3 = #{otherField3,jdbcType=VARCHAR}, + + + enable_serial_number = #{enableSerialNumber,jdbcType=VARCHAR}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_material + set category_id = #{categoryId,jdbcType=BIGINT}, + name = #{name,jdbcType=VARCHAR}, + mfrs = #{mfrs,jdbcType=VARCHAR}, + safety_stock = #{safetyStock,jdbcType=DECIMAL}, + model = #{model,jdbcType=VARCHAR}, + standard = #{standard,jdbcType=VARCHAR}, + color = #{color,jdbcType=VARCHAR}, + unit = #{unit,jdbcType=VARCHAR}, + remark = #{remark,jdbcType=VARCHAR}, + unit_id = #{unitId,jdbcType=BIGINT}, + enabled = #{enabled,jdbcType=BIT}, + other_field1 = #{otherField1,jdbcType=VARCHAR}, + other_field2 = #{otherField2,jdbcType=VARCHAR}, + other_field3 = #{otherField3,jdbcType=VARCHAR}, + enable_serial_number = #{enableSerialNumber,jdbcType=VARCHAR}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/MaterialMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/MaterialMapperEx.xml new file mode 100644 index 000000000..25d4e3793 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/MaterialMapperEx.xml @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + update jsh_material + set delete_flag='1' + where 1=1 + and ifnull(delete_flag,'0') !='1' + and id in ( + + #{id} + + ) + + + + + + + + + + + + + + update jsh_material + set unit_id = null + where 1=1 + and ifnull(delete_flag,'0') !='1' + and id = #{id} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/MaterialPropertyMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/MaterialPropertyMapper.xml new file mode 100644 index 000000000..36e1e589a --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/MaterialPropertyMapper.xml @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, native_name, enabled, sort, another_name, delete_flag + + + + + delete from jsh_material_property + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_material_property + + + + + + insert into jsh_material_property (id, native_name, enabled, + sort, another_name, delete_flag + ) + values (#{id,jdbcType=BIGINT}, #{nativeName,jdbcType=VARCHAR}, #{enabled,jdbcType=BIT}, + #{sort,jdbcType=VARCHAR}, #{anotherName,jdbcType=VARCHAR}, #{deleteFlag,jdbcType=VARCHAR} + ) + + + insert into jsh_material_property + + + id, + + + native_name, + + + enabled, + + + sort, + + + another_name, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{nativeName,jdbcType=VARCHAR}, + + + #{enabled,jdbcType=BIT}, + + + #{sort,jdbcType=VARCHAR}, + + + #{anotherName,jdbcType=VARCHAR}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_material_property + + + id = #{record.id,jdbcType=BIGINT}, + + + native_name = #{record.nativeName,jdbcType=VARCHAR}, + + + enabled = #{record.enabled,jdbcType=BIT}, + + + sort = #{record.sort,jdbcType=VARCHAR}, + + + another_name = #{record.anotherName,jdbcType=VARCHAR}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_material_property + set id = #{record.id,jdbcType=BIGINT}, + native_name = #{record.nativeName,jdbcType=VARCHAR}, + enabled = #{record.enabled,jdbcType=BIT}, + sort = #{record.sort,jdbcType=VARCHAR}, + another_name = #{record.anotherName,jdbcType=VARCHAR}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_material_property + + + native_name = #{nativeName,jdbcType=VARCHAR}, + + + enabled = #{enabled,jdbcType=BIT}, + + + sort = #{sort,jdbcType=VARCHAR}, + + + another_name = #{anotherName,jdbcType=VARCHAR}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_material_property + set native_name = #{nativeName,jdbcType=VARCHAR}, + enabled = #{enabled,jdbcType=BIT}, + sort = #{sort,jdbcType=VARCHAR}, + another_name = #{anotherName,jdbcType=VARCHAR}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/MaterialPropertyMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/MaterialPropertyMapperEx.xml new file mode 100644 index 000000000..16893ec29 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/MaterialPropertyMapperEx.xml @@ -0,0 +1,36 @@ + + + + + + + update jsh_material_property + set delete_flag='1' + where 1=1 + and id in ( + + #{id} + + ) + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/MsgMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/MsgMapper.xml new file mode 100644 index 000000000..419dee9ea --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/MsgMapper.xml @@ -0,0 +1,318 @@ + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + id, msg_title, msg_content, create_time, type, status, tenant_id, delete_Flag + + + + + + delete from jsh_msg + where id = #{id,jdbcType=BIGINT} + + + + delete from jsh_msg + + + + + + + insert into jsh_msg (id, msg_title, msg_content, + create_time, type, status, + tenant_id, delete_Flag) + values (#{id,jdbcType=BIGINT}, #{msgTitle,jdbcType=VARCHAR}, #{msgContent,jdbcType=VARCHAR}, + #{createTime,jdbcType=TIMESTAMP}, #{type,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR}, + #{tenantId,jdbcType=BIGINT}, #{deleteFlag,jdbcType=VARCHAR}) + + + + insert into jsh_msg + + + id, + + + msg_title, + + + msg_content, + + + create_time, + + + type, + + + status, + + + tenant_id, + + + delete_Flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{msgTitle,jdbcType=VARCHAR}, + + + #{msgContent,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{type,jdbcType=VARCHAR}, + + + #{status,jdbcType=VARCHAR}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + + update jsh_msg + + + id = #{record.id,jdbcType=BIGINT}, + + + msg_title = #{record.msgTitle,jdbcType=VARCHAR}, + + + msg_content = #{record.msgContent,jdbcType=VARCHAR}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + type = #{record.type,jdbcType=VARCHAR}, + + + status = #{record.status,jdbcType=VARCHAR}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_Flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + + update jsh_msg + set id = #{record.id,jdbcType=BIGINT}, + msg_title = #{record.msgTitle,jdbcType=VARCHAR}, + msg_content = #{record.msgContent,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + type = #{record.type,jdbcType=VARCHAR}, + status = #{record.status,jdbcType=VARCHAR}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_Flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + + update jsh_msg + + + msg_title = #{msgTitle,jdbcType=VARCHAR}, + + + msg_content = #{msgContent,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + type = #{type,jdbcType=VARCHAR}, + + + status = #{status,jdbcType=VARCHAR}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_Flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + + update jsh_msg + set msg_title = #{msgTitle,jdbcType=VARCHAR}, + msg_content = #{msgContent,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + type = #{type,jdbcType=VARCHAR}, + status = #{status,jdbcType=VARCHAR}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_Flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/MsgMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/MsgMapperEx.xml new file mode 100644 index 000000000..c31e3e9d7 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/MsgMapperEx.xml @@ -0,0 +1,71 @@ + + + + + + + update jsh_msg + set delete_Flag='1' + where 1=1 + and id in ( + + #{id} + + ) + + + + insert into jsh_msg(msg_title,msg_content,create_time,type,status,tenant_id) + values ( + #{msgTitle,jdbcType=VARCHAR}, + #{msgContent,jdbcType=VARCHAR}, + #{createTime,jdbcType=TIMESTAMP}, + #{type,jdbcType=VARCHAR}, + #{status,jdbcType=VARCHAR}, + #{tenantId,jdbcType=BIGINT} + ) + + + + + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/OrgaUserRelMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/OrgaUserRelMapper.xml new file mode 100644 index 000000000..0c81ffbf9 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/OrgaUserRelMapper.xml @@ -0,0 +1,351 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + id, orga_id, user_id, user_blng_orga_dspl_seq, delete_flag, create_time, creator, + update_time, updater, tenant_id + + + + + + delete from jsh_orga_user_rel + where id = #{id,jdbcType=BIGINT} + + + + delete from jsh_orga_user_rel + + + + + + + insert into jsh_orga_user_rel (id, orga_id, user_id, + user_blng_orga_dspl_seq, delete_flag, create_time, + creator, update_time, updater, + tenant_id) + values (#{id,jdbcType=BIGINT}, #{orgaId,jdbcType=BIGINT}, #{userId,jdbcType=BIGINT}, + #{userBlngOrgaDsplSeq,jdbcType=VARCHAR}, #{deleteFlag,jdbcType=CHAR}, #{createTime,jdbcType=TIMESTAMP}, + #{creator,jdbcType=BIGINT}, #{updateTime,jdbcType=TIMESTAMP}, #{updater,jdbcType=BIGINT}, + #{tenantId,jdbcType=BIGINT}) + + + + insert into jsh_orga_user_rel + + + id, + + + orga_id, + + + user_id, + + + user_blng_orga_dspl_seq, + + + delete_flag, + + + create_time, + + + creator, + + + update_time, + + + updater, + + + tenant_id, + + + + + #{id,jdbcType=BIGINT}, + + + #{orgaId,jdbcType=BIGINT}, + + + #{userId,jdbcType=BIGINT}, + + + #{userBlngOrgaDsplSeq,jdbcType=VARCHAR}, + + + #{deleteFlag,jdbcType=CHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{creator,jdbcType=BIGINT}, + + + #{updateTime,jdbcType=TIMESTAMP}, + + + #{updater,jdbcType=BIGINT}, + + + #{tenantId,jdbcType=BIGINT}, + + + + + + + update jsh_orga_user_rel + + + id = #{record.id,jdbcType=BIGINT}, + + + orga_id = #{record.orgaId,jdbcType=BIGINT}, + + + user_id = #{record.userId,jdbcType=BIGINT}, + + + user_blng_orga_dspl_seq = #{record.userBlngOrgaDsplSeq,jdbcType=VARCHAR}, + + + delete_flag = #{record.deleteFlag,jdbcType=CHAR}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + creator = #{record.creator,jdbcType=BIGINT}, + + + update_time = #{record.updateTime,jdbcType=TIMESTAMP}, + + + updater = #{record.updater,jdbcType=BIGINT}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + + + + + + + update jsh_orga_user_rel + set id = #{record.id,jdbcType=BIGINT}, + orga_id = #{record.orgaId,jdbcType=BIGINT}, + user_id = #{record.userId,jdbcType=BIGINT}, + user_blng_orga_dspl_seq = #{record.userBlngOrgaDsplSeq,jdbcType=VARCHAR}, + delete_flag = #{record.deleteFlag,jdbcType=CHAR}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + creator = #{record.creator,jdbcType=BIGINT}, + update_time = #{record.updateTime,jdbcType=TIMESTAMP}, + updater = #{record.updater,jdbcType=BIGINT}, + tenant_id = #{record.tenantId,jdbcType=BIGINT} + + + + + + + update jsh_orga_user_rel + + + orga_id = #{orgaId,jdbcType=BIGINT}, + + + user_id = #{userId,jdbcType=BIGINT}, + + + user_blng_orga_dspl_seq = #{userBlngOrgaDsplSeq,jdbcType=VARCHAR}, + + + delete_flag = #{deleteFlag,jdbcType=CHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + creator = #{creator,jdbcType=BIGINT}, + + + update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + updater = #{updater,jdbcType=BIGINT}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + where id = #{id,jdbcType=BIGINT} + + + + update jsh_orga_user_rel + set orga_id = #{orgaId,jdbcType=BIGINT}, + user_id = #{userId,jdbcType=BIGINT}, + user_blng_orga_dspl_seq = #{userBlngOrgaDsplSeq,jdbcType=VARCHAR}, + delete_flag = #{deleteFlag,jdbcType=CHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + creator = #{creator,jdbcType=BIGINT}, + update_time = #{updateTime,jdbcType=TIMESTAMP}, + updater = #{updater,jdbcType=BIGINT}, + tenant_id = #{tenantId,jdbcType=BIGINT} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/OrgaUserRelMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/OrgaUserRelMapperEx.xml new file mode 100644 index 000000000..1a18a41ac --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/OrgaUserRelMapperEx.xml @@ -0,0 +1,44 @@ + + + + + + + insert into jsh_orga_user_rel (orga_id, user_id, + user_blng_orga_dspl_seq, delete_flag, create_time, + creator, update_time, updater + ) + values (#{orgaId,jdbcType=BIGINT}, #{userId,jdbcType=BIGINT}, + #{userBlngOrgaDsplSeq,jdbcType=VARCHAR}, #{deleteFlag,jdbcType=CHAR}, #{createTime,jdbcType=TIMESTAMP}, + #{creator,jdbcType=BIGINT}, #{updateTime,jdbcType=TIMESTAMP}, #{updater,jdbcType=BIGINT} + ) + + + update jsh_orga_user_rel + + + orga_id = #{orgaId}, + + + user_id = #{userId}, + + + user_blng_orga_dspl_seq = #{userBlngOrgaDsplSeq}, + + + delete_flag = #{deleteFlag}, + + + update_time = #{updateTime}, + + + updater = #{updater}, + + + where 1=1 + and id=#{id} + + + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/OrganizationMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/OrganizationMapper.xml new file mode 100644 index 000000000..8adfc2ccc --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/OrganizationMapper.xml @@ -0,0 +1,306 @@ + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, org_no, org_full_name, org_abr, parent_id, sort, remark, create_time, update_time, + tenant_id, delete_flag + + + + + delete from jsh_organization + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_organization + + + + + + insert into jsh_organization (id, org_no, org_full_name, + org_abr, parent_id, sort, + remark, create_time, update_time, + tenant_id, delete_flag) + values (#{id,jdbcType=BIGINT}, #{orgNo,jdbcType=VARCHAR}, #{orgFullName,jdbcType=VARCHAR}, + #{orgAbr,jdbcType=VARCHAR}, #{parentId,jdbcType=BIGINT}, #{sort,jdbcType=VARCHAR}, + #{remark,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}, + #{tenantId,jdbcType=BIGINT}, #{deleteFlag,jdbcType=VARCHAR}) + + + insert into jsh_organization + + + id, + + + org_no, + + + org_full_name, + + + org_abr, + + + parent_id, + + + sort, + + + remark, + + + create_time, + + + update_time, + + + tenant_id, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{orgNo,jdbcType=VARCHAR}, + + + #{orgFullName,jdbcType=VARCHAR}, + + + #{orgAbr,jdbcType=VARCHAR}, + + + #{parentId,jdbcType=BIGINT}, + + + #{sort,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{updateTime,jdbcType=TIMESTAMP}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_organization + + + id = #{record.id,jdbcType=BIGINT}, + + + org_no = #{record.orgNo,jdbcType=VARCHAR}, + + + org_full_name = #{record.orgFullName,jdbcType=VARCHAR}, + + + org_abr = #{record.orgAbr,jdbcType=VARCHAR}, + + + parent_id = #{record.parentId,jdbcType=BIGINT}, + + + sort = #{record.sort,jdbcType=VARCHAR}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + update_time = #{record.updateTime,jdbcType=TIMESTAMP}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_organization + set id = #{record.id,jdbcType=BIGINT}, + org_no = #{record.orgNo,jdbcType=VARCHAR}, + org_full_name = #{record.orgFullName,jdbcType=VARCHAR}, + org_abr = #{record.orgAbr,jdbcType=VARCHAR}, + parent_id = #{record.parentId,jdbcType=BIGINT}, + sort = #{record.sort,jdbcType=VARCHAR}, + remark = #{record.remark,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + update_time = #{record.updateTime,jdbcType=TIMESTAMP}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_organization + + + org_no = #{orgNo,jdbcType=VARCHAR}, + + + org_full_name = #{orgFullName,jdbcType=VARCHAR}, + + + org_abr = #{orgAbr,jdbcType=VARCHAR}, + + + parent_id = #{parentId,jdbcType=BIGINT}, + + + sort = #{sort,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_organization + set org_no = #{orgNo,jdbcType=VARCHAR}, + org_full_name = #{orgFullName,jdbcType=VARCHAR}, + org_abr = #{orgAbr,jdbcType=VARCHAR}, + parent_id = #{parentId,jdbcType=BIGINT}, + sort = #{sort,jdbcType=VARCHAR}, + remark = #{remark,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + update_time = #{updateTime,jdbcType=TIMESTAMP}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/OrganizationMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/OrganizationMapperEx.xml new file mode 100644 index 000000000..36841de35 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/OrganizationMapperEx.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + id, org_abr,org_no + + + + + + + insert into jsh_organization + (org_no, org_full_name, + org_abr, delete_flag, + parent_id, sort, remark, + create_time, update_time) + values + (#{orgNo,jdbcType=VARCHAR}, #{orgFullName,jdbcType=VARCHAR}, + #{orgAbr,jdbcType=VARCHAR}, #{deleteFlag,jdbcType=CHAR}, + #{parentId,jdbcType=BIGINT}, #{sort,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}, + #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}) + + + update jsh_organization + set update_Time=#{updateTime},delete_flag='1' + where id in ( + + #{id} + + ) + + + update jsh_organization + set update_time=#{updateTime}, + org_no = #{orgNo},org_full_name = #{orgFullName}, + org_abr = #{orgAbr}, + delete_flag = #{deleteFlag},parent_id = #{parentId}, + sort = #{sort},remark = #{remark} + where id =#{id} + + + + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/PersonMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/PersonMapper.xml new file mode 100644 index 000000000..e6b2efb3a --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/PersonMapper.xml @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, type, name, tenant_id, delete_flag + + + + + delete from jsh_person + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_person + + + + + + insert into jsh_person (id, type, name, + tenant_id, delete_flag) + values (#{id,jdbcType=BIGINT}, #{type,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, + #{tenantId,jdbcType=BIGINT}, #{deleteFlag,jdbcType=VARCHAR}) + + + insert into jsh_person + + + id, + + + type, + + + name, + + + tenant_id, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{type,jdbcType=VARCHAR}, + + + #{name,jdbcType=VARCHAR}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_person + + + id = #{record.id,jdbcType=BIGINT}, + + + type = #{record.type,jdbcType=VARCHAR}, + + + name = #{record.name,jdbcType=VARCHAR}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_person + set id = #{record.id,jdbcType=BIGINT}, + type = #{record.type,jdbcType=VARCHAR}, + name = #{record.name,jdbcType=VARCHAR}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_person + + + type = #{type,jdbcType=VARCHAR}, + + + name = #{name,jdbcType=VARCHAR}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_person + set type = #{type,jdbcType=VARCHAR}, + name = #{name,jdbcType=VARCHAR}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/PersonMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/PersonMapperEx.xml new file mode 100644 index 000000000..2cb895f7a --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/PersonMapperEx.xml @@ -0,0 +1,42 @@ + + + + + + + update jsh_person + set delete_flag='1' + where 1=1 + and id in ( + + #{id} + + ) + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/PlatformConfigMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/PlatformConfigMapper.xml new file mode 100644 index 000000000..d623769c9 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/PlatformConfigMapper.xml @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, platform_key, platform_key_info, platform_value + + + + + delete from jsh_platform_config + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_platform_config + + + + + + insert into jsh_platform_config (id, platform_key, platform_key_info, + platform_value) + values (#{id,jdbcType=BIGINT}, #{platformKey,jdbcType=VARCHAR}, #{platformKeyInfo,jdbcType=VARCHAR}, + #{platformValue,jdbcType=VARCHAR}) + + + insert into jsh_platform_config + + + id, + + + platform_key, + + + platform_key_info, + + + platform_value, + + + + + #{id,jdbcType=BIGINT}, + + + #{platformKey,jdbcType=VARCHAR}, + + + #{platformKeyInfo,jdbcType=VARCHAR}, + + + #{platformValue,jdbcType=VARCHAR}, + + + + + + update jsh_platform_config + + + id = #{record.id,jdbcType=BIGINT}, + + + platform_key = #{record.platformKey,jdbcType=VARCHAR}, + + + platform_key_info = #{record.platformKeyInfo,jdbcType=VARCHAR}, + + + platform_value = #{record.platformValue,jdbcType=VARCHAR}, + + + + + + + + update jsh_platform_config + set id = #{record.id,jdbcType=BIGINT}, + platform_key = #{record.platformKey,jdbcType=VARCHAR}, + platform_key_info = #{record.platformKeyInfo,jdbcType=VARCHAR}, + platform_value = #{record.platformValue,jdbcType=VARCHAR} + + + + + + update jsh_platform_config + + + platform_key = #{platformKey,jdbcType=VARCHAR}, + + + platform_key_info = #{platformKeyInfo,jdbcType=VARCHAR}, + + + platform_value = #{platformValue,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_platform_config + set platform_key = #{platformKey,jdbcType=VARCHAR}, + platform_key_info = #{platformKeyInfo,jdbcType=VARCHAR}, + platform_value = #{platformValue,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/RoleMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/RoleMapper.xml new file mode 100644 index 000000000..24ec93cbe --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/RoleMapper.xml @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, name, type, value, description, tenant_id, delete_flag + + + + + delete from jsh_role + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_role + + + + + + insert into jsh_role (id, name, type, + value, description, tenant_id, + delete_flag) + values (#{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, + #{value,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR}, #{tenantId,jdbcType=BIGINT}, + #{deleteFlag,jdbcType=VARCHAR}) + + + insert into jsh_role + + + id, + + + name, + + + type, + + + value, + + + description, + + + tenant_id, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{name,jdbcType=VARCHAR}, + + + #{type,jdbcType=VARCHAR}, + + + #{value,jdbcType=VARCHAR}, + + + #{description,jdbcType=VARCHAR}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_role + + + id = #{record.id,jdbcType=BIGINT}, + + + name = #{record.name,jdbcType=VARCHAR}, + + + type = #{record.type,jdbcType=VARCHAR}, + + + value = #{record.value,jdbcType=VARCHAR}, + + + description = #{record.description,jdbcType=VARCHAR}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_role + set id = #{record.id,jdbcType=BIGINT}, + name = #{record.name,jdbcType=VARCHAR}, + type = #{record.type,jdbcType=VARCHAR}, + value = #{record.value,jdbcType=VARCHAR}, + description = #{record.description,jdbcType=VARCHAR}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_role + + + name = #{name,jdbcType=VARCHAR}, + + + type = #{type,jdbcType=VARCHAR}, + + + value = #{value,jdbcType=VARCHAR}, + + + description = #{description,jdbcType=VARCHAR}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_role + set name = #{name,jdbcType=VARCHAR}, + type = #{type,jdbcType=VARCHAR}, + value = #{value,jdbcType=VARCHAR}, + description = #{description,jdbcType=VARCHAR}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/RoleMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/RoleMapperEx.xml new file mode 100644 index 000000000..ea94451a8 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/RoleMapperEx.xml @@ -0,0 +1,36 @@ + + + + + + + update jsh_role + set delete_flag='1' + where 1=1 + and id in ( + + #{id} + + ) + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/SequenceMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/SequenceMapperEx.xml new file mode 100644 index 000000000..b4eb6c7e1 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/SequenceMapperEx.xml @@ -0,0 +1,13 @@ + + + + + + update jsh_sequence set current_val = current_val + 1 where seq_name = 'depot_number_seq' + + + + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/SerialNumberMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/SerialNumberMapper.xml new file mode 100644 index 000000000..870e537c2 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/SerialNumberMapper.xml @@ -0,0 +1,323 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, material_id, serial_number, is_sell, remark, delete_flag, create_time, creator, + update_time, updater, depot_head_id, tenant_id + + + + + delete from jsh_serial_number + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_serial_number + + + + + + insert into jsh_serial_number (id, material_id, serial_number, + is_sell, remark, delete_flag, + create_time, creator, update_time, + updater, depot_head_id, tenant_id + ) + values (#{id,jdbcType=BIGINT}, #{materialId,jdbcType=BIGINT}, #{serialNumber,jdbcType=VARCHAR}, + #{isSell,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}, #{deleteFlag,jdbcType=VARCHAR}, + #{createTime,jdbcType=TIMESTAMP}, #{creator,jdbcType=BIGINT}, #{updateTime,jdbcType=TIMESTAMP}, + #{updater,jdbcType=BIGINT}, #{depotHeadId,jdbcType=BIGINT}, #{tenantId,jdbcType=BIGINT} + ) + + + insert into jsh_serial_number + + + id, + + + material_id, + + + serial_number, + + + is_sell, + + + remark, + + + delete_flag, + + + create_time, + + + creator, + + + update_time, + + + updater, + + + depot_head_id, + + + tenant_id, + + + + + #{id,jdbcType=BIGINT}, + + + #{materialId,jdbcType=BIGINT}, + + + #{serialNumber,jdbcType=VARCHAR}, + + + #{isSell,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{creator,jdbcType=BIGINT}, + + + #{updateTime,jdbcType=TIMESTAMP}, + + + #{updater,jdbcType=BIGINT}, + + + #{depotHeadId,jdbcType=BIGINT}, + + + #{tenantId,jdbcType=BIGINT}, + + + + + + update jsh_serial_number + + + id = #{record.id,jdbcType=BIGINT}, + + + material_id = #{record.materialId,jdbcType=BIGINT}, + + + serial_number = #{record.serialNumber,jdbcType=VARCHAR}, + + + is_sell = #{record.isSell,jdbcType=VARCHAR}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + creator = #{record.creator,jdbcType=BIGINT}, + + + update_time = #{record.updateTime,jdbcType=TIMESTAMP}, + + + updater = #{record.updater,jdbcType=BIGINT}, + + + depot_head_id = #{record.depotHeadId,jdbcType=BIGINT}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + + + + + + update jsh_serial_number + set id = #{record.id,jdbcType=BIGINT}, + material_id = #{record.materialId,jdbcType=BIGINT}, + serial_number = #{record.serialNumber,jdbcType=VARCHAR}, + is_sell = #{record.isSell,jdbcType=VARCHAR}, + remark = #{record.remark,jdbcType=VARCHAR}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + creator = #{record.creator,jdbcType=BIGINT}, + update_time = #{record.updateTime,jdbcType=TIMESTAMP}, + updater = #{record.updater,jdbcType=BIGINT}, + depot_head_id = #{record.depotHeadId,jdbcType=BIGINT}, + tenant_id = #{record.tenantId,jdbcType=BIGINT} + + + + + + update jsh_serial_number + + + material_id = #{materialId,jdbcType=BIGINT}, + + + serial_number = #{serialNumber,jdbcType=VARCHAR}, + + + is_sell = #{isSell,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + creator = #{creator,jdbcType=BIGINT}, + + + update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + updater = #{updater,jdbcType=BIGINT}, + + + depot_head_id = #{depotHeadId,jdbcType=BIGINT}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_serial_number + set material_id = #{materialId,jdbcType=BIGINT}, + serial_number = #{serialNumber,jdbcType=VARCHAR}, + is_sell = #{isSell,jdbcType=VARCHAR}, + remark = #{remark,jdbcType=VARCHAR}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + creator = #{creator,jdbcType=BIGINT}, + update_time = #{updateTime,jdbcType=TIMESTAMP}, + updater = #{updater,jdbcType=BIGINT}, + depot_head_id = #{depotHeadId,jdbcType=BIGINT}, + tenant_id = #{tenantId,jdbcType=BIGINT} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/SerialNumberMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/SerialNumberMapperEx.xml new file mode 100644 index 000000000..860c02768 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/SerialNumberMapperEx.xml @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + insert into jsh_serial_number + (material_id, serial_number, is_sell, remark,delete_flag, + create_time, creator,update_time, updater,depot_head_id) + values + (#{materialId},#{serialNumber},#{isSell},#{remark},#{deleteFlag}, + #{createTime},#{creator},#{updateTime},#{updater},#{depotHeadId} + ) + + + update jsh_serial_number + + + material_id = #{materialId,jdbcType=BIGINT}, + + + serial_number = #{serialNumber,jdbcType=VARCHAR}, + + + is_sell = #{isSell,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + updater = #{updater,jdbcType=BIGINT}, + + + depot_head_id = #{depotHeadId,jdbcType=BIGINT}, + + + where id = #{id,jdbcType=BIGINT} + + + + + + update jsh_serial_number + + is_sell = '1', + + depot_head_id = #{depotHeadId}, + + + update_time = #{updateTime}, + + + updater = #{updater}, + + + where 1=1 + + and material_id = #{materialId} + + and is_sell != '1' + and ifnull(delete_flag,'0') !='1' + + and id in + ( select batchSN.id from + ( select selFrom.id from jsh_serial_number selFrom + where 1=1 + + and selFrom.material_Id = #{materialId} + + and selFrom.is_sell != '1' + and ifnull(selFrom.delete_flag,'0') !='1' + limit 0,#{count} + ) batchSN + ) + + + + + update jsh_serial_number + + is_sell = '0', depot_head_id=null, + + update_time = #{updateTime}, + + + updater = #{updater}, + + + where 1=1 + + and material_id = #{materialId} + + + and depot_head_id = #{depotHeadId,jdbcType=BIGINT} + + and is_sell != '0' + and ifnull(delete_flag,'0') !='1' + + and id in + ( select batchSN.id from + ( select selFrom.id from jsh_serial_number selFrom + where 1=1 + + and selFrom.material_id = #{materialId} + + + and selFrom.depot_head_id = #{depotHeadId,jdbcType=BIGINT} + + and selFrom.is_sell !='0' + and ifnull(selFrom.delete_flag,'0') !='1' + limit 0,#{count} + ) batchSN + ) + + + + insert into jsh_serial_number + (material_id, serial_number, is_sell, remark,delete_flag, + create_time, creator,update_time, updater) + values + + (#{each.materialId},#{each.serialNumber},'0',#{each.remark},'0', + #{each.createTime},#{each.creator},#{each.updateTime},#{each.updater} + ) + + + + update jsh_serial_number + set update_time=#{updateTime},updater=#{updater},delete_flag='1' + where 1=1 + and id in ( + + #{id} + + ) + + + + + + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/SupplierMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/SupplierMapper.xml new file mode 100644 index 000000000..f07bdc2a4 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/SupplierMapper.xml @@ -0,0 +1,495 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, supplier, contacts, phone_num, email, description, isystem, type, enabled, advance_in, + begin_need_get, begin_need_pay, all_need_get, all_need_pay, fax, telephone, address, + tax_num, bank_name, account_number, tax_rate, tenant_id, delete_flag + + + + + delete from jsh_supplier + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_supplier + + + + + + insert into jsh_supplier (id, supplier, contacts, + phone_num, email, description, + isystem, type, enabled, + advance_in, begin_need_get, begin_need_pay, + all_need_get, all_need_pay, fax, + telephone, address, tax_num, + bank_name, account_number, tax_rate, + tenant_id, delete_flag) + values (#{id,jdbcType=BIGINT}, #{supplier,jdbcType=VARCHAR}, #{contacts,jdbcType=VARCHAR}, + #{phoneNum,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR}, + #{isystem,jdbcType=TINYINT}, #{type,jdbcType=VARCHAR}, #{enabled,jdbcType=BIT}, + #{advanceIn,jdbcType=DECIMAL}, #{beginNeedGet,jdbcType=DECIMAL}, #{beginNeedPay,jdbcType=DECIMAL}, + #{allNeedGet,jdbcType=DECIMAL}, #{allNeedPay,jdbcType=DECIMAL}, #{fax,jdbcType=VARCHAR}, + #{telephone,jdbcType=VARCHAR}, #{address,jdbcType=VARCHAR}, #{taxNum,jdbcType=VARCHAR}, + #{bankName,jdbcType=VARCHAR}, #{accountNumber,jdbcType=VARCHAR}, #{taxRate,jdbcType=DECIMAL}, + #{tenantId,jdbcType=BIGINT}, #{deleteFlag,jdbcType=VARCHAR}) + + + insert into jsh_supplier + + + id, + + + supplier, + + + contacts, + + + phone_num, + + + email, + + + description, + + + isystem, + + + type, + + + enabled, + + + advance_in, + + + begin_need_get, + + + begin_need_pay, + + + all_need_get, + + + all_need_pay, + + + fax, + + + telephone, + + + address, + + + tax_num, + + + bank_name, + + + account_number, + + + tax_rate, + + + tenant_id, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{supplier,jdbcType=VARCHAR}, + + + #{contacts,jdbcType=VARCHAR}, + + + #{phoneNum,jdbcType=VARCHAR}, + + + #{email,jdbcType=VARCHAR}, + + + #{description,jdbcType=VARCHAR}, + + + #{isystem,jdbcType=TINYINT}, + + + #{type,jdbcType=VARCHAR}, + + + #{enabled,jdbcType=BIT}, + + + #{advanceIn,jdbcType=DECIMAL}, + + + #{beginNeedGet,jdbcType=DECIMAL}, + + + #{beginNeedPay,jdbcType=DECIMAL}, + + + #{allNeedGet,jdbcType=DECIMAL}, + + + #{allNeedPay,jdbcType=DECIMAL}, + + + #{fax,jdbcType=VARCHAR}, + + + #{telephone,jdbcType=VARCHAR}, + + + #{address,jdbcType=VARCHAR}, + + + #{taxNum,jdbcType=VARCHAR}, + + + #{bankName,jdbcType=VARCHAR}, + + + #{accountNumber,jdbcType=VARCHAR}, + + + #{taxRate,jdbcType=DECIMAL}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_supplier + + + id = #{record.id,jdbcType=BIGINT}, + + + supplier = #{record.supplier,jdbcType=VARCHAR}, + + + contacts = #{record.contacts,jdbcType=VARCHAR}, + + + phone_num = #{record.phoneNum,jdbcType=VARCHAR}, + + + email = #{record.email,jdbcType=VARCHAR}, + + + description = #{record.description,jdbcType=VARCHAR}, + + + isystem = #{record.isystem,jdbcType=TINYINT}, + + + type = #{record.type,jdbcType=VARCHAR}, + + + enabled = #{record.enabled,jdbcType=BIT}, + + + advance_in = #{record.advanceIn,jdbcType=DECIMAL}, + + + begin_need_get = #{record.beginNeedGet,jdbcType=DECIMAL}, + + + begin_need_pay = #{record.beginNeedPay,jdbcType=DECIMAL}, + + + all_need_get = #{record.allNeedGet,jdbcType=DECIMAL}, + + + all_need_pay = #{record.allNeedPay,jdbcType=DECIMAL}, + + + fax = #{record.fax,jdbcType=VARCHAR}, + + + telephone = #{record.telephone,jdbcType=VARCHAR}, + + + address = #{record.address,jdbcType=VARCHAR}, + + + tax_num = #{record.taxNum,jdbcType=VARCHAR}, + + + bank_name = #{record.bankName,jdbcType=VARCHAR}, + + + account_number = #{record.accountNumber,jdbcType=VARCHAR}, + + + tax_rate = #{record.taxRate,jdbcType=DECIMAL}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_supplier + set id = #{record.id,jdbcType=BIGINT}, + supplier = #{record.supplier,jdbcType=VARCHAR}, + contacts = #{record.contacts,jdbcType=VARCHAR}, + phone_num = #{record.phoneNum,jdbcType=VARCHAR}, + email = #{record.email,jdbcType=VARCHAR}, + description = #{record.description,jdbcType=VARCHAR}, + isystem = #{record.isystem,jdbcType=TINYINT}, + type = #{record.type,jdbcType=VARCHAR}, + enabled = #{record.enabled,jdbcType=BIT}, + advance_in = #{record.advanceIn,jdbcType=DECIMAL}, + begin_need_get = #{record.beginNeedGet,jdbcType=DECIMAL}, + begin_need_pay = #{record.beginNeedPay,jdbcType=DECIMAL}, + all_need_get = #{record.allNeedGet,jdbcType=DECIMAL}, + all_need_pay = #{record.allNeedPay,jdbcType=DECIMAL}, + fax = #{record.fax,jdbcType=VARCHAR}, + telephone = #{record.telephone,jdbcType=VARCHAR}, + address = #{record.address,jdbcType=VARCHAR}, + tax_num = #{record.taxNum,jdbcType=VARCHAR}, + bank_name = #{record.bankName,jdbcType=VARCHAR}, + account_number = #{record.accountNumber,jdbcType=VARCHAR}, + tax_rate = #{record.taxRate,jdbcType=DECIMAL}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_supplier + + + supplier = #{supplier,jdbcType=VARCHAR}, + + + contacts = #{contacts,jdbcType=VARCHAR}, + + + phone_num = #{phoneNum,jdbcType=VARCHAR}, + + + email = #{email,jdbcType=VARCHAR}, + + + description = #{description,jdbcType=VARCHAR}, + + + isystem = #{isystem,jdbcType=TINYINT}, + + + type = #{type,jdbcType=VARCHAR}, + + + enabled = #{enabled,jdbcType=BIT}, + + + advance_in = #{advanceIn,jdbcType=DECIMAL}, + + + begin_need_get = #{beginNeedGet,jdbcType=DECIMAL}, + + + begin_need_pay = #{beginNeedPay,jdbcType=DECIMAL}, + + + all_need_get = #{allNeedGet,jdbcType=DECIMAL}, + + + all_need_pay = #{allNeedPay,jdbcType=DECIMAL}, + + + fax = #{fax,jdbcType=VARCHAR}, + + + telephone = #{telephone,jdbcType=VARCHAR}, + + + address = #{address,jdbcType=VARCHAR}, + + + tax_num = #{taxNum,jdbcType=VARCHAR}, + + + bank_name = #{bankName,jdbcType=VARCHAR}, + + + account_number = #{accountNumber,jdbcType=VARCHAR}, + + + tax_rate = #{taxRate,jdbcType=DECIMAL}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_supplier + set supplier = #{supplier,jdbcType=VARCHAR}, + contacts = #{contacts,jdbcType=VARCHAR}, + phone_num = #{phoneNum,jdbcType=VARCHAR}, + email = #{email,jdbcType=VARCHAR}, + description = #{description,jdbcType=VARCHAR}, + isystem = #{isystem,jdbcType=TINYINT}, + type = #{type,jdbcType=VARCHAR}, + enabled = #{enabled,jdbcType=BIT}, + advance_in = #{advanceIn,jdbcType=DECIMAL}, + begin_need_get = #{beginNeedGet,jdbcType=DECIMAL}, + begin_need_pay = #{beginNeedPay,jdbcType=DECIMAL}, + all_need_get = #{allNeedGet,jdbcType=DECIMAL}, + all_need_pay = #{allNeedPay,jdbcType=DECIMAL}, + fax = #{fax,jdbcType=VARCHAR}, + telephone = #{telephone,jdbcType=VARCHAR}, + address = #{address,jdbcType=VARCHAR}, + tax_num = #{taxNum,jdbcType=VARCHAR}, + bank_name = #{bankName,jdbcType=VARCHAR}, + account_number = #{accountNumber,jdbcType=VARCHAR}, + tax_rate = #{taxRate,jdbcType=DECIMAL}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/SupplierMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/SupplierMapperEx.xml new file mode 100644 index 000000000..bb2ab6ec1 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/SupplierMapperEx.xml @@ -0,0 +1,75 @@ + + + + + + + + + update jsh_supplier + set delete_flag='1' + where 1=1 + and id in ( + + #{id} + + ) + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/SystemConfigMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/SystemConfigMapper.xml new file mode 100644 index 000000000..38d9d30e9 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/SystemConfigMapper.xml @@ -0,0 +1,323 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, company_name, company_contacts, company_address, company_tel, company_fax, company_post_code, + depot_flag, customer_flag, minus_stock_flag, tenant_id, delete_flag + + + + + delete from jsh_system_config + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_system_config + + + + + + insert into jsh_system_config (id, company_name, company_contacts, + company_address, company_tel, company_fax, + company_post_code, depot_flag, customer_flag, + minus_stock_flag, tenant_id, delete_flag + ) + values (#{id,jdbcType=BIGINT}, #{companyName,jdbcType=VARCHAR}, #{companyContacts,jdbcType=VARCHAR}, + #{companyAddress,jdbcType=VARCHAR}, #{companyTel,jdbcType=VARCHAR}, #{companyFax,jdbcType=VARCHAR}, + #{companyPostCode,jdbcType=VARCHAR}, #{depotFlag,jdbcType=VARCHAR}, #{customerFlag,jdbcType=VARCHAR}, + #{minusStockFlag,jdbcType=VARCHAR}, #{tenantId,jdbcType=BIGINT}, #{deleteFlag,jdbcType=VARCHAR} + ) + + + insert into jsh_system_config + + + id, + + + company_name, + + + company_contacts, + + + company_address, + + + company_tel, + + + company_fax, + + + company_post_code, + + + depot_flag, + + + customer_flag, + + + minus_stock_flag, + + + tenant_id, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{companyName,jdbcType=VARCHAR}, + + + #{companyContacts,jdbcType=VARCHAR}, + + + #{companyAddress,jdbcType=VARCHAR}, + + + #{companyTel,jdbcType=VARCHAR}, + + + #{companyFax,jdbcType=VARCHAR}, + + + #{companyPostCode,jdbcType=VARCHAR}, + + + #{depotFlag,jdbcType=VARCHAR}, + + + #{customerFlag,jdbcType=VARCHAR}, + + + #{minusStockFlag,jdbcType=VARCHAR}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_system_config + + + id = #{record.id,jdbcType=BIGINT}, + + + company_name = #{record.companyName,jdbcType=VARCHAR}, + + + company_contacts = #{record.companyContacts,jdbcType=VARCHAR}, + + + company_address = #{record.companyAddress,jdbcType=VARCHAR}, + + + company_tel = #{record.companyTel,jdbcType=VARCHAR}, + + + company_fax = #{record.companyFax,jdbcType=VARCHAR}, + + + company_post_code = #{record.companyPostCode,jdbcType=VARCHAR}, + + + depot_flag = #{record.depotFlag,jdbcType=VARCHAR}, + + + customer_flag = #{record.customerFlag,jdbcType=VARCHAR}, + + + minus_stock_flag = #{record.minusStockFlag,jdbcType=VARCHAR}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_system_config + set id = #{record.id,jdbcType=BIGINT}, + company_name = #{record.companyName,jdbcType=VARCHAR}, + company_contacts = #{record.companyContacts,jdbcType=VARCHAR}, + company_address = #{record.companyAddress,jdbcType=VARCHAR}, + company_tel = #{record.companyTel,jdbcType=VARCHAR}, + company_fax = #{record.companyFax,jdbcType=VARCHAR}, + company_post_code = #{record.companyPostCode,jdbcType=VARCHAR}, + depot_flag = #{record.depotFlag,jdbcType=VARCHAR}, + customer_flag = #{record.customerFlag,jdbcType=VARCHAR}, + minus_stock_flag = #{record.minusStockFlag,jdbcType=VARCHAR}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_system_config + + + company_name = #{companyName,jdbcType=VARCHAR}, + + + company_contacts = #{companyContacts,jdbcType=VARCHAR}, + + + company_address = #{companyAddress,jdbcType=VARCHAR}, + + + company_tel = #{companyTel,jdbcType=VARCHAR}, + + + company_fax = #{companyFax,jdbcType=VARCHAR}, + + + company_post_code = #{companyPostCode,jdbcType=VARCHAR}, + + + depot_flag = #{depotFlag,jdbcType=VARCHAR}, + + + customer_flag = #{customerFlag,jdbcType=VARCHAR}, + + + minus_stock_flag = #{minusStockFlag,jdbcType=VARCHAR}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_system_config + set company_name = #{companyName,jdbcType=VARCHAR}, + company_contacts = #{companyContacts,jdbcType=VARCHAR}, + company_address = #{companyAddress,jdbcType=VARCHAR}, + company_tel = #{companyTel,jdbcType=VARCHAR}, + company_fax = #{companyFax,jdbcType=VARCHAR}, + company_post_code = #{companyPostCode,jdbcType=VARCHAR}, + depot_flag = #{depotFlag,jdbcType=VARCHAR}, + customer_flag = #{customerFlag,jdbcType=VARCHAR}, + minus_stock_flag = #{minusStockFlag,jdbcType=VARCHAR}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/SystemConfigMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/SystemConfigMapperEx.xml new file mode 100644 index 000000000..44df159b7 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/SystemConfigMapperEx.xml @@ -0,0 +1,36 @@ + + + + + + + update jsh_system_config + set delete_flag='1' + where 1=1 + and id in ( + + #{id} + + ) + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/TenantMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/TenantMapper.xml new file mode 100644 index 000000000..b941f938c --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/TenantMapper.xml @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + id, tenant_id, login_name, user_num_limit, bills_num_limit, create_time + + + + + + delete from jsh_tenant + where id = #{id,jdbcType=BIGINT} + + + + delete from jsh_tenant + + + + + + + insert into jsh_tenant (id, tenant_id, login_name, + user_num_limit, bills_num_limit, create_time + ) + values (#{id,jdbcType=BIGINT}, #{tenantId,jdbcType=BIGINT}, #{loginName,jdbcType=VARCHAR}, + #{userNumLimit,jdbcType=INTEGER}, #{billsNumLimit,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP} + ) + + + + insert into jsh_tenant + + + id, + + + tenant_id, + + + login_name, + + + user_num_limit, + + + bills_num_limit, + + + create_time, + + + + + #{id,jdbcType=BIGINT}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{loginName,jdbcType=VARCHAR}, + + + #{userNumLimit,jdbcType=INTEGER}, + + + #{billsNumLimit,jdbcType=INTEGER}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + + + + + update jsh_tenant + + + id = #{record.id,jdbcType=BIGINT}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + login_name = #{record.loginName,jdbcType=VARCHAR}, + + + user_num_limit = #{record.userNumLimit,jdbcType=INTEGER}, + + + bills_num_limit = #{record.billsNumLimit,jdbcType=INTEGER}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + + + + + + + update jsh_tenant + set id = #{record.id,jdbcType=BIGINT}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + login_name = #{record.loginName,jdbcType=VARCHAR}, + user_num_limit = #{record.userNumLimit,jdbcType=INTEGER}, + bills_num_limit = #{record.billsNumLimit,jdbcType=INTEGER}, + create_time = #{record.createTime,jdbcType=TIMESTAMP} + + + + + + + update jsh_tenant + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + login_name = #{loginName,jdbcType=VARCHAR}, + + + user_num_limit = #{userNumLimit,jdbcType=INTEGER}, + + + bills_num_limit = #{billsNumLimit,jdbcType=INTEGER}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + where id = #{id,jdbcType=BIGINT} + + + + update jsh_tenant + set tenant_id = #{tenantId,jdbcType=BIGINT}, + login_name = #{loginName,jdbcType=VARCHAR}, + user_num_limit = #{userNumLimit,jdbcType=INTEGER}, + bills_num_limit = #{billsNumLimit,jdbcType=INTEGER}, + create_time = #{createTime,jdbcType=TIMESTAMP} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/TenantMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/TenantMapperEx.xml new file mode 100644 index 000000000..1a857e0e4 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/TenantMapperEx.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/UnitMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/UnitMapper.xml new file mode 100644 index 000000000..5dab08810 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/UnitMapper.xml @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, name, basic_unit, other_unit, ratio, tenant_id, delete_flag + + + + + delete from jsh_unit + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_unit + + + + + + insert into jsh_unit (id, name, basic_unit, + other_unit, ratio, tenant_id, + delete_flag) + values (#{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{basicUnit,jdbcType=VARCHAR}, + #{otherUnit,jdbcType=VARCHAR}, #{ratio,jdbcType=INTEGER}, #{tenantId,jdbcType=BIGINT}, + #{deleteFlag,jdbcType=VARCHAR}) + + + insert into jsh_unit + + + id, + + + name, + + + basic_unit, + + + other_unit, + + + ratio, + + + tenant_id, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{name,jdbcType=VARCHAR}, + + + #{basicUnit,jdbcType=VARCHAR}, + + + #{otherUnit,jdbcType=VARCHAR}, + + + #{ratio,jdbcType=INTEGER}, + + + #{tenantId,jdbcType=BIGINT}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_unit + + + id = #{record.id,jdbcType=BIGINT}, + + + name = #{record.name,jdbcType=VARCHAR}, + + + basic_unit = #{record.basicUnit,jdbcType=VARCHAR}, + + + other_unit = #{record.otherUnit,jdbcType=VARCHAR}, + + + ratio = #{record.ratio,jdbcType=INTEGER}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_unit + set id = #{record.id,jdbcType=BIGINT}, + name = #{record.name,jdbcType=VARCHAR}, + basic_unit = #{record.basicUnit,jdbcType=VARCHAR}, + other_unit = #{record.otherUnit,jdbcType=VARCHAR}, + ratio = #{record.ratio,jdbcType=INTEGER}, + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_unit + + + name = #{name,jdbcType=VARCHAR}, + + + basic_unit = #{basicUnit,jdbcType=VARCHAR}, + + + other_unit = #{otherUnit,jdbcType=VARCHAR}, + + + ratio = #{ratio,jdbcType=INTEGER}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_unit + set name = #{name,jdbcType=VARCHAR}, + basic_unit = #{basicUnit,jdbcType=VARCHAR}, + other_unit = #{otherUnit,jdbcType=VARCHAR}, + ratio = #{ratio,jdbcType=INTEGER}, + tenant_id = #{tenantId,jdbcType=BIGINT}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/UnitMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/UnitMapperEx.xml new file mode 100644 index 000000000..821446d4d --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/UnitMapperEx.xml @@ -0,0 +1,36 @@ + + + + + + + update jsh_unit + set delete_flag='1' + where 1=1 + and id in ( + + #{id} + + ) + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/UserBusinessMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/UserBusinessMapper.xml new file mode 100644 index 000000000..16307f58e --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/UserBusinessMapper.xml @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, type, key_id, value, btn_str, delete_flag + + + + + delete from jsh_user_business + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_user_business + + + + + + insert into jsh_user_business (id, type, key_id, + value, btn_str, delete_flag + ) + values (#{id,jdbcType=BIGINT}, #{type,jdbcType=VARCHAR}, #{keyId,jdbcType=VARCHAR}, + #{value,jdbcType=VARCHAR}, #{btnStr,jdbcType=VARCHAR}, #{deleteFlag,jdbcType=VARCHAR} + ) + + + insert into jsh_user_business + + + id, + + + type, + + + key_id, + + + value, + + + btn_str, + + + delete_flag, + + + + + #{id,jdbcType=BIGINT}, + + + #{type,jdbcType=VARCHAR}, + + + #{keyId,jdbcType=VARCHAR}, + + + #{value,jdbcType=VARCHAR}, + + + #{btnStr,jdbcType=VARCHAR}, + + + #{deleteFlag,jdbcType=VARCHAR}, + + + + + + update jsh_user_business + + + id = #{record.id,jdbcType=BIGINT}, + + + type = #{record.type,jdbcType=VARCHAR}, + + + key_id = #{record.keyId,jdbcType=VARCHAR}, + + + value = #{record.value,jdbcType=VARCHAR}, + + + btn_str = #{record.btnStr,jdbcType=VARCHAR}, + + + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR}, + + + + + + + + update jsh_user_business + set id = #{record.id,jdbcType=BIGINT}, + type = #{record.type,jdbcType=VARCHAR}, + key_id = #{record.keyId,jdbcType=VARCHAR}, + value = #{record.value,jdbcType=VARCHAR}, + btn_str = #{record.btnStr,jdbcType=VARCHAR}, + delete_flag = #{record.deleteFlag,jdbcType=VARCHAR} + + + + + + update jsh_user_business + + + type = #{type,jdbcType=VARCHAR}, + + + key_id = #{keyId,jdbcType=VARCHAR}, + + + value = #{value,jdbcType=VARCHAR}, + + + btn_str = #{btnStr,jdbcType=VARCHAR}, + + + delete_flag = #{deleteFlag,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_user_business + set type = #{type,jdbcType=VARCHAR}, + key_id = #{keyId,jdbcType=VARCHAR}, + value = #{value,jdbcType=VARCHAR}, + btn_str = #{btnStr,jdbcType=VARCHAR}, + delete_flag = #{deleteFlag,jdbcType=VARCHAR} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/UserBusinessMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/UserBusinessMapperEx.xml new file mode 100644 index 000000000..10752ecb9 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/UserBusinessMapperEx.xml @@ -0,0 +1,15 @@ + + + + + update jsh_user_business + set delete_flag='1' + where 1=1 + and id in ( + + #{id} + + ) + + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/UserMapper.xml b/jshERP-boot/src/main/resources/mapper_xml/UserMapper.xml new file mode 100644 index 000000000..65e16ecda --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/UserMapper.xml @@ -0,0 +1,353 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, username, login_name, password, position, department, email, phonenum, ismanager, + isystem, Status, description, remark, tenant_id + + + + + delete from jsh_user + where id = #{id,jdbcType=BIGINT} + + + delete from jsh_user + + + + + + insert into jsh_user (id, username, login_name, + password, position, department, + email, phonenum, ismanager, + isystem, Status, description, + remark, tenant_id) + values (#{id,jdbcType=BIGINT}, #{username,jdbcType=VARCHAR}, #{loginName,jdbcType=VARCHAR}, + #{password,jdbcType=VARCHAR}, #{position,jdbcType=VARCHAR}, #{department,jdbcType=VARCHAR}, + #{email,jdbcType=VARCHAR}, #{phonenum,jdbcType=VARCHAR}, #{ismanager,jdbcType=TINYINT}, + #{isystem,jdbcType=TINYINT}, #{status,jdbcType=TINYINT}, #{description,jdbcType=VARCHAR}, + #{remark,jdbcType=VARCHAR}, #{tenantId,jdbcType=BIGINT}) + + + insert into jsh_user + + + id, + + + username, + + + login_name, + + + password, + + + position, + + + department, + + + email, + + + phonenum, + + + ismanager, + + + isystem, + + + Status, + + + description, + + + remark, + + + tenant_id, + + + + + #{id,jdbcType=BIGINT}, + + + #{username,jdbcType=VARCHAR}, + + + #{loginName,jdbcType=VARCHAR}, + + + #{password,jdbcType=VARCHAR}, + + + #{position,jdbcType=VARCHAR}, + + + #{department,jdbcType=VARCHAR}, + + + #{email,jdbcType=VARCHAR}, + + + #{phonenum,jdbcType=VARCHAR}, + + + #{ismanager,jdbcType=TINYINT}, + + + #{isystem,jdbcType=TINYINT}, + + + #{status,jdbcType=TINYINT}, + + + #{description,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + + + #{tenantId,jdbcType=BIGINT}, + + + + + + update jsh_user + + + id = #{record.id,jdbcType=BIGINT}, + + + username = #{record.username,jdbcType=VARCHAR}, + + + login_name = #{record.loginName,jdbcType=VARCHAR}, + + + password = #{record.password,jdbcType=VARCHAR}, + + + position = #{record.position,jdbcType=VARCHAR}, + + + department = #{record.department,jdbcType=VARCHAR}, + + + email = #{record.email,jdbcType=VARCHAR}, + + + phonenum = #{record.phonenum,jdbcType=VARCHAR}, + + + ismanager = #{record.ismanager,jdbcType=TINYINT}, + + + isystem = #{record.isystem,jdbcType=TINYINT}, + + + Status = #{record.status,jdbcType=TINYINT}, + + + description = #{record.description,jdbcType=VARCHAR}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + tenant_id = #{record.tenantId,jdbcType=BIGINT}, + + + + + + + + update jsh_user + set id = #{record.id,jdbcType=BIGINT}, + username = #{record.username,jdbcType=VARCHAR}, + login_name = #{record.loginName,jdbcType=VARCHAR}, + password = #{record.password,jdbcType=VARCHAR}, + position = #{record.position,jdbcType=VARCHAR}, + department = #{record.department,jdbcType=VARCHAR}, + email = #{record.email,jdbcType=VARCHAR}, + phonenum = #{record.phonenum,jdbcType=VARCHAR}, + ismanager = #{record.ismanager,jdbcType=TINYINT}, + isystem = #{record.isystem,jdbcType=TINYINT}, + Status = #{record.status,jdbcType=TINYINT}, + description = #{record.description,jdbcType=VARCHAR}, + remark = #{record.remark,jdbcType=VARCHAR}, + tenant_id = #{record.tenantId,jdbcType=BIGINT} + + + + + + update jsh_user + + + username = #{username,jdbcType=VARCHAR}, + + + login_name = #{loginName,jdbcType=VARCHAR}, + + + password = #{password,jdbcType=VARCHAR}, + + + position = #{position,jdbcType=VARCHAR}, + + + department = #{department,jdbcType=VARCHAR}, + + + email = #{email,jdbcType=VARCHAR}, + + + phonenum = #{phonenum,jdbcType=VARCHAR}, + + + ismanager = #{ismanager,jdbcType=TINYINT}, + + + isystem = #{isystem,jdbcType=TINYINT}, + + + Status = #{status,jdbcType=TINYINT}, + + + description = #{description,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + tenant_id = #{tenantId,jdbcType=BIGINT}, + + + where id = #{id,jdbcType=BIGINT} + + + update jsh_user + set username = #{username,jdbcType=VARCHAR}, + login_name = #{loginName,jdbcType=VARCHAR}, + password = #{password,jdbcType=VARCHAR}, + position = #{position,jdbcType=VARCHAR}, + department = #{department,jdbcType=VARCHAR}, + email = #{email,jdbcType=VARCHAR}, + phonenum = #{phonenum,jdbcType=VARCHAR}, + ismanager = #{ismanager,jdbcType=TINYINT}, + isystem = #{isystem,jdbcType=TINYINT}, + Status = #{status,jdbcType=TINYINT}, + description = #{description,jdbcType=VARCHAR}, + remark = #{remark,jdbcType=VARCHAR}, + tenant_id = #{tenantId,jdbcType=BIGINT} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/jshERP-boot/src/main/resources/mapper_xml/UserMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/UserMapperEx.xml new file mode 100644 index 000000000..4d81d0e65 --- /dev/null +++ b/jshERP-boot/src/main/resources/mapper_xml/UserMapperEx.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + update jsh_user + set status=#{status} + where id in ( + + #{id} + + ) + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jshERP-boot/src/test/java/Test.java b/jshERP-boot/src/test/java/Test.java new file mode 100644 index 000000000..e92507677 --- /dev/null +++ b/jshERP-boot/src/test/java/Test.java @@ -0,0 +1,12 @@ +import java.text.SimpleDateFormat; +import java.util.Date; + +public class Test { + + public static void main(String args[]){ + Date date = new Date(); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String dateString = formatter.format(date); + System.out.println(dateString); + } +} diff --git a/jshERP-boot/src/test/java/ThreadPoolTest.java b/jshERP-boot/src/test/java/ThreadPoolTest.java new file mode 100644 index 000000000..bee31f893 --- /dev/null +++ b/jshERP-boot/src/test/java/ThreadPoolTest.java @@ -0,0 +1,64 @@ +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +/** + * 线程池测试案例 + */ +public class ThreadPoolTest { + + public static void main(String[] args) throws Exception { + // 开始时间 + long start = System.currentTimeMillis(); + List list = new ArrayList(); + for (int i = 1; i <= 3000; i++) { + list.add(i + ""); + } + // 每500条数据开启一条线程 + int threadSize = 500; + // 总数据条数 + int dataSize = list.size(); + // 线程数 + int threadNum = dataSize / threadSize + 1; + // 定义标记,过滤threadNum为整数 + boolean special = dataSize % threadSize == 0; + // 创建一个线程池 + ExecutorService exec = Executors.newFixedThreadPool(threadNum); + // 定义一个任务集合 + List> tasks = new ArrayList>(); + Callable task = null; + List cutList = null; + // 确定每条线程的数据 + for (int i = 0; i < threadNum; i++) { + if (i == threadNum - 1) { + if (special) { + break; + } + cutList = list.subList(threadSize * i, dataSize); + } else { + cutList = list.subList(threadSize * i, threadSize * (i + 1)); + } + final List listStr = cutList; + task = new Callable() { + @Override + public Integer call() throws Exception { + System.out.println(Thread.currentThread().getName() + "线程:" + listStr); + return 1; + } + }; + // 这里提交的任务容器列表和返回的Future列表存在顺序对应的关系 + tasks.add(task); + } + List> results = exec.invokeAll(tasks); + for (Future future : results) { + System.out.println(future.get()); + } + // 关闭线程池 + exec.shutdown(); + System.out.println("线程任务执行结束"); + System.err.println("执行任务消耗了 :" + (System.currentTimeMillis() - start) + "毫秒"); + } +} diff --git a/jshERP-boot/src/test/java/com/jsh/erp/DepotTest.java b/jshERP-boot/src/test/java/com/jsh/erp/DepotTest.java new file mode 100644 index 000000000..b82dd2d88 --- /dev/null +++ b/jshERP-boot/src/test/java/com/jsh/erp/DepotTest.java @@ -0,0 +1,35 @@ +package com.jsh.erp; + +import com.alibaba.fastjson.JSON; +import com.jsh.erp.datasource.entities.Depot; +import com.jsh.erp.service.depot.DepotService; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import javax.annotation.Resource; +import java.util.List; + +@Slf4j +@RunWith(SpringRunner.class) +@SpringBootTest +public class DepotTest { + + @Resource + private DepotService depotService; + + @Test + public void getDepot() throws Exception{ + Depot result = depotService.getDepot(1l); + log.info("depot result:" + JSON.toJSONString(result)); + } + + @Test + public void getAllList() throws Exception{ + List depotList =depotService.getAllList(); + log.info("depot result:" + JSON.toJSONString(depotList)); + } + + +} diff --git a/jshERP-boot/src/test/resources/generatorConfig.xml b/jshERP-boot/src/test/resources/generatorConfig.xml new file mode 100644 index 000000000..ea5b5273c --- /dev/null +++ b/jshERP-boot/src/test/resources/generatorConfig.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jshERP-web/.editorconfig b/jshERP-web/.editorconfig new file mode 100644 index 000000000..3e26fbb6e --- /dev/null +++ b/jshERP-web/.editorconfig @@ -0,0 +1,39 @@ +[*] +charset=utf-8 +end_of_line=crlf +insert_final_newline=false +indent_style=space +indent_size=2 + +[{*.ng,*.sht,*.html,*.shtm,*.shtml,*.htm}] +indent_style=space +indent_size=2 + +[{*.jhm,*.xslt,*.xul,*.rng,*.xsl,*.xsd,*.ant,*.tld,*.fxml,*.jrxml,*.xml,*.jnlp,*.wsdl}] +indent_style=space +indent_size=2 + +[{.babelrc,.stylelintrc,jest.config,.eslintrc,.prettierrc,*.json,*.jsb3,*.jsb2,*.bowerrc}] +indent_style=space +indent_size=2 + +[*.svg] +indent_style=space +indent_size=2 + +[*.js.map] +indent_style=space +indent_size=2 + +[*.less] +indent_style=space +indent_size=2 + +[*.vue] +indent_style=space +indent_size=2 + +[{.analysis_options,*.yml,*.yaml}] +indent_style=space +indent_size=2 + diff --git a/jshERP-web/.eslintignore b/jshERP-web/.eslintignore new file mode 100644 index 000000000..dbc869080 --- /dev/null +++ b/jshERP-web/.eslintignore @@ -0,0 +1 @@ +/src \ No newline at end of file diff --git a/jshERP-web/.gitattributes b/jshERP-web/.gitattributes new file mode 100644 index 000000000..e50731925 --- /dev/null +++ b/jshERP-web/.gitattributes @@ -0,0 +1 @@ +public/* linguist-vendored \ No newline at end of file diff --git a/jshERP-web/.gitignore b/jshERP-web/.gitignore new file mode 100644 index 000000000..185e66319 --- /dev/null +++ b/jshERP-web/.gitignore @@ -0,0 +1,21 @@ +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw* diff --git a/jshERP-web/.prettierrc b/jshERP-web/.prettierrc new file mode 100644 index 000000000..cbe842acd --- /dev/null +++ b/jshERP-web/.prettierrc @@ -0,0 +1,5 @@ +{ + "printWidth": 120, + "semi": false, + "singleQuote": true +} diff --git a/jshERP-web/README.md b/jshERP-web/README.md new file mode 100644 index 000000000..581ecb566 --- /dev/null +++ b/jshERP-web/README.md @@ -0,0 +1,100 @@ +jshERP-web Vue +==== + +当前最新版本: 3.0 + +Overview +---- + +基于 [Ant Design of Vue](https://vuecomponent.github.io/ant-design-vue/docs/vue/introduce-cn/) 实现的 Ant Design Pro Vue 版 +Jeecg-boot 的前段UI框架,采用前后端分离方案,提供强大代码生成器的快速开发平台。 +前端页面代码和后端功能代码一键生成,不需要写任何代码,保持jeecg一贯的强大!! + + + +#### 前端技术 + +- 基础框架:[ant-design-vue](https://github.com/vueComponent/ant-design-vue) - Ant Design Of Vue 实现 +- JavaScript框架:Vue +- Webpack +- node +- yarn +- eslint +- @vue/cli 3.2.1 +- [vue-cropper](https://github.com/xyxiao001/vue-cropper) - 头像裁剪组件 +- [@antv/g2](https://antv.alipay.com/zh-cn/index.html) - Alipay AntV 数据可视化图表 +- [Viser-vue](https://viserjs.github.io/docs.html#/viser/guide/installation) - antv/g2 封装实现 + + + +项目运行 +---- + +- 安装依赖 +``` +yarn install +``` + +- 开发模式运行 +``` +yarn run serve +``` + +- 编译项目 +``` +yarn run build +``` + +- Lints and fixes files +``` +yarn run lint +``` + + + +其他说明 +---- + +- 项目使用的 [vue-cli3](https://cli.vuejs.org/guide/), 请更新您的 cli + +- 关闭 Eslint (不推荐) 移除 `package.json` 中 `eslintConfig` 整个节点代码 + +- 修改 Ant Design 配色,在文件 `vue.config.js` 中,其他 less 变量覆盖参考 [ant design](https://ant.design/docs/react/customize-theme-cn) 官方说明 +```ecmascript 6 + css: { + loaderOptions: { + less: { + modifyVars: { + /* less 变量覆盖,用于自定义 ant design 主题 */ + + 'primary-color': '#F5222D', + 'link-color': '#F5222D', + 'border-radius-base': '4px', + }, + javascriptEnabled: true, + } + } + } +``` + + + +附属文档 +---- +- [Ant Design Vue](https://vuecomponent.github.io/ant-design-vue/docs/vue/introduce-cn) + +- [报表 viser-vue](https://viserjs.github.io/demo.html#/viser/bar/basic-bar) + +- [Vue](https://cn.vuejs.org/v2/guide) + +- [路由/菜单说明](https://github.com/zhangdaiscott/jeecg-boot/tree/master/ant-design-jeecg-vue/src/router/README.md) + +- [ANTD 默认配置项](https://github.com/zhangdaiscott/jeecg-boot/tree/master/ant-design-jeecg-vue/src/defaultSettings.js) + +- 其他待补充... + + +备注 +---- + +> @vue/cli 升级后,eslint 规则更新了。由于影响到全部 .vue 文件,需要逐个验证。既暂时关闭部分原本不验证的规则,后期维护时,在逐步修正这些 rules \ No newline at end of file diff --git a/jshERP-web/babel.config.js b/jshERP-web/babel.config.js new file mode 100644 index 000000000..f05294d6f --- /dev/null +++ b/jshERP-web/babel.config.js @@ -0,0 +1,6 @@ +module.exports = { + presets: [ + ['@vue/app', + { useBuiltIns: 'entry' }] + ] +} diff --git a/jshERP-web/idea.config.js b/jshERP-web/idea.config.js new file mode 100644 index 000000000..4d86bd94a --- /dev/null +++ b/jshERP-web/idea.config.js @@ -0,0 +1,24 @@ +'use strict' +const path = require('path') + +function resolve (dir) { + return path.join(__dirname, '.', dir) +} + +module.exports = { + context: path.resolve(__dirname, './'), + resolve: { + extensions: ['.js', '.vue', '.json'], + alias: { + 'config': resolve('config'), + '@': resolve('src'), + '@views': resolve('src/views'), + '@comp': resolve('src/components'), + '@core': resolve('src/core'), + '@utils': resolve('src/utils'), + '@entry': resolve('src/entry'), + '@router': resolve('src/router'), + '@store': resolve('src/store') + } + }, +} \ No newline at end of file diff --git a/jshERP-web/package.json b/jshERP-web/package.json new file mode 100644 index 000000000..a29b8f5a9 --- /dev/null +++ b/jshERP-web/package.json @@ -0,0 +1,108 @@ +{ + "name": "vue-antd-jeecg", + "version": "2.2.0", + "private": true, + "scripts": { + "pre": "yarn --registry https://registry.npm.taobao.org || cnpm install || npm install --registry https://registry.npm.taobao.org ", + "serve": "vue-cli-service serve", + "build-index": "vue-cli-service build index", + "build-car": "vue-cli-service build car", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "@antv/data-set": "^0.11.2", + "@tinymce/tinymce-vue": "^2.0.0", + "ant-design-vue": "1.5.2", + "area-data": "^5.0.6", + "axios": "^0.18.0", + "clipboard": "^2.0.4", + "codemirror": "^5.46.0", + "dayjs": "^1.8.0", + "enquire.js": "^2.1.6", + "js-cookie": "^2.2.0", + "lodash.get": "^4.4.2", + "lodash.pick": "^4.4.0", + "md5": "^2.2.1", + "nprogress": "^0.2.0", + "tinymce": "^5.1.4", + "tui-editor": "^1.4.10", + "viser-vue": "^2.4.4", + "vue": "^2.6.10", + "vue-area-linkage": "^5.1.0", + "vue-cropper": "^0.4.8", + "vue-i18n": "^8.7.0", + "vue-loader": "^15.7.0", + "vue-ls": "^3.2.0", + "vue-photo-preview": "^1.1.3", + "vue-print-nb-jeecg": "^1.0.9", + "vue-router": "^3.0.1", + "vue-splitpane": "^1.0.4", + "vuedraggable": "^2.20.0", + "vuex": "^3.1.0" + }, + "devDependencies": { + "@babel/polyfill": "^7.2.5", + "@vue/cli-plugin-babel": "^3.3.0", + "@vue/cli-plugin-eslint": "^3.3.0", + "@vue/cli-service": "^3.3.0", + "@vue/eslint-config-standard": "^4.0.0", + "babel-eslint": "^10.0.1", + "compression-webpack-plugin": "^3.1.0", + "eslint": "^5.16.0", + "eslint-plugin-vue": "^5.1.0", + "html-webpack-plugin": "^4.2.0", + "less": "^3.9.0", + "less-loader": "^4.1.0", + "vue-template-compiler": "^2.6.10" + }, + "eslintConfig": { + "root": true, + "env": { + "node": true + }, + "extends": [ + "plugin:vue/strongly-recommended", + "@vue/standard" + ], + "parserOptions": { + "parser": "babel-eslint" + }, + "rules": { + "generator-star-spacing": "off", + "no-mixed-operators": 0, + "vue/max-attributes-per-line": [ + 2, + { + "singleline": 5, + "multiline": { + "max": 1, + "allowFirstLine": false + } + } + ], + "vue/attribute-hyphenation": 0, + "vue/html-self-closing": 0, + "vue/component-name-in-template-casing": 0, + "vue/html-closing-bracket-spacing": 0, + "vue/singleline-html-element-content-newline": 0, + "vue/no-unused-components": 0, + "vue/multiline-html-element-content-newline": 0, + "vue/no-use-v-if-with-v-for": 0, + "vue/html-closing-bracket-newline": 0, + "vue/no-parsing-error": 0, + "no-console": 0, + "no-tabs": 0, + "indent": [1, 4] + } + }, + "postcss": { + "plugins": { + "autoprefixer": {} + } + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not ie <= 10" + ] +} diff --git a/jshERP-web/public/avatar2.jpg b/jshERP-web/public/avatar2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9adb2d1b88665631c9dfe7acd8c125ec87eb6fc0 GIT binary patch literal 80189 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Ȇ~_mYlz55^9KP)hUklbsu17%qOvafHCep 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

@kHGHV*M}ud-K*Ym^3Id2q7H(x;jE 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

    9J2$d}*12p3mw+Jf zliK@10rlDn*Y#l;FhOO$#4lP{n5kJnM(^`R1lScwX zVbQd&*k}S%t@Io9_Vm=%B?-TKfP1ojqr`>>xFsKNJV+h3`r6>r%RxygAUE-s1ug(r zDhiwgW5}DtbUq4lT7+T5h#Q(v~oGM7zQ< z4OvURh<2a$qg*{C83{P5cCy58F2*@Lqog*ccwXdd9$^a8iUFLY-)x|{^eFg z3?Hf3w-)C$`1ue+h=ZUk&ANVD%r>9-K3*7*wz-`O_gfEtcMQ%4u=Hl0eO_;k6|Zl{ z|3lHHnL+NDtFe9-n$}bG=W9i#u0{d(lZ!Q!oCav2_*wqeM*n>rfwa+8t$YdAI41nI zd7v&^Knf2B_vB`1<}r20NI`02W-Y368%T~?eqQqBHo?3O{-@F=J!RSs=_YE)1QMie zcsg?4?DN{1YpQ{tY#=o%QJXZJ-06W=&KlbL{V7>vSYcG!QM#8v!wX)6)KOOrwW)=sa`jc z7D_-9fkqwkvnhY|IzCCXnkkJOYe(!+<_CsQ9sMEy4*Tj?t1?s7Tq$wEOQTF)ZbYDB z_DMLyZ`D96CP4~XPy5(Ox&XIP&vA2&oe%A){ZqFFrUKD*(<+P(2tESdr0}?gB_IHY76;nvkxflOr!qNdp|a&fV^r zeg}te`^0LCH+dcS@D_19J=|zzKL=iSt{e;wD%l=q@b#~^W<>$MDxYis1x|jNr))$n z4szo2%x0$52P=_1#~E$66#g}inqnSG0xBlzdoP%4P*%SaW9@X+XJqwR%dmq#fxuAj zh$yg=_4ZH%>Ef6Q!g`(Q#B2a&#;R(S0*~E-^-1buv*E7vye{ZhXGyhFdb988vc5*8 zCeH2ii(AyZ*LRa9;^$ak=Ut~XTx_)(@dJlpdQ$kJX#Tfyhh^D$F-Fm!@|iOYZh@k{ zacY?k0$Q8q(f~(mA_=eeFiK}3Bn zziTv8qvLAIF?mA|jjU{cPk!i&XcNRMPeAT=6N!>(52qz30$)bYC_a1g7b99&JN9}$ z&}1HBLFQD>d9kwl(lkaLvr}zrBI`U#Y_x;5{>xYI;0LA38iV3_S`?v@8YgqN_HMRHQyHC6EW@m0t zmoBj>cZsJIK6kG1sS3kqlBf82XW!J$*=>#NYdG0DKE^!)4byoeJ*)^aaA(RH%k(LX z&2^v>y8`UoJ2hmZv@(ognpZV~CpWZ4o{)3?S&Fce2a4X8z5x+TdxX+XI& zaw^6G)jZ6+%fSHGr00SqSW!K4n^# zR&RWt#S5A(UB9LAY=IA_tnp8Ob*X(~^hPrM(0(=K8tiz;(J^h}WbN$#lx?hNw4EmP z{$|lLJ2HVZyKI9o_|a9Vp@d8!BM~_gS8} z3SIxgyTcmPL5&}*-C8l0NEw9lOcB;YU(kQZ@ui2I zrIQNe21W9 zgdAA$_G?@5+nJR?QM-76wAZsS?$s8OZDwL%g0_Ycl{AE)MrzCw;UKxD`(jZr&!S#2 zLCsrW;pS(%+EizW<1u5YpKeV{y`h8hYoBf34ClT&W_!4AbMS*}Pn-~_#-`t*hUJXL zS8q`dD$DV$m;ThptDx|!dv^1#Ri;ra{{$#I8mgOD8rNP1bvmW7OpbMKI(}7XU$N+s zSpuD+TNp?!Tx%nmt)Ld|QO`0doqA(7r=+O$i_V8N>SXuDV^A95-j`RIbiq7s`Kg`0 ziQaW@u`krP{Q=}mMlNDF94+9g!N*11S_pB9)u14Ew*92cBH6M_cWF5Fb#9%NMn#z7 zsP=~~6+3;>5D(aAlZ8_r4iU?Vs~{ruehU9=oxFCf6(s%t(?h zE6QIGxFtfs$Up`_b4HipJJwoWf0D~Uv#noPDM5)-JeuHj0*$vXVee6&gS$}@I>x5! zHyKFIAM)^f$h@v_$e;1gc-z?~muyTUCMlD-YQqZ#g1FrtLtu^JqY-TtcJ&W7u6LTd z{zF}IypigQY>X7eyMn(!3ja9p9-Z2|PYo*#dT!AhN_b|cS)*gPi=@affC%&I7KYNiAiJ>NqgY}QRE3T5eZ@jR4>OmRm45aP{0qN}SY z>K=YKb&2``FAwU3!&vOtZ7bK|Ps}J@RTrz_Rjegl?8;lv5>~l-=leZifrT82-l?hh z&srU=P>umqUCpuiH*Sk+pp0lscXYFtK7Yf5#p(cO3w~21W?#HYX~#02ocWGY*Sl$( zpn5C9F-}Qk{HPmU1W!kL(lj|sKG8xfva(^96L?!<8rF_6sR0wl?7P^jZRDHUB}lw| ze48k<%T;w#d`lHAesUA0zOnV+ze1&r1qSf9h^W0iHY2hgMVPgqEvd4nXmh5yFFIG0 zJ{zLA;cLX2A07;(a12(Hfe&Ar~fT^M?p1mlIJx42^_3-ntd# zs5+zNoQj#*y8HY-H-uz-U0G%O0dB7|5eIlnt{_(~thl;@+7<+C{pzM|`gHh$~p+ zfD~DWN~tUKtO^OYxO7*m)(VYwiw_zaSFY%rQV_+{R=`697$;~{3UP=%D|{h8$Wc-{ zlDrI$j*UXRV?F>rF^&~G5l7)3t74oU!;13Cya_FJK+W2=-r95(;+(BJDFeib=&Nk= z)PA{6PcG5c=w&0=v#qt7ECh1C+U3Vyab}f(D1Fey9Hj$fuo=Zgh~8%TWH&;_sPt5r zpum3+n}wSJP>5rpIGyCNB|Ut~a)+|iF;t3^x$4N`tsQvCXXe6Zw{cZ^W#2w;Ur?Ch z29!K-C~@$9v2avrKN87&vwAnYDY;q4Q&Vjx@{u-Kxc+snI=a*uhn`Nm|bo^lA8d^SLjX% znEC38WhEu@+q%}wm?||kv)Y+3QIKCp2+ebnmHA5JbItOM7$VDHjT zUaivsG^~6GV`5AlJAT)q9-;J&8SMU?F!a2haw&rSX#Yg*a4H|ml`WpcV$$8#I&h?O zyjV9GAY*5b$Z8kK*ew7Ib->({e2xRPh06-&j@5l}wl;I4i;w`9M$?|V6TdUL`xKjcZ z#Fvt|_@ogOcq;s{Rb|N`~0}GXc zkX4%2Ql(=yRm6(!xWV(&3`9(H8Z|&eT`aH8VI@yx91OMReN|&D0aI#e6AGNg|F|&- zcIcZe8Ck8(-C9AAkD60Fp3C0 z+6L)tyoryK<>^);alnLkRI1xRlO}wmU?bX?>C~iUt1G&!T=nbtBnc~tZ zSS~}3Yo548$V>8AG8ZFT1hz)H5BgTeTcpO$S3Dm{En2$N5@kCQ<2PTyxz))XQ;*Cn zy=qo`aWR#3a)fn>f}-%eggQ~=vdUjhWwA&6bU_&tEzn1 zsi;(Rjk$y?Eg%p|ZXI$;q z$_CoMmG0{t`34OCNP9x%mjC_8UaBk4rkA^H6WRJCi-ZZJ6+g{O`L)_*l$mS4eK
  1. +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 literal 0 HcmV?d00001 diff --git a/jshERP-web/public/cdn/babel-polyfill/polyfill_7_2_5.js b/jshERP-web/public/cdn/babel-polyfill/polyfill_7_2_5.js new file mode 100644 index 000000000..250b921f6 --- /dev/null +++ b/jshERP-web/public/cdn/babel-polyfill/polyfill_7_2_5.js @@ -0,0 +1,6953 @@ +(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 2 ? arguments[2] : undefined; + var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to); + var inc = 1; + if (from < to && to < from + count) { + inc = -1; + from += count - 1; + to += count - 1; + } + while (count-- > 0) { + if (from in O) O[to] = O[from]; + else delete O[to]; + to += inc; + from += inc; + } return O; +}; + +},{"113":113,"117":117,"118":118}],18:[function(_dereq_,module,exports){ +// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) +'use strict'; +var toObject = _dereq_(118); +var toAbsoluteIndex = _dereq_(113); +var toLength = _dereq_(117); +module.exports = function fill(value /* , start = 0, end = @length */) { + var O = toObject(this); + var length = toLength(O.length); + var aLen = arguments.length; + var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length); + var end = aLen > 2 ? arguments[2] : undefined; + var endPos = end === undefined ? length : toAbsoluteIndex(end, length); + while (endPos > index) O[index++] = value; + return O; +}; + +},{"113":113,"117":117,"118":118}],19:[function(_dereq_,module,exports){ +// false -> Array#indexOf +// true -> Array#includes +var toIObject = _dereq_(116); +var toLength = _dereq_(117); +var toAbsoluteIndex = _dereq_(113); +module.exports = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIObject($this); + var length = toLength(O.length); + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare + if (IS_INCLUDES && el != el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare + if (value != value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) if (IS_INCLUDES || index in O) { + if (O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + +},{"113":113,"116":116,"117":117}],20:[function(_dereq_,module,exports){ +// 0 -> Array#forEach +// 1 -> Array#map +// 2 -> Array#filter +// 3 -> Array#some +// 4 -> Array#every +// 5 -> Array#find +// 6 -> Array#findIndex +var ctx = _dereq_(32); +var IObject = _dereq_(53); +var toObject = _dereq_(118); +var toLength = _dereq_(117); +var asc = _dereq_(23); +module.exports = function (TYPE, $create) { + var IS_MAP = TYPE == 1; + var IS_FILTER = TYPE == 2; + var IS_SOME = TYPE == 3; + var IS_EVERY = TYPE == 4; + var IS_FIND_INDEX = TYPE == 6; + var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + var create = $create || asc; + return function ($this, callbackfn, that) { + var O = toObject($this); + var self = IObject(O); + var f = ctx(callbackfn, that, 3); + var length = toLength(self.length); + var index = 0; + var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; + var val, res; + for (;length > index; index++) if (NO_HOLES || index in self) { + val = self[index]; + res = f(val, index, O); + if (TYPE) { + if (IS_MAP) result[index] = res; // map + else if (res) switch (TYPE) { + case 3: return true; // some + case 5: return val; // find + case 6: return index; // findIndex + case 2: result.push(val); // filter + } else if (IS_EVERY) return false; // every + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; + }; +}; + +},{"117":117,"118":118,"23":23,"32":32,"53":53}],21:[function(_dereq_,module,exports){ +var aFunction = _dereq_(11); +var toObject = _dereq_(118); +var IObject = _dereq_(53); +var toLength = _dereq_(117); + +module.exports = function (that, callbackfn, aLen, memo, isRight) { + aFunction(callbackfn); + var O = toObject(that); + var self = IObject(O); + var length = toLength(O.length); + var index = isRight ? length - 1 : 0; + var i = isRight ? -1 : 1; + if (aLen < 2) for (;;) { + if (index in self) { + memo = self[index]; + index += i; + break; + } + index += i; + if (isRight ? index < 0 : length <= index) { + throw TypeError('Reduce of empty array with no initial value'); + } + } + for (;isRight ? index >= 0 : length > index; index += i) if (index in self) { + memo = callbackfn(memo, self[index], index, O); + } + return memo; +}; + +},{"11":11,"117":117,"118":118,"53":53}],22:[function(_dereq_,module,exports){ +var isObject = _dereq_(57); +var isArray = _dereq_(55); +var SPECIES = _dereq_(128)('species'); + +module.exports = function (original) { + var C; + if (isArray(original)) { + C = original.constructor; + // cross-realm fallback + if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; + if (isObject(C)) { + C = C[SPECIES]; + if (C === null) C = undefined; + } + } return C === undefined ? Array : C; +}; + +},{"128":128,"55":55,"57":57}],23:[function(_dereq_,module,exports){ +// 9.4.2.3 ArraySpeciesCreate(originalArray, length) +var speciesConstructor = _dereq_(22); + +module.exports = function (original, length) { + return new (speciesConstructor(original))(length); +}; + +},{"22":22}],24:[function(_dereq_,module,exports){ +'use strict'; +var aFunction = _dereq_(11); +var isObject = _dereq_(57); +var invoke = _dereq_(52); +var arraySlice = [].slice; +var factories = {}; + +var construct = function (F, len, args) { + if (!(len in factories)) { + for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']'; + // eslint-disable-next-line no-new-func + factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')'); + } return factories[len](F, args); +}; + +module.exports = Function.bind || function bind(that /* , ...args */) { + var fn = aFunction(this); + var partArgs = arraySlice.call(arguments, 1); + var bound = function (/* args... */) { + var args = partArgs.concat(arraySlice.call(arguments)); + return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that); + }; + if (isObject(fn.prototype)) bound.prototype = fn.prototype; + return bound; +}; + +},{"11":11,"52":52,"57":57}],25:[function(_dereq_,module,exports){ +// getting tag from 19.1.3.6 Object.prototype.toString() +var cof = _dereq_(26); +var TAG = _dereq_(128)('toStringTag'); +// ES3 wrong here +var ARG = cof(function () { return arguments; }()) == 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (e) { /* empty */ } +}; + +module.exports = function (it) { + var O, T, B; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T + // builtinTag case + : ARG ? cof(O) + // ES3 arguments fallback + : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; +}; + +},{"128":128,"26":26}],26:[function(_dereq_,module,exports){ +var toString = {}.toString; + +module.exports = function (it) { + return toString.call(it).slice(8, -1); +}; + +},{}],27:[function(_dereq_,module,exports){ +'use strict'; +var dP = _dereq_(75).f; +var create = _dereq_(74); +var redefineAll = _dereq_(93); +var ctx = _dereq_(32); +var anInstance = _dereq_(15); +var forOf = _dereq_(45); +var $iterDefine = _dereq_(61); +var step = _dereq_(63); +var setSpecies = _dereq_(99); +var DESCRIPTORS = _dereq_(36); +var fastKey = _dereq_(70).fastKey; +var validate = _dereq_(125); +var SIZE = DESCRIPTORS ? '_s' : 'size'; + +var getEntry = function (that, key) { + // fast case + var index = fastKey(key); + var entry; + if (index !== 'F') return that._i[index]; + // frozen object case + for (entry = that._f; entry; entry = entry.n) { + if (entry.k == key) return entry; + } +}; + +module.exports = { + getConstructor: function (wrapper, NAME, IS_MAP, ADDER) { + var C = wrapper(function (that, iterable) { + anInstance(that, C, NAME, '_i'); + that._t = NAME; // collection type + that._i = create(null); // index + that._f = undefined; // first entry + that._l = undefined; // last entry + that[SIZE] = 0; // size + if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); + }); + redefineAll(C.prototype, { + // 23.1.3.1 Map.prototype.clear() + // 23.2.3.2 Set.prototype.clear() + clear: function clear() { + for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) { + entry.r = true; + if (entry.p) entry.p = entry.p.n = undefined; + delete data[entry.i]; + } + that._f = that._l = undefined; + that[SIZE] = 0; + }, + // 23.1.3.3 Map.prototype.delete(key) + // 23.2.3.4 Set.prototype.delete(value) + 'delete': function (key) { + var that = validate(this, NAME); + var entry = getEntry(that, key); + if (entry) { + var next = entry.n; + var prev = entry.p; + delete that._i[entry.i]; + entry.r = true; + if (prev) prev.n = next; + if (next) next.p = prev; + if (that._f == entry) that._f = next; + if (that._l == entry) that._l = prev; + that[SIZE]--; + } return !!entry; + }, + // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) + // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) + forEach: function forEach(callbackfn /* , that = undefined */) { + validate(this, NAME); + var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var entry; + while (entry = entry ? entry.n : this._f) { + f(entry.v, entry.k, this); + // revert to the last existing entry + while (entry && entry.r) entry = entry.p; + } + }, + // 23.1.3.7 Map.prototype.has(key) + // 23.2.3.7 Set.prototype.has(value) + has: function has(key) { + return !!getEntry(validate(this, NAME), key); + } + }); + if (DESCRIPTORS) dP(C.prototype, 'size', { + get: function () { + return validate(this, NAME)[SIZE]; + } + }); + return C; + }, + def: function (that, key, value) { + var entry = getEntry(that, key); + var prev, index; + // change existing entry + if (entry) { + entry.v = value; + // create new entry + } else { + that._l = entry = { + i: index = fastKey(key, true), // <- index + k: key, // <- key + v: value, // <- value + p: prev = that._l, // <- previous entry + n: undefined, // <- next entry + r: false // <- removed + }; + if (!that._f) that._f = entry; + if (prev) prev.n = entry; + that[SIZE]++; + // add to index + if (index !== 'F') that._i[index] = entry; + } return that; + }, + getEntry: getEntry, + setStrong: function (C, NAME, IS_MAP) { + // add .keys, .values, .entries, [@@iterator] + // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11 + $iterDefine(C, NAME, function (iterated, kind) { + this._t = validate(iterated, NAME); // target + this._k = kind; // kind + this._l = undefined; // previous + }, function () { + var that = this; + var kind = that._k; + var entry = that._l; + // revert to the last existing entry + while (entry && entry.r) entry = entry.p; + // get next entry + if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) { + // or finish the iteration + that._t = undefined; + return step(1); + } + // return step by kind + if (kind == 'keys') return step(0, entry.k); + if (kind == 'values') return step(0, entry.v); + return step(0, [entry.k, entry.v]); + }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); + + // add [@@species], 23.1.2.2, 23.2.2.2 + setSpecies(NAME); + } +}; + +},{"125":125,"15":15,"32":32,"36":36,"45":45,"61":61,"63":63,"70":70,"74":74,"75":75,"93":93,"99":99}],28:[function(_dereq_,module,exports){ +'use strict'; +var redefineAll = _dereq_(93); +var getWeak = _dereq_(70).getWeak; +var anObject = _dereq_(16); +var isObject = _dereq_(57); +var anInstance = _dereq_(15); +var forOf = _dereq_(45); +var createArrayMethod = _dereq_(20); +var $has = _dereq_(47); +var validate = _dereq_(125); +var arrayFind = createArrayMethod(5); +var arrayFindIndex = createArrayMethod(6); +var id = 0; + +// fallback for uncaught frozen keys +var uncaughtFrozenStore = function (that) { + return that._l || (that._l = new UncaughtFrozenStore()); +}; +var UncaughtFrozenStore = function () { + this.a = []; +}; +var findUncaughtFrozen = function (store, key) { + return arrayFind(store.a, function (it) { + return it[0] === key; + }); +}; +UncaughtFrozenStore.prototype = { + get: function (key) { + var entry = findUncaughtFrozen(this, key); + if (entry) return entry[1]; + }, + has: function (key) { + return !!findUncaughtFrozen(this, key); + }, + set: function (key, value) { + var entry = findUncaughtFrozen(this, key); + if (entry) entry[1] = value; + else this.a.push([key, value]); + }, + 'delete': function (key) { + var index = arrayFindIndex(this.a, function (it) { + return it[0] === key; + }); + if (~index) this.a.splice(index, 1); + return !!~index; + } +}; + +module.exports = { + getConstructor: function (wrapper, NAME, IS_MAP, ADDER) { + var C = wrapper(function (that, iterable) { + anInstance(that, C, NAME, '_i'); + that._t = NAME; // collection type + that._i = id++; // collection id + that._l = undefined; // leak store for uncaught frozen objects + if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); + }); + redefineAll(C.prototype, { + // 23.3.3.2 WeakMap.prototype.delete(key) + // 23.4.3.3 WeakSet.prototype.delete(value) + 'delete': function (key) { + if (!isObject(key)) return false; + var data = getWeak(key); + if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key); + return data && $has(data, this._i) && delete data[this._i]; + }, + // 23.3.3.4 WeakMap.prototype.has(key) + // 23.4.3.4 WeakSet.prototype.has(value) + has: function has(key) { + if (!isObject(key)) return false; + var data = getWeak(key); + if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key); + return data && $has(data, this._i); + } + }); + return C; + }, + def: function (that, key, value) { + var data = getWeak(anObject(key), true); + if (data === true) uncaughtFrozenStore(that).set(key, value); + else data[that._i] = value; + return that; + }, + ufstore: uncaughtFrozenStore +}; + +},{"125":125,"15":15,"16":16,"20":20,"45":45,"47":47,"57":57,"70":70,"93":93}],29:[function(_dereq_,module,exports){ +'use strict'; +var global = _dereq_(46); +var $export = _dereq_(40); +var redefine = _dereq_(94); +var redefineAll = _dereq_(93); +var meta = _dereq_(70); +var forOf = _dereq_(45); +var anInstance = _dereq_(15); +var isObject = _dereq_(57); +var fails = _dereq_(42); +var $iterDetect = _dereq_(62); +var setToStringTag = _dereq_(100); +var inheritIfRequired = _dereq_(51); + +module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) { + var Base = global[NAME]; + var C = Base; + var ADDER = IS_MAP ? 'set' : 'add'; + var proto = C && C.prototype; + var O = {}; + var fixMethod = function (KEY) { + var fn = proto[KEY]; + redefine(proto, KEY, + KEY == 'delete' ? function (a) { + return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); + } : KEY == 'has' ? function has(a) { + return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); + } : KEY == 'get' ? function get(a) { + return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a); + } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; } + : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; } + ); + }; + if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () { + new C().entries().next(); + }))) { + // create collection constructor + C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); + redefineAll(C.prototype, methods); + meta.NEED = true; + } else { + var instance = new C(); + // early implementations not supports chaining + var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; + // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false + var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); }); + // most early implementations doesn't supports iterables, most modern - not close it correctly + var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new + // for early implementations -0 and +0 not the same + var BUGGY_ZERO = !IS_WEAK && fails(function () { + // V8 ~ Chromium 42- fails only with 5+ elements + var $instance = new C(); + var index = 5; + while (index--) $instance[ADDER](index, index); + return !$instance.has(-0); + }); + if (!ACCEPT_ITERABLES) { + C = wrapper(function (target, iterable) { + anInstance(target, C, NAME); + var that = inheritIfRequired(new Base(), target, C); + if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); + return that; + }); + C.prototype = proto; + proto.constructor = C; + } + if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { + fixMethod('delete'); + fixMethod('has'); + IS_MAP && fixMethod('get'); + } + if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); + // weak collections should not contains .clear method + if (IS_WEAK && proto.clear) delete proto.clear; + } + + setToStringTag(C, NAME); + + O[NAME] = C; + $export($export.G + $export.W + $export.F * (C != Base), O); + + if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP); + + return C; +}; + +},{"100":100,"15":15,"40":40,"42":42,"45":45,"46":46,"51":51,"57":57,"62":62,"70":70,"93":93,"94":94}],30:[function(_dereq_,module,exports){ +var core = module.exports = { version: '2.6.1' }; +if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef + +},{}],31:[function(_dereq_,module,exports){ +'use strict'; +var $defineProperty = _dereq_(75); +var createDesc = _dereq_(92); + +module.exports = function (object, index, value) { + if (index in object) $defineProperty.f(object, index, createDesc(0, value)); + else object[index] = value; +}; + +},{"75":75,"92":92}],32:[function(_dereq_,module,exports){ +// optional / simple context binding +var aFunction = _dereq_(11); +module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + +},{"11":11}],33:[function(_dereq_,module,exports){ +'use strict'; +// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString() +var fails = _dereq_(42); +var getTime = Date.prototype.getTime; +var $toISOString = Date.prototype.toISOString; + +var lz = function (num) { + return num > 9 ? num : '0' + num; +}; + +// PhantomJS / old WebKit has a broken implementations +module.exports = (fails(function () { + return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z'; +}) || !fails(function () { + $toISOString.call(new Date(NaN)); +})) ? function toISOString() { + if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value'); + var d = this; + var y = d.getUTCFullYear(); + var m = d.getUTCMilliseconds(); + var s = y < 0 ? '-' : y > 9999 ? '+' : ''; + return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) + + '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) + + 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) + + ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z'; +} : $toISOString; + +},{"42":42}],34:[function(_dereq_,module,exports){ +'use strict'; +var anObject = _dereq_(16); +var toPrimitive = _dereq_(119); +var NUMBER = 'number'; + +module.exports = function (hint) { + if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint'); + return toPrimitive(anObject(this), hint != NUMBER); +}; + +},{"119":119,"16":16}],35:[function(_dereq_,module,exports){ +// 7.2.1 RequireObjectCoercible(argument) +module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; +}; + +},{}],36:[function(_dereq_,module,exports){ +// Thank's IE8 for his funny defineProperty +module.exports = !_dereq_(42)(function () { + return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; +}); + +},{"42":42}],37:[function(_dereq_,module,exports){ +var isObject = _dereq_(57); +var document = _dereq_(46).document; +// typeof document.createElement is 'object' in old IE +var is = isObject(document) && isObject(document.createElement); +module.exports = function (it) { + return is ? document.createElement(it) : {}; +}; + +},{"46":46,"57":57}],38:[function(_dereq_,module,exports){ +// IE 8- don't enum bug keys +module.exports = ( + 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' +).split(','); + +},{}],39:[function(_dereq_,module,exports){ +// all enumerable object keys, includes symbols +var getKeys = _dereq_(83); +var gOPS = _dereq_(80); +var pIE = _dereq_(84); +module.exports = function (it) { + var result = getKeys(it); + var getSymbols = gOPS.f; + if (getSymbols) { + var symbols = getSymbols(it); + var isEnum = pIE.f; + var i = 0; + var key; + while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key); + } return result; +}; + +},{"80":80,"83":83,"84":84}],40:[function(_dereq_,module,exports){ +var global = _dereq_(46); +var core = _dereq_(30); +var hide = _dereq_(48); +var redefine = _dereq_(94); +var ctx = _dereq_(32); +var PROTOTYPE = 'prototype'; + +var $export = function (type, name, source) { + var IS_FORCED = type & $export.F; + var IS_GLOBAL = type & $export.G; + var IS_STATIC = type & $export.S; + var IS_PROTO = type & $export.P; + var IS_BIND = type & $export.B; + var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]; + var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); + var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}); + var key, own, out, exp; + if (IS_GLOBAL) source = name; + for (key in source) { + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + // export native or passed + out = (own ? target : source)[key]; + // bind timers to global for call from export context + exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // extend global + if (target) redefine(target, key, out, type & $export.U); + // export + if (exports[key] != out) hide(exports, key, exp); + if (IS_PROTO && expProto[key] != out) expProto[key] = out; + } +}; +global.core = core; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; + +},{"30":30,"32":32,"46":46,"48":48,"94":94}],41:[function(_dereq_,module,exports){ +var MATCH = _dereq_(128)('match'); +module.exports = function (KEY) { + var re = /./; + try { + '/./'[KEY](re); + } catch (e) { + try { + re[MATCH] = false; + return !'/./'[KEY](re); + } catch (f) { /* empty */ } + } return true; +}; + +},{"128":128}],42:[function(_dereq_,module,exports){ +module.exports = function (exec) { + try { + return !!exec(); + } catch (e) { + return true; + } +}; + +},{}],43:[function(_dereq_,module,exports){ +'use strict'; +_dereq_(224); +var redefine = _dereq_(94); +var hide = _dereq_(48); +var fails = _dereq_(42); +var defined = _dereq_(35); +var wks = _dereq_(128); +var regexpExec = _dereq_(96); + +var SPECIES = wks('species'); + +var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () { + // #replace needs built-in support for named groups. + // #match works fine because it just return the exec results, even if it has + // a "grops" property. + var re = /./; + re.exec = function () { + var result = []; + result.groups = { a: '7' }; + return result; + }; + return ''.replace(re, '$') !== '7'; +}); + +var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () { + // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec + var re = /(?:)/; + var originalExec = re.exec; + re.exec = function () { return originalExec.apply(this, arguments); }; + var result = 'ab'.split(re); + return result.length === 2 && result[0] === 'a' && result[1] === 'b'; +})(); + +module.exports = function (KEY, length, exec) { + var SYMBOL = wks(KEY); + + var DELEGATES_TO_SYMBOL = !fails(function () { + // String methods call symbol-named RegEp methods + var O = {}; + O[SYMBOL] = function () { return 7; }; + return ''[KEY](O) != 7; + }); + + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () { + // Symbol-named RegExp methods call .exec + var execCalled = false; + var re = /a/; + re.exec = function () { execCalled = true; return null; }; + if (KEY === 'split') { + // RegExp[@@split] doesn't call the regex's exec method, but first creates + // a new one. We need to return the patched regex when creating the new one. + re.constructor = {}; + re.constructor[SPECIES] = function () { return re; }; + } + re[SYMBOL](''); + return !execCalled; + }) : undefined; + + if ( + !DELEGATES_TO_SYMBOL || + !DELEGATES_TO_EXEC || + (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) || + (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC) + ) { + var nativeRegExpMethod = /./[SYMBOL]; + var fns = exec( + defined, + SYMBOL, + ''[KEY], + function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) { + if (regexp.exec === regexpExec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + // The native String method already delegates to @@method (this + // polyfilled function), leasing to infinite recursion. + // We avoid it by directly calling the native @@method method. + return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) }; + } + return { done: true, value: nativeMethod.call(str, regexp, arg2) }; + } + return { done: false }; + } + ); + var strfn = fns[0]; + var rxfn = fns[1]; + + redefine(String.prototype, KEY, strfn); + hide(RegExp.prototype, SYMBOL, length == 2 + // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue) + // 21.2.5.11 RegExp.prototype[@@split](string, limit) + ? function (string, arg) { return rxfn.call(string, this, arg); } + // 21.2.5.6 RegExp.prototype[@@match](string) + // 21.2.5.9 RegExp.prototype[@@search](string) + : function (string) { return rxfn.call(string, this); } + ); + } +}; + +},{"128":128,"224":224,"35":35,"42":42,"48":48,"94":94,"96":96}],44:[function(_dereq_,module,exports){ +'use strict'; +// 21.2.5.3 get RegExp.prototype.flags +var anObject = _dereq_(16); +module.exports = function () { + var that = anObject(this); + var result = ''; + if (that.global) result += 'g'; + if (that.ignoreCase) result += 'i'; + if (that.multiline) result += 'm'; + if (that.unicode) result += 'u'; + if (that.sticky) result += 'y'; + return result; +}; + +},{"16":16}],45:[function(_dereq_,module,exports){ +var ctx = _dereq_(32); +var call = _dereq_(59); +var isArrayIter = _dereq_(54); +var anObject = _dereq_(16); +var toLength = _dereq_(117); +var getIterFn = _dereq_(129); +var BREAK = {}; +var RETURN = {}; +var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) { + var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable); + var f = ctx(fn, that, entries ? 2 : 1); + var index = 0; + var length, step, iterator, result; + if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!'); + // fast case for arrays with default iterator + if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) { + result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); + if (result === BREAK || result === RETURN) return result; + } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) { + result = call(iterator, f, step.value, entries); + if (result === BREAK || result === RETURN) return result; + } +}; +exports.BREAK = BREAK; +exports.RETURN = RETURN; + +},{"117":117,"129":129,"16":16,"32":32,"54":54,"59":59}],46:[function(_dereq_,module,exports){ +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self + // eslint-disable-next-line no-new-func + : Function('return this')(); +if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef + +},{}],47:[function(_dereq_,module,exports){ +var hasOwnProperty = {}.hasOwnProperty; +module.exports = function (it, key) { + return hasOwnProperty.call(it, key); +}; + +},{}],48:[function(_dereq_,module,exports){ +var dP = _dereq_(75); +var createDesc = _dereq_(92); +module.exports = _dereq_(36) ? function (object, key, value) { + return dP.f(object, key, createDesc(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + +},{"36":36,"75":75,"92":92}],49:[function(_dereq_,module,exports){ +var document = _dereq_(46).document; +module.exports = document && document.documentElement; + +},{"46":46}],50:[function(_dereq_,module,exports){ +module.exports = !_dereq_(36) && !_dereq_(42)(function () { + return Object.defineProperty(_dereq_(37)('div'), 'a', { get: function () { return 7; } }).a != 7; +}); + +},{"36":36,"37":37,"42":42}],51:[function(_dereq_,module,exports){ +var isObject = _dereq_(57); +var setPrototypeOf = _dereq_(98).set; +module.exports = function (that, target, C) { + var S = target.constructor; + var P; + if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) { + setPrototypeOf(that, P); + } return that; +}; + +},{"57":57,"98":98}],52:[function(_dereq_,module,exports){ +// fast apply, http://jsperf.lnkit.com/fast-apply/5 +module.exports = function (fn, args, that) { + var un = that === undefined; + switch (args.length) { + case 0: return un ? fn() + : fn.call(that); + case 1: return un ? fn(args[0]) + : fn.call(that, args[0]); + case 2: return un ? fn(args[0], args[1]) + : fn.call(that, args[0], args[1]); + case 3: return un ? fn(args[0], args[1], args[2]) + : fn.call(that, args[0], args[1], args[2]); + case 4: return un ? fn(args[0], args[1], args[2], args[3]) + : fn.call(that, args[0], args[1], args[2], args[3]); + } return fn.apply(that, args); +}; + +},{}],53:[function(_dereq_,module,exports){ +// fallback for non-array-like ES3 and non-enumerable old V8 strings +var cof = _dereq_(26); +// eslint-disable-next-line no-prototype-builtins +module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { + return cof(it) == 'String' ? it.split('') : Object(it); +}; + +},{"26":26}],54:[function(_dereq_,module,exports){ +// check on default Array iterator +var Iterators = _dereq_(64); +var ITERATOR = _dereq_(128)('iterator'); +var ArrayProto = Array.prototype; + +module.exports = function (it) { + return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); +}; + +},{"128":128,"64":64}],55:[function(_dereq_,module,exports){ +// 7.2.2 IsArray(argument) +var cof = _dereq_(26); +module.exports = Array.isArray || function isArray(arg) { + return cof(arg) == 'Array'; +}; + +},{"26":26}],56:[function(_dereq_,module,exports){ +// 20.1.2.3 Number.isInteger(number) +var isObject = _dereq_(57); +var floor = Math.floor; +module.exports = function isInteger(it) { + return !isObject(it) && isFinite(it) && floor(it) === it; +}; + +},{"57":57}],57:[function(_dereq_,module,exports){ +module.exports = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; + +},{}],58:[function(_dereq_,module,exports){ +// 7.2.8 IsRegExp(argument) +var isObject = _dereq_(57); +var cof = _dereq_(26); +var MATCH = _dereq_(128)('match'); +module.exports = function (it) { + var isRegExp; + return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp'); +}; + +},{"128":128,"26":26,"57":57}],59:[function(_dereq_,module,exports){ +// call something on iterator step with safe closing on error +var anObject = _dereq_(16); +module.exports = function (iterator, fn, value, entries) { + try { + return entries ? fn(anObject(value)[0], value[1]) : fn(value); + // 7.4.6 IteratorClose(iterator, completion) + } catch (e) { + var ret = iterator['return']; + if (ret !== undefined) anObject(ret.call(iterator)); + throw e; + } +}; + +},{"16":16}],60:[function(_dereq_,module,exports){ +'use strict'; +var create = _dereq_(74); +var descriptor = _dereq_(92); +var setToStringTag = _dereq_(100); +var IteratorPrototype = {}; + +// 25.1.2.1.1 %IteratorPrototype%[@@iterator]() +_dereq_(48)(IteratorPrototype, _dereq_(128)('iterator'), function () { return this; }); + +module.exports = function (Constructor, NAME, next) { + Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) }); + setToStringTag(Constructor, NAME + ' Iterator'); +}; + +},{"100":100,"128":128,"48":48,"74":74,"92":92}],61:[function(_dereq_,module,exports){ +'use strict'; +var LIBRARY = _dereq_(65); +var $export = _dereq_(40); +var redefine = _dereq_(94); +var hide = _dereq_(48); +var Iterators = _dereq_(64); +var $iterCreate = _dereq_(60); +var setToStringTag = _dereq_(100); +var getPrototypeOf = _dereq_(81); +var ITERATOR = _dereq_(128)('iterator'); +var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next` +var FF_ITERATOR = '@@iterator'; +var KEYS = 'keys'; +var VALUES = 'values'; + +var returnThis = function () { return this; }; + +module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) { + $iterCreate(Constructor, NAME, next); + var getMethod = function (kind) { + if (!BUGGY && kind in proto) return proto[kind]; + switch (kind) { + case KEYS: return function keys() { return new Constructor(this, kind); }; + case VALUES: return function values() { return new Constructor(this, kind); }; + } return function entries() { return new Constructor(this, kind); }; + }; + var TAG = NAME + ' Iterator'; + var DEF_VALUES = DEFAULT == VALUES; + var VALUES_BUG = false; + var proto = Base.prototype; + var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]; + var $default = $native || getMethod(DEFAULT); + var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined; + var $anyNative = NAME == 'Array' ? proto.entries || $native : $native; + var methods, key, IteratorPrototype; + // Fix native + if ($anyNative) { + IteratorPrototype = getPrototypeOf($anyNative.call(new Base())); + if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) { + // Set @@toStringTag to native iterators + setToStringTag(IteratorPrototype, TAG, true); + // fix for some old engines + if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis); + } + } + // fix Array#{values, @@iterator}.name in V8 / FF + if (DEF_VALUES && $native && $native.name !== VALUES) { + VALUES_BUG = true; + $default = function values() { return $native.call(this); }; + } + // Define iterator + if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) { + hide(proto, ITERATOR, $default); + } + // Plug for library + Iterators[NAME] = $default; + Iterators[TAG] = returnThis; + if (DEFAULT) { + methods = { + values: DEF_VALUES ? $default : getMethod(VALUES), + keys: IS_SET ? $default : getMethod(KEYS), + entries: $entries + }; + if (FORCED) for (key in methods) { + if (!(key in proto)) redefine(proto, key, methods[key]); + } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); + } + return methods; +}; + +},{"100":100,"128":128,"40":40,"48":48,"60":60,"64":64,"65":65,"81":81,"94":94}],62:[function(_dereq_,module,exports){ +var ITERATOR = _dereq_(128)('iterator'); +var SAFE_CLOSING = false; + +try { + var riter = [7][ITERATOR](); + riter['return'] = function () { SAFE_CLOSING = true; }; + // eslint-disable-next-line no-throw-literal + Array.from(riter, function () { throw 2; }); +} catch (e) { /* empty */ } + +module.exports = function (exec, skipClosing) { + if (!skipClosing && !SAFE_CLOSING) return false; + var safe = false; + try { + var arr = [7]; + var iter = arr[ITERATOR](); + iter.next = function () { return { done: safe = true }; }; + arr[ITERATOR] = function () { return iter; }; + exec(arr); + } catch (e) { /* empty */ } + return safe; +}; + +},{"128":128}],63:[function(_dereq_,module,exports){ +module.exports = function (done, value) { + return { value: value, done: !!done }; +}; + +},{}],64:[function(_dereq_,module,exports){ +module.exports = {}; + +},{}],65:[function(_dereq_,module,exports){ +module.exports = false; + +},{}],66:[function(_dereq_,module,exports){ +// 20.2.2.14 Math.expm1(x) +var $expm1 = Math.expm1; +module.exports = (!$expm1 + // Old FF bug + || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168 + // Tor Browser bug + || $expm1(-2e-17) != -2e-17 +) ? function expm1(x) { + return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1; +} : $expm1; + +},{}],67:[function(_dereq_,module,exports){ +// 20.2.2.16 Math.fround(x) +var sign = _dereq_(69); +var pow = Math.pow; +var EPSILON = pow(2, -52); +var EPSILON32 = pow(2, -23); +var MAX32 = pow(2, 127) * (2 - EPSILON32); +var MIN32 = pow(2, -126); + +var roundTiesToEven = function (n) { + return n + 1 / EPSILON - 1 / EPSILON; +}; + +module.exports = Math.fround || function fround(x) { + var $abs = Math.abs(x); + var $sign = sign(x); + var a, result; + if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32; + a = (1 + EPSILON32 / EPSILON) * $abs; + result = a - (a - $abs); + // eslint-disable-next-line no-self-compare + if (result > MAX32 || result != result) return $sign * Infinity; + return $sign * result; +}; + +},{"69":69}],68:[function(_dereq_,module,exports){ +// 20.2.2.20 Math.log1p(x) +module.exports = Math.log1p || function log1p(x) { + return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x); +}; + +},{}],69:[function(_dereq_,module,exports){ +// 20.2.2.28 Math.sign(x) +module.exports = Math.sign || function sign(x) { + // eslint-disable-next-line no-self-compare + return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1; +}; + +},{}],70:[function(_dereq_,module,exports){ +var META = _dereq_(123)('meta'); +var isObject = _dereq_(57); +var has = _dereq_(47); +var setDesc = _dereq_(75).f; +var id = 0; +var isExtensible = Object.isExtensible || function () { + return true; +}; +var FREEZE = !_dereq_(42)(function () { + return isExtensible(Object.preventExtensions({})); +}); +var setMeta = function (it) { + setDesc(it, META, { value: { + i: 'O' + ++id, // object ID + w: {} // weak collections IDs + } }); +}; +var fastKey = function (it, create) { + // return primitive with prefix + if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + if (!has(it, META)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return 'F'; + // not necessary to add metadata + if (!create) return 'E'; + // add missing metadata + setMeta(it); + // return object ID + } return it[META].i; +}; +var getWeak = function (it, create) { + if (!has(it, META)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return true; + // not necessary to add metadata + if (!create) return false; + // add missing metadata + setMeta(it); + // return hash weak collections IDs + } return it[META].w; +}; +// add metadata on freeze-family methods calling +var onFreeze = function (it) { + if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it); + return it; +}; +var meta = module.exports = { + KEY: META, + NEED: false, + fastKey: fastKey, + getWeak: getWeak, + onFreeze: onFreeze +}; + +},{"123":123,"42":42,"47":47,"57":57,"75":75}],71:[function(_dereq_,module,exports){ +var global = _dereq_(46); +var macrotask = _dereq_(112).set; +var Observer = global.MutationObserver || global.WebKitMutationObserver; +var process = global.process; +var Promise = global.Promise; +var isNode = _dereq_(26)(process) == 'process'; + +module.exports = function () { + var head, last, notify; + + var flush = function () { + var parent, fn; + if (isNode && (parent = process.domain)) parent.exit(); + while (head) { + fn = head.fn; + head = head.next; + try { + fn(); + } catch (e) { + if (head) notify(); + else last = undefined; + throw e; + } + } last = undefined; + if (parent) parent.enter(); + }; + + // Node.js + if (isNode) { + notify = function () { + process.nextTick(flush); + }; + // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339 + } else if (Observer && !(global.navigator && global.navigator.standalone)) { + var toggle = true; + var node = document.createTextNode(''); + new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new + notify = function () { + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if (Promise && Promise.resolve) { + // Promise.resolve without an argument throws an error in LG WebOS 2 + var promise = Promise.resolve(undefined); + notify = function () { + promise.then(flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessag + // - onreadystatechange + // - setTimeout + } else { + notify = function () { + // strange IE + webpack dev server bug - use .call(global) + macrotask.call(global, flush); + }; + } + + return function (fn) { + var task = { fn: fn, next: undefined }; + if (last) last.next = task; + if (!head) { + head = task; + notify(); + } last = task; + }; +}; + +},{"112":112,"26":26,"46":46}],72:[function(_dereq_,module,exports){ +'use strict'; +// 25.4.1.5 NewPromiseCapability(C) +var aFunction = _dereq_(11); + +function PromiseCapability(C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aFunction(resolve); + this.reject = aFunction(reject); +} + +module.exports.f = function (C) { + return new PromiseCapability(C); +}; + +},{"11":11}],73:[function(_dereq_,module,exports){ +'use strict'; +// 19.1.2.1 Object.assign(target, source, ...) +var getKeys = _dereq_(83); +var gOPS = _dereq_(80); +var pIE = _dereq_(84); +var toObject = _dereq_(118); +var IObject = _dereq_(53); +var $assign = Object.assign; + +// should work with symbols and should have deterministic property order (V8 bug) +module.exports = !$assign || _dereq_(42)(function () { + var A = {}; + var B = {}; + // eslint-disable-next-line no-undef + var S = Symbol(); + var K = 'abcdefghijklmnopqrst'; + A[S] = 7; + K.split('').forEach(function (k) { B[k] = k; }); + return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K; +}) ? function assign(target, source) { // eslint-disable-line no-unused-vars + var T = toObject(target); + var aLen = arguments.length; + var index = 1; + var getSymbols = gOPS.f; + var isEnum = pIE.f; + while (aLen > index) { + var S = IObject(arguments[index++]); + var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S); + var length = keys.length; + var j = 0; + var key; + while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key]; + } return T; +} : $assign; + +},{"118":118,"42":42,"53":53,"80":80,"83":83,"84":84}],74:[function(_dereq_,module,exports){ +// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) +var anObject = _dereq_(16); +var dPs = _dereq_(76); +var enumBugKeys = _dereq_(38); +var IE_PROTO = _dereq_(101)('IE_PROTO'); +var Empty = function () { /* empty */ }; +var PROTOTYPE = 'prototype'; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var createDict = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = _dereq_(37)('iframe'); + var i = enumBugKeys.length; + var lt = '<'; + var gt = '>'; + var iframeDocument; + iframe.style.display = 'none'; + _dereq_(49).appendChild(iframe); + iframe.src = 'javascript:'; // eslint-disable-line no-script-url + // createDict = iframe.contentWindow.Object; + // html.removeChild(iframe); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); + iframeDocument.close(); + createDict = iframeDocument.F; + while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]]; + return createDict(); +}; + +module.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + Empty[PROTOTYPE] = anObject(O); + result = new Empty(); + Empty[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = createDict(); + return Properties === undefined ? result : dPs(result, Properties); +}; + +},{"101":101,"16":16,"37":37,"38":38,"49":49,"76":76}],75:[function(_dereq_,module,exports){ +var anObject = _dereq_(16); +var IE8_DOM_DEFINE = _dereq_(50); +var toPrimitive = _dereq_(119); +var dP = Object.defineProperty; + +exports.f = _dereq_(36) ? Object.defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return dP(O, P, Attributes); + } catch (e) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + +},{"119":119,"16":16,"36":36,"50":50}],76:[function(_dereq_,module,exports){ +var dP = _dereq_(75); +var anObject = _dereq_(16); +var getKeys = _dereq_(83); + +module.exports = _dereq_(36) ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var keys = getKeys(Properties); + var length = keys.length; + var i = 0; + var P; + while (length > i) dP.f(O, P = keys[i++], Properties[P]); + return O; +}; + +},{"16":16,"36":36,"75":75,"83":83}],77:[function(_dereq_,module,exports){ +var pIE = _dereq_(84); +var createDesc = _dereq_(92); +var toIObject = _dereq_(116); +var toPrimitive = _dereq_(119); +var has = _dereq_(47); +var IE8_DOM_DEFINE = _dereq_(50); +var gOPD = Object.getOwnPropertyDescriptor; + +exports.f = _dereq_(36) ? gOPD : function getOwnPropertyDescriptor(O, P) { + O = toIObject(O); + P = toPrimitive(P, true); + if (IE8_DOM_DEFINE) try { + return gOPD(O, P); + } catch (e) { /* empty */ } + if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); +}; + +},{"116":116,"119":119,"36":36,"47":47,"50":50,"84":84,"92":92}],78:[function(_dereq_,module,exports){ +// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window +var toIObject = _dereq_(116); +var gOPN = _dereq_(79).f; +var toString = {}.toString; + +var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames + ? Object.getOwnPropertyNames(window) : []; + +var getWindowNames = function (it) { + try { + return gOPN(it); + } catch (e) { + return windowNames.slice(); + } +}; + +module.exports.f = function getOwnPropertyNames(it) { + return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it)); +}; + +},{"116":116,"79":79}],79:[function(_dereq_,module,exports){ +// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O) +var $keys = _dereq_(82); +var hiddenKeys = _dereq_(38).concat('length', 'prototype'); + +exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return $keys(O, hiddenKeys); +}; + +},{"38":38,"82":82}],80:[function(_dereq_,module,exports){ +exports.f = Object.getOwnPropertySymbols; + +},{}],81:[function(_dereq_,module,exports){ +// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) +var has = _dereq_(47); +var toObject = _dereq_(118); +var IE_PROTO = _dereq_(101)('IE_PROTO'); +var ObjectProto = Object.prototype; + +module.exports = Object.getPrototypeOf || function (O) { + O = toObject(O); + if (has(O, IE_PROTO)) return O[IE_PROTO]; + if (typeof O.constructor == 'function' && O instanceof O.constructor) { + return O.constructor.prototype; + } return O instanceof Object ? ObjectProto : null; +}; + +},{"101":101,"118":118,"47":47}],82:[function(_dereq_,module,exports){ +var has = _dereq_(47); +var toIObject = _dereq_(116); +var arrayIndexOf = _dereq_(19)(false); +var IE_PROTO = _dereq_(101)('IE_PROTO'); + +module.exports = function (object, names) { + var O = toIObject(object); + var i = 0; + var result = []; + var key; + for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while (names.length > i) if (has(O, key = names[i++])) { + ~arrayIndexOf(result, key) || result.push(key); + } + return result; +}; + +},{"101":101,"116":116,"19":19,"47":47}],83:[function(_dereq_,module,exports){ +// 19.1.2.14 / 15.2.3.14 Object.keys(O) +var $keys = _dereq_(82); +var enumBugKeys = _dereq_(38); + +module.exports = Object.keys || function keys(O) { + return $keys(O, enumBugKeys); +}; + +},{"38":38,"82":82}],84:[function(_dereq_,module,exports){ +exports.f = {}.propertyIsEnumerable; + +},{}],85:[function(_dereq_,module,exports){ +// most Object methods by ES6 should accept primitives +var $export = _dereq_(40); +var core = _dereq_(30); +var fails = _dereq_(42); +module.exports = function (KEY, exec) { + var fn = (core.Object || {})[KEY] || Object[KEY]; + var exp = {}; + exp[KEY] = exec(fn); + $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp); +}; + +},{"30":30,"40":40,"42":42}],86:[function(_dereq_,module,exports){ +var getKeys = _dereq_(83); +var toIObject = _dereq_(116); +var isEnum = _dereq_(84).f; +module.exports = function (isEntries) { + return function (it) { + var O = toIObject(it); + var keys = getKeys(O); + var length = keys.length; + var i = 0; + var result = []; + var key; + while (length > i) if (isEnum.call(O, key = keys[i++])) { + result.push(isEntries ? [key, O[key]] : O[key]); + } return result; + }; +}; + +},{"116":116,"83":83,"84":84}],87:[function(_dereq_,module,exports){ +// all object keys, includes non-enumerable and symbols +var gOPN = _dereq_(79); +var gOPS = _dereq_(80); +var anObject = _dereq_(16); +var Reflect = _dereq_(46).Reflect; +module.exports = Reflect && Reflect.ownKeys || function ownKeys(it) { + var keys = gOPN.f(anObject(it)); + var getSymbols = gOPS.f; + return getSymbols ? keys.concat(getSymbols(it)) : keys; +}; + +},{"16":16,"46":46,"79":79,"80":80}],88:[function(_dereq_,module,exports){ +var $parseFloat = _dereq_(46).parseFloat; +var $trim = _dereq_(110).trim; + +module.exports = 1 / $parseFloat(_dereq_(111) + '-0') !== -Infinity ? function parseFloat(str) { + var string = $trim(String(str), 3); + var result = $parseFloat(string); + return result === 0 && string.charAt(0) == '-' ? -0 : result; +} : $parseFloat; + +},{"110":110,"111":111,"46":46}],89:[function(_dereq_,module,exports){ +var $parseInt = _dereq_(46).parseInt; +var $trim = _dereq_(110).trim; +var ws = _dereq_(111); +var hex = /^[-+]?0[xX]/; + +module.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) { + var string = $trim(String(str), 3); + return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10)); +} : $parseInt; + +},{"110":110,"111":111,"46":46}],90:[function(_dereq_,module,exports){ +module.exports = function (exec) { + try { + return { e: false, v: exec() }; + } catch (e) { + return { e: true, v: e }; + } +}; + +},{}],91:[function(_dereq_,module,exports){ +var anObject = _dereq_(16); +var isObject = _dereq_(57); +var newPromiseCapability = _dereq_(72); + +module.exports = function (C, x) { + anObject(C); + if (isObject(x) && x.constructor === C) return x; + var promiseCapability = newPromiseCapability.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; +}; + +},{"16":16,"57":57,"72":72}],92:[function(_dereq_,module,exports){ +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + +},{}],93:[function(_dereq_,module,exports){ +var redefine = _dereq_(94); +module.exports = function (target, src, safe) { + for (var key in src) redefine(target, key, src[key], safe); + return target; +}; + +},{"94":94}],94:[function(_dereq_,module,exports){ +var global = _dereq_(46); +var hide = _dereq_(48); +var has = _dereq_(47); +var SRC = _dereq_(123)('src'); +var TO_STRING = 'toString'; +var $toString = Function[TO_STRING]; +var TPL = ('' + $toString).split(TO_STRING); + +_dereq_(30).inspectSource = function (it) { + return $toString.call(it); +}; + +(module.exports = function (O, key, val, safe) { + var isFunction = typeof val == 'function'; + if (isFunction) has(val, 'name') || hide(val, 'name', key); + if (O[key] === val) return; + if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); + if (O === global) { + O[key] = val; + } else if (!safe) { + delete O[key]; + hide(O, key, val); + } else if (O[key]) { + O[key] = val; + } else { + hide(O, key, val); + } +// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative +})(Function.prototype, TO_STRING, function toString() { + return typeof this == 'function' && this[SRC] || $toString.call(this); +}); + +},{"123":123,"30":30,"46":46,"47":47,"48":48}],95:[function(_dereq_,module,exports){ +'use strict'; + +var classof = _dereq_(25); +var builtinExec = RegExp.prototype.exec; + + // `RegExpExec` abstract operation +// https://tc39.github.io/ecma262/#sec-regexpexec +module.exports = function (R, S) { + var exec = R.exec; + if (typeof exec === 'function') { + var result = exec.call(R, S); + if (typeof result !== 'object') { + throw new TypeError('RegExp exec method returned something other than an Object or null'); + } + return result; + } + if (classof(R) !== 'RegExp') { + throw new TypeError('RegExp#exec called on incompatible receiver'); + } + return builtinExec.call(R, S); +}; + +},{"25":25}],96:[function(_dereq_,module,exports){ +'use strict'; + +var regexpFlags = _dereq_(44); + +var nativeExec = RegExp.prototype.exec; +// This always refers to the native implementation, because the +// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js, +// which loads this file before patching the method. +var nativeReplace = String.prototype.replace; + +var patchedExec = nativeExec; + +var LAST_INDEX = 'lastIndex'; + +var UPDATES_LAST_INDEX_WRONG = (function () { + var re1 = /a/, + re2 = /b*/g; + nativeExec.call(re1, 'a'); + nativeExec.call(re2, 'a'); + return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0; +})(); + +// nonparticipating capturing group, copied from es5-shim's String#split patch. +var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; + +var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED; + +if (PATCH) { + patchedExec = function exec(str) { + var re = this; + var lastIndex, reCopy, match, i; + + if (NPCG_INCLUDED) { + reCopy = new RegExp('^' + re.source + '$(?!\\s)', regexpFlags.call(re)); + } + if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX]; + + match = nativeExec.call(re, str); + + if (UPDATES_LAST_INDEX_WRONG && match) { + re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + // Fix browsers whose `exec` methods don't consistently return `undefined` + // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ + // eslint-disable-next-line no-loop-func + nativeReplace.call(match[0], reCopy, function () { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) match[i] = undefined; + } + }); + } + + return match; + }; +} + +module.exports = patchedExec; + +},{"44":44}],97:[function(_dereq_,module,exports){ +// 7.2.9 SameValue(x, y) +module.exports = Object.is || function is(x, y) { + // eslint-disable-next-line no-self-compare + return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y; +}; + +},{}],98:[function(_dereq_,module,exports){ +// Works with __proto__ only. Old v8 can't work with null proto objects. +/* eslint-disable no-proto */ +var isObject = _dereq_(57); +var anObject = _dereq_(16); +var check = function (O, proto) { + anObject(O); + if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!"); +}; +module.exports = { + set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line + function (test, buggy, set) { + try { + set = _dereq_(32)(Function.call, _dereq_(77).f(Object.prototype, '__proto__').set, 2); + set(test, []); + buggy = !(test instanceof Array); + } catch (e) { buggy = true; } + return function setPrototypeOf(O, proto) { + check(O, proto); + if (buggy) O.__proto__ = proto; + else set(O, proto); + return O; + }; + }({}, false) : undefined), + check: check +}; + +},{"16":16,"32":32,"57":57,"77":77}],99:[function(_dereq_,module,exports){ +'use strict'; +var global = _dereq_(46); +var dP = _dereq_(75); +var DESCRIPTORS = _dereq_(36); +var SPECIES = _dereq_(128)('species'); + +module.exports = function (KEY) { + var C = global[KEY]; + if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, { + configurable: true, + get: function () { return this; } + }); +}; + +},{"128":128,"36":36,"46":46,"75":75}],100:[function(_dereq_,module,exports){ +var def = _dereq_(75).f; +var has = _dereq_(47); +var TAG = _dereq_(128)('toStringTag'); + +module.exports = function (it, tag, stat) { + if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); +}; + +},{"128":128,"47":47,"75":75}],101:[function(_dereq_,module,exports){ +var shared = _dereq_(102)('keys'); +var uid = _dereq_(123); +module.exports = function (key) { + return shared[key] || (shared[key] = uid(key)); +}; + +},{"102":102,"123":123}],102:[function(_dereq_,module,exports){ +var core = _dereq_(30); +var global = _dereq_(46); +var SHARED = '__core-js_shared__'; +var store = global[SHARED] || (global[SHARED] = {}); + +(module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); +})('versions', []).push({ + version: core.version, + mode: _dereq_(65) ? 'pure' : 'global', + copyright: '© 2018 Denis Pushkarev (zloirock.ru)' +}); + +},{"30":30,"46":46,"65":65}],103:[function(_dereq_,module,exports){ +// 7.3.20 SpeciesConstructor(O, defaultConstructor) +var anObject = _dereq_(16); +var aFunction = _dereq_(11); +var SPECIES = _dereq_(128)('species'); +module.exports = function (O, D) { + var C = anObject(O).constructor; + var S; + return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); +}; + +},{"11":11,"128":128,"16":16}],104:[function(_dereq_,module,exports){ +'use strict'; +var fails = _dereq_(42); + +module.exports = function (method, arg) { + return !!method && fails(function () { + // eslint-disable-next-line no-useless-call + arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null); + }); +}; + +},{"42":42}],105:[function(_dereq_,module,exports){ +var toInteger = _dereq_(115); +var defined = _dereq_(35); +// true -> String#at +// false -> String#codePointAt +module.exports = function (TO_STRING) { + return function (that, pos) { + var s = String(defined(that)); + var i = toInteger(pos); + var l = s.length; + var a, b; + if (i < 0 || i >= l) return TO_STRING ? '' : undefined; + a = s.charCodeAt(i); + return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff + ? TO_STRING ? s.charAt(i) : a + : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; + }; +}; + +},{"115":115,"35":35}],106:[function(_dereq_,module,exports){ +// helper for String#{startsWith, endsWith, includes} +var isRegExp = _dereq_(58); +var defined = _dereq_(35); + +module.exports = function (that, searchString, NAME) { + if (isRegExp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!"); + return String(defined(that)); +}; + +},{"35":35,"58":58}],107:[function(_dereq_,module,exports){ +var $export = _dereq_(40); +var fails = _dereq_(42); +var defined = _dereq_(35); +var quot = /"/g; +// B.2.3.2.1 CreateHTML(string, tag, attribute, value) +var createHTML = function (string, tag, attribute, value) { + var S = String(defined(string)); + var p1 = '<' + tag; + if (attribute !== '') p1 += ' ' + attribute + '="' + String(value).replace(quot, '"') + '"'; + return p1 + '>' + S + ''; +}; +module.exports = function (NAME, exec) { + var O = {}; + O[NAME] = exec(createHTML); + $export($export.P + $export.F * fails(function () { + var test = ''[NAME]('"'); + return test !== test.toLowerCase() || test.split('"').length > 3; + }), 'String', O); +}; + +},{"35":35,"40":40,"42":42}],108:[function(_dereq_,module,exports){ +// https://github.com/tc39/proposal-string-pad-start-end +var toLength = _dereq_(117); +var repeat = _dereq_(109); +var defined = _dereq_(35); + +module.exports = function (that, maxLength, fillString, left) { + var S = String(defined(that)); + var stringLength = S.length; + var fillStr = fillString === undefined ? ' ' : String(fillString); + var intMaxLength = toLength(maxLength); + if (intMaxLength <= stringLength || fillStr == '') return S; + var fillLen = intMaxLength - stringLength; + var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length)); + if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen); + return left ? stringFiller + S : S + stringFiller; +}; + +},{"109":109,"117":117,"35":35}],109:[function(_dereq_,module,exports){ +'use strict'; +var toInteger = _dereq_(115); +var defined = _dereq_(35); + +module.exports = function repeat(count) { + var str = String(defined(this)); + var res = ''; + var n = toInteger(count); + if (n < 0 || n == Infinity) throw RangeError("Count can't be negative"); + for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str; + return res; +}; + +},{"115":115,"35":35}],110:[function(_dereq_,module,exports){ +var $export = _dereq_(40); +var defined = _dereq_(35); +var fails = _dereq_(42); +var spaces = _dereq_(111); +var space = '[' + spaces + ']'; +var non = '\u200b\u0085'; +var ltrim = RegExp('^' + space + space + '*'); +var rtrim = RegExp(space + space + '*$'); + +var exporter = function (KEY, exec, ALIAS) { + var exp = {}; + var FORCE = fails(function () { + return !!spaces[KEY]() || non[KEY]() != non; + }); + var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY]; + if (ALIAS) exp[ALIAS] = fn; + $export($export.P + $export.F * FORCE, 'String', exp); +}; + +// 1 -> String#trimLeft +// 2 -> String#trimRight +// 3 -> String#trim +var trim = exporter.trim = function (string, TYPE) { + string = String(defined(string)); + if (TYPE & 1) string = string.replace(ltrim, ''); + if (TYPE & 2) string = string.replace(rtrim, ''); + return string; +}; + +module.exports = exporter; + +},{"111":111,"35":35,"40":40,"42":42}],111:[function(_dereq_,module,exports){ +module.exports = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' + + '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; + +},{}],112:[function(_dereq_,module,exports){ +var ctx = _dereq_(32); +var invoke = _dereq_(52); +var html = _dereq_(49); +var cel = _dereq_(37); +var global = _dereq_(46); +var process = global.process; +var setTask = global.setImmediate; +var clearTask = global.clearImmediate; +var MessageChannel = global.MessageChannel; +var Dispatch = global.Dispatch; +var counter = 0; +var queue = {}; +var ONREADYSTATECHANGE = 'onreadystatechange'; +var defer, channel, port; +var run = function () { + var id = +this; + // eslint-disable-next-line no-prototype-builtins + if (queue.hasOwnProperty(id)) { + var fn = queue[id]; + delete queue[id]; + fn(); + } +}; +var listener = function (event) { + run.call(event.data); +}; +// Node.js 0.9+ & IE10+ has setImmediate, otherwise: +if (!setTask || !clearTask) { + setTask = function setImmediate(fn) { + var args = []; + var i = 1; + while (arguments.length > i) args.push(arguments[i++]); + queue[++counter] = function () { + // eslint-disable-next-line no-new-func + invoke(typeof fn == 'function' ? fn : Function(fn), args); + }; + defer(counter); + return counter; + }; + clearTask = function clearImmediate(id) { + delete queue[id]; + }; + // Node.js 0.8- + if (_dereq_(26)(process) == 'process') { + defer = function (id) { + process.nextTick(ctx(run, id, 1)); + }; + // Sphere (JS game engine) Dispatch API + } else if (Dispatch && Dispatch.now) { + defer = function (id) { + Dispatch.now(ctx(run, id, 1)); + }; + // Browsers with MessageChannel, includes WebWorkers + } else if (MessageChannel) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = listener; + defer = ctx(port.postMessage, port, 1); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) { + defer = function (id) { + global.postMessage(id + '', '*'); + }; + global.addEventListener('message', listener, false); + // IE8- + } else if (ONREADYSTATECHANGE in cel('script')) { + defer = function (id) { + html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () { + html.removeChild(this); + run.call(id); + }; + }; + // Rest old browsers + } else { + defer = function (id) { + setTimeout(ctx(run, id, 1), 0); + }; + } +} +module.exports = { + set: setTask, + clear: clearTask +}; + +},{"26":26,"32":32,"37":37,"46":46,"49":49,"52":52}],113:[function(_dereq_,module,exports){ +var toInteger = _dereq_(115); +var max = Math.max; +var min = Math.min; +module.exports = function (index, length) { + index = toInteger(index); + return index < 0 ? max(index + length, 0) : min(index, length); +}; + +},{"115":115}],114:[function(_dereq_,module,exports){ +// https://tc39.github.io/ecma262/#sec-toindex +var toInteger = _dereq_(115); +var toLength = _dereq_(117); +module.exports = function (it) { + if (it === undefined) return 0; + var number = toInteger(it); + var length = toLength(number); + if (number !== length) throw RangeError('Wrong length!'); + return length; +}; + +},{"115":115,"117":117}],115:[function(_dereq_,module,exports){ +// 7.1.4 ToInteger +var ceil = Math.ceil; +var floor = Math.floor; +module.exports = function (it) { + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); +}; + +},{}],116:[function(_dereq_,module,exports){ +// to indexed object, toObject with fallback for non-array-like ES3 strings +var IObject = _dereq_(53); +var defined = _dereq_(35); +module.exports = function (it) { + return IObject(defined(it)); +}; + +},{"35":35,"53":53}],117:[function(_dereq_,module,exports){ +// 7.1.15 ToLength +var toInteger = _dereq_(115); +var min = Math.min; +module.exports = function (it) { + return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 +}; + +},{"115":115}],118:[function(_dereq_,module,exports){ +// 7.1.13 ToObject(argument) +var defined = _dereq_(35); +module.exports = function (it) { + return Object(defined(it)); +}; + +},{"35":35}],119:[function(_dereq_,module,exports){ +// 7.1.1 ToPrimitive(input [, PreferredType]) +var isObject = _dereq_(57); +// instead of the ES6 spec version, we didn't implement @@toPrimitive case +// and the second argument - flag - preferred type is a string +module.exports = function (it, S) { + if (!isObject(it)) return it; + var fn, val; + if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; + if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; + if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; + throw TypeError("Can't convert object to primitive value"); +}; + +},{"57":57}],120:[function(_dereq_,module,exports){ +'use strict'; +if (_dereq_(36)) { + var LIBRARY = _dereq_(65); + var global = _dereq_(46); + var fails = _dereq_(42); + var $export = _dereq_(40); + var $typed = _dereq_(122); + var $buffer = _dereq_(121); + var ctx = _dereq_(32); + var anInstance = _dereq_(15); + var propertyDesc = _dereq_(92); + var hide = _dereq_(48); + var redefineAll = _dereq_(93); + var toInteger = _dereq_(115); + var toLength = _dereq_(117); + var toIndex = _dereq_(114); + var toAbsoluteIndex = _dereq_(113); + var toPrimitive = _dereq_(119); + var has = _dereq_(47); + var classof = _dereq_(25); + var isObject = _dereq_(57); + var toObject = _dereq_(118); + var isArrayIter = _dereq_(54); + var create = _dereq_(74); + var getPrototypeOf = _dereq_(81); + var gOPN = _dereq_(79).f; + var getIterFn = _dereq_(129); + var uid = _dereq_(123); + var wks = _dereq_(128); + var createArrayMethod = _dereq_(20); + var createArrayIncludes = _dereq_(19); + var speciesConstructor = _dereq_(103); + var ArrayIterators = _dereq_(140); + var Iterators = _dereq_(64); + var $iterDetect = _dereq_(62); + var setSpecies = _dereq_(99); + var arrayFill = _dereq_(18); + var arrayCopyWithin = _dereq_(17); + var $DP = _dereq_(75); + var $GOPD = _dereq_(77); + var dP = $DP.f; + var gOPD = $GOPD.f; + var RangeError = global.RangeError; + var TypeError = global.TypeError; + var Uint8Array = global.Uint8Array; + var ARRAY_BUFFER = 'ArrayBuffer'; + var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER; + var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT'; + var PROTOTYPE = 'prototype'; + var ArrayProto = Array[PROTOTYPE]; + var $ArrayBuffer = $buffer.ArrayBuffer; + var $DataView = $buffer.DataView; + var arrayForEach = createArrayMethod(0); + var arrayFilter = createArrayMethod(2); + var arraySome = createArrayMethod(3); + var arrayEvery = createArrayMethod(4); + var arrayFind = createArrayMethod(5); + var arrayFindIndex = createArrayMethod(6); + var arrayIncludes = createArrayIncludes(true); + var arrayIndexOf = createArrayIncludes(false); + var arrayValues = ArrayIterators.values; + var arrayKeys = ArrayIterators.keys; + var arrayEntries = ArrayIterators.entries; + var arrayLastIndexOf = ArrayProto.lastIndexOf; + var arrayReduce = ArrayProto.reduce; + var arrayReduceRight = ArrayProto.reduceRight; + var arrayJoin = ArrayProto.join; + var arraySort = ArrayProto.sort; + var arraySlice = ArrayProto.slice; + var arrayToString = ArrayProto.toString; + var arrayToLocaleString = ArrayProto.toLocaleString; + var ITERATOR = wks('iterator'); + var TAG = wks('toStringTag'); + var TYPED_CONSTRUCTOR = uid('typed_constructor'); + var DEF_CONSTRUCTOR = uid('def_constructor'); + var ALL_CONSTRUCTORS = $typed.CONSTR; + var TYPED_ARRAY = $typed.TYPED; + var VIEW = $typed.VIEW; + var WRONG_LENGTH = 'Wrong length!'; + + var $map = createArrayMethod(1, function (O, length) { + return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length); + }); + + var LITTLE_ENDIAN = fails(function () { + // eslint-disable-next-line no-undef + return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1; + }); + + var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () { + new Uint8Array(1).set({}); + }); + + var toOffset = function (it, BYTES) { + var offset = toInteger(it); + if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!'); + return offset; + }; + + var validate = function (it) { + if (isObject(it) && TYPED_ARRAY in it) return it; + throw TypeError(it + ' is not a typed array!'); + }; + + var allocate = function (C, length) { + if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) { + throw TypeError('It is not a typed array constructor!'); + } return new C(length); + }; + + var speciesFromList = function (O, list) { + return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list); + }; + + var fromList = function (C, list) { + var index = 0; + var length = list.length; + var result = allocate(C, length); + while (length > index) result[index] = list[index++]; + return result; + }; + + var addGetter = function (it, key, internal) { + dP(it, key, { get: function () { return this._d[internal]; } }); + }; + + var $from = function from(source /* , mapfn, thisArg */) { + var O = toObject(source); + var aLen = arguments.length; + var mapfn = aLen > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + var iterFn = getIterFn(O); + var i, length, values, result, step, iterator; + if (iterFn != undefined && !isArrayIter(iterFn)) { + for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) { + values.push(step.value); + } O = values; + } + if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2); + for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) { + result[i] = mapping ? mapfn(O[i], i) : O[i]; + } + return result; + }; + + var $of = function of(/* ...items */) { + var index = 0; + var length = arguments.length; + var result = allocate(this, length); + while (length > index) result[index] = arguments[index++]; + return result; + }; + + // iOS Safari 6.x fails here + var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); }); + + var $toLocaleString = function toLocaleString() { + return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments); + }; + + var proto = { + copyWithin: function copyWithin(target, start /* , end */) { + return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined); + }, + every: function every(callbackfn /* , thisArg */) { + return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }, + fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars + return arrayFill.apply(validate(this), arguments); + }, + filter: function filter(callbackfn /* , thisArg */) { + return speciesFromList(this, arrayFilter(validate(this), callbackfn, + arguments.length > 1 ? arguments[1] : undefined)); + }, + find: function find(predicate /* , thisArg */) { + return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined); + }, + findIndex: function findIndex(predicate /* , thisArg */) { + return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined); + }, + forEach: function forEach(callbackfn /* , thisArg */) { + arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }, + indexOf: function indexOf(searchElement /* , fromIndex */) { + return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); + }, + includes: function includes(searchElement /* , fromIndex */) { + return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); + }, + join: function join(separator) { // eslint-disable-line no-unused-vars + return arrayJoin.apply(validate(this), arguments); + }, + lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars + return arrayLastIndexOf.apply(validate(this), arguments); + }, + map: function map(mapfn /* , thisArg */) { + return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined); + }, + reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars + return arrayReduce.apply(validate(this), arguments); + }, + reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars + return arrayReduceRight.apply(validate(this), arguments); + }, + reverse: function reverse() { + var that = this; + var length = validate(that).length; + var middle = Math.floor(length / 2); + var index = 0; + var value; + while (index < middle) { + value = that[index]; + that[index++] = that[--length]; + that[length] = value; + } return that; + }, + some: function some(callbackfn /* , thisArg */) { + return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }, + sort: function sort(comparefn) { + return arraySort.call(validate(this), comparefn); + }, + subarray: function subarray(begin, end) { + var O = validate(this); + var length = O.length; + var $begin = toAbsoluteIndex(begin, length); + return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))( + O.buffer, + O.byteOffset + $begin * O.BYTES_PER_ELEMENT, + toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin) + ); + } + }; + + var $slice = function slice(start, end) { + return speciesFromList(this, arraySlice.call(validate(this), start, end)); + }; + + var $set = function set(arrayLike /* , offset */) { + validate(this); + var offset = toOffset(arguments[1], 1); + var length = this.length; + var src = toObject(arrayLike); + var len = toLength(src.length); + var index = 0; + if (len + offset > length) throw RangeError(WRONG_LENGTH); + while (index < len) this[offset + index] = src[index++]; + }; + + var $iterators = { + entries: function entries() { + return arrayEntries.call(validate(this)); + }, + keys: function keys() { + return arrayKeys.call(validate(this)); + }, + values: function values() { + return arrayValues.call(validate(this)); + } + }; + + var isTAIndex = function (target, key) { + return isObject(target) + && target[TYPED_ARRAY] + && typeof key != 'symbol' + && key in target + && String(+key) == String(key); + }; + var $getDesc = function getOwnPropertyDescriptor(target, key) { + return isTAIndex(target, key = toPrimitive(key, true)) + ? propertyDesc(2, target[key]) + : gOPD(target, key); + }; + var $setDesc = function defineProperty(target, key, desc) { + if (isTAIndex(target, key = toPrimitive(key, true)) + && isObject(desc) + && has(desc, 'value') + && !has(desc, 'get') + && !has(desc, 'set') + // TODO: add validation descriptor w/o calling accessors + && !desc.configurable + && (!has(desc, 'writable') || desc.writable) + && (!has(desc, 'enumerable') || desc.enumerable) + ) { + target[key] = desc.value; + return target; + } return dP(target, key, desc); + }; + + if (!ALL_CONSTRUCTORS) { + $GOPD.f = $getDesc; + $DP.f = $setDesc; + } + + $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', { + getOwnPropertyDescriptor: $getDesc, + defineProperty: $setDesc + }); + + if (fails(function () { arrayToString.call({}); })) { + arrayToString = arrayToLocaleString = function toString() { + return arrayJoin.call(this); + }; + } + + var $TypedArrayPrototype$ = redefineAll({}, proto); + redefineAll($TypedArrayPrototype$, $iterators); + hide($TypedArrayPrototype$, ITERATOR, $iterators.values); + redefineAll($TypedArrayPrototype$, { + slice: $slice, + set: $set, + constructor: function () { /* noop */ }, + toString: arrayToString, + toLocaleString: $toLocaleString + }); + addGetter($TypedArrayPrototype$, 'buffer', 'b'); + addGetter($TypedArrayPrototype$, 'byteOffset', 'o'); + addGetter($TypedArrayPrototype$, 'byteLength', 'l'); + addGetter($TypedArrayPrototype$, 'length', 'e'); + dP($TypedArrayPrototype$, TAG, { + get: function () { return this[TYPED_ARRAY]; } + }); + + // eslint-disable-next-line max-statements + module.exports = function (KEY, BYTES, wrapper, CLAMPED) { + CLAMPED = !!CLAMPED; + var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array'; + var GETTER = 'get' + KEY; + var SETTER = 'set' + KEY; + var TypedArray = global[NAME]; + var Base = TypedArray || {}; + var TAC = TypedArray && getPrototypeOf(TypedArray); + var FORCED = !TypedArray || !$typed.ABV; + var O = {}; + var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE]; + var getter = function (that, index) { + var data = that._d; + return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN); + }; + var setter = function (that, index, value) { + var data = that._d; + if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff; + data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN); + }; + var addElement = function (that, index) { + dP(that, index, { + get: function () { + return getter(this, index); + }, + set: function (value) { + return setter(this, index, value); + }, + enumerable: true + }); + }; + if (FORCED) { + TypedArray = wrapper(function (that, data, $offset, $length) { + anInstance(that, TypedArray, NAME, '_d'); + var index = 0; + var offset = 0; + var buffer, byteLength, length, klass; + if (!isObject(data)) { + length = toIndex(data); + byteLength = length * BYTES; + buffer = new $ArrayBuffer(byteLength); + } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) { + buffer = data; + offset = toOffset($offset, BYTES); + var $len = data.byteLength; + if ($length === undefined) { + if ($len % BYTES) throw RangeError(WRONG_LENGTH); + byteLength = $len - offset; + if (byteLength < 0) throw RangeError(WRONG_LENGTH); + } else { + byteLength = toLength($length) * BYTES; + if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH); + } + length = byteLength / BYTES; + } else if (TYPED_ARRAY in data) { + return fromList(TypedArray, data); + } else { + return $from.call(TypedArray, data); + } + hide(that, '_d', { + b: buffer, + o: offset, + l: byteLength, + e: length, + v: new $DataView(buffer) + }); + while (index < length) addElement(that, index++); + }); + TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$); + hide(TypedArrayPrototype, 'constructor', TypedArray); + } else if (!fails(function () { + TypedArray(1); + }) || !fails(function () { + new TypedArray(-1); // eslint-disable-line no-new + }) || !$iterDetect(function (iter) { + new TypedArray(); // eslint-disable-line no-new + new TypedArray(null); // eslint-disable-line no-new + new TypedArray(1.5); // eslint-disable-line no-new + new TypedArray(iter); // eslint-disable-line no-new + }, true)) { + TypedArray = wrapper(function (that, data, $offset, $length) { + anInstance(that, TypedArray, NAME); + var klass; + // `ws` module bug, temporarily remove validation length for Uint8Array + // https://github.com/websockets/ws/pull/645 + if (!isObject(data)) return new Base(toIndex(data)); + if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) { + return $length !== undefined + ? new Base(data, toOffset($offset, BYTES), $length) + : $offset !== undefined + ? new Base(data, toOffset($offset, BYTES)) + : new Base(data); + } + if (TYPED_ARRAY in data) return fromList(TypedArray, data); + return $from.call(TypedArray, data); + }); + arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) { + if (!(key in TypedArray)) hide(TypedArray, key, Base[key]); + }); + TypedArray[PROTOTYPE] = TypedArrayPrototype; + if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray; + } + var $nativeIterator = TypedArrayPrototype[ITERATOR]; + var CORRECT_ITER_NAME = !!$nativeIterator + && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined); + var $iterator = $iterators.values; + hide(TypedArray, TYPED_CONSTRUCTOR, true); + hide(TypedArrayPrototype, TYPED_ARRAY, NAME); + hide(TypedArrayPrototype, VIEW, true); + hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray); + + if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) { + dP(TypedArrayPrototype, TAG, { + get: function () { return NAME; } + }); + } + + O[NAME] = TypedArray; + + $export($export.G + $export.W + $export.F * (TypedArray != Base), O); + + $export($export.S, NAME, { + BYTES_PER_ELEMENT: BYTES + }); + + $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, { + from: $from, + of: $of + }); + + if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES); + + $export($export.P, NAME, proto); + + setSpecies(NAME); + + $export($export.P + $export.F * FORCED_SET, NAME, { set: $set }); + + $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators); + + if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString; + + $export($export.P + $export.F * fails(function () { + new TypedArray(1).slice(); + }), NAME, { slice: $slice }); + + $export($export.P + $export.F * (fails(function () { + return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString(); + }) || !fails(function () { + TypedArrayPrototype.toLocaleString.call([1, 2]); + })), NAME, { toLocaleString: $toLocaleString }); + + Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator; + if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator); + }; +} else module.exports = function () { /* empty */ }; + +},{"103":103,"113":113,"114":114,"115":115,"117":117,"118":118,"119":119,"121":121,"122":122,"123":123,"128":128,"129":129,"140":140,"15":15,"17":17,"18":18,"19":19,"20":20,"25":25,"32":32,"36":36,"40":40,"42":42,"46":46,"47":47,"48":48,"54":54,"57":57,"62":62,"64":64,"65":65,"74":74,"75":75,"77":77,"79":79,"81":81,"92":92,"93":93,"99":99}],121:[function(_dereq_,module,exports){ +'use strict'; +var global = _dereq_(46); +var DESCRIPTORS = _dereq_(36); +var LIBRARY = _dereq_(65); +var $typed = _dereq_(122); +var hide = _dereq_(48); +var redefineAll = _dereq_(93); +var fails = _dereq_(42); +var anInstance = _dereq_(15); +var toInteger = _dereq_(115); +var toLength = _dereq_(117); +var toIndex = _dereq_(114); +var gOPN = _dereq_(79).f; +var dP = _dereq_(75).f; +var arrayFill = _dereq_(18); +var setToStringTag = _dereq_(100); +var ARRAY_BUFFER = 'ArrayBuffer'; +var DATA_VIEW = 'DataView'; +var PROTOTYPE = 'prototype'; +var WRONG_LENGTH = 'Wrong length!'; +var WRONG_INDEX = 'Wrong index!'; +var $ArrayBuffer = global[ARRAY_BUFFER]; +var $DataView = global[DATA_VIEW]; +var Math = global.Math; +var RangeError = global.RangeError; +// eslint-disable-next-line no-shadow-restricted-names +var Infinity = global.Infinity; +var BaseBuffer = $ArrayBuffer; +var abs = Math.abs; +var pow = Math.pow; +var floor = Math.floor; +var log = Math.log; +var LN2 = Math.LN2; +var BUFFER = 'buffer'; +var BYTE_LENGTH = 'byteLength'; +var BYTE_OFFSET = 'byteOffset'; +var $BUFFER = DESCRIPTORS ? '_b' : BUFFER; +var $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH; +var $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET; + +// IEEE754 conversions based on https://github.com/feross/ieee754 +function packIEEE754(value, mLen, nBytes) { + var buffer = new Array(nBytes); + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0; + var i = 0; + var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0; + var e, m, c; + value = abs(value); + // eslint-disable-next-line no-self-compare + if (value != value || value === Infinity) { + // eslint-disable-next-line no-self-compare + m = value != value ? 1 : 0; + e = eMax; + } else { + e = floor(log(value) / LN2); + if (value * (c = pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * pow(2, mLen); + e = e + eBias; + } else { + m = value * pow(2, eBias - 1) * pow(2, mLen); + e = 0; + } + } + for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8); + e = e << mLen | m; + eLen += mLen; + for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8); + buffer[--i] |= s * 128; + return buffer; +} +function unpackIEEE754(buffer, mLen, nBytes) { + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var nBits = eLen - 7; + var i = nBytes - 1; + var s = buffer[i--]; + var e = s & 127; + var m; + s >>= 7; + for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8); + m = e & (1 << -nBits) - 1; + e >>= -nBits; + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8); + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : s ? -Infinity : Infinity; + } else { + m = m + pow(2, mLen); + e = e - eBias; + } return (s ? -1 : 1) * m * pow(2, e - mLen); +} + +function unpackI32(bytes) { + return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0]; +} +function packI8(it) { + return [it & 0xff]; +} +function packI16(it) { + return [it & 0xff, it >> 8 & 0xff]; +} +function packI32(it) { + return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff]; +} +function packF64(it) { + return packIEEE754(it, 52, 8); +} +function packF32(it) { + return packIEEE754(it, 23, 4); +} + +function addGetter(C, key, internal) { + dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } }); +} + +function get(view, bytes, index, isLittleEndian) { + var numIndex = +index; + var intIndex = toIndex(numIndex); + if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX); + var store = view[$BUFFER]._b; + var start = intIndex + view[$OFFSET]; + var pack = store.slice(start, start + bytes); + return isLittleEndian ? pack : pack.reverse(); +} +function set(view, bytes, index, conversion, value, isLittleEndian) { + var numIndex = +index; + var intIndex = toIndex(numIndex); + if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX); + var store = view[$BUFFER]._b; + var start = intIndex + view[$OFFSET]; + var pack = conversion(+value); + for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1]; +} + +if (!$typed.ABV) { + $ArrayBuffer = function ArrayBuffer(length) { + anInstance(this, $ArrayBuffer, ARRAY_BUFFER); + var byteLength = toIndex(length); + this._b = arrayFill.call(new Array(byteLength), 0); + this[$LENGTH] = byteLength; + }; + + $DataView = function DataView(buffer, byteOffset, byteLength) { + anInstance(this, $DataView, DATA_VIEW); + anInstance(buffer, $ArrayBuffer, DATA_VIEW); + var bufferLength = buffer[$LENGTH]; + var offset = toInteger(byteOffset); + if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!'); + byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength); + if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH); + this[$BUFFER] = buffer; + this[$OFFSET] = offset; + this[$LENGTH] = byteLength; + }; + + if (DESCRIPTORS) { + addGetter($ArrayBuffer, BYTE_LENGTH, '_l'); + addGetter($DataView, BUFFER, '_b'); + addGetter($DataView, BYTE_LENGTH, '_l'); + addGetter($DataView, BYTE_OFFSET, '_o'); + } + + redefineAll($DataView[PROTOTYPE], { + getInt8: function getInt8(byteOffset) { + return get(this, 1, byteOffset)[0] << 24 >> 24; + }, + getUint8: function getUint8(byteOffset) { + return get(this, 1, byteOffset)[0]; + }, + getInt16: function getInt16(byteOffset /* , littleEndian */) { + var bytes = get(this, 2, byteOffset, arguments[1]); + return (bytes[1] << 8 | bytes[0]) << 16 >> 16; + }, + getUint16: function getUint16(byteOffset /* , littleEndian */) { + var bytes = get(this, 2, byteOffset, arguments[1]); + return bytes[1] << 8 | bytes[0]; + }, + getInt32: function getInt32(byteOffset /* , littleEndian */) { + return unpackI32(get(this, 4, byteOffset, arguments[1])); + }, + getUint32: function getUint32(byteOffset /* , littleEndian */) { + return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0; + }, + getFloat32: function getFloat32(byteOffset /* , littleEndian */) { + return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4); + }, + getFloat64: function getFloat64(byteOffset /* , littleEndian */) { + return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8); + }, + setInt8: function setInt8(byteOffset, value) { + set(this, 1, byteOffset, packI8, value); + }, + setUint8: function setUint8(byteOffset, value) { + set(this, 1, byteOffset, packI8, value); + }, + setInt16: function setInt16(byteOffset, value /* , littleEndian */) { + set(this, 2, byteOffset, packI16, value, arguments[2]); + }, + setUint16: function setUint16(byteOffset, value /* , littleEndian */) { + set(this, 2, byteOffset, packI16, value, arguments[2]); + }, + setInt32: function setInt32(byteOffset, value /* , littleEndian */) { + set(this, 4, byteOffset, packI32, value, arguments[2]); + }, + setUint32: function setUint32(byteOffset, value /* , littleEndian */) { + set(this, 4, byteOffset, packI32, value, arguments[2]); + }, + setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) { + set(this, 4, byteOffset, packF32, value, arguments[2]); + }, + setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) { + set(this, 8, byteOffset, packF64, value, arguments[2]); + } + }); +} else { + if (!fails(function () { + $ArrayBuffer(1); + }) || !fails(function () { + new $ArrayBuffer(-1); // eslint-disable-line no-new + }) || fails(function () { + new $ArrayBuffer(); // eslint-disable-line no-new + new $ArrayBuffer(1.5); // eslint-disable-line no-new + new $ArrayBuffer(NaN); // eslint-disable-line no-new + return $ArrayBuffer.name != ARRAY_BUFFER; + })) { + $ArrayBuffer = function ArrayBuffer(length) { + anInstance(this, $ArrayBuffer); + return new BaseBuffer(toIndex(length)); + }; + var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE]; + for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) { + if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]); + } + if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer; + } + // iOS Safari 7.x bug + var view = new $DataView(new $ArrayBuffer(2)); + var $setInt8 = $DataView[PROTOTYPE].setInt8; + view.setInt8(0, 2147483648); + view.setInt8(1, 2147483649); + if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], { + setInt8: function setInt8(byteOffset, value) { + $setInt8.call(this, byteOffset, value << 24 >> 24); + }, + setUint8: function setUint8(byteOffset, value) { + $setInt8.call(this, byteOffset, value << 24 >> 24); + } + }, true); +} +setToStringTag($ArrayBuffer, ARRAY_BUFFER); +setToStringTag($DataView, DATA_VIEW); +hide($DataView[PROTOTYPE], $typed.VIEW, true); +exports[ARRAY_BUFFER] = $ArrayBuffer; +exports[DATA_VIEW] = $DataView; + +},{"100":100,"114":114,"115":115,"117":117,"122":122,"15":15,"18":18,"36":36,"42":42,"46":46,"48":48,"65":65,"75":75,"79":79,"93":93}],122:[function(_dereq_,module,exports){ +var global = _dereq_(46); +var hide = _dereq_(48); +var uid = _dereq_(123); +var TYPED = uid('typed_array'); +var VIEW = uid('view'); +var ABV = !!(global.ArrayBuffer && global.DataView); +var CONSTR = ABV; +var i = 0; +var l = 9; +var Typed; + +var TypedArrayConstructors = ( + 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array' +).split(','); + +while (i < l) { + if (Typed = global[TypedArrayConstructors[i++]]) { + hide(Typed.prototype, TYPED, true); + hide(Typed.prototype, VIEW, true); + } else CONSTR = false; +} + +module.exports = { + ABV: ABV, + CONSTR: CONSTR, + TYPED: TYPED, + VIEW: VIEW +}; + +},{"123":123,"46":46,"48":48}],123:[function(_dereq_,module,exports){ +var id = 0; +var px = Math.random(); +module.exports = function (key) { + return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); +}; + +},{}],124:[function(_dereq_,module,exports){ +var global = _dereq_(46); +var navigator = global.navigator; + +module.exports = navigator && navigator.userAgent || ''; + +},{"46":46}],125:[function(_dereq_,module,exports){ +var isObject = _dereq_(57); +module.exports = function (it, TYPE) { + if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!'); + return it; +}; + +},{"57":57}],126:[function(_dereq_,module,exports){ +var global = _dereq_(46); +var core = _dereq_(30); +var LIBRARY = _dereq_(65); +var wksExt = _dereq_(127); +var defineProperty = _dereq_(75).f; +module.exports = function (name) { + var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {}); + if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) }); +}; + +},{"127":127,"30":30,"46":46,"65":65,"75":75}],127:[function(_dereq_,module,exports){ +exports.f = _dereq_(128); + +},{"128":128}],128:[function(_dereq_,module,exports){ +var store = _dereq_(102)('wks'); +var uid = _dereq_(123); +var Symbol = _dereq_(46).Symbol; +var USE_SYMBOL = typeof Symbol == 'function'; + +var $exports = module.exports = function (name) { + return store[name] || (store[name] = + USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); +}; + +$exports.store = store; + +},{"102":102,"123":123,"46":46}],129:[function(_dereq_,module,exports){ +var classof = _dereq_(25); +var ITERATOR = _dereq_(128)('iterator'); +var Iterators = _dereq_(64); +module.exports = _dereq_(30).getIteratorMethod = function (it) { + if (it != undefined) return it[ITERATOR] + || it['@@iterator'] + || Iterators[classof(it)]; +}; + +},{"128":128,"25":25,"30":30,"64":64}],130:[function(_dereq_,module,exports){ +// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) +var $export = _dereq_(40); + +$export($export.P, 'Array', { copyWithin: _dereq_(17) }); + +_dereq_(13)('copyWithin'); + +},{"13":13,"17":17,"40":40}],131:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_(40); +var $every = _dereq_(20)(4); + +$export($export.P + $export.F * !_dereq_(104)([].every, true), 'Array', { + // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg]) + every: function every(callbackfn /* , thisArg */) { + return $every(this, callbackfn, arguments[1]); + } +}); + +},{"104":104,"20":20,"40":40}],132:[function(_dereq_,module,exports){ +// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) +var $export = _dereq_(40); + +$export($export.P, 'Array', { fill: _dereq_(18) }); + +_dereq_(13)('fill'); + +},{"13":13,"18":18,"40":40}],133:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_(40); +var $filter = _dereq_(20)(2); + +$export($export.P + $export.F * !_dereq_(104)([].filter, true), 'Array', { + // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg]) + filter: function filter(callbackfn /* , thisArg */) { + return $filter(this, callbackfn, arguments[1]); + } +}); + +},{"104":104,"20":20,"40":40}],134:[function(_dereq_,module,exports){ +'use strict'; +// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined) +var $export = _dereq_(40); +var $find = _dereq_(20)(6); +var KEY = 'findIndex'; +var forced = true; +// Shouldn't skip holes +if (KEY in []) Array(1)[KEY](function () { forced = false; }); +$export($export.P + $export.F * forced, 'Array', { + findIndex: function findIndex(callbackfn /* , that = undefined */) { + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); +_dereq_(13)(KEY); + +},{"13":13,"20":20,"40":40}],135:[function(_dereq_,module,exports){ +'use strict'; +// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined) +var $export = _dereq_(40); +var $find = _dereq_(20)(5); +var KEY = 'find'; +var forced = true; +// Shouldn't skip holes +if (KEY in []) Array(1)[KEY](function () { forced = false; }); +$export($export.P + $export.F * forced, 'Array', { + find: function find(callbackfn /* , that = undefined */) { + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); +_dereq_(13)(KEY); + +},{"13":13,"20":20,"40":40}],136:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_(40); +var $forEach = _dereq_(20)(0); +var STRICT = _dereq_(104)([].forEach, true); + +$export($export.P + $export.F * !STRICT, 'Array', { + // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg]) + forEach: function forEach(callbackfn /* , thisArg */) { + return $forEach(this, callbackfn, arguments[1]); + } +}); + +},{"104":104,"20":20,"40":40}],137:[function(_dereq_,module,exports){ +'use strict'; +var ctx = _dereq_(32); +var $export = _dereq_(40); +var toObject = _dereq_(118); +var call = _dereq_(59); +var isArrayIter = _dereq_(54); +var toLength = _dereq_(117); +var createProperty = _dereq_(31); +var getIterFn = _dereq_(129); + +$export($export.S + $export.F * !_dereq_(62)(function (iter) { Array.from(iter); }), 'Array', { + // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined) + from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { + var O = toObject(arrayLike); + var C = typeof this == 'function' ? this : Array; + var aLen = arguments.length; + var mapfn = aLen > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + var index = 0; + var iterFn = getIterFn(O); + var length, result, step, iterator; + if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2); + // if object isn't iterable or it's array with default iterator - use simple case + if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) { + for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) { + createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value); + } + } else { + length = toLength(O.length); + for (result = new C(length); length > index; index++) { + createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); + } + } + result.length = index; + return result; + } +}); + +},{"117":117,"118":118,"129":129,"31":31,"32":32,"40":40,"54":54,"59":59,"62":62}],138:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_(40); +var $indexOf = _dereq_(19)(false); +var $native = [].indexOf; +var NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0; + +$export($export.P + $export.F * (NEGATIVE_ZERO || !_dereq_(104)($native)), 'Array', { + // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex]) + indexOf: function indexOf(searchElement /* , fromIndex = 0 */) { + return NEGATIVE_ZERO + // convert -0 to +0 + ? $native.apply(this, arguments) || 0 + : $indexOf(this, searchElement, arguments[1]); + } +}); + +},{"104":104,"19":19,"40":40}],139:[function(_dereq_,module,exports){ +// 22.1.2.2 / 15.4.3.2 Array.isArray(arg) +var $export = _dereq_(40); + +$export($export.S, 'Array', { isArray: _dereq_(55) }); + +},{"40":40,"55":55}],140:[function(_dereq_,module,exports){ +'use strict'; +var addToUnscopables = _dereq_(13); +var step = _dereq_(63); +var Iterators = _dereq_(64); +var toIObject = _dereq_(116); + +// 22.1.3.4 Array.prototype.entries() +// 22.1.3.13 Array.prototype.keys() +// 22.1.3.29 Array.prototype.values() +// 22.1.3.30 Array.prototype[@@iterator]() +module.exports = _dereq_(61)(Array, 'Array', function (iterated, kind) { + this._t = toIObject(iterated); // target + this._i = 0; // next index + this._k = kind; // kind +// 22.1.5.2.1 %ArrayIteratorPrototype%.next() +}, function () { + var O = this._t; + var kind = this._k; + var index = this._i++; + if (!O || index >= O.length) { + this._t = undefined; + return step(1); + } + if (kind == 'keys') return step(0, index); + if (kind == 'values') return step(0, O[index]); + return step(0, [index, O[index]]); +}, 'values'); + +// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) +Iterators.Arguments = Iterators.Array; + +addToUnscopables('keys'); +addToUnscopables('values'); +addToUnscopables('entries'); + +},{"116":116,"13":13,"61":61,"63":63,"64":64}],141:[function(_dereq_,module,exports){ +'use strict'; +// 22.1.3.13 Array.prototype.join(separator) +var $export = _dereq_(40); +var toIObject = _dereq_(116); +var arrayJoin = [].join; + +// fallback for not array-like strings +$export($export.P + $export.F * (_dereq_(53) != Object || !_dereq_(104)(arrayJoin)), 'Array', { + join: function join(separator) { + return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator); + } +}); + +},{"104":104,"116":116,"40":40,"53":53}],142:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_(40); +var toIObject = _dereq_(116); +var toInteger = _dereq_(115); +var toLength = _dereq_(117); +var $native = [].lastIndexOf; +var NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0; + +$export($export.P + $export.F * (NEGATIVE_ZERO || !_dereq_(104)($native)), 'Array', { + // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex]) + lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) { + // convert -0 to +0 + if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0; + var O = toIObject(this); + var length = toLength(O.length); + var index = length - 1; + if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1])); + if (index < 0) index = length + index; + for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0; + return -1; + } +}); + +},{"104":104,"115":115,"116":116,"117":117,"40":40}],143:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_(40); +var $map = _dereq_(20)(1); + +$export($export.P + $export.F * !_dereq_(104)([].map, true), 'Array', { + // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg]) + map: function map(callbackfn /* , thisArg */) { + return $map(this, callbackfn, arguments[1]); + } +}); + +},{"104":104,"20":20,"40":40}],144:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_(40); +var createProperty = _dereq_(31); + +// WebKit Array.of isn't generic +$export($export.S + $export.F * _dereq_(42)(function () { + function F() { /* empty */ } + return !(Array.of.call(F) instanceof F); +}), 'Array', { + // 22.1.2.3 Array.of( ...items) + of: function of(/* ...args */) { + var index = 0; + var aLen = arguments.length; + var result = new (typeof this == 'function' ? this : Array)(aLen); + while (aLen > index) createProperty(result, index, arguments[index++]); + result.length = aLen; + return result; + } +}); + +},{"31":31,"40":40,"42":42}],145:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_(40); +var $reduce = _dereq_(21); + +$export($export.P + $export.F * !_dereq_(104)([].reduceRight, true), 'Array', { + // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue]) + reduceRight: function reduceRight(callbackfn /* , initialValue */) { + return $reduce(this, callbackfn, arguments.length, arguments[1], true); + } +}); + +},{"104":104,"21":21,"40":40}],146:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_(40); +var $reduce = _dereq_(21); + +$export($export.P + $export.F * !_dereq_(104)([].reduce, true), 'Array', { + // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue]) + reduce: function reduce(callbackfn /* , initialValue */) { + return $reduce(this, callbackfn, arguments.length, arguments[1], false); + } +}); + +},{"104":104,"21":21,"40":40}],147:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_(40); +var html = _dereq_(49); +var cof = _dereq_(26); +var toAbsoluteIndex = _dereq_(113); +var toLength = _dereq_(117); +var arraySlice = [].slice; + +// fallback for not array-like ES3 strings and DOM objects +$export($export.P + $export.F * _dereq_(42)(function () { + if (html) arraySlice.call(html); +}), 'Array', { + slice: function slice(begin, end) { + var len = toLength(this.length); + var klass = cof(this); + end = end === undefined ? len : end; + if (klass == 'Array') return arraySlice.call(this, begin, end); + var start = toAbsoluteIndex(begin, len); + var upTo = toAbsoluteIndex(end, len); + var size = toLength(upTo - start); + var cloned = new Array(size); + var i = 0; + for (; i < size; i++) cloned[i] = klass == 'String' + ? this.charAt(start + i) + : this[start + i]; + return cloned; + } +}); + +},{"113":113,"117":117,"26":26,"40":40,"42":42,"49":49}],148:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_(40); +var $some = _dereq_(20)(3); + +$export($export.P + $export.F * !_dereq_(104)([].some, true), 'Array', { + // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg]) + some: function some(callbackfn /* , thisArg */) { + return $some(this, callbackfn, arguments[1]); + } +}); + +},{"104":104,"20":20,"40":40}],149:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_(40); +var aFunction = _dereq_(11); +var toObject = _dereq_(118); +var fails = _dereq_(42); +var $sort = [].sort; +var test = [1, 2, 3]; + +$export($export.P + $export.F * (fails(function () { + // IE8- + test.sort(undefined); +}) || !fails(function () { + // V8 bug + test.sort(null); + // Old WebKit +}) || !_dereq_(104)($sort)), 'Array', { + // 22.1.3.25 Array.prototype.sort(comparefn) + sort: function sort(comparefn) { + return comparefn === undefined + ? $sort.call(toObject(this)) + : $sort.call(toObject(this), aFunction(comparefn)); + } +}); + +},{"104":104,"11":11,"118":118,"40":40,"42":42}],150:[function(_dereq_,module,exports){ +_dereq_(99)('Array'); + +},{"99":99}],151:[function(_dereq_,module,exports){ +// 20.3.3.1 / 15.9.4.4 Date.now() +var $export = _dereq_(40); + +$export($export.S, 'Date', { now: function () { return new Date().getTime(); } }); + +},{"40":40}],152:[function(_dereq_,module,exports){ +// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString() +var $export = _dereq_(40); +var toISOString = _dereq_(33); + +// PhantomJS / old WebKit has a broken implementations +$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', { + toISOString: toISOString +}); + +},{"33":33,"40":40}],153:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_(40); +var toObject = _dereq_(118); +var toPrimitive = _dereq_(119); + +$export($export.P + $export.F * _dereq_(42)(function () { + return new Date(NaN).toJSON() !== null + || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1; +}), 'Date', { + // eslint-disable-next-line no-unused-vars + toJSON: function toJSON(key) { + var O = toObject(this); + var pv = toPrimitive(O); + return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString(); + } +}); + +},{"118":118,"119":119,"40":40,"42":42}],154:[function(_dereq_,module,exports){ +var TO_PRIMITIVE = _dereq_(128)('toPrimitive'); +var proto = Date.prototype; + +if (!(TO_PRIMITIVE in proto)) _dereq_(48)(proto, TO_PRIMITIVE, _dereq_(34)); + +},{"128":128,"34":34,"48":48}],155:[function(_dereq_,module,exports){ +var DateProto = Date.prototype; +var INVALID_DATE = 'Invalid Date'; +var TO_STRING = 'toString'; +var $toString = DateProto[TO_STRING]; +var getTime = DateProto.getTime; +if (new Date(NaN) + '' != INVALID_DATE) { + _dereq_(94)(DateProto, TO_STRING, function toString() { + var value = getTime.call(this); + // eslint-disable-next-line no-self-compare + return value === value ? $toString.call(this) : INVALID_DATE; + }); +} + +},{"94":94}],156:[function(_dereq_,module,exports){ +// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...) +var $export = _dereq_(40); + +$export($export.P, 'Function', { bind: _dereq_(24) }); + +},{"24":24,"40":40}],157:[function(_dereq_,module,exports){ +'use strict'; +var isObject = _dereq_(57); +var getPrototypeOf = _dereq_(81); +var HAS_INSTANCE = _dereq_(128)('hasInstance'); +var FunctionProto = Function.prototype; +// 19.2.3.6 Function.prototype[@@hasInstance](V) +if (!(HAS_INSTANCE in FunctionProto)) _dereq_(75).f(FunctionProto, HAS_INSTANCE, { value: function (O) { + if (typeof this != 'function' || !isObject(O)) return false; + if (!isObject(this.prototype)) return O instanceof this; + // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this: + while (O = getPrototypeOf(O)) if (this.prototype === O) return true; + return false; +} }); + +},{"128":128,"57":57,"75":75,"81":81}],158:[function(_dereq_,module,exports){ +var dP = _dereq_(75).f; +var FProto = Function.prototype; +var nameRE = /^\s*function ([^ (]*)/; +var NAME = 'name'; + +// 19.2.4.2 name +NAME in FProto || _dereq_(36) && dP(FProto, NAME, { + configurable: true, + get: function () { + try { + return ('' + this).match(nameRE)[1]; + } catch (e) { + return ''; + } + } +}); + +},{"36":36,"75":75}],159:[function(_dereq_,module,exports){ +'use strict'; +var strong = _dereq_(27); +var validate = _dereq_(125); +var MAP = 'Map'; + +// 23.1 Map Objects +module.exports = _dereq_(29)(MAP, function (get) { + return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; +}, { + // 23.1.3.6 Map.prototype.get(key) + get: function get(key) { + var entry = strong.getEntry(validate(this, MAP), key); + return entry && entry.v; + }, + // 23.1.3.9 Map.prototype.set(key, value) + set: function set(key, value) { + return strong.def(validate(this, MAP), key === 0 ? 0 : key, value); + } +}, strong, true); + +},{"125":125,"27":27,"29":29}],160:[function(_dereq_,module,exports){ +// 20.2.2.3 Math.acosh(x) +var $export = _dereq_(40); +var log1p = _dereq_(68); +var sqrt = Math.sqrt; +var $acosh = Math.acosh; + +$export($export.S + $export.F * !($acosh + // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509 + && Math.floor($acosh(Number.MAX_VALUE)) == 710 + // Tor Browser bug: Math.acosh(Infinity) -> NaN + && $acosh(Infinity) == Infinity +), 'Math', { + acosh: function acosh(x) { + return (x = +x) < 1 ? NaN : x > 94906265.62425156 + ? Math.log(x) + Math.LN2 + : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1)); + } +}); + +},{"40":40,"68":68}],161:[function(_dereq_,module,exports){ +// 20.2.2.5 Math.asinh(x) +var $export = _dereq_(40); +var $asinh = Math.asinh; + +function asinh(x) { + return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1)); +} + +// Tor Browser bug: Math.asinh(0) -> -0 +$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh }); + +},{"40":40}],162:[function(_dereq_,module,exports){ +// 20.2.2.7 Math.atanh(x) +var $export = _dereq_(40); +var $atanh = Math.atanh; + +// Tor Browser bug: Math.atanh(-0) -> 0 +$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', { + atanh: function atanh(x) { + return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2; + } +}); + +},{"40":40}],163:[function(_dereq_,module,exports){ +// 20.2.2.9 Math.cbrt(x) +var $export = _dereq_(40); +var sign = _dereq_(69); + +$export($export.S, 'Math', { + cbrt: function cbrt(x) { + return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3); + } +}); + +},{"40":40,"69":69}],164:[function(_dereq_,module,exports){ +// 20.2.2.11 Math.clz32(x) +var $export = _dereq_(40); + +$export($export.S, 'Math', { + clz32: function clz32(x) { + return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32; + } +}); + +},{"40":40}],165:[function(_dereq_,module,exports){ +// 20.2.2.12 Math.cosh(x) +var $export = _dereq_(40); +var exp = Math.exp; + +$export($export.S, 'Math', { + cosh: function cosh(x) { + return (exp(x = +x) + exp(-x)) / 2; + } +}); + +},{"40":40}],166:[function(_dereq_,module,exports){ +// 20.2.2.14 Math.expm1(x) +var $export = _dereq_(40); +var $expm1 = _dereq_(66); + +$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 }); + +},{"40":40,"66":66}],167:[function(_dereq_,module,exports){ +// 20.2.2.16 Math.fround(x) +var $export = _dereq_(40); + +$export($export.S, 'Math', { fround: _dereq_(67) }); + +},{"40":40,"67":67}],168:[function(_dereq_,module,exports){ +// 20.2.2.17 Math.hypot([value1[, value2[, … ]]]) +var $export = _dereq_(40); +var abs = Math.abs; + +$export($export.S, 'Math', { + hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars + var sum = 0; + var i = 0; + var aLen = arguments.length; + var larg = 0; + var arg, div; + while (i < aLen) { + arg = abs(arguments[i++]); + if (larg < arg) { + div = larg / arg; + sum = sum * div * div + 1; + larg = arg; + } else if (arg > 0) { + div = arg / larg; + sum += div * div; + } else sum += arg; + } + return larg === Infinity ? Infinity : larg * Math.sqrt(sum); + } +}); + +},{"40":40}],169:[function(_dereq_,module,exports){ +// 20.2.2.18 Math.imul(x, y) +var $export = _dereq_(40); +var $imul = Math.imul; + +// some WebKit versions fails with big numbers, some has wrong arity +$export($export.S + $export.F * _dereq_(42)(function () { + return $imul(0xffffffff, 5) != -5 || $imul.length != 2; +}), 'Math', { + imul: function imul(x, y) { + var UINT16 = 0xffff; + var xn = +x; + var yn = +y; + var xl = UINT16 & xn; + var yl = UINT16 & yn; + return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0); + } +}); + +},{"40":40,"42":42}],170:[function(_dereq_,module,exports){ +// 20.2.2.21 Math.log10(x) +var $export = _dereq_(40); + +$export($export.S, 'Math', { + log10: function log10(x) { + return Math.log(x) * Math.LOG10E; + } +}); + +},{"40":40}],171:[function(_dereq_,module,exports){ +// 20.2.2.20 Math.log1p(x) +var $export = _dereq_(40); + +$export($export.S, 'Math', { log1p: _dereq_(68) }); + +},{"40":40,"68":68}],172:[function(_dereq_,module,exports){ +// 20.2.2.22 Math.log2(x) +var $export = _dereq_(40); + +$export($export.S, 'Math', { + log2: function log2(x) { + return Math.log(x) / Math.LN2; + } +}); + +},{"40":40}],173:[function(_dereq_,module,exports){ +// 20.2.2.28 Math.sign(x) +var $export = _dereq_(40); + +$export($export.S, 'Math', { sign: _dereq_(69) }); + +},{"40":40,"69":69}],174:[function(_dereq_,module,exports){ +// 20.2.2.30 Math.sinh(x) +var $export = _dereq_(40); +var expm1 = _dereq_(66); +var exp = Math.exp; + +// V8 near Chromium 38 has a problem with very small numbers +$export($export.S + $export.F * _dereq_(42)(function () { + return !Math.sinh(-2e-17) != -2e-17; +}), 'Math', { + sinh: function sinh(x) { + return Math.abs(x = +x) < 1 + ? (expm1(x) - expm1(-x)) / 2 + : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2); + } +}); + +},{"40":40,"42":42,"66":66}],175:[function(_dereq_,module,exports){ +// 20.2.2.33 Math.tanh(x) +var $export = _dereq_(40); +var expm1 = _dereq_(66); +var exp = Math.exp; + +$export($export.S, 'Math', { + tanh: function tanh(x) { + var a = expm1(x = +x); + var b = expm1(-x); + return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x)); + } +}); + +},{"40":40,"66":66}],176:[function(_dereq_,module,exports){ +// 20.2.2.34 Math.trunc(x) +var $export = _dereq_(40); + +$export($export.S, 'Math', { + trunc: function trunc(it) { + return (it > 0 ? Math.floor : Math.ceil)(it); + } +}); + +},{"40":40}],177:[function(_dereq_,module,exports){ +'use strict'; +var global = _dereq_(46); +var has = _dereq_(47); +var cof = _dereq_(26); +var inheritIfRequired = _dereq_(51); +var toPrimitive = _dereq_(119); +var fails = _dereq_(42); +var gOPN = _dereq_(79).f; +var gOPD = _dereq_(77).f; +var dP = _dereq_(75).f; +var $trim = _dereq_(110).trim; +var NUMBER = 'Number'; +var $Number = global[NUMBER]; +var Base = $Number; +var proto = $Number.prototype; +// Opera ~12 has broken Object#toString +var BROKEN_COF = cof(_dereq_(74)(proto)) == NUMBER; +var TRIM = 'trim' in String.prototype; + +// 7.1.3 ToNumber(argument) +var toNumber = function (argument) { + var it = toPrimitive(argument, false); + if (typeof it == 'string' && it.length > 2) { + it = TRIM ? it.trim() : $trim(it, 3); + var first = it.charCodeAt(0); + var third, radix, maxCode; + if (first === 43 || first === 45) { + third = it.charCodeAt(2); + if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix + } else if (first === 48) { + switch (it.charCodeAt(1)) { + case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i + case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i + default: return +it; + } + for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) { + code = digits.charCodeAt(i); + // parseInt parses a string to a first unavailable symbol + // but ToNumber should return NaN if a string contains unavailable symbols + if (code < 48 || code > maxCode) return NaN; + } return parseInt(digits, radix); + } + } return +it; +}; + +if (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) { + $Number = function Number(value) { + var it = arguments.length < 1 ? 0 : value; + var that = this; + return that instanceof $Number + // check on 1..constructor(foo) case + && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER) + ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it); + }; + for (var keys = _dereq_(36) ? gOPN(Base) : ( + // ES3: + 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' + + // ES6 (in case, if modules with ES6 Number statics required before): + 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' + + 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger' + ).split(','), j = 0, key; keys.length > j; j++) { + if (has(Base, key = keys[j]) && !has($Number, key)) { + dP($Number, key, gOPD(Base, key)); + } + } + $Number.prototype = proto; + proto.constructor = $Number; + _dereq_(94)(global, NUMBER, $Number); +} + +},{"110":110,"119":119,"26":26,"36":36,"42":42,"46":46,"47":47,"51":51,"74":74,"75":75,"77":77,"79":79,"94":94}],178:[function(_dereq_,module,exports){ +// 20.1.2.1 Number.EPSILON +var $export = _dereq_(40); + +$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) }); + +},{"40":40}],179:[function(_dereq_,module,exports){ +// 20.1.2.2 Number.isFinite(number) +var $export = _dereq_(40); +var _isFinite = _dereq_(46).isFinite; + +$export($export.S, 'Number', { + isFinite: function isFinite(it) { + return typeof it == 'number' && _isFinite(it); + } +}); + +},{"40":40,"46":46}],180:[function(_dereq_,module,exports){ +// 20.1.2.3 Number.isInteger(number) +var $export = _dereq_(40); + +$export($export.S, 'Number', { isInteger: _dereq_(56) }); + +},{"40":40,"56":56}],181:[function(_dereq_,module,exports){ +// 20.1.2.4 Number.isNaN(number) +var $export = _dereq_(40); + +$export($export.S, 'Number', { + isNaN: function isNaN(number) { + // eslint-disable-next-line no-self-compare + return number != number; + } +}); + +},{"40":40}],182:[function(_dereq_,module,exports){ +// 20.1.2.5 Number.isSafeInteger(number) +var $export = _dereq_(40); +var isInteger = _dereq_(56); +var abs = Math.abs; + +$export($export.S, 'Number', { + isSafeInteger: function isSafeInteger(number) { + return isInteger(number) && abs(number) <= 0x1fffffffffffff; + } +}); + +},{"40":40,"56":56}],183:[function(_dereq_,module,exports){ +// 20.1.2.6 Number.MAX_SAFE_INTEGER +var $export = _dereq_(40); + +$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff }); + +},{"40":40}],184:[function(_dereq_,module,exports){ +// 20.1.2.10 Number.MIN_SAFE_INTEGER +var $export = _dereq_(40); + +$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff }); + +},{"40":40}],185:[function(_dereq_,module,exports){ +var $export = _dereq_(40); +var $parseFloat = _dereq_(88); +// 20.1.2.12 Number.parseFloat(string) +$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat }); + +},{"40":40,"88":88}],186:[function(_dereq_,module,exports){ +var $export = _dereq_(40); +var $parseInt = _dereq_(89); +// 20.1.2.13 Number.parseInt(string, radix) +$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt }); + +},{"40":40,"89":89}],187:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_(40); +var toInteger = _dereq_(115); +var aNumberValue = _dereq_(12); +var repeat = _dereq_(109); +var $toFixed = 1.0.toFixed; +var floor = Math.floor; +var data = [0, 0, 0, 0, 0, 0]; +var ERROR = 'Number.toFixed: incorrect invocation!'; +var ZERO = '0'; + +var multiply = function (n, c) { + var i = -1; + var c2 = c; + while (++i < 6) { + c2 += n * data[i]; + data[i] = c2 % 1e7; + c2 = floor(c2 / 1e7); + } +}; +var divide = function (n) { + var i = 6; + var c = 0; + while (--i >= 0) { + c += data[i]; + data[i] = floor(c / n); + c = (c % n) * 1e7; + } +}; +var numToString = function () { + var i = 6; + var s = ''; + while (--i >= 0) { + if (s !== '' || i === 0 || data[i] !== 0) { + var t = String(data[i]); + s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t; + } + } return s; +}; +var pow = function (x, n, acc) { + return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc); +}; +var log = function (x) { + var n = 0; + var x2 = x; + while (x2 >= 4096) { + n += 12; + x2 /= 4096; + } + while (x2 >= 2) { + n += 1; + x2 /= 2; + } return n; +}; + +$export($export.P + $export.F * (!!$toFixed && ( + 0.00008.toFixed(3) !== '0.000' || + 0.9.toFixed(0) !== '1' || + 1.255.toFixed(2) !== '1.25' || + 1000000000000000128.0.toFixed(0) !== '1000000000000000128' +) || !_dereq_(42)(function () { + // V8 ~ Android 4.3- + $toFixed.call({}); +})), 'Number', { + toFixed: function toFixed(fractionDigits) { + var x = aNumberValue(this, ERROR); + var f = toInteger(fractionDigits); + var s = ''; + var m = ZERO; + var e, z, j, k; + if (f < 0 || f > 20) throw RangeError(ERROR); + // eslint-disable-next-line no-self-compare + if (x != x) return 'NaN'; + if (x <= -1e21 || x >= 1e21) return String(x); + if (x < 0) { + s = '-'; + x = -x; + } + if (x > 1e-21) { + e = log(x * pow(2, 69, 1)) - 69; + z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1); + z *= 0x10000000000000; + e = 52 - e; + if (e > 0) { + multiply(0, z); + j = f; + while (j >= 7) { + multiply(1e7, 0); + j -= 7; + } + multiply(pow(10, j, 1), 0); + j = e - 1; + while (j >= 23) { + divide(1 << 23); + j -= 23; + } + divide(1 << j); + multiply(1, 1); + divide(2); + m = numToString(); + } else { + multiply(0, z); + multiply(1 << -e, 0); + m = numToString() + repeat.call(ZERO, f); + } + } + if (f > 0) { + k = m.length; + m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f)); + } else { + m = s + m; + } return m; + } +}); + +},{"109":109,"115":115,"12":12,"40":40,"42":42}],188:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_(40); +var $fails = _dereq_(42); +var aNumberValue = _dereq_(12); +var $toPrecision = 1.0.toPrecision; + +$export($export.P + $export.F * ($fails(function () { + // IE7- + return $toPrecision.call(1, undefined) !== '1'; +}) || !$fails(function () { + // V8 ~ Android 4.3- + $toPrecision.call({}); +})), 'Number', { + toPrecision: function toPrecision(precision) { + var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!'); + return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision); + } +}); + +},{"12":12,"40":40,"42":42}],189:[function(_dereq_,module,exports){ +// 19.1.3.1 Object.assign(target, source) +var $export = _dereq_(40); + +$export($export.S + $export.F, 'Object', { assign: _dereq_(73) }); + +},{"40":40,"73":73}],190:[function(_dereq_,module,exports){ +var $export = _dereq_(40); +// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) +$export($export.S, 'Object', { create: _dereq_(74) }); + +},{"40":40,"74":74}],191:[function(_dereq_,module,exports){ +var $export = _dereq_(40); +// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties) +$export($export.S + $export.F * !_dereq_(36), 'Object', { defineProperties: _dereq_(76) }); + +},{"36":36,"40":40,"76":76}],192:[function(_dereq_,module,exports){ +var $export = _dereq_(40); +// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) +$export($export.S + $export.F * !_dereq_(36), 'Object', { defineProperty: _dereq_(75).f }); + +},{"36":36,"40":40,"75":75}],193:[function(_dereq_,module,exports){ +// 19.1.2.5 Object.freeze(O) +var isObject = _dereq_(57); +var meta = _dereq_(70).onFreeze; + +_dereq_(85)('freeze', function ($freeze) { + return function freeze(it) { + return $freeze && isObject(it) ? $freeze(meta(it)) : it; + }; +}); + +},{"57":57,"70":70,"85":85}],194:[function(_dereq_,module,exports){ +// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) +var toIObject = _dereq_(116); +var $getOwnPropertyDescriptor = _dereq_(77).f; + +_dereq_(85)('getOwnPropertyDescriptor', function () { + return function getOwnPropertyDescriptor(it, key) { + return $getOwnPropertyDescriptor(toIObject(it), key); + }; +}); + +},{"116":116,"77":77,"85":85}],195:[function(_dereq_,module,exports){ +// 19.1.2.7 Object.getOwnPropertyNames(O) +_dereq_(85)('getOwnPropertyNames', function () { + return _dereq_(78).f; +}); + +},{"78":78,"85":85}],196:[function(_dereq_,module,exports){ +// 19.1.2.9 Object.getPrototypeOf(O) +var toObject = _dereq_(118); +var $getPrototypeOf = _dereq_(81); + +_dereq_(85)('getPrototypeOf', function () { + return function getPrototypeOf(it) { + return $getPrototypeOf(toObject(it)); + }; +}); + +},{"118":118,"81":81,"85":85}],197:[function(_dereq_,module,exports){ +// 19.1.2.11 Object.isExtensible(O) +var isObject = _dereq_(57); + +_dereq_(85)('isExtensible', function ($isExtensible) { + return function isExtensible(it) { + return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false; + }; +}); + +},{"57":57,"85":85}],198:[function(_dereq_,module,exports){ +// 19.1.2.12 Object.isFrozen(O) +var isObject = _dereq_(57); + +_dereq_(85)('isFrozen', function ($isFrozen) { + return function isFrozen(it) { + return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true; + }; +}); + +},{"57":57,"85":85}],199:[function(_dereq_,module,exports){ +// 19.1.2.13 Object.isSealed(O) +var isObject = _dereq_(57); + +_dereq_(85)('isSealed', function ($isSealed) { + return function isSealed(it) { + return isObject(it) ? $isSealed ? $isSealed(it) : false : true; + }; +}); + +},{"57":57,"85":85}],200:[function(_dereq_,module,exports){ +// 19.1.3.10 Object.is(value1, value2) +var $export = _dereq_(40); +$export($export.S, 'Object', { is: _dereq_(97) }); + +},{"40":40,"97":97}],201:[function(_dereq_,module,exports){ +// 19.1.2.14 Object.keys(O) +var toObject = _dereq_(118); +var $keys = _dereq_(83); + +_dereq_(85)('keys', function () { + return function keys(it) { + return $keys(toObject(it)); + }; +}); + +},{"118":118,"83":83,"85":85}],202:[function(_dereq_,module,exports){ +// 19.1.2.15 Object.preventExtensions(O) +var isObject = _dereq_(57); +var meta = _dereq_(70).onFreeze; + +_dereq_(85)('preventExtensions', function ($preventExtensions) { + return function preventExtensions(it) { + return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it; + }; +}); + +},{"57":57,"70":70,"85":85}],203:[function(_dereq_,module,exports){ +// 19.1.2.17 Object.seal(O) +var isObject = _dereq_(57); +var meta = _dereq_(70).onFreeze; + +_dereq_(85)('seal', function ($seal) { + return function seal(it) { + return $seal && isObject(it) ? $seal(meta(it)) : it; + }; +}); + +},{"57":57,"70":70,"85":85}],204:[function(_dereq_,module,exports){ +// 19.1.3.19 Object.setPrototypeOf(O, proto) +var $export = _dereq_(40); +$export($export.S, 'Object', { setPrototypeOf: _dereq_(98).set }); + +},{"40":40,"98":98}],205:[function(_dereq_,module,exports){ +'use strict'; +// 19.1.3.6 Object.prototype.toString() +var classof = _dereq_(25); +var test = {}; +test[_dereq_(128)('toStringTag')] = 'z'; +if (test + '' != '[object z]') { + _dereq_(94)(Object.prototype, 'toString', function toString() { + return '[object ' + classof(this) + ']'; + }, true); +} + +},{"128":128,"25":25,"94":94}],206:[function(_dereq_,module,exports){ +var $export = _dereq_(40); +var $parseFloat = _dereq_(88); +// 18.2.4 parseFloat(string) +$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat }); + +},{"40":40,"88":88}],207:[function(_dereq_,module,exports){ +var $export = _dereq_(40); +var $parseInt = _dereq_(89); +// 18.2.5 parseInt(string, radix) +$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt }); + +},{"40":40,"89":89}],208:[function(_dereq_,module,exports){ +'use strict'; +var LIBRARY = _dereq_(65); +var global = _dereq_(46); +var ctx = _dereq_(32); +var classof = _dereq_(25); +var $export = _dereq_(40); +var isObject = _dereq_(57); +var aFunction = _dereq_(11); +var anInstance = _dereq_(15); +var forOf = _dereq_(45); +var speciesConstructor = _dereq_(103); +var task = _dereq_(112).set; +var microtask = _dereq_(71)(); +var newPromiseCapabilityModule = _dereq_(72); +var perform = _dereq_(90); +var userAgent = _dereq_(124); +var promiseResolve = _dereq_(91); +var PROMISE = 'Promise'; +var TypeError = global.TypeError; +var process = global.process; +var versions = process && process.versions; +var v8 = versions && versions.v8 || ''; +var $Promise = global[PROMISE]; +var isNode = classof(process) == 'process'; +var empty = function () { /* empty */ }; +var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper; +var newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f; + +var USE_NATIVE = !!function () { + try { + // correct subclassing with @@species support + var promise = $Promise.resolve(1); + var FakePromise = (promise.constructor = {})[_dereq_(128)('species')] = function (exec) { + exec(empty, empty); + }; + // unhandled rejections tracking support, NodeJS Promise without it fails @@species test + return (isNode || typeof PromiseRejectionEvent == 'function') + && promise.then(empty) instanceof FakePromise + // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 + // we can't detect it synchronously, so just check versions + && v8.indexOf('6.6') !== 0 + && userAgent.indexOf('Chrome/66') === -1; + } catch (e) { /* empty */ } +}(); + +// helpers +var isThenable = function (it) { + var then; + return isObject(it) && typeof (then = it.then) == 'function' ? then : false; +}; +var notify = function (promise, isReject) { + if (promise._n) return; + promise._n = true; + var chain = promise._c; + microtask(function () { + var value = promise._v; + var ok = promise._s == 1; + var i = 0; + var run = function (reaction) { + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + try { + if (handler) { + if (!ok) { + if (promise._h == 2) onHandleUnhandled(promise); + promise._h = 1; + } + if (handler === true) result = value; + else { + if (domain) domain.enter(); + result = handler(value); // may throw + if (domain) { + domain.exit(); + exited = true; + } + } + if (result === reaction.promise) { + reject(TypeError('Promise-chain cycle')); + } else if (then = isThenable(result)) { + then.call(result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch (e) { + if (domain && !exited) domain.exit(); + reject(e); + } + }; + while (chain.length > i) run(chain[i++]); // variable length - can't use forEach + promise._c = []; + promise._n = false; + if (isReject && !promise._h) onUnhandled(promise); + }); +}; +var onUnhandled = function (promise) { + task.call(global, function () { + var value = promise._v; + var unhandled = isUnhandled(promise); + var result, handler, console; + if (unhandled) { + result = perform(function () { + if (isNode) { + process.emit('unhandledRejection', value, promise); + } else if (handler = global.onunhandledrejection) { + handler({ promise: promise, reason: value }); + } else if ((console = global.console) && console.error) { + console.error('Unhandled promise rejection', value); + } + }); + // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + promise._h = isNode || isUnhandled(promise) ? 2 : 1; + } promise._a = undefined; + if (unhandled && result.e) throw result.v; + }); +}; +var isUnhandled = function (promise) { + return promise._h !== 1 && (promise._a || promise._c).length === 0; +}; +var onHandleUnhandled = function (promise) { + task.call(global, function () { + var handler; + if (isNode) { + process.emit('rejectionHandled', promise); + } else if (handler = global.onrejectionhandled) { + handler({ promise: promise, reason: promise._v }); + } + }); +}; +var $reject = function (value) { + var promise = this; + if (promise._d) return; + promise._d = true; + promise = promise._w || promise; // unwrap + promise._v = value; + promise._s = 2; + if (!promise._a) promise._a = promise._c.slice(); + notify(promise, true); +}; +var $resolve = function (value) { + var promise = this; + var then; + if (promise._d) return; + promise._d = true; + promise = promise._w || promise; // unwrap + try { + if (promise === value) throw TypeError("Promise can't be resolved itself"); + if (then = isThenable(value)) { + microtask(function () { + var wrapper = { _w: promise, _d: false }; // wrap + try { + then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1)); + } catch (e) { + $reject.call(wrapper, e); + } + }); + } else { + promise._v = value; + promise._s = 1; + notify(promise, false); + } + } catch (e) { + $reject.call({ _w: promise, _d: false }, e); // wrap + } +}; + +// constructor polyfill +if (!USE_NATIVE) { + // 25.4.3.1 Promise(executor) + $Promise = function Promise(executor) { + anInstance(this, $Promise, PROMISE, '_h'); + aFunction(executor); + Internal.call(this); + try { + executor(ctx($resolve, this, 1), ctx($reject, this, 1)); + } catch (err) { + $reject.call(this, err); + } + }; + // eslint-disable-next-line no-unused-vars + Internal = function Promise(executor) { + this._c = []; // <- awaiting reactions + this._a = undefined; // <- checked in isUnhandled reactions + this._s = 0; // <- state + this._d = false; // <- done + this._v = undefined; // <- value + this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled + this._n = false; // <- notify + }; + Internal.prototype = _dereq_(93)($Promise.prototype, { + // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected) + then: function then(onFulfilled, onRejected) { + var reaction = newPromiseCapability(speciesConstructor(this, $Promise)); + reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; + reaction.fail = typeof onRejected == 'function' && onRejected; + reaction.domain = isNode ? process.domain : undefined; + this._c.push(reaction); + if (this._a) this._a.push(reaction); + if (this._s) notify(this, false); + return reaction.promise; + }, + // 25.4.5.1 Promise.prototype.catch(onRejected) + 'catch': function (onRejected) { + return this.then(undefined, onRejected); + } + }); + OwnPromiseCapability = function () { + var promise = new Internal(); + this.promise = promise; + this.resolve = ctx($resolve, promise, 1); + this.reject = ctx($reject, promise, 1); + }; + newPromiseCapabilityModule.f = newPromiseCapability = function (C) { + return C === $Promise || C === Wrapper + ? new OwnPromiseCapability(C) + : newGenericPromiseCapability(C); + }; +} + +$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise }); +_dereq_(100)($Promise, PROMISE); +_dereq_(99)(PROMISE); +Wrapper = _dereq_(30)[PROMISE]; + +// statics +$export($export.S + $export.F * !USE_NATIVE, PROMISE, { + // 25.4.4.5 Promise.reject(r) + reject: function reject(r) { + var capability = newPromiseCapability(this); + var $$reject = capability.reject; + $$reject(r); + return capability.promise; + } +}); +$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, { + // 25.4.4.6 Promise.resolve(x) + resolve: function resolve(x) { + return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x); + } +}); +$export($export.S + $export.F * !(USE_NATIVE && _dereq_(62)(function (iter) { + $Promise.all(iter)['catch'](empty); +})), PROMISE, { + // 25.4.4.1 Promise.all(iterable) + all: function all(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var values = []; + var index = 0; + var remaining = 1; + forOf(iterable, false, function (promise) { + var $index = index++; + var alreadyCalled = false; + values.push(undefined); + remaining++; + C.resolve(promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[$index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.e) reject(result.v); + return capability.promise; + }, + // 25.4.4.4 Promise.race(iterable) + race: function race(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var reject = capability.reject; + var result = perform(function () { + forOf(iterable, false, function (promise) { + C.resolve(promise).then(capability.resolve, reject); + }); + }); + if (result.e) reject(result.v); + return capability.promise; + } +}); + +},{"100":100,"103":103,"11":11,"112":112,"124":124,"128":128,"15":15,"25":25,"30":30,"32":32,"40":40,"45":45,"46":46,"57":57,"62":62,"65":65,"71":71,"72":72,"90":90,"91":91,"93":93,"99":99}],209:[function(_dereq_,module,exports){ +// 26.1.1 Reflect.apply(target, thisArgument, argumentsList) +var $export = _dereq_(40); +var aFunction = _dereq_(11); +var anObject = _dereq_(16); +var rApply = (_dereq_(46).Reflect || {}).apply; +var fApply = Function.apply; +// MS Edge argumentsList argument is optional +$export($export.S + $export.F * !_dereq_(42)(function () { + rApply(function () { /* empty */ }); +}), 'Reflect', { + apply: function apply(target, thisArgument, argumentsList) { + var T = aFunction(target); + var L = anObject(argumentsList); + return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L); + } +}); + +},{"11":11,"16":16,"40":40,"42":42,"46":46}],210:[function(_dereq_,module,exports){ +// 26.1.2 Reflect.construct(target, argumentsList [, newTarget]) +var $export = _dereq_(40); +var create = _dereq_(74); +var aFunction = _dereq_(11); +var anObject = _dereq_(16); +var isObject = _dereq_(57); +var fails = _dereq_(42); +var bind = _dereq_(24); +var rConstruct = (_dereq_(46).Reflect || {}).construct; + +// MS Edge supports only 2 arguments and argumentsList argument is optional +// FF Nightly sets third argument as `new.target`, but does not create `this` from it +var NEW_TARGET_BUG = fails(function () { + function F() { /* empty */ } + return !(rConstruct(function () { /* empty */ }, [], F) instanceof F); +}); +var ARGS_BUG = !fails(function () { + rConstruct(function () { /* empty */ }); +}); + +$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', { + construct: function construct(Target, args /* , newTarget */) { + aFunction(Target); + anObject(args); + var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]); + if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget); + if (Target == newTarget) { + // w/o altered newTarget, optimization for 0-4 arguments + switch (args.length) { + case 0: return new Target(); + case 1: return new Target(args[0]); + case 2: return new Target(args[0], args[1]); + case 3: return new Target(args[0], args[1], args[2]); + case 4: return new Target(args[0], args[1], args[2], args[3]); + } + // w/o altered newTarget, lot of arguments case + var $args = [null]; + $args.push.apply($args, args); + return new (bind.apply(Target, $args))(); + } + // with altered newTarget, not support built-in constructors + var proto = newTarget.prototype; + var instance = create(isObject(proto) ? proto : Object.prototype); + var result = Function.apply.call(Target, instance, args); + return isObject(result) ? result : instance; + } +}); + +},{"11":11,"16":16,"24":24,"40":40,"42":42,"46":46,"57":57,"74":74}],211:[function(_dereq_,module,exports){ +// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes) +var dP = _dereq_(75); +var $export = _dereq_(40); +var anObject = _dereq_(16); +var toPrimitive = _dereq_(119); + +// MS Edge has broken Reflect.defineProperty - throwing instead of returning false +$export($export.S + $export.F * _dereq_(42)(function () { + // eslint-disable-next-line no-undef + Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 }); +}), 'Reflect', { + defineProperty: function defineProperty(target, propertyKey, attributes) { + anObject(target); + propertyKey = toPrimitive(propertyKey, true); + anObject(attributes); + try { + dP.f(target, propertyKey, attributes); + return true; + } catch (e) { + return false; + } + } +}); + +},{"119":119,"16":16,"40":40,"42":42,"75":75}],212:[function(_dereq_,module,exports){ +// 26.1.4 Reflect.deleteProperty(target, propertyKey) +var $export = _dereq_(40); +var gOPD = _dereq_(77).f; +var anObject = _dereq_(16); + +$export($export.S, 'Reflect', { + deleteProperty: function deleteProperty(target, propertyKey) { + var desc = gOPD(anObject(target), propertyKey); + return desc && !desc.configurable ? false : delete target[propertyKey]; + } +}); + +},{"16":16,"40":40,"77":77}],213:[function(_dereq_,module,exports){ +'use strict'; +// 26.1.5 Reflect.enumerate(target) +var $export = _dereq_(40); +var anObject = _dereq_(16); +var Enumerate = function (iterated) { + this._t = anObject(iterated); // target + this._i = 0; // next index + var keys = this._k = []; // keys + var key; + for (key in iterated) keys.push(key); +}; +_dereq_(60)(Enumerate, 'Object', function () { + var that = this; + var keys = that._k; + var key; + do { + if (that._i >= keys.length) return { value: undefined, done: true }; + } while (!((key = keys[that._i++]) in that._t)); + return { value: key, done: false }; +}); + +$export($export.S, 'Reflect', { + enumerate: function enumerate(target) { + return new Enumerate(target); + } +}); + +},{"16":16,"40":40,"60":60}],214:[function(_dereq_,module,exports){ +// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey) +var gOPD = _dereq_(77); +var $export = _dereq_(40); +var anObject = _dereq_(16); + +$export($export.S, 'Reflect', { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) { + return gOPD.f(anObject(target), propertyKey); + } +}); + +},{"16":16,"40":40,"77":77}],215:[function(_dereq_,module,exports){ +// 26.1.8 Reflect.getPrototypeOf(target) +var $export = _dereq_(40); +var getProto = _dereq_(81); +var anObject = _dereq_(16); + +$export($export.S, 'Reflect', { + getPrototypeOf: function getPrototypeOf(target) { + return getProto(anObject(target)); + } +}); + +},{"16":16,"40":40,"81":81}],216:[function(_dereq_,module,exports){ +// 26.1.6 Reflect.get(target, propertyKey [, receiver]) +var gOPD = _dereq_(77); +var getPrototypeOf = _dereq_(81); +var has = _dereq_(47); +var $export = _dereq_(40); +var isObject = _dereq_(57); +var anObject = _dereq_(16); + +function get(target, propertyKey /* , receiver */) { + var receiver = arguments.length < 3 ? target : arguments[2]; + var desc, proto; + if (anObject(target) === receiver) return target[propertyKey]; + if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value') + ? desc.value + : desc.get !== undefined + ? desc.get.call(receiver) + : undefined; + if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver); +} + +$export($export.S, 'Reflect', { get: get }); + +},{"16":16,"40":40,"47":47,"57":57,"77":77,"81":81}],217:[function(_dereq_,module,exports){ +// 26.1.9 Reflect.has(target, propertyKey) +var $export = _dereq_(40); + +$export($export.S, 'Reflect', { + has: function has(target, propertyKey) { + return propertyKey in target; + } +}); + +},{"40":40}],218:[function(_dereq_,module,exports){ +// 26.1.10 Reflect.isExtensible(target) +var $export = _dereq_(40); +var anObject = _dereq_(16); +var $isExtensible = Object.isExtensible; + +$export($export.S, 'Reflect', { + isExtensible: function isExtensible(target) { + anObject(target); + return $isExtensible ? $isExtensible(target) : true; + } +}); + +},{"16":16,"40":40}],219:[function(_dereq_,module,exports){ +// 26.1.11 Reflect.ownKeys(target) +var $export = _dereq_(40); + +$export($export.S, 'Reflect', { ownKeys: _dereq_(87) }); + +},{"40":40,"87":87}],220:[function(_dereq_,module,exports){ +// 26.1.12 Reflect.preventExtensions(target) +var $export = _dereq_(40); +var anObject = _dereq_(16); +var $preventExtensions = Object.preventExtensions; + +$export($export.S, 'Reflect', { + preventExtensions: function preventExtensions(target) { + anObject(target); + try { + if ($preventExtensions) $preventExtensions(target); + return true; + } catch (e) { + return false; + } + } +}); + +},{"16":16,"40":40}],221:[function(_dereq_,module,exports){ +// 26.1.14 Reflect.setPrototypeOf(target, proto) +var $export = _dereq_(40); +var setProto = _dereq_(98); + +if (setProto) $export($export.S, 'Reflect', { + setPrototypeOf: function setPrototypeOf(target, proto) { + setProto.check(target, proto); + try { + setProto.set(target, proto); + return true; + } catch (e) { + return false; + } + } +}); + +},{"40":40,"98":98}],222:[function(_dereq_,module,exports){ +// 26.1.13 Reflect.set(target, propertyKey, V [, receiver]) +var dP = _dereq_(75); +var gOPD = _dereq_(77); +var getPrototypeOf = _dereq_(81); +var has = _dereq_(47); +var $export = _dereq_(40); +var createDesc = _dereq_(92); +var anObject = _dereq_(16); +var isObject = _dereq_(57); + +function set(target, propertyKey, V /* , receiver */) { + var receiver = arguments.length < 4 ? target : arguments[3]; + var ownDesc = gOPD.f(anObject(target), propertyKey); + var existingDescriptor, proto; + if (!ownDesc) { + if (isObject(proto = getPrototypeOf(target))) { + return set(proto, propertyKey, V, receiver); + } + ownDesc = createDesc(0); + } + if (has(ownDesc, 'value')) { + if (ownDesc.writable === false || !isObject(receiver)) return false; + if (existingDescriptor = gOPD.f(receiver, propertyKey)) { + if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false; + existingDescriptor.value = V; + dP.f(receiver, propertyKey, existingDescriptor); + } else dP.f(receiver, propertyKey, createDesc(0, V)); + return true; + } + return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true); +} + +$export($export.S, 'Reflect', { set: set }); + +},{"16":16,"40":40,"47":47,"57":57,"75":75,"77":77,"81":81,"92":92}],223:[function(_dereq_,module,exports){ +var global = _dereq_(46); +var inheritIfRequired = _dereq_(51); +var dP = _dereq_(75).f; +var gOPN = _dereq_(79).f; +var isRegExp = _dereq_(58); +var $flags = _dereq_(44); +var $RegExp = global.RegExp; +var Base = $RegExp; +var proto = $RegExp.prototype; +var re1 = /a/g; +var re2 = /a/g; +// "new" creates a new object, old webkit buggy here +var CORRECT_NEW = new $RegExp(re1) !== re1; + +if (_dereq_(36) && (!CORRECT_NEW || _dereq_(42)(function () { + re2[_dereq_(128)('match')] = false; + // RegExp constructor can alter flags and IsRegExp works correct with @@match + return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i'; +}))) { + $RegExp = function RegExp(p, f) { + var tiRE = this instanceof $RegExp; + var piRE = isRegExp(p); + var fiU = f === undefined; + return !tiRE && piRE && p.constructor === $RegExp && fiU ? p + : inheritIfRequired(CORRECT_NEW + ? new Base(piRE && !fiU ? p.source : p, f) + : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f) + , tiRE ? this : proto, $RegExp); + }; + var proxy = function (key) { + key in $RegExp || dP($RegExp, key, { + configurable: true, + get: function () { return Base[key]; }, + set: function (it) { Base[key] = it; } + }); + }; + for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]); + proto.constructor = $RegExp; + $RegExp.prototype = proto; + _dereq_(94)(global, 'RegExp', $RegExp); +} + +_dereq_(99)('RegExp'); + +},{"128":128,"36":36,"42":42,"44":44,"46":46,"51":51,"58":58,"75":75,"79":79,"94":94,"99":99}],224:[function(_dereq_,module,exports){ +'use strict'; +var regexpExec = _dereq_(96); +_dereq_(40)({ + target: 'RegExp', + proto: true, + forced: regexpExec !== /./.exec +}, { + exec: regexpExec +}); + +},{"40":40,"96":96}],225:[function(_dereq_,module,exports){ +// 21.2.5.3 get RegExp.prototype.flags() +if (_dereq_(36) && /./g.flags != 'g') _dereq_(75).f(RegExp.prototype, 'flags', { + configurable: true, + get: _dereq_(44) +}); + +},{"36":36,"44":44,"75":75}],226:[function(_dereq_,module,exports){ +'use strict'; + +var anObject = _dereq_(16); +var toLength = _dereq_(117); +var advanceStringIndex = _dereq_(14); +var regExpExec = _dereq_(95); + +// @@match logic +_dereq_(43)('match', 1, function (defined, MATCH, $match, maybeCallNative) { + return [ + // `String.prototype.match` method + // https://tc39.github.io/ecma262/#sec-string.prototype.match + function match(regexp) { + var O = defined(this); + var fn = regexp == undefined ? undefined : regexp[MATCH]; + return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O)); + }, + // `RegExp.prototype[@@match]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match + function (regexp) { + var res = maybeCallNative($match, regexp, this); + if (res.done) return res.value; + var rx = anObject(regexp); + var S = String(this); + if (!rx.global) return regExpExec(rx, S); + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + var A = []; + var n = 0; + var result; + while ((result = regExpExec(rx, S)) !== null) { + var matchStr = String(result[0]); + A[n] = matchStr; + if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + n++; + } + return n === 0 ? null : A; + } + ]; +}); + +},{"117":117,"14":14,"16":16,"43":43,"95":95}],227:[function(_dereq_,module,exports){ +'use strict'; + +var anObject = _dereq_(16); +var toObject = _dereq_(118); +var toLength = _dereq_(117); +var toInteger = _dereq_(115); +var advanceStringIndex = _dereq_(14); +var regExpExec = _dereq_(95); +var max = Math.max; +var min = Math.min; +var floor = Math.floor; +var SUBSTITUTION_SYMBOLS = /\$([$&`']|\d\d?|<[^>]*>)/g; +var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&`']|\d\d?)/g; + +var maybeToString = function (it) { + return it === undefined ? it : String(it); +}; + +// @@replace logic +_dereq_(43)('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) { + return [ + // `String.prototype.replace` method + // https://tc39.github.io/ecma262/#sec-string.prototype.replace + function replace(searchValue, replaceValue) { + var O = defined(this); + var fn = searchValue == undefined ? undefined : searchValue[REPLACE]; + return fn !== undefined + ? fn.call(searchValue, O, replaceValue) + : $replace.call(String(O), searchValue, replaceValue); + }, + // `RegExp.prototype[@@replace]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace + function (regexp, replaceValue) { + var res = maybeCallNative($replace, regexp, this, replaceValue); + if (res.done) return res.value; + + var rx = anObject(regexp); + var S = String(this); + var functionalReplace = typeof replaceValue === 'function'; + if (!functionalReplace) replaceValue = String(replaceValue); + var global = rx.global; + if (global) { + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + } + var results = []; + while (true) { + var result = regExpExec(rx, S); + if (result === null) break; + results.push(result); + if (!global) break; + var matchStr = String(result[0]); + if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + } + var accumulatedResult = ''; + var nextSourcePosition = 0; + for (var i = 0; i < results.length; i++) { + result = results[i]; + var matched = String(result[0]); + var position = max(min(toInteger(result.index), S.length), 0); + var captures = []; + // NOTE: This is equivalent to + // captures = result.slice(1).map(maybeToString) + // but for some reason `nativeSlice.call(result, 1, result.length)` (called in + // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and + // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it. + for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j])); + var namedCaptures = result.groups; + if (functionalReplace) { + var replacerArgs = [matched].concat(captures, position, S); + if (namedCaptures !== undefined) replacerArgs.push(namedCaptures); + var replacement = String(replaceValue.apply(undefined, replacerArgs)); + } else { + replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue); + } + if (position >= nextSourcePosition) { + accumulatedResult += S.slice(nextSourcePosition, position) + replacement; + nextSourcePosition = position + matched.length; + } + } + return accumulatedResult + S.slice(nextSourcePosition); + } + ]; + + // https://tc39.github.io/ecma262/#sec-getsubstitution + function getSubstitution(matched, str, position, captures, namedCaptures, replacement) { + var tailPos = position + matched.length; + var m = captures.length; + var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; + if (namedCaptures !== undefined) { + namedCaptures = toObject(namedCaptures); + symbols = SUBSTITUTION_SYMBOLS; + } + return $replace.call(replacement, symbols, function (match, ch) { + var capture; + switch (ch.charAt(0)) { + case '$': return '$'; + case '&': return matched; + case '`': return str.slice(0, position); + case "'": return str.slice(tailPos); + case '<': + capture = namedCaptures[ch.slice(1, -1)]; + break; + default: // \d\d? + var n = +ch; + if (n === 0) return ch; + if (n > m) { + var f = floor(n / 10); + if (f === 0) return ch; + if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1); + return ch; + } + capture = captures[n - 1]; + } + return capture === undefined ? '' : capture; + }); + } +}); + +},{"115":115,"117":117,"118":118,"14":14,"16":16,"43":43,"95":95}],228:[function(_dereq_,module,exports){ +'use strict'; + +var anObject = _dereq_(16); +var sameValue = _dereq_(97); +var regExpExec = _dereq_(95); + +// @@search logic +_dereq_(43)('search', 1, function (defined, SEARCH, $search, maybeCallNative) { + return [ + // `String.prototype.search` method + // https://tc39.github.io/ecma262/#sec-string.prototype.search + function search(regexp) { + var O = defined(this); + var fn = regexp == undefined ? undefined : regexp[SEARCH]; + return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O)); + }, + // `RegExp.prototype[@@search]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search + function (regexp) { + var res = maybeCallNative($search, regexp, this); + if (res.done) return res.value; + var rx = anObject(regexp); + var S = String(this); + var previousLastIndex = rx.lastIndex; + if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0; + var result = regExpExec(rx, S); + if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex; + return result === null ? -1 : result.index; + } + ]; +}); + +},{"16":16,"43":43,"95":95,"97":97}],229:[function(_dereq_,module,exports){ +'use strict'; + +var isRegExp = _dereq_(58); +var anObject = _dereq_(16); +var speciesConstructor = _dereq_(103); +var advanceStringIndex = _dereq_(14); +var toLength = _dereq_(117); +var callRegExpExec = _dereq_(95); +var regexpExec = _dereq_(96); +var $min = Math.min; +var $push = [].push; +var $SPLIT = 'split'; +var LENGTH = 'length'; +var LAST_INDEX = 'lastIndex'; + +// eslint-disable-next-line no-empty +var SUPPORTS_Y = !!(function () { try { return new RegExp('x', 'y'); } catch (e) {} })(); + +// @@split logic +_dereq_(43)('split', 2, function (defined, SPLIT, $split, maybeCallNative) { + var internalSplit; + if ( + 'abbc'[$SPLIT](/(b)*/)[1] == 'c' || + 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 || + 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 || + '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 || + '.'[$SPLIT](/()()/)[LENGTH] > 1 || + ''[$SPLIT](/.?/)[LENGTH] + ) { + // based on es5-shim implementation, need to rework it + internalSplit = function (separator, limit) { + var string = String(this); + if (separator === undefined && limit === 0) return []; + // If `separator` is not a regex, use native split + if (!isRegExp(separator)) return $split.call(string, separator, limit); + var output = []; + var flags = (separator.ignoreCase ? 'i' : '') + + (separator.multiline ? 'm' : '') + + (separator.unicode ? 'u' : '') + + (separator.sticky ? 'y' : ''); + var lastLastIndex = 0; + var splitLimit = limit === undefined ? 4294967295 : limit >>> 0; + // Make `global` and avoid `lastIndex` issues by working with a copy + var separatorCopy = new RegExp(separator.source, flags + 'g'); + var match, lastIndex, lastLength; + while (match = regexpExec.call(separatorCopy, string)) { + lastIndex = separatorCopy[LAST_INDEX]; + if (lastIndex > lastLastIndex) { + output.push(string.slice(lastLastIndex, match.index)); + if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1)); + lastLength = match[0][LENGTH]; + lastLastIndex = lastIndex; + if (output[LENGTH] >= splitLimit) break; + } + if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop + } + if (lastLastIndex === string[LENGTH]) { + if (lastLength || !separatorCopy.test('')) output.push(''); + } else output.push(string.slice(lastLastIndex)); + return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output; + }; + // Chakra, V8 + } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) { + internalSplit = function (separator, limit) { + return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit); + }; + } else { + internalSplit = $split; + } + + return [ + // `String.prototype.split` method + // https://tc39.github.io/ecma262/#sec-string.prototype.split + function split(separator, limit) { + var O = defined(this); + var splitter = separator == undefined ? undefined : separator[SPLIT]; + return splitter !== undefined + ? splitter.call(separator, O, limit) + : internalSplit.call(String(O), separator, limit); + }, + // `RegExp.prototype[@@split]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split + // + // NOTE: This cannot be properly polyfilled in engines that don't support + // the 'y' flag. + function (regexp, limit) { + var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split); + if (res.done) return res.value; + + var rx = anObject(regexp); + var S = String(this); + var C = speciesConstructor(rx, RegExp); + + var unicodeMatching = rx.unicode; + var flags = (rx.ignoreCase ? 'i' : '') + + (rx.multiline ? 'm' : '') + + (rx.unicode ? 'u' : '') + + (SUPPORTS_Y ? 'y' : 'g'); + + // ^(? + rx + ) is needed, in combination with some S slicing, to + // simulate the 'y' flag. + var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags); + var lim = limit === undefined ? 0xffffffff : limit >>> 0; + if (lim === 0) return []; + if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : []; + var p = 0; + var q = 0; + var A = []; + while (q < S.length) { + splitter.lastIndex = SUPPORTS_Y ? q : 0; + var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q)); + var e; + if ( + z === null || + (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p + ) { + q = advanceStringIndex(S, q, unicodeMatching); + } else { + A.push(S.slice(p, q)); + if (A.length === lim) return A; + for (var i = 1; i <= z.length - 1; i++) { + A.push(z[i]); + if (A.length === lim) return A; + } + q = p = e; + } + } + A.push(S.slice(p)); + return A; + } + ]; +}); + +},{"103":103,"117":117,"14":14,"16":16,"43":43,"58":58,"95":95,"96":96}],230:[function(_dereq_,module,exports){ +'use strict'; +_dereq_(225); +var anObject = _dereq_(16); +var $flags = _dereq_(44); +var DESCRIPTORS = _dereq_(36); +var TO_STRING = 'toString'; +var $toString = /./[TO_STRING]; + +var define = function (fn) { + _dereq_(94)(RegExp.prototype, TO_STRING, fn, true); +}; + +// 21.2.5.14 RegExp.prototype.toString() +if (_dereq_(42)(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) { + define(function toString() { + var R = anObject(this); + return '/'.concat(R.source, '/', + 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined); + }); +// FF44- RegExp#toString has a wrong name +} else if ($toString.name != TO_STRING) { + define(function toString() { + return $toString.call(this); + }); +} + +},{"16":16,"225":225,"36":36,"42":42,"44":44,"94":94}],231:[function(_dereq_,module,exports){ +'use strict'; +var strong = _dereq_(27); +var validate = _dereq_(125); +var SET = 'Set'; + +// 23.2 Set Objects +module.exports = _dereq_(29)(SET, function (get) { + return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; +}, { + // 23.2.3.1 Set.prototype.add(value) + add: function add(value) { + return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value); + } +}, strong); + +},{"125":125,"27":27,"29":29}],232:[function(_dereq_,module,exports){ +'use strict'; +// B.2.3.2 String.prototype.anchor(name) +_dereq_(107)('anchor', function (createHTML) { + return function anchor(name) { + return createHTML(this, 'a', 'name', name); + }; +}); + +},{"107":107}],233:[function(_dereq_,module,exports){ +'use strict'; +// B.2.3.3 String.prototype.big() +_dereq_(107)('big', function (createHTML) { + return function big() { + return createHTML(this, 'big', '', ''); + }; +}); + +},{"107":107}],234:[function(_dereq_,module,exports){ +'use strict'; +// B.2.3.4 String.prototype.blink() +_dereq_(107)('blink', function (createHTML) { + return function blink() { + return createHTML(this, 'blink', '', ''); + }; +}); + +},{"107":107}],235:[function(_dereq_,module,exports){ +'use strict'; +// B.2.3.5 String.prototype.bold() +_dereq_(107)('bold', function (createHTML) { + return function bold() { + return createHTML(this, 'b', '', ''); + }; +}); + +},{"107":107}],236:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_(40); +var $at = _dereq_(105)(false); +$export($export.P, 'String', { + // 21.1.3.3 String.prototype.codePointAt(pos) + codePointAt: function codePointAt(pos) { + return $at(this, pos); + } +}); + +},{"105":105,"40":40}],237:[function(_dereq_,module,exports){ +// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition]) +'use strict'; +var $export = _dereq_(40); +var toLength = _dereq_(117); +var context = _dereq_(106); +var ENDS_WITH = 'endsWith'; +var $endsWith = ''[ENDS_WITH]; + +$export($export.P + $export.F * _dereq_(41)(ENDS_WITH), 'String', { + endsWith: function endsWith(searchString /* , endPosition = @length */) { + var that = context(this, searchString, ENDS_WITH); + var endPosition = arguments.length > 1 ? arguments[1] : undefined; + var len = toLength(that.length); + var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len); + var search = String(searchString); + return $endsWith + ? $endsWith.call(that, search, end) + : that.slice(end - search.length, end) === search; + } +}); + +},{"106":106,"117":117,"40":40,"41":41}],238:[function(_dereq_,module,exports){ +'use strict'; +// B.2.3.6 String.prototype.fixed() +_dereq_(107)('fixed', function (createHTML) { + return function fixed() { + return createHTML(this, 'tt', '', ''); + }; +}); + +},{"107":107}],239:[function(_dereq_,module,exports){ +'use strict'; +// B.2.3.7 String.prototype.fontcolor(color) +_dereq_(107)('fontcolor', function (createHTML) { + return function fontcolor(color) { + return createHTML(this, 'font', 'color', color); + }; +}); + +},{"107":107}],240:[function(_dereq_,module,exports){ +'use strict'; +// B.2.3.8 String.prototype.fontsize(size) +_dereq_(107)('fontsize', function (createHTML) { + return function fontsize(size) { + return createHTML(this, 'font', 'size', size); + }; +}); + +},{"107":107}],241:[function(_dereq_,module,exports){ +var $export = _dereq_(40); +var toAbsoluteIndex = _dereq_(113); +var fromCharCode = String.fromCharCode; +var $fromCodePoint = String.fromCodePoint; + +// length should be 1, old FF problem +$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', { + // 21.1.2.2 String.fromCodePoint(...codePoints) + fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars + var res = []; + var aLen = arguments.length; + var i = 0; + var code; + while (aLen > i) { + code = +arguments[i++]; + if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point'); + res.push(code < 0x10000 + ? fromCharCode(code) + : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00) + ); + } return res.join(''); + } +}); + +},{"113":113,"40":40}],242:[function(_dereq_,module,exports){ +// 21.1.3.7 String.prototype.includes(searchString, position = 0) +'use strict'; +var $export = _dereq_(40); +var context = _dereq_(106); +var INCLUDES = 'includes'; + +$export($export.P + $export.F * _dereq_(41)(INCLUDES), 'String', { + includes: function includes(searchString /* , position = 0 */) { + return !!~context(this, searchString, INCLUDES) + .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +},{"106":106,"40":40,"41":41}],243:[function(_dereq_,module,exports){ +'use strict'; +// B.2.3.9 String.prototype.italics() +_dereq_(107)('italics', function (createHTML) { + return function italics() { + return createHTML(this, 'i', '', ''); + }; +}); + +},{"107":107}],244:[function(_dereq_,module,exports){ +'use strict'; +var $at = _dereq_(105)(true); + +// 21.1.3.27 String.prototype[@@iterator]() +_dereq_(61)(String, 'String', function (iterated) { + this._t = String(iterated); // target + this._i = 0; // next index +// 21.1.5.2.1 %StringIteratorPrototype%.next() +}, function () { + var O = this._t; + var index = this._i; + var point; + if (index >= O.length) return { value: undefined, done: true }; + point = $at(O, index); + this._i += point.length; + return { value: point, done: false }; +}); + +},{"105":105,"61":61}],245:[function(_dereq_,module,exports){ +'use strict'; +// B.2.3.10 String.prototype.link(url) +_dereq_(107)('link', function (createHTML) { + return function link(url) { + return createHTML(this, 'a', 'href', url); + }; +}); + +},{"107":107}],246:[function(_dereq_,module,exports){ +var $export = _dereq_(40); +var toIObject = _dereq_(116); +var toLength = _dereq_(117); + +$export($export.S, 'String', { + // 21.1.2.4 String.raw(callSite, ...substitutions) + raw: function raw(callSite) { + var tpl = toIObject(callSite.raw); + var len = toLength(tpl.length); + var aLen = arguments.length; + var res = []; + var i = 0; + while (len > i) { + res.push(String(tpl[i++])); + if (i < aLen) res.push(String(arguments[i])); + } return res.join(''); + } +}); + +},{"116":116,"117":117,"40":40}],247:[function(_dereq_,module,exports){ +var $export = _dereq_(40); + +$export($export.P, 'String', { + // 21.1.3.13 String.prototype.repeat(count) + repeat: _dereq_(109) +}); + +},{"109":109,"40":40}],248:[function(_dereq_,module,exports){ +'use strict'; +// B.2.3.11 String.prototype.small() +_dereq_(107)('small', function (createHTML) { + return function small() { + return createHTML(this, 'small', '', ''); + }; +}); + +},{"107":107}],249:[function(_dereq_,module,exports){ +// 21.1.3.18 String.prototype.startsWith(searchString [, position ]) +'use strict'; +var $export = _dereq_(40); +var toLength = _dereq_(117); +var context = _dereq_(106); +var STARTS_WITH = 'startsWith'; +var $startsWith = ''[STARTS_WITH]; + +$export($export.P + $export.F * _dereq_(41)(STARTS_WITH), 'String', { + startsWith: function startsWith(searchString /* , position = 0 */) { + var that = context(this, searchString, STARTS_WITH); + var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length)); + var search = String(searchString); + return $startsWith + ? $startsWith.call(that, search, index) + : that.slice(index, index + search.length) === search; + } +}); + +},{"106":106,"117":117,"40":40,"41":41}],250:[function(_dereq_,module,exports){ +'use strict'; +// B.2.3.12 String.prototype.strike() +_dereq_(107)('strike', function (createHTML) { + return function strike() { + return createHTML(this, 'strike', '', ''); + }; +}); + +},{"107":107}],251:[function(_dereq_,module,exports){ +'use strict'; +// B.2.3.13 String.prototype.sub() +_dereq_(107)('sub', function (createHTML) { + return function sub() { + return createHTML(this, 'sub', '', ''); + }; +}); + +},{"107":107}],252:[function(_dereq_,module,exports){ +'use strict'; +// B.2.3.14 String.prototype.sup() +_dereq_(107)('sup', function (createHTML) { + return function sup() { + return createHTML(this, 'sup', '', ''); + }; +}); + +},{"107":107}],253:[function(_dereq_,module,exports){ +'use strict'; +// 21.1.3.25 String.prototype.trim() +_dereq_(110)('trim', function ($trim) { + return function trim() { + return $trim(this, 3); + }; +}); + +},{"110":110}],254:[function(_dereq_,module,exports){ +'use strict'; +// ECMAScript 6 symbols shim +var global = _dereq_(46); +var has = _dereq_(47); +var DESCRIPTORS = _dereq_(36); +var $export = _dereq_(40); +var redefine = _dereq_(94); +var META = _dereq_(70).KEY; +var $fails = _dereq_(42); +var shared = _dereq_(102); +var setToStringTag = _dereq_(100); +var uid = _dereq_(123); +var wks = _dereq_(128); +var wksExt = _dereq_(127); +var wksDefine = _dereq_(126); +var enumKeys = _dereq_(39); +var isArray = _dereq_(55); +var anObject = _dereq_(16); +var isObject = _dereq_(57); +var toIObject = _dereq_(116); +var toPrimitive = _dereq_(119); +var createDesc = _dereq_(92); +var _create = _dereq_(74); +var gOPNExt = _dereq_(78); +var $GOPD = _dereq_(77); +var $DP = _dereq_(75); +var $keys = _dereq_(83); +var gOPD = $GOPD.f; +var dP = $DP.f; +var gOPN = gOPNExt.f; +var $Symbol = global.Symbol; +var $JSON = global.JSON; +var _stringify = $JSON && $JSON.stringify; +var PROTOTYPE = 'prototype'; +var HIDDEN = wks('_hidden'); +var TO_PRIMITIVE = wks('toPrimitive'); +var isEnum = {}.propertyIsEnumerable; +var SymbolRegistry = shared('symbol-registry'); +var AllSymbols = shared('symbols'); +var OPSymbols = shared('op-symbols'); +var ObjectProto = Object[PROTOTYPE]; +var USE_NATIVE = typeof $Symbol == 'function'; +var QObject = global.QObject; +// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 +var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; + +// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 +var setSymbolDesc = DESCRIPTORS && $fails(function () { + return _create(dP({}, 'a', { + get: function () { return dP(this, 'a', { value: 7 }).a; } + })).a != 7; +}) ? function (it, key, D) { + var protoDesc = gOPD(ObjectProto, key); + if (protoDesc) delete ObjectProto[key]; + dP(it, key, D); + if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc); +} : dP; + +var wrap = function (tag) { + var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]); + sym._k = tag; + return sym; +}; + +var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) { + return typeof it == 'symbol'; +} : function (it) { + return it instanceof $Symbol; +}; + +var $defineProperty = function defineProperty(it, key, D) { + if (it === ObjectProto) $defineProperty(OPSymbols, key, D); + anObject(it); + key = toPrimitive(key, true); + anObject(D); + if (has(AllSymbols, key)) { + if (!D.enumerable) { + if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {})); + it[HIDDEN][key] = true; + } else { + if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false; + D = _create(D, { enumerable: createDesc(0, false) }); + } return setSymbolDesc(it, key, D); + } return dP(it, key, D); +}; +var $defineProperties = function defineProperties(it, P) { + anObject(it); + var keys = enumKeys(P = toIObject(P)); + var i = 0; + var l = keys.length; + var key; + while (l > i) $defineProperty(it, key = keys[i++], P[key]); + return it; +}; +var $create = function create(it, P) { + return P === undefined ? _create(it) : $defineProperties(_create(it), P); +}; +var $propertyIsEnumerable = function propertyIsEnumerable(key) { + var E = isEnum.call(this, key = toPrimitive(key, true)); + if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false; + return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true; +}; +var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) { + it = toIObject(it); + key = toPrimitive(key, true); + if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return; + var D = gOPD(it, key); + if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true; + return D; +}; +var $getOwnPropertyNames = function getOwnPropertyNames(it) { + var names = gOPN(toIObject(it)); + var result = []; + var i = 0; + var key; + while (names.length > i) { + if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key); + } return result; +}; +var $getOwnPropertySymbols = function getOwnPropertySymbols(it) { + var IS_OP = it === ObjectProto; + var names = gOPN(IS_OP ? OPSymbols : toIObject(it)); + var result = []; + var i = 0; + var key; + while (names.length > i) { + if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]); + } return result; +}; + +// 19.4.1.1 Symbol([description]) +if (!USE_NATIVE) { + $Symbol = function Symbol() { + if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!'); + var tag = uid(arguments.length > 0 ? arguments[0] : undefined); + var $set = function (value) { + if (this === ObjectProto) $set.call(OPSymbols, value); + if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false; + setSymbolDesc(this, tag, createDesc(1, value)); + }; + if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set }); + return wrap(tag); + }; + redefine($Symbol[PROTOTYPE], 'toString', function toString() { + return this._k; + }); + + $GOPD.f = $getOwnPropertyDescriptor; + $DP.f = $defineProperty; + _dereq_(79).f = gOPNExt.f = $getOwnPropertyNames; + _dereq_(84).f = $propertyIsEnumerable; + _dereq_(80).f = $getOwnPropertySymbols; + + if (DESCRIPTORS && !_dereq_(65)) { + redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true); + } + + wksExt.f = function (name) { + return wrap(wks(name)); + }; +} + +$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol }); + +for (var es6Symbols = ( + // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14 + 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables' +).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]); + +for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]); + +$export($export.S + $export.F * !USE_NATIVE, 'Symbol', { + // 19.4.2.1 Symbol.for(key) + 'for': function (key) { + return has(SymbolRegistry, key += '') + ? SymbolRegistry[key] + : SymbolRegistry[key] = $Symbol(key); + }, + // 19.4.2.5 Symbol.keyFor(sym) + keyFor: function keyFor(sym) { + if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!'); + for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key; + }, + useSetter: function () { setter = true; }, + useSimple: function () { setter = false; } +}); + +$export($export.S + $export.F * !USE_NATIVE, 'Object', { + // 19.1.2.2 Object.create(O [, Properties]) + create: $create, + // 19.1.2.4 Object.defineProperty(O, P, Attributes) + defineProperty: $defineProperty, + // 19.1.2.3 Object.defineProperties(O, Properties) + defineProperties: $defineProperties, + // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) + getOwnPropertyDescriptor: $getOwnPropertyDescriptor, + // 19.1.2.7 Object.getOwnPropertyNames(O) + getOwnPropertyNames: $getOwnPropertyNames, + // 19.1.2.8 Object.getOwnPropertySymbols(O) + getOwnPropertySymbols: $getOwnPropertySymbols +}); + +// 24.3.2 JSON.stringify(value [, replacer [, space]]) +$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () { + var S = $Symbol(); + // MS Edge converts symbol values to JSON as {} + // WebKit converts symbol values to JSON as null + // V8 throws on boxed symbols + return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}'; +})), 'JSON', { + stringify: function stringify(it) { + var args = [it]; + var i = 1; + var replacer, $replacer; + while (arguments.length > i) args.push(arguments[i++]); + $replacer = replacer = args[1]; + if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined + if (!isArray(replacer)) replacer = function (key, value) { + if (typeof $replacer == 'function') value = $replacer.call(this, key, value); + if (!isSymbol(value)) return value; + }; + args[1] = replacer; + return _stringify.apply($JSON, args); + } +}); + +// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint) +$Symbol[PROTOTYPE][TO_PRIMITIVE] || _dereq_(48)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); +// 19.4.3.5 Symbol.prototype[@@toStringTag] +setToStringTag($Symbol, 'Symbol'); +// 20.2.1.9 Math[@@toStringTag] +setToStringTag(Math, 'Math', true); +// 24.3.3 JSON[@@toStringTag] +setToStringTag(global.JSON, 'JSON', true); + +},{"100":100,"102":102,"116":116,"119":119,"123":123,"126":126,"127":127,"128":128,"16":16,"36":36,"39":39,"40":40,"42":42,"46":46,"47":47,"48":48,"55":55,"57":57,"65":65,"70":70,"74":74,"75":75,"77":77,"78":78,"79":79,"80":80,"83":83,"84":84,"92":92,"94":94}],255:[function(_dereq_,module,exports){ +'use strict'; +var $export = _dereq_(40); +var $typed = _dereq_(122); +var buffer = _dereq_(121); +var anObject = _dereq_(16); +var toAbsoluteIndex = _dereq_(113); +var toLength = _dereq_(117); +var isObject = _dereq_(57); +var ArrayBuffer = _dereq_(46).ArrayBuffer; +var speciesConstructor = _dereq_(103); +var $ArrayBuffer = buffer.ArrayBuffer; +var $DataView = buffer.DataView; +var $isView = $typed.ABV && ArrayBuffer.isView; +var $slice = $ArrayBuffer.prototype.slice; +var VIEW = $typed.VIEW; +var ARRAY_BUFFER = 'ArrayBuffer'; + +$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer }); + +$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, { + // 24.1.3.1 ArrayBuffer.isView(arg) + isView: function isView(it) { + return $isView && $isView(it) || isObject(it) && VIEW in it; + } +}); + +$export($export.P + $export.U + $export.F * _dereq_(42)(function () { + return !new $ArrayBuffer(2).slice(1, undefined).byteLength; +}), ARRAY_BUFFER, { + // 24.1.4.3 ArrayBuffer.prototype.slice(start, end) + slice: function slice(start, end) { + if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix + var len = anObject(this).byteLength; + var first = toAbsoluteIndex(start, len); + var fin = toAbsoluteIndex(end === undefined ? len : end, len); + var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first)); + var viewS = new $DataView(this); + var viewT = new $DataView(result); + var index = 0; + while (first < fin) { + viewT.setUint8(index++, viewS.getUint8(first++)); + } return result; + } +}); + +_dereq_(99)(ARRAY_BUFFER); + +},{"103":103,"113":113,"117":117,"121":121,"122":122,"16":16,"40":40,"42":42,"46":46,"57":57,"99":99}],256:[function(_dereq_,module,exports){ +var $export = _dereq_(40); +$export($export.G + $export.W + $export.F * !_dereq_(122).ABV, { + DataView: _dereq_(121).DataView +}); + +},{"121":121,"122":122,"40":40}],257:[function(_dereq_,module,exports){ +_dereq_(120)('Float32', 4, function (init) { + return function Float32Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +},{"120":120}],258:[function(_dereq_,module,exports){ +_dereq_(120)('Float64', 8, function (init) { + return function Float64Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +},{"120":120}],259:[function(_dereq_,module,exports){ +_dereq_(120)('Int16', 2, function (init) { + return function Int16Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +},{"120":120}],260:[function(_dereq_,module,exports){ +_dereq_(120)('Int32', 4, function (init) { + return function Int32Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +},{"120":120}],261:[function(_dereq_,module,exports){ +_dereq_(120)('Int8', 1, function (init) { + return function Int8Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +},{"120":120}],262:[function(_dereq_,module,exports){ +_dereq_(120)('Uint16', 2, function (init) { + return function Uint16Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +},{"120":120}],263:[function(_dereq_,module,exports){ +_dereq_(120)('Uint32', 4, function (init) { + return function Uint32Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +},{"120":120}],264:[function(_dereq_,module,exports){ +_dereq_(120)('Uint8', 1, function (init) { + return function Uint8Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +},{"120":120}],265:[function(_dereq_,module,exports){ +_dereq_(120)('Uint8', 1, function (init) { + return function Uint8ClampedArray(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}, true); + +},{"120":120}],266:[function(_dereq_,module,exports){ +'use strict'; +var each = _dereq_(20)(0); +var redefine = _dereq_(94); +var meta = _dereq_(70); +var assign = _dereq_(73); +var weak = _dereq_(28); +var isObject = _dereq_(57); +var fails = _dereq_(42); +var validate = _dereq_(125); +var WEAK_MAP = 'WeakMap'; +var getWeak = meta.getWeak; +var isExtensible = Object.isExtensible; +var uncaughtFrozenStore = weak.ufstore; +var tmp = {}; +var InternalMap; + +var wrapper = function (get) { + return function WeakMap() { + return get(this, arguments.length > 0 ? arguments[0] : undefined); + }; +}; + +var methods = { + // 23.3.3.3 WeakMap.prototype.get(key) + get: function get(key) { + if (isObject(key)) { + var data = getWeak(key); + if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key); + return data ? data[this._i] : undefined; + } + }, + // 23.3.3.5 WeakMap.prototype.set(key, value) + set: function set(key, value) { + return weak.def(validate(this, WEAK_MAP), key, value); + } +}; + +// 23.3 WeakMap Objects +var $WeakMap = module.exports = _dereq_(29)(WEAK_MAP, wrapper, methods, weak, true, true); + +// IE11 WeakMap frozen keys fix +if (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) { + InternalMap = weak.getConstructor(wrapper, WEAK_MAP); + assign(InternalMap.prototype, methods); + meta.NEED = true; + each(['delete', 'has', 'get', 'set'], function (key) { + var proto = $WeakMap.prototype; + var method = proto[key]; + redefine(proto, key, function (a, b) { + // store frozen objects on internal weakmap shim + if (isObject(a) && !isExtensible(a)) { + if (!this._f) this._f = new InternalMap(); + var result = this._f[key](a, b); + return key == 'set' ? this : result; + // store all the rest on native weakmap + } return method.call(this, a, b); + }); + }); +} + +},{"125":125,"20":20,"28":28,"29":29,"42":42,"57":57,"70":70,"73":73,"94":94}],267:[function(_dereq_,module,exports){ +'use strict'; +var weak = _dereq_(28); +var validate = _dereq_(125); +var WEAK_SET = 'WeakSet'; + +// 23.4 WeakSet Objects +_dereq_(29)(WEAK_SET, function (get) { + return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; +}, { + // 23.4.3.1 WeakSet.prototype.add(value) + add: function add(value) { + return weak.def(validate(this, WEAK_SET), value, true); + } +}, weak, false, true); + +},{"125":125,"28":28,"29":29}],268:[function(_dereq_,module,exports){ +'use strict'; +// https://github.com/tc39/Array.prototype.includes +var $export = _dereq_(40); +var $includes = _dereq_(19)(true); + +$export($export.P, 'Array', { + includes: function includes(el /* , fromIndex = 0 */) { + return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +_dereq_(13)('includes'); + +},{"13":13,"19":19,"40":40}],269:[function(_dereq_,module,exports){ +// https://github.com/tc39/proposal-object-values-entries +var $export = _dereq_(40); +var $entries = _dereq_(86)(true); + +$export($export.S, 'Object', { + entries: function entries(it) { + return $entries(it); + } +}); + +},{"40":40,"86":86}],270:[function(_dereq_,module,exports){ +// https://github.com/tc39/proposal-object-getownpropertydescriptors +var $export = _dereq_(40); +var ownKeys = _dereq_(87); +var toIObject = _dereq_(116); +var gOPD = _dereq_(77); +var createProperty = _dereq_(31); + +$export($export.S, 'Object', { + getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) { + var O = toIObject(object); + var getDesc = gOPD.f; + var keys = ownKeys(O); + var result = {}; + var i = 0; + var key, desc; + while (keys.length > i) { + desc = getDesc(O, key = keys[i++]); + if (desc !== undefined) createProperty(result, key, desc); + } + return result; + } +}); + +},{"116":116,"31":31,"40":40,"77":77,"87":87}],271:[function(_dereq_,module,exports){ +// https://github.com/tc39/proposal-object-values-entries +var $export = _dereq_(40); +var $values = _dereq_(86)(false); + +$export($export.S, 'Object', { + values: function values(it) { + return $values(it); + } +}); + +},{"40":40,"86":86}],272:[function(_dereq_,module,exports){ +// https://github.com/tc39/proposal-promise-finally +'use strict'; +var $export = _dereq_(40); +var core = _dereq_(30); +var global = _dereq_(46); +var speciesConstructor = _dereq_(103); +var promiseResolve = _dereq_(91); + +$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) { + var C = speciesConstructor(this, core.Promise || global.Promise); + var isFunction = typeof onFinally == 'function'; + return this.then( + isFunction ? function (x) { + return promiseResolve(C, onFinally()).then(function () { return x; }); + } : onFinally, + isFunction ? function (e) { + return promiseResolve(C, onFinally()).then(function () { throw e; }); + } : onFinally + ); +} }); + +},{"103":103,"30":30,"40":40,"46":46,"91":91}],273:[function(_dereq_,module,exports){ +'use strict'; +// https://github.com/tc39/proposal-string-pad-start-end +var $export = _dereq_(40); +var $pad = _dereq_(108); +var userAgent = _dereq_(124); + +// https://github.com/zloirock/core-js/issues/280 +$export($export.P + $export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', { + padEnd: function padEnd(maxLength /* , fillString = ' ' */) { + return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false); + } +}); + +},{"108":108,"124":124,"40":40}],274:[function(_dereq_,module,exports){ +'use strict'; +// https://github.com/tc39/proposal-string-pad-start-end +var $export = _dereq_(40); +var $pad = _dereq_(108); +var userAgent = _dereq_(124); + +// https://github.com/zloirock/core-js/issues/280 +$export($export.P + $export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', { + padStart: function padStart(maxLength /* , fillString = ' ' */) { + return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true); + } +}); + +},{"108":108,"124":124,"40":40}],275:[function(_dereq_,module,exports){ +_dereq_(126)('asyncIterator'); + +},{"126":126}],276:[function(_dereq_,module,exports){ +var $iterators = _dereq_(140); +var getKeys = _dereq_(83); +var redefine = _dereq_(94); +var global = _dereq_(46); +var hide = _dereq_(48); +var Iterators = _dereq_(64); +var wks = _dereq_(128); +var ITERATOR = wks('iterator'); +var TO_STRING_TAG = wks('toStringTag'); +var ArrayValues = Iterators.Array; + +var DOMIterables = { + CSSRuleList: true, // TODO: Not spec compliant, should be false. + CSSStyleDeclaration: false, + CSSValueList: false, + ClientRectList: false, + DOMRectList: false, + DOMStringList: false, + DOMTokenList: true, + DataTransferItemList: false, + FileList: false, + HTMLAllCollection: false, + HTMLCollection: false, + HTMLFormElement: false, + HTMLSelectElement: false, + MediaList: true, // TODO: Not spec compliant, should be false. + MimeTypeArray: false, + NamedNodeMap: false, + NodeList: true, + PaintRequestList: false, + Plugin: false, + PluginArray: false, + SVGLengthList: false, + SVGNumberList: false, + SVGPathSegList: false, + SVGPointList: false, + SVGStringList: false, + SVGTransformList: false, + SourceBufferList: false, + StyleSheetList: true, // TODO: Not spec compliant, should be false. + TextTrackCueList: false, + TextTrackList: false, + TouchList: false +}; + +for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) { + var NAME = collections[i]; + var explicit = DOMIterables[NAME]; + var Collection = global[NAME]; + var proto = Collection && Collection.prototype; + var key; + if (proto) { + if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues); + if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME); + Iterators[NAME] = ArrayValues; + if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true); + } +} + +},{"128":128,"140":140,"46":46,"48":48,"64":64,"83":83,"94":94}],277:[function(_dereq_,module,exports){ +var $export = _dereq_(40); +var $task = _dereq_(112); +$export($export.G + $export.B, { + setImmediate: $task.set, + clearImmediate: $task.clear +}); + +},{"112":112,"40":40}],278:[function(_dereq_,module,exports){ +// ie9- setTimeout & setInterval additional parameters fix +var global = _dereq_(46); +var $export = _dereq_(40); +var userAgent = _dereq_(124); +var slice = [].slice; +var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check +var wrap = function (set) { + return function (fn, time /* , ...args */) { + var boundArgs = arguments.length > 2; + var args = boundArgs ? slice.call(arguments, 2) : false; + return set(boundArgs ? function () { + // eslint-disable-next-line no-new-func + (typeof fn == 'function' ? fn : Function(fn)).apply(this, args); + } : fn, time); + }; +}; +$export($export.G + $export.B + $export.F * MSIE, { + setTimeout: wrap(global.setTimeout), + setInterval: wrap(global.setInterval) +}); + +},{"124":124,"40":40,"46":46}],279:[function(_dereq_,module,exports){ +_dereq_(278); +_dereq_(277); +_dereq_(276); +module.exports = _dereq_(30); + +},{"276":276,"277":277,"278":278,"30":30}],280:[function(_dereq_,module,exports){ +/** + * Copyright (c) 2014-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +!(function(global) { + "use strict"; + + var Op = Object.prototype; + var hasOwn = Op.hasOwnProperty; + var undefined; // More compressible than void 0. + var $Symbol = typeof Symbol === "function" ? Symbol : {}; + var iteratorSymbol = $Symbol.iterator || "@@iterator"; + var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; + var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; + + var inModule = typeof module === "object"; + var runtime = global.regeneratorRuntime; + if (runtime) { + if (inModule) { + // If regeneratorRuntime is defined globally and we're in a module, + // make the exports object identical to regeneratorRuntime. + module.exports = runtime; + } + // Don't bother evaluating the rest of this file if the runtime was + // already defined globally. + return; + } + + // Define the runtime globally (as expected by generated code) as either + // module.exports (if we're in a module) or a new, empty object. + runtime = global.regeneratorRuntime = inModule ? module.exports : {}; + + function wrap(innerFn, outerFn, self, tryLocsList) { + // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. + var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; + var generator = Object.create(protoGenerator.prototype); + var context = new Context(tryLocsList || []); + + // The ._invoke method unifies the implementations of the .next, + // .throw, and .return methods. + generator._invoke = makeInvokeMethod(innerFn, self, context); + + return generator; + } + runtime.wrap = wrap; + + // Try/catch helper to minimize deoptimizations. Returns a completion + // record like context.tryEntries[i].completion. This interface could + // have been (and was previously) designed to take a closure to be + // invoked without arguments, but in all the cases we care about we + // already have an existing method we want to call, so there's no need + // to create a new function object. We can even get away with assuming + // the method takes exactly one argument, since that happens to be true + // in every case, so we don't have to touch the arguments object. The + // only additional allocation required is the completion record, which + // has a stable shape and so hopefully should be cheap to allocate. + function tryCatch(fn, obj, arg) { + try { + return { type: "normal", arg: fn.call(obj, arg) }; + } catch (err) { + return { type: "throw", arg: err }; + } + } + + var GenStateSuspendedStart = "suspendedStart"; + var GenStateSuspendedYield = "suspendedYield"; + var GenStateExecuting = "executing"; + var GenStateCompleted = "completed"; + + // Returning this object from the innerFn has the same effect as + // breaking out of the dispatch switch statement. + var ContinueSentinel = {}; + + // Dummy constructor functions that we use as the .constructor and + // .constructor.prototype properties for functions that return Generator + // objects. For full spec compliance, you may wish to configure your + // minifier not to mangle the names of these two functions. + function Generator() {} + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + + // This is a polyfill for %IteratorPrototype% for environments that + // don't natively support it. + var IteratorPrototype = {}; + IteratorPrototype[iteratorSymbol] = function () { + return this; + }; + + var getProto = Object.getPrototypeOf; + var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); + if (NativeIteratorPrototype && + NativeIteratorPrototype !== Op && + hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { + // This environment has a native %IteratorPrototype%; use it instead + // of the polyfill. + IteratorPrototype = NativeIteratorPrototype; + } + + var Gp = GeneratorFunctionPrototype.prototype = + Generator.prototype = Object.create(IteratorPrototype); + GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; + GeneratorFunctionPrototype.constructor = GeneratorFunction; + GeneratorFunctionPrototype[toStringTagSymbol] = + GeneratorFunction.displayName = "GeneratorFunction"; + + // Helper for defining the .next, .throw, and .return methods of the + // Iterator interface in terms of a single ._invoke method. + function defineIteratorMethods(prototype) { + ["next", "throw", "return"].forEach(function(method) { + prototype[method] = function(arg) { + return this._invoke(method, arg); + }; + }); + } + + runtime.isGeneratorFunction = function(genFun) { + var ctor = typeof genFun === "function" && genFun.constructor; + return ctor + ? ctor === GeneratorFunction || + // For the native GeneratorFunction constructor, the best we can + // do is to check its .name property. + (ctor.displayName || ctor.name) === "GeneratorFunction" + : false; + }; + + runtime.mark = function(genFun) { + if (Object.setPrototypeOf) { + Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); + } else { + genFun.__proto__ = GeneratorFunctionPrototype; + if (!(toStringTagSymbol in genFun)) { + genFun[toStringTagSymbol] = "GeneratorFunction"; + } + } + genFun.prototype = Object.create(Gp); + return genFun; + }; + + // Within the body of any async function, `await x` is transformed to + // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test + // `hasOwn.call(value, "__await")` to determine if the yielded value is + // meant to be awaited. + runtime.awrap = function(arg) { + return { __await: arg }; + }; + + function AsyncIterator(generator) { + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + if (record.type === "throw") { + reject(record.arg); + } else { + var result = record.arg; + var value = result.value; + if (value && + typeof value === "object" && + hasOwn.call(value, "__await")) { + return Promise.resolve(value.__await).then(function(value) { + invoke("next", value, resolve, reject); + }, function(err) { + invoke("throw", err, resolve, reject); + }); + } + + return Promise.resolve(value).then(function(unwrapped) { + // When a yielded Promise is resolved, its final value becomes + // the .value of the Promise<{value,done}> result for the + // current iteration. + result.value = unwrapped; + resolve(result); + }, function(error) { + // If a rejected Promise was yielded, throw the rejection back + // into the async generator function so it can be handled there. + return invoke("throw", error, resolve, reject); + }); + } + } + + var previousPromise; + + function enqueue(method, arg) { + function callInvokeWithMethodAndArg() { + return new Promise(function(resolve, reject) { + invoke(method, arg, resolve, reject); + }); + } + + return previousPromise = + // If enqueue has been called before, then we want to wait until + // all previous Promises have been resolved before calling invoke, + // so that results are always delivered in the correct order. If + // enqueue has not been called before, then it is important to + // call invoke immediately, without waiting on a callback to fire, + // so that the async generator function has the opportunity to do + // any necessary setup in a predictable way. This predictability + // is why the Promise constructor synchronously invokes its + // executor callback, and why async functions synchronously + // execute code before the first await. Since we implement simple + // async functions in terms of async generators, it is especially + // important to get this right, even though it requires care. + previousPromise ? previousPromise.then( + callInvokeWithMethodAndArg, + // Avoid propagating failures to Promises returned by later + // invocations of the iterator. + callInvokeWithMethodAndArg + ) : callInvokeWithMethodAndArg(); + } + + // Define the unified helper method that is used to implement .next, + // .throw, and .return (see defineIteratorMethods). + this._invoke = enqueue; + } + + defineIteratorMethods(AsyncIterator.prototype); + AsyncIterator.prototype[asyncIteratorSymbol] = function () { + return this; + }; + runtime.AsyncIterator = AsyncIterator; + + // Note that simple async functions are implemented on top of + // AsyncIterator objects; they just return a Promise for the value of + // the final result produced by the iterator. + runtime.async = function(innerFn, outerFn, self, tryLocsList) { + var iter = new AsyncIterator( + wrap(innerFn, outerFn, self, tryLocsList) + ); + + return runtime.isGeneratorFunction(outerFn) + ? iter // If outerFn is a generator, return the full iterator. + : iter.next().then(function(result) { + return result.done ? result.value : iter.next(); + }); + }; + + function makeInvokeMethod(innerFn, self, context) { + var state = GenStateSuspendedStart; + + return function invoke(method, arg) { + if (state === GenStateExecuting) { + throw new Error("Generator is already running"); + } + + if (state === GenStateCompleted) { + if (method === "throw") { + throw arg; + } + + // Be forgiving, per 25.3.3.3.3 of the spec: + // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume + return doneResult(); + } + + context.method = method; + context.arg = arg; + + while (true) { + var delegate = context.delegate; + if (delegate) { + var delegateResult = maybeInvokeDelegate(delegate, context); + if (delegateResult) { + if (delegateResult === ContinueSentinel) continue; + return delegateResult; + } + } + + if (context.method === "next") { + // Setting context._sent for legacy support of Babel's + // function.sent implementation. + context.sent = context._sent = context.arg; + + } else if (context.method === "throw") { + if (state === GenStateSuspendedStart) { + state = GenStateCompleted; + throw context.arg; + } + + context.dispatchException(context.arg); + + } else if (context.method === "return") { + context.abrupt("return", context.arg); + } + + state = GenStateExecuting; + + var record = tryCatch(innerFn, self, context); + if (record.type === "normal") { + // If an exception is thrown from innerFn, we leave state === + // GenStateExecuting and loop back for another invocation. + state = context.done + ? GenStateCompleted + : GenStateSuspendedYield; + + if (record.arg === ContinueSentinel) { + continue; + } + + return { + value: record.arg, + done: context.done + }; + + } else if (record.type === "throw") { + state = GenStateCompleted; + // Dispatch the exception by looping back around to the + // context.dispatchException(context.arg) call above. + context.method = "throw"; + context.arg = record.arg; + } + } + }; + } + + // Call delegate.iterator[context.method](context.arg) and handle the + // result, either by returning a { value, done } result from the + // delegate iterator, or by modifying context.method and context.arg, + // setting context.delegate to null, and returning the ContinueSentinel. + function maybeInvokeDelegate(delegate, context) { + var method = delegate.iterator[context.method]; + if (method === undefined) { + // A .throw or .return when the delegate iterator has no .throw + // method always terminates the yield* loop. + context.delegate = null; + + if (context.method === "throw") { + if (delegate.iterator.return) { + // If the delegate iterator has a return method, give it a + // chance to clean up. + context.method = "return"; + context.arg = undefined; + maybeInvokeDelegate(delegate, context); + + if (context.method === "throw") { + // If maybeInvokeDelegate(context) changed context.method from + // "return" to "throw", let that override the TypeError below. + return ContinueSentinel; + } + } + + context.method = "throw"; + context.arg = new TypeError( + "The iterator does not provide a 'throw' method"); + } + + return ContinueSentinel; + } + + var record = tryCatch(method, delegate.iterator, context.arg); + + if (record.type === "throw") { + context.method = "throw"; + context.arg = record.arg; + context.delegate = null; + return ContinueSentinel; + } + + var info = record.arg; + + if (! info) { + context.method = "throw"; + context.arg = new TypeError("iterator result is not an object"); + context.delegate = null; + return ContinueSentinel; + } + + if (info.done) { + // Assign the result of the finished delegate to the temporary + // variable specified by delegate.resultName (see delegateYield). + context[delegate.resultName] = info.value; + + // Resume execution at the desired location (see delegateYield). + context.next = delegate.nextLoc; + + // If context.method was "throw" but the delegate handled the + // exception, let the outer generator proceed normally. If + // context.method was "next", forget context.arg since it has been + // "consumed" by the delegate iterator. If context.method was + // "return", allow the original .return call to continue in the + // outer generator. + if (context.method !== "return") { + context.method = "next"; + context.arg = undefined; + } + + } else { + // Re-yield the result returned by the delegate method. + return info; + } + + // The delegate iterator is finished, so forget it and continue with + // the outer generator. + context.delegate = null; + return ContinueSentinel; + } + + // Define Generator.prototype.{next,throw,return} in terms of the + // unified ._invoke helper method. + defineIteratorMethods(Gp); + + Gp[toStringTagSymbol] = "Generator"; + + // A Generator should always return itself as the iterator object when the + // @@iterator function is called on it. Some browsers' implementations of the + // iterator prototype chain incorrectly implement this, causing the Generator + // object to not be returned from this call. This ensures that doesn't happen. + // See https://github.com/facebook/regenerator/issues/274 for more details. + Gp[iteratorSymbol] = function() { + return this; + }; + + Gp.toString = function() { + return "[object Generator]"; + }; + + function pushTryEntry(locs) { + var entry = { tryLoc: locs[0] }; + + if (1 in locs) { + entry.catchLoc = locs[1]; + } + + if (2 in locs) { + entry.finallyLoc = locs[2]; + entry.afterLoc = locs[3]; + } + + this.tryEntries.push(entry); + } + + function resetTryEntry(entry) { + var record = entry.completion || {}; + record.type = "normal"; + delete record.arg; + entry.completion = record; + } + + function Context(tryLocsList) { + // The root entry object (effectively a try statement without a catch + // or a finally block) gives us a place to store values thrown from + // locations where there is no enclosing try statement. + this.tryEntries = [{ tryLoc: "root" }]; + tryLocsList.forEach(pushTryEntry, this); + this.reset(true); + } + + runtime.keys = function(object) { + var keys = []; + for (var key in object) { + keys.push(key); + } + keys.reverse(); + + // Rather than returning an object with a next method, we keep + // things simple and return the next function itself. + return function next() { + while (keys.length) { + var key = keys.pop(); + if (key in object) { + next.value = key; + next.done = false; + return next; + } + } + + // To avoid creating an additional object, we just hang the .value + // and .done properties off the next function object itself. This + // also ensures that the minifier will not anonymize the function. + next.done = true; + return next; + }; + }; + + function values(iterable) { + if (iterable) { + var iteratorMethod = iterable[iteratorSymbol]; + if (iteratorMethod) { + return iteratorMethod.call(iterable); + } + + if (typeof iterable.next === "function") { + return iterable; + } + + if (!isNaN(iterable.length)) { + var i = -1, next = function next() { + while (++i < iterable.length) { + if (hasOwn.call(iterable, i)) { + next.value = iterable[i]; + next.done = false; + return next; + } + } + + next.value = undefined; + next.done = true; + + return next; + }; + + return next.next = next; + } + } + + // Return an iterator with no values. + return { next: doneResult }; + } + runtime.values = values; + + function doneResult() { + return { value: undefined, done: true }; + } + + Context.prototype = { + constructor: Context, + + reset: function(skipTempReset) { + this.prev = 0; + this.next = 0; + // Resetting context._sent for legacy support of Babel's + // function.sent implementation. + this.sent = this._sent = undefined; + this.done = false; + this.delegate = null; + + this.method = "next"; + this.arg = undefined; + + this.tryEntries.forEach(resetTryEntry); + + if (!skipTempReset) { + for (var name in this) { + // Not sure about the optimal order of these conditions: + if (name.charAt(0) === "t" && + hasOwn.call(this, name) && + !isNaN(+name.slice(1))) { + this[name] = undefined; + } + } + } + }, + + stop: function() { + this.done = true; + + var rootEntry = this.tryEntries[0]; + var rootRecord = rootEntry.completion; + if (rootRecord.type === "throw") { + throw rootRecord.arg; + } + + return this.rval; + }, + + dispatchException: function(exception) { + if (this.done) { + throw exception; + } + + var context = this; + function handle(loc, caught) { + record.type = "throw"; + record.arg = exception; + context.next = loc; + + if (caught) { + // If the dispatched exception was caught by a catch block, + // then let that catch block handle the exception normally. + context.method = "next"; + context.arg = undefined; + } + + return !! caught; + } + + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + var record = entry.completion; + + if (entry.tryLoc === "root") { + // Exception thrown outside of any try block that could handle + // it, so set the completion value of the entire function to + // throw the exception. + return handle("end"); + } + + if (entry.tryLoc <= this.prev) { + var hasCatch = hasOwn.call(entry, "catchLoc"); + var hasFinally = hasOwn.call(entry, "finallyLoc"); + + if (hasCatch && hasFinally) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } else if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + + } else if (hasCatch) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } + + } else if (hasFinally) { + if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + + } else { + throw new Error("try statement without catch or finally"); + } + } + } + }, + + abrupt: function(type, arg) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc <= this.prev && + hasOwn.call(entry, "finallyLoc") && + this.prev < entry.finallyLoc) { + var finallyEntry = entry; + break; + } + } + + if (finallyEntry && + (type === "break" || + type === "continue") && + finallyEntry.tryLoc <= arg && + arg <= finallyEntry.finallyLoc) { + // Ignore the finally entry if control is not jumping to a + // location outside the try/catch block. + finallyEntry = null; + } + + var record = finallyEntry ? finallyEntry.completion : {}; + record.type = type; + record.arg = arg; + + if (finallyEntry) { + this.method = "next"; + this.next = finallyEntry.finallyLoc; + return ContinueSentinel; + } + + return this.complete(record); + }, + + complete: function(record, afterLoc) { + if (record.type === "throw") { + throw record.arg; + } + + if (record.type === "break" || + record.type === "continue") { + this.next = record.arg; + } else if (record.type === "return") { + this.rval = this.arg = record.arg; + this.method = "return"; + this.next = "end"; + } else if (record.type === "normal" && afterLoc) { + this.next = afterLoc; + } + + return ContinueSentinel; + }, + + finish: function(finallyLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.finallyLoc === finallyLoc) { + this.complete(entry.completion, entry.afterLoc); + resetTryEntry(entry); + return ContinueSentinel; + } + } + }, + + "catch": function(tryLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc === tryLoc) { + var record = entry.completion; + if (record.type === "throw") { + var thrown = record.arg; + resetTryEntry(entry); + } + return thrown; + } + } + + // The context.catch method must only be called with a location + // argument that corresponds to a known catch block. + throw new Error("illegal catch attempt"); + }, + + delegateYield: function(iterable, resultName, nextLoc) { + this.delegate = { + iterator: values(iterable), + resultName: resultName, + nextLoc: nextLoc + }; + + if (this.method === "next") { + // Deliberately forget the last sent value so that we don't + // accidentally pass it on to the delegate. + this.arg = undefined; + } + + return ContinueSentinel; + } + }; +})( + // In sloppy mode, unbound `this` refers to the global object, fallback to + // Function constructor if we're in global strict mode. That is sadly a form + // of indirect eval which violates Content Security Policy. + (function() { + return this || (typeof self === "object" && self); + })() || Function("return this")() +); + +},{}]},{},[1]); diff --git a/jshERP-web/public/color.less b/jshERP-web/public/color.less new file mode 100644 index 000000000..562977753 --- /dev/null +++ b/jshERP-web/public/color.less @@ -0,0 +1,7701 @@ +@primary-color: #1890ff; +/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */ +/* stylelint-disable no-duplicate-selectors */ +/* stylelint-disable */ +.bezierEasingMixin() { + @functions: ~`(function() { + var NEWTON_ITERATIONS = 4; + var NEWTON_MIN_SLOPE = 0.001; + var SUBDIVISION_PRECISION = 0.0000001; + var SUBDIVISION_MAX_ITERATIONS = 10; + + var kSplineTableSize = 11; + var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0); + + var float32ArraySupported = typeof Float32Array === 'function'; + + function A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; } + function B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; } + function C (aA1) { return 3.0 * aA1; } + + // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2. + function calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; } + + // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2. + function getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); } + + function binarySubdivide (aX, aA, aB, mX1, mX2) { + var currentX, currentT, i = 0; + do { + currentT = aA + (aB - aA) / 2.0; + currentX = calcBezier(currentT, mX1, mX2) - aX; + if (currentX > 0.0) { + aB = currentT; + } else { + aA = currentT; + } + } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); + return currentT; + } + + function newtonRaphsonIterate (aX, aGuessT, mX1, mX2) { + for (var i = 0; i < NEWTON_ITERATIONS; ++i) { + var currentSlope = getSlope(aGuessT, mX1, mX2); + if (currentSlope === 0.0) { + return aGuessT; + } + var currentX = calcBezier(aGuessT, mX1, mX2) - aX; + aGuessT -= currentX / currentSlope; + } + return aGuessT; + } + + var BezierEasing = function (mX1, mY1, mX2, mY2) { + if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) { + throw new Error('bezier x values must be in [0, 1] range'); + } + + // Precompute samples table + var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); + if (mX1 !== mY1 || mX2 !== mY2) { + for (var i = 0; i < kSplineTableSize; ++i) { + sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2); + } + } + + function getTForX (aX) { + var intervalStart = 0.0; + var currentSample = 1; + var lastSample = kSplineTableSize - 1; + + for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) { + intervalStart += kSampleStepSize; + } + --currentSample; + + // Interpolate to provide an initial guess for t + var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]); + var guessForT = intervalStart + dist * kSampleStepSize; + + var initialSlope = getSlope(guessForT, mX1, mX2); + if (initialSlope >= NEWTON_MIN_SLOPE) { + return newtonRaphsonIterate(aX, guessForT, mX1, mX2); + } else if (initialSlope === 0.0) { + return guessForT; + } else { + return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2); + } + } + + return function BezierEasing (x) { + if (mX1 === mY1 && mX2 === mY2) { + return x; // linear + } + // Because JavaScript number are imprecise, we should guarantee the extremes are right. + if (x === 0) { + return 0; + } + if (x === 1) { + return 1; + } + return calcBezier(getTForX(x), mY1, mY2); + }; + }; + + this.colorEasing = BezierEasing(0.26, 0.09, 0.37, 0.18); + // less 3 requires a return + return ''; +})()`; +} +// It is hacky way to make this function will be compiled preferentially by less +// resolve error: `ReferenceError: colorPalette is not defined` +// https://github.com/ant-design/ant-motion/issues/44 +.bezierEasingMixin(); + +/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */ +.tinyColorMixin() { + @functions: ~`(function() { +// TinyColor v1.4.1 +// https://github.com/bgrins/TinyColor +// 2016-07-07, Brian Grinstead, MIT License +var trimLeft = /^\s+/, + trimRight = /\s+$/, + tinyCounter = 0, + mathRound = Math.round, + mathMin = Math.min, + mathMax = Math.max, + mathRandom = Math.random; + +function tinycolor (color, opts) { + + color = (color) ? color : ''; + opts = opts || { }; + + // If input is already a tinycolor, return itself + if (color instanceof tinycolor) { + return color; + } + // If we are called as a function, call using new instead + if (!(this instanceof tinycolor)) { + return new tinycolor(color, opts); + } + + var rgb = inputToRGB(color); + this._originalInput = color, + this._r = rgb.r, + this._g = rgb.g, + this._b = rgb.b, + this._a = rgb.a, + this._roundA = mathRound(100*this._a) / 100, + this._format = opts.format || rgb.format; + this._gradientType = opts.gradientType; + + // Don't let the range of [0,255] come back in [0,1]. + // Potentially lose a little bit of precision here, but will fix issues where + // .5 gets interpreted as half of the total, instead of half of 1 + // If it was supposed to be 128, this was already taken care of by inputToRgb + if (this._r < 1) { this._r = mathRound(this._r); } + if (this._g < 1) { this._g = mathRound(this._g); } + if (this._b < 1) { this._b = mathRound(this._b); } + + this._ok = rgb.ok; + this._tc_id = tinyCounter++; +} + +tinycolor.prototype = { + isDark: function() { + return this.getBrightness() < 128; + }, + isLight: function() { + return !this.isDark(); + }, + isValid: function() { + return this._ok; + }, + getOriginalInput: function() { + return this._originalInput; + }, + getFormat: function() { + return this._format; + }, + getAlpha: function() { + return this._a; + }, + getBrightness: function() { + //http://www.w3.org/TR/AERT#color-contrast + var rgb = this.toRgb(); + return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000; + }, + getLuminance: function() { + //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef + var rgb = this.toRgb(); + var RsRGB, GsRGB, BsRGB, R, G, B; + RsRGB = rgb.r/255; + GsRGB = rgb.g/255; + BsRGB = rgb.b/255; + + if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);} + if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);} + if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);} + return (0.2126 * R) + (0.7152 * G) + (0.0722 * B); + }, + setAlpha: function(value) { + this._a = boundAlpha(value); + this._roundA = mathRound(100*this._a) / 100; + return this; + }, + toHsv: function() { + var hsv = rgbToHsv(this._r, this._g, this._b); + return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a }; + }, + toHsvString: function() { + var hsv = rgbToHsv(this._r, this._g, this._b); + var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100); + return (this._a == 1) ? + "hsv(" + h + ", " + s + "%, " + v + "%)" : + "hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")"; + }, + toHsl: function() { + var hsl = rgbToHsl(this._r, this._g, this._b); + return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a }; + }, + toHslString: function() { + var hsl = rgbToHsl(this._r, this._g, this._b); + var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100); + return (this._a == 1) ? + "hsl(" + h + ", " + s + "%, " + l + "%)" : + "hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")"; + }, + toHex: function(allow3Char) { + return rgbToHex(this._r, this._g, this._b, allow3Char); + }, + toHexString: function(allow3Char) { + return '#' + this.toHex(allow3Char); + }, + toHex8: function(allow4Char) { + return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char); + }, + toHex8String: function(allow4Char) { + return '#' + this.toHex8(allow4Char); + }, + toRgb: function() { + return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a }; + }, + toRgbString: function() { + return (this._a == 1) ? + "rgb(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" : + "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")"; + }, + toPercentageRgb: function() { + return { r: mathRound(bound01(this._r, 255) * 100) + "%", g: mathRound(bound01(this._g, 255) * 100) + "%", b: mathRound(bound01(this._b, 255) * 100) + "%", a: this._a }; + }, + toPercentageRgbString: function() { + return (this._a == 1) ? + "rgb(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" : + "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")"; + }, + toName: function() { + if (this._a === 0) { + return "transparent"; + } + + if (this._a < 1) { + return false; + } + + return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false; + }, + toFilter: function(secondColor) { + var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a); + var secondHex8String = hex8String; + var gradientType = this._gradientType ? "GradientType = 1, " : ""; + + if (secondColor) { + var s = tinycolor(secondColor); + secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a); + } + + return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")"; + }, + toString: function(format) { + var formatSet = !!format; + format = format || this._format; + + var formattedString = false; + var hasAlpha = this._a < 1 && this._a >= 0; + var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "hex4" || format === "hex8" || format === "name"); + + if (needsAlphaFormat) { + // Special case for "transparent", all other non-alpha formats + // will return rgba when there is transparency. + if (format === "name" && this._a === 0) { + return this.toName(); + } + return this.toRgbString(); + } + if (format === "rgb") { + formattedString = this.toRgbString(); + } + if (format === "prgb") { + formattedString = this.toPercentageRgbString(); + } + if (format === "hex" || format === "hex6") { + formattedString = this.toHexString(); + } + if (format === "hex3") { + formattedString = this.toHexString(true); + } + if (format === "hex4") { + formattedString = this.toHex8String(true); + } + if (format === "hex8") { + formattedString = this.toHex8String(); + } + if (format === "name") { + formattedString = this.toName(); + } + if (format === "hsl") { + formattedString = this.toHslString(); + } + if (format === "hsv") { + formattedString = this.toHsvString(); + } + + return formattedString || this.toHexString(); + }, + clone: function() { + return tinycolor(this.toString()); + }, + + _applyModification: function(fn, args) { + var color = fn.apply(null, [this].concat([].slice.call(args))); + this._r = color._r; + this._g = color._g; + this._b = color._b; + this.setAlpha(color._a); + return this; + }, + lighten: function() { + return this._applyModification(lighten, arguments); + }, + brighten: function() { + return this._applyModification(brighten, arguments); + }, + darken: function() { + return this._applyModification(darken, arguments); + }, + desaturate: function() { + return this._applyModification(desaturate, arguments); + }, + saturate: function() { + return this._applyModification(saturate, arguments); + }, + greyscale: function() { + return this._applyModification(greyscale, arguments); + }, + spin: function() { + return this._applyModification(spin, arguments); + }, + + _applyCombination: function(fn, args) { + return fn.apply(null, [this].concat([].slice.call(args))); + }, + analogous: function() { + return this._applyCombination(analogous, arguments); + }, + complement: function() { + return this._applyCombination(complement, arguments); + }, + monochromatic: function() { + return this._applyCombination(monochromatic, arguments); + }, + splitcomplement: function() { + return this._applyCombination(splitcomplement, arguments); + }, + triad: function() { + return this._applyCombination(triad, arguments); + }, + tetrad: function() { + return this._applyCombination(tetrad, arguments); + } +}; + +// If input is an object, force 1 into "1.0" to handle ratios properly +// String input requires "1.0" as input, so 1 will be treated as 1 +tinycolor.fromRatio = function(color, opts) { + if (typeof color == "object") { + var newColor = {}; + for (var i in color) { + if (color.hasOwnProperty(i)) { + if (i === "a") { + newColor[i] = color[i]; + } + else { + newColor[i] = convertToPercentage(color[i]); + } + } + } + color = newColor; + } + + return tinycolor(color, opts); +}; + +// Given a string or object, convert that input to RGB +// Possible string inputs: +// +// "red" +// "#f00" or "f00" +// "#ff0000" or "ff0000" +// "#ff000000" or "ff000000" +// "rgb 255 0 0" or "rgb (255, 0, 0)" +// "rgb 1.0 0 0" or "rgb (1, 0, 0)" +// "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1" +// "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1" +// "hsl(0, 100%, 50%)" or "hsl 0 100% 50%" +// "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1" +// "hsv(0, 100%, 100%)" or "hsv 0 100% 100%" +// +function inputToRGB(color) { + + var rgb = { r: 0, g: 0, b: 0 }; + var a = 1; + var s = null; + var v = null; + var l = null; + var ok = false; + var format = false; + + if (typeof color == "string") { + color = stringInputToObject(color); + } + + if (typeof color == "object") { + if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) { + rgb = rgbToRgb(color.r, color.g, color.b); + ok = true; + format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; + } + else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) { + s = convertToPercentage(color.s); + v = convertToPercentage(color.v); + rgb = hsvToRgb(color.h, s, v); + ok = true; + format = "hsv"; + } + else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) { + s = convertToPercentage(color.s); + l = convertToPercentage(color.l); + rgb = hslToRgb(color.h, s, l); + ok = true; + format = "hsl"; + } + + if (color.hasOwnProperty("a")) { + a = color.a; + } + } + + a = boundAlpha(a); + + return { + ok: ok, + format: color.format || format, + r: mathMin(255, mathMax(rgb.r, 0)), + g: mathMin(255, mathMax(rgb.g, 0)), + b: mathMin(255, mathMax(rgb.b, 0)), + a: a + }; +} + +// Conversion Functions +// -------------------- + +// rgbToHsl, rgbToHsv, hslToRgb, hsvToRgb modified from: +// + +// rgbToRgb +// Handle bounds / percentage checking to conform to CSS color spec +// +// *Assumes:* r, g, b in [0, 255] or [0, 1] +// *Returns:* { r, g, b } in [0, 255] +function rgbToRgb(r, g, b){ + return { + r: bound01(r, 255) * 255, + g: bound01(g, 255) * 255, + b: bound01(b, 255) * 255 + }; +} + +// rgbToHsl +// Converts an RGB color value to HSL. +// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1] +// *Returns:* { h, s, l } in [0,1] +function rgbToHsl(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, l = (max + min) / 2; + + if(max == min) { + h = s = 0; // achromatic + } + else { + var d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + + h /= 6; + } + + return { h: h, s: s, l: l }; +} + +// hslToRgb +// Converts an HSL color value to RGB. +// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100] +// *Returns:* { r, g, b } in the set [0, 255] +function hslToRgb(h, s, l) { + var r, g, b; + + h = bound01(h, 360); + s = bound01(s, 100); + l = bound01(l, 100); + + function hue2rgb(p, q, t) { + if(t < 0) t += 1; + if(t > 1) t -= 1; + if(t < 1/6) return p + (q - p) * 6 * t; + if(t < 1/2) return q; + if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; + return p; + } + + if(s === 0) { + r = g = b = l; // achromatic + } + else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = hue2rgb(p, q, h + 1/3); + g = hue2rgb(p, q, h); + b = hue2rgb(p, q, h - 1/3); + } + + return { r: r * 255, g: g * 255, b: b * 255 }; +} + +// rgbToHsv +// Converts an RGB color value to HSV +// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1] +// *Returns:* { h, s, v } in [0,1] +function rgbToHsv(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, v = max; + + var d = max - min; + s = max === 0 ? 0 : d / max; + + if(max == min) { + h = 0; // achromatic + } + else { + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + h /= 6; + } + return { h: h, s: s, v: v }; +} + +// hsvToRgb +// Converts an HSV color value to RGB. +// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100] +// *Returns:* { r, g, b } in the set [0, 255] + function hsvToRgb(h, s, v) { + + h = bound01(h, 360) * 6; + s = bound01(s, 100); + v = bound01(v, 100); + + var i = Math.floor(h), + f = h - i, + p = v * (1 - s), + q = v * (1 - f * s), + t = v * (1 - (1 - f) * s), + mod = i % 6, + r = [v, q, p, p, t, v][mod], + g = [t, v, v, q, p, p][mod], + b = [p, p, t, v, v, q][mod]; + + return { r: r * 255, g: g * 255, b: b * 255 }; +} + +// rgbToHex +// Converts an RGB color to hex +// Assumes r, g, and b are contained in the set [0, 255] +// Returns a 3 or 6 character hex +function rgbToHex(r, g, b, allow3Char) { + + var hex = [ + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)) + ]; + + // Return a 3 character hex if possible + if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); + } + + return hex.join(""); +} + +// rgbaToHex +// Converts an RGBA color plus alpha transparency to hex +// Assumes r, g, b are contained in the set [0, 255] and +// a in [0, 1]. Returns a 4 or 8 character rgba hex +function rgbaToHex(r, g, b, a, allow4Char) { + + var hex = [ + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)), + pad2(convertDecimalToHex(a)) + ]; + + // Return a 4 character hex if possible + if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0); + } + + return hex.join(""); +} + +// rgbaToArgbHex +// Converts an RGBA color to an ARGB Hex8 string +// Rarely used, but required for "toFilter()" +function rgbaToArgbHex(r, g, b, a) { + + var hex = [ + pad2(convertDecimalToHex(a)), + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)) + ]; + + return hex.join(""); +} + +// equals +// Can be called with any tinycolor input +tinycolor.equals = function (color1, color2) { + if (!color1 || !color2) { return false; } + return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString(); +}; + +tinycolor.random = function() { + return tinycolor.fromRatio({ + r: mathRandom(), + g: mathRandom(), + b: mathRandom() + }); +}; + +// Modification Functions +// ---------------------- +// Thanks to less.js for some of the basics here +// + +function desaturate(color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.s -= amount / 100; + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); +} + +function saturate(color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.s += amount / 100; + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); +} + +function greyscale(color) { + return tinycolor(color).desaturate(100); +} + +function lighten (color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.l += amount / 100; + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); +} + +function brighten(color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var rgb = tinycolor(color).toRgb(); + rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100)))); + rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100)))); + rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100)))); + return tinycolor(rgb); +} + +function darken (color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.l -= amount / 100; + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); +} + +// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue. +// Values outside of this range will be wrapped into this range. +function spin(color, amount) { + var hsl = tinycolor(color).toHsl(); + var hue = (hsl.h + amount) % 360; + hsl.h = hue < 0 ? 360 + hue : hue; + return tinycolor(hsl); +} + +// Combination Functions +// --------------------- +// Thanks to jQuery xColor for some of the ideas behind these +// + +function complement(color) { + var hsl = tinycolor(color).toHsl(); + hsl.h = (hsl.h + 180) % 360; + return tinycolor(hsl); +} + +function triad(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l }) + ]; +} + +function tetrad(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l }) + ]; +} + +function splitcomplement(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}), + tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l}) + ]; +} + +function analogous(color, results, slices) { + results = results || 6; + slices = slices || 30; + + var hsl = tinycolor(color).toHsl(); + var part = 360 / slices; + var ret = [tinycolor(color)]; + + for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) { + hsl.h = (hsl.h + part) % 360; + ret.push(tinycolor(hsl)); + } + return ret; +} + +function monochromatic(color, results) { + results = results || 6; + var hsv = tinycolor(color).toHsv(); + var h = hsv.h, s = hsv.s, v = hsv.v; + var ret = []; + var modification = 1 / results; + + while (results--) { + ret.push(tinycolor({ h: h, s: s, v: v})); + v = (v + modification) % 1; + } + + return ret; +} + +// Utility Functions +// --------------------- + +tinycolor.mix = function(color1, color2, amount) { + amount = (amount === 0) ? 0 : (amount || 50); + + var rgb1 = tinycolor(color1).toRgb(); + var rgb2 = tinycolor(color2).toRgb(); + + var p = amount / 100; + + var rgba = { + r: ((rgb2.r - rgb1.r) * p) + rgb1.r, + g: ((rgb2.g - rgb1.g) * p) + rgb1.g, + b: ((rgb2.b - rgb1.b) * p) + rgb1.b, + a: ((rgb2.a - rgb1.a) * p) + rgb1.a + }; + + return tinycolor(rgba); +}; + +// Readability Functions +// --------------------- +// false +// tinycolor.isReadable("#000", "#111",{level:"AA",size:"large"}) => false +tinycolor.isReadable = function(color1, color2, wcag2) { + var readability = tinycolor.readability(color1, color2); + var wcag2Parms, out; + + out = false; + + wcag2Parms = validateWCAG2Parms(wcag2); + switch (wcag2Parms.level + wcag2Parms.size) { + case "AAsmall": + case "AAAlarge": + out = readability >= 4.5; + break; + case "AAlarge": + out = readability >= 3; + break; + case "AAAsmall": + out = readability >= 7; + break; + } + return out; + +}; + +// mostReadable +// Given a base color and a list of possible foreground or background +// colors for that base, returns the most readable color. +// Optionally returns Black or White if the most readable color is unreadable. +// *Example* +// tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:false}).toHexString(); // "#112255" +// tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:true}).toHexString(); // "#ffffff" +// tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"large"}).toHexString(); // "#faf3f3" +// tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"small"}).toHexString(); // "#ffffff" +tinycolor.mostReadable = function(baseColor, colorList, args) { + var bestColor = null; + var bestScore = 0; + var readability; + var includeFallbackColors, level, size ; + args = args || {}; + includeFallbackColors = args.includeFallbackColors ; + level = args.level; + size = args.size; + + for (var i= 0; i < colorList.length ; i++) { + readability = tinycolor.readability(baseColor, colorList[i]); + if (readability > bestScore) { + bestScore = readability; + bestColor = tinycolor(colorList[i]); + } + } + + if (tinycolor.isReadable(baseColor, bestColor, {"level":level,"size":size}) || !includeFallbackColors) { + return bestColor; + } + else { + args.includeFallbackColors=false; + return tinycolor.mostReadable(baseColor,["#fff", "#000"],args); + } +}; + +// Big List of Colors +// ------------------ +// +var names = tinycolor.names = { + aliceblue: "f0f8ff", + antiquewhite: "faebd7", + aqua: "0ff", + aquamarine: "7fffd4", + azure: "f0ffff", + beige: "f5f5dc", + bisque: "ffe4c4", + black: "000", + blanchedalmond: "ffebcd", + blue: "00f", + blueviolet: "8a2be2", + brown: "a52a2a", + burlywood: "deb887", + burntsienna: "ea7e5d", + cadetblue: "5f9ea0", + chartreuse: "7fff00", + chocolate: "d2691e", + coral: "ff7f50", + cornflowerblue: "6495ed", + cornsilk: "fff8dc", + crimson: "dc143c", + cyan: "0ff", + darkblue: "00008b", + darkcyan: "008b8b", + darkgoldenrod: "b8860b", + darkgray: "a9a9a9", + darkgreen: "006400", + darkgrey: "a9a9a9", + darkkhaki: "bdb76b", + darkmagenta: "8b008b", + darkolivegreen: "556b2f", + darkorange: "ff8c00", + darkorchid: "9932cc", + darkred: "8b0000", + darksalmon: "e9967a", + darkseagreen: "8fbc8f", + darkslateblue: "483d8b", + darkslategray: "2f4f4f", + darkslategrey: "2f4f4f", + darkturquoise: "00ced1", + darkviolet: "9400d3", + deeppink: "ff1493", + deepskyblue: "00bfff", + dimgray: "696969", + dimgrey: "696969", + dodgerblue: "1e90ff", + firebrick: "b22222", + floralwhite: "fffaf0", + forestgreen: "228b22", + fuchsia: "f0f", + gainsboro: "dcdcdc", + ghostwhite: "f8f8ff", + gold: "ffd700", + goldenrod: "daa520", + gray: "808080", + green: "008000", + greenyellow: "adff2f", + grey: "808080", + honeydew: "f0fff0", + hotpink: "ff69b4", + indianred: "cd5c5c", + indigo: "4b0082", + ivory: "fffff0", + khaki: "f0e68c", + lavender: "e6e6fa", + lavenderblush: "fff0f5", + lawngreen: "7cfc00", + lemonchiffon: "fffacd", + lightblue: "add8e6", + lightcoral: "f08080", + lightcyan: "e0ffff", + lightgoldenrodyellow: "fafad2", + lightgray: "d3d3d3", + lightgreen: "90ee90", + lightgrey: "d3d3d3", + lightpink: "ffb6c1", + lightsalmon: "ffa07a", + lightseagreen: "20b2aa", + lightskyblue: "87cefa", + lightslategray: "789", + lightslategrey: "789", + lightsteelblue: "b0c4de", + lightyellow: "ffffe0", + lime: "0f0", + limegreen: "32cd32", + linen: "faf0e6", + magenta: "f0f", + maroon: "800000", + mediumaquamarine: "66cdaa", + mediumblue: "0000cd", + mediumorchid: "ba55d3", + mediumpurple: "9370db", + mediumseagreen: "3cb371", + mediumslateblue: "7b68ee", + mediumspringgreen: "00fa9a", + mediumturquoise: "48d1cc", + mediumvioletred: "c71585", + midnightblue: "191970", + mintcream: "f5fffa", + mistyrose: "ffe4e1", + moccasin: "ffe4b5", + navajowhite: "ffdead", + navy: "000080", + oldlace: "fdf5e6", + olive: "808000", + olivedrab: "6b8e23", + orange: "ffa500", + orangered: "ff4500", + orchid: "da70d6", + palegoldenrod: "eee8aa", + palegreen: "98fb98", + paleturquoise: "afeeee", + palevioletred: "db7093", + papayawhip: "ffefd5", + peachpuff: "ffdab9", + peru: "cd853f", + pink: "ffc0cb", + plum: "dda0dd", + powderblue: "b0e0e6", + purple: "800080", + rebeccapurple: "663399", + red: "f00", + rosybrown: "bc8f8f", + royalblue: "4169e1", + saddlebrown: "8b4513", + salmon: "fa8072", + sandybrown: "f4a460", + seagreen: "2e8b57", + seashell: "fff5ee", + sienna: "a0522d", + silver: "c0c0c0", + skyblue: "87ceeb", + slateblue: "6a5acd", + slategray: "708090", + slategrey: "708090", + snow: "fffafa", + springgreen: "00ff7f", + steelblue: "4682b4", + tan: "d2b48c", + teal: "008080", + thistle: "d8bfd8", + tomato: "ff6347", + turquoise: "40e0d0", + violet: "ee82ee", + wheat: "f5deb3", + white: "fff", + whitesmoke: "f5f5f5", + yellow: "ff0", + yellowgreen: "9acd32" +}; + +// Make it easy to access colors via hexNames[hex] +var hexNames = tinycolor.hexNames = flip(names); + +// Utilities +// --------- + +// { 'name1': 'val1' } becomes { 'val1': 'name1' } +function flip(o) { + var flipped = { }; + for (var i in o) { + if (o.hasOwnProperty(i)) { + flipped[o[i]] = i; + } + } + return flipped; +} + +// Return a valid alpha value [0,1] with all invalid values being set to 1 +function boundAlpha(a) { + a = parseFloat(a); + + if (isNaN(a) || a < 0 || a > 1) { + a = 1; + } + + return a; +} + +// Take input from [0, n] and return it as [0, 1] +function bound01(n, max) { + if (isOnePointZero(n)) { n = "100%"; } + + var processPercent = isPercentage(n); + n = mathMin(max, mathMax(0, parseFloat(n))); + + // Automatically convert percentage into number + if (processPercent) { + n = parseInt(n * max, 10) / 100; + } + + // Handle floating point rounding errors + if ((Math.abs(n - max) < 0.000001)) { + return 1; + } + + // Convert into [0, 1] range if it isn't already + return (n % max) / parseFloat(max); +} + +// Force a number between 0 and 1 +function clamp01(val) { + return mathMin(1, mathMax(0, val)); +} + +// Parse a base-16 hex value into a base-10 integer +function parseIntFromHex(val) { + return parseInt(val, 16); +} + +// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1 +// +function isOnePointZero(n) { + return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1; +} + +// Check to see if string passed in is a percentage +function isPercentage(n) { + return typeof n === "string" && n.indexOf('%') != -1; +} + +// Force a hex value to have 2 characters +function pad2(c) { + return c.length == 1 ? '0' + c : '' + c; +} + +// Replace a decimal with it's percentage value +function convertToPercentage(n) { + if (n <= 1) { + n = (n * 100) + "%"; + } + + return n; +} + +// Converts a decimal to a hex value +function convertDecimalToHex(d) { + return Math.round(parseFloat(d) * 255).toString(16); +} +// Converts a hex value to a decimal +function convertHexToDecimal(h) { + return (parseIntFromHex(h) / 255); +} + +var matchers = (function() { + + // + var CSS_INTEGER = "[-\\+]?\\d+%?"; + + // + var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; + + // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome. + var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")"; + + // Actual matching. + // Parentheses and commas are optional, but not required. + // Whitespace can take the place of commas or opening paren + var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + + return { + CSS_UNIT: new RegExp(CSS_UNIT), + rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), + rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), + hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), + hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), + hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), + hsva: new RegExp("hsva" + PERMISSIVE_MATCH4), + hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, + hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ + }; +})(); + +// isValidCSSUnit +// Take in a single string / number and check to see if it looks like a CSS unit +// (see matchers above for definition). +function isValidCSSUnit(color) { + return !!matchers.CSS_UNIT.exec(color); +} + +// stringInputToObject +// Permissive string parsing. Take in a number of formats, and output an object +// based on detected format. Returns { r, g, b } or { h, s, l } or { h, s, v} +function stringInputToObject(color) { + + color = color.replace(trimLeft, '').replace(trimRight, '').toLowerCase(); + var named = false; + if (names[color]) { + color = names[color]; + named = true; + } + else if (color == 'transparent') { + return { r: 0, g: 0, b: 0, a: 0, format: "name" }; + } + + // Try to match string input using regular expressions. + // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360] + // Just return an object and let the conversion functions handle that. + // This way the result will be the same whether the tinycolor is initialized with string or object. + var match; + if ((match = matchers.rgb.exec(color))) { + return { r: match[1], g: match[2], b: match[3] }; + } + if ((match = matchers.rgba.exec(color))) { + return { r: match[1], g: match[2], b: match[3], a: match[4] }; + } + if ((match = matchers.hsl.exec(color))) { + return { h: match[1], s: match[2], l: match[3] }; + } + if ((match = matchers.hsla.exec(color))) { + return { h: match[1], s: match[2], l: match[3], a: match[4] }; + } + if ((match = matchers.hsv.exec(color))) { + return { h: match[1], s: match[2], v: match[3] }; + } + if ((match = matchers.hsva.exec(color))) { + return { h: match[1], s: match[2], v: match[3], a: match[4] }; + } + if ((match = matchers.hex8.exec(color))) { + return { + r: parseIntFromHex(match[1]), + g: parseIntFromHex(match[2]), + b: parseIntFromHex(match[3]), + a: convertHexToDecimal(match[4]), + format: named ? "name" : "hex8" + }; + } + if ((match = matchers.hex6.exec(color))) { + return { + r: parseIntFromHex(match[1]), + g: parseIntFromHex(match[2]), + b: parseIntFromHex(match[3]), + format: named ? "name" : "hex" + }; + } + if ((match = matchers.hex4.exec(color))) { + return { + r: parseIntFromHex(match[1] + '' + match[1]), + g: parseIntFromHex(match[2] + '' + match[2]), + b: parseIntFromHex(match[3] + '' + match[3]), + a: convertHexToDecimal(match[4] + '' + match[4]), + format: named ? "name" : "hex8" + }; + } + if ((match = matchers.hex3.exec(color))) { + return { + r: parseIntFromHex(match[1] + '' + match[1]), + g: parseIntFromHex(match[2] + '' + match[2]), + b: parseIntFromHex(match[3] + '' + match[3]), + format: named ? "name" : "hex" + }; + } + + return false; +} + +function validateWCAG2Parms(parms) { + // return valid WCAG2 parms for isReadable. + // If input parms are invalid, return {"level":"AA", "size":"small"} + var level, size; + parms = parms || {"level":"AA", "size":"small"}; + level = (parms.level || "AA").toUpperCase(); + size = (parms.size || "small").toLowerCase(); + if (level !== "AA" && level !== "AAA") { + level = "AA"; + } + if (size !== "small" && size !== "large") { + size = "small"; + } + return {"level":level, "size":size}; +} + +this.tinycolor = tinycolor; + +})()`; +} +// It is hacky way to make this function will be compiled preferentially by less +// resolve error: `ReferenceError: colorPalette is not defined` +// https://github.com/ant-design/ant-motion/issues/44 +.tinyColorMixin(); + +// We create a very complex algorithm which take the place of original tint/shade color system +// to make sure no one can understand it 👻 +// and create an entire color palette magicly by inputing just a single primary color. +// We are using bezier-curve easing function and some color manipulations like tint/shade/darken/spin +.colorPaletteMixin() { + @functions: ~`(function() { + var hueStep = 2; + var saturationStep = 16; + var saturationStep2 = 5; + var brightnessStep1 = 5; + var brightnessStep2 = 15; + var lightColorCount = 5; + var darkColorCount = 4; + + var getHue = function(hsv, i, isLight) { + var hue; + if (hsv.h >= 60 && hsv.h <= 240) { + hue = isLight ? hsv.h - hueStep * i : hsv.h + hueStep * i; + } else { + hue = isLight ? hsv.h + hueStep * i : hsv.h - hueStep * i; + } + if (hue < 0) { + hue += 360; + } else if (hue >= 360) { + hue -= 360; + } + return Math.round(hue); + }; + var getSaturation = function(hsv, i, isLight) { + var saturation; + if (isLight) { + saturation = Math.round(hsv.s * 100) - saturationStep * i; + } else if (i == darkColorCount) { + saturation = Math.round(hsv.s * 100) + saturationStep; + } else { + saturation = Math.round(hsv.s * 100) + saturationStep2 * i; + } + if (saturation > 100) { + saturation = 100; + } + if (isLight && i === lightColorCount && saturation > 10) { + saturation = 10; + } + if (saturation < 6) { + saturation = 6; + } + return Math.round(saturation); + }; + var getValue = function(hsv, i, isLight) { + if (isLight) { + return Math.round(hsv.v * 100) + brightnessStep1 * i; + } + return Math.round(hsv.v * 100) - brightnessStep2 * i; + }; + + this.colorPalette = function(color, index) { + var isLight = index <= 6; + var hsv = tinycolor(color).toHsv(); + var i = isLight ? lightColorCount + 1 - index : index - lightColorCount - 1; + return tinycolor({ + h: getHue(hsv, i, isLight), + s: getSaturation(hsv, i, isLight), + v: getValue(hsv, i, isLight), + }).toHexString(); + }; +})()`; +} +// It is hacky way to make this function will be compiled preferentially by less +// resolve error: `ReferenceError: colorPalette is not defined` +// https://github.com/ant-design/ant-motion/issues/44 +.colorPaletteMixin(); + +// color palettes +@blue-1: color(~`colorPalette("@{blue-6}", 1)`); +@blue-2: color(~`colorPalette("@{blue-6}", 2)`); +@blue-3: color(~`colorPalette("@{blue-6}", 3)`); +@blue-4: color(~`colorPalette("@{blue-6}", 4)`); +@blue-5: color(~`colorPalette("@{blue-6}", 5)`); +@blue-6: #1890ff; +@blue-7: color(~`colorPalette("@{blue-6}", 7)`); +@blue-8: color(~`colorPalette("@{blue-6}", 8)`); +@blue-9: color(~`colorPalette("@{blue-6}", 9)`); +@blue-10: color(~`colorPalette("@{blue-6}", 10)`); + +@purple-1: color(~`colorPalette("@{purple-6}", 1)`); +@purple-2: color(~`colorPalette("@{purple-6}", 2)`); +@purple-3: color(~`colorPalette("@{purple-6}", 3)`); +@purple-4: color(~`colorPalette("@{purple-6}", 4)`); +@purple-5: color(~`colorPalette("@{purple-6}", 5)`); +@purple-6: #722ed1; +@purple-7: color(~`colorPalette("@{purple-6}", 7)`); +@purple-8: color(~`colorPalette("@{purple-6}", 8)`); +@purple-9: color(~`colorPalette("@{purple-6}", 9)`); +@purple-10: color(~`colorPalette("@{purple-6}", 10)`); + +@cyan-1: color(~`colorPalette("@{cyan-6}", 1)`); +@cyan-2: color(~`colorPalette("@{cyan-6}", 2)`); +@cyan-3: color(~`colorPalette("@{cyan-6}", 3)`); +@cyan-4: color(~`colorPalette("@{cyan-6}", 4)`); +@cyan-5: color(~`colorPalette("@{cyan-6}", 5)`); +@cyan-6: #13c2c2; +@cyan-7: color(~`colorPalette("@{cyan-6}", 7)`); +@cyan-8: color(~`colorPalette("@{cyan-6}", 8)`); +@cyan-9: color(~`colorPalette("@{cyan-6}", 9)`); +@cyan-10: color(~`colorPalette("@{cyan-6}", 10)`); + +@green-1: color(~`colorPalette("@{green-6}", 1)`); +@green-2: color(~`colorPalette("@{green-6}", 2)`); +@green-3: color(~`colorPalette("@{green-6}", 3)`); +@green-4: color(~`colorPalette("@{green-6}", 4)`); +@green-5: color(~`colorPalette("@{green-6}", 5)`); +@green-6: #52c41a; +@green-7: color(~`colorPalette("@{green-6}", 7)`); +@green-8: color(~`colorPalette("@{green-6}", 8)`); +@green-9: color(~`colorPalette("@{green-6}", 9)`); +@green-10: color(~`colorPalette("@{green-6}", 10)`); + +@magenta-1: color(~`colorPalette("@{magenta-6}", 1)`); +@magenta-2: color(~`colorPalette("@{magenta-6}", 2)`); +@magenta-3: color(~`colorPalette("@{magenta-6}", 3)`); +@magenta-4: color(~`colorPalette("@{magenta-6}", 4)`); +@magenta-5: color(~`colorPalette("@{magenta-6}", 5)`); +@magenta-6: #eb2f96; +@magenta-7: color(~`colorPalette("@{magenta-6}", 7)`); +@magenta-8: color(~`colorPalette("@{magenta-6}", 8)`); +@magenta-9: color(~`colorPalette("@{magenta-6}", 9)`); +@magenta-10: color(~`colorPalette("@{magenta-6}", 10)`); + +// alias of magenta +@pink-1: color(~`colorPalette("@{pink-6}", 1)`); +@pink-2: color(~`colorPalette("@{pink-6}", 2)`); +@pink-3: color(~`colorPalette("@{pink-6}", 3)`); +@pink-4: color(~`colorPalette("@{pink-6}", 4)`); +@pink-5: color(~`colorPalette("@{pink-6}", 5)`); +@pink-6: #eb2f96; +@pink-7: color(~`colorPalette("@{pink-6}", 7)`); +@pink-8: color(~`colorPalette("@{pink-6}", 8)`); +@pink-9: color(~`colorPalette("@{pink-6}", 9)`); +@pink-10: color(~`colorPalette("@{pink-6}", 10)`); + +@red-1: color(~`colorPalette("@{red-6}", 1)`); +@red-2: color(~`colorPalette("@{red-6}", 2)`); +@red-3: color(~`colorPalette("@{red-6}", 3)`); +@red-4: color(~`colorPalette("@{red-6}", 4)`); +@red-5: color(~`colorPalette("@{red-6}", 5)`); +@red-6: #f5222d; +@red-7: color(~`colorPalette("@{red-6}", 7)`); +@red-8: color(~`colorPalette("@{red-6}", 8)`); +@red-9: color(~`colorPalette("@{red-6}", 9)`); +@red-10: color(~`colorPalette("@{red-6}", 10)`); + +@orange-1: color(~`colorPalette("@{orange-6}", 1)`); +@orange-2: color(~`colorPalette("@{orange-6}", 2)`); +@orange-3: color(~`colorPalette("@{orange-6}", 3)`); +@orange-4: color(~`colorPalette("@{orange-6}", 4)`); +@orange-5: color(~`colorPalette("@{orange-6}", 5)`); +@orange-6: #fa8c16; +@orange-7: color(~`colorPalette("@{orange-6}", 7)`); +@orange-8: color(~`colorPalette("@{orange-6}", 8)`); +@orange-9: color(~`colorPalette("@{orange-6}", 9)`); +@orange-10: color(~`colorPalette("@{orange-6}", 10)`); + +@yellow-1: color(~`colorPalette("@{yellow-6}", 1)`); +@yellow-2: color(~`colorPalette("@{yellow-6}", 2)`); +@yellow-3: color(~`colorPalette("@{yellow-6}", 3)`); +@yellow-4: color(~`colorPalette("@{yellow-6}", 4)`); +@yellow-5: color(~`colorPalette("@{yellow-6}", 5)`); +@yellow-6: #fadb14; +@yellow-7: color(~`colorPalette("@{yellow-6}", 7)`); +@yellow-8: color(~`colorPalette("@{yellow-6}", 8)`); +@yellow-9: color(~`colorPalette("@{yellow-6}", 9)`); +@yellow-10: color(~`colorPalette("@{yellow-6}", 10)`); + +@volcano-1: color(~`colorPalette("@{volcano-6}", 1)`); +@volcano-2: color(~`colorPalette("@{volcano-6}", 2)`); +@volcano-3: color(~`colorPalette("@{volcano-6}", 3)`); +@volcano-4: color(~`colorPalette("@{volcano-6}", 4)`); +@volcano-5: color(~`colorPalette("@{volcano-6}", 5)`); +@volcano-6: #fa541c; +@volcano-7: color(~`colorPalette("@{volcano-6}", 7)`); +@volcano-8: color(~`colorPalette("@{volcano-6}", 8)`); +@volcano-9: color(~`colorPalette("@{volcano-6}", 9)`); +@volcano-10: color(~`colorPalette("@{volcano-6}", 10)`); + +@geekblue-1: color(~`colorPalette("@{geekblue-6}", 1)`); +@geekblue-2: color(~`colorPalette("@{geekblue-6}", 2)`); +@geekblue-3: color(~`colorPalette("@{geekblue-6}", 3)`); +@geekblue-4: color(~`colorPalette("@{geekblue-6}", 4)`); +@geekblue-5: color(~`colorPalette("@{geekblue-6}", 5)`); +@geekblue-6: #2f54eb; +@geekblue-7: color(~`colorPalette("@{geekblue-6}", 7)`); +@geekblue-8: color(~`colorPalette("@{geekblue-6}", 8)`); +@geekblue-9: color(~`colorPalette("@{geekblue-6}", 9)`); +@geekblue-10: color(~`colorPalette("@{geekblue-6}", 10)`); + +@lime-1: color(~`colorPalette("@{lime-6}", 1)`); +@lime-2: color(~`colorPalette("@{lime-6}", 2)`); +@lime-3: color(~`colorPalette("@{lime-6}", 3)`); +@lime-4: color(~`colorPalette("@{lime-6}", 4)`); +@lime-5: color(~`colorPalette("@{lime-6}", 5)`); +@lime-6: #a0d911; +@lime-7: color(~`colorPalette("@{lime-6}", 7)`); +@lime-8: color(~`colorPalette("@{lime-6}", 8)`); +@lime-9: color(~`colorPalette("@{lime-6}", 9)`); +@lime-10: color(~`colorPalette("@{lime-6}", 10)`); + +@gold-1: color(~`colorPalette("@{gold-6}", 1)`); +@gold-2: color(~`colorPalette("@{gold-6}", 2)`); +@gold-3: color(~`colorPalette("@{gold-6}", 3)`); +@gold-4: color(~`colorPalette("@{gold-6}", 4)`); +@gold-5: color(~`colorPalette("@{gold-6}", 5)`); +@gold-6: #faad14; +@gold-7: color(~`colorPalette("@{gold-6}", 7)`); +@gold-8: color(~`colorPalette("@{gold-6}", 8)`); +@gold-9: color(~`colorPalette("@{gold-6}", 9)`); +@gold-10: color(~`colorPalette("@{gold-6}", 10)`); + +// The prefix to use on all css classes from ant. +@ant-prefix : ant; + +// -------- Colors ----------- + +@info-color : @blue-6; +@success-color : @green-6; +@processing-color : @blue-6; +@error-color : @red-6; +@highlight-color : @red-6; +@warning-color : @gold-6; +@normal-color : #d9d9d9; + +// Color used by default to control hover and active backgrounds and for +// alert info backgrounds. +@primary-1: color(~`colorPalette("@{primary-color}", 1)`); // replace tint(@primary-color, 90%) +@primary-2: color(~`colorPalette("@{primary-color}", 2)`); // replace tint(@primary-color, 80%) +@primary-3: color(~`colorPalette("@{primary-color}", 3)`); // unused +@primary-4: color(~`colorPalette("@{primary-color}", 4)`); // unused +@primary-5: color(~`colorPalette("@{primary-color}", 5)`); // color used to control the text color in many active and hover states, replace tint(@primary-color, 20%) +@primary-6: @primary-color; // color used to control the text color of active buttons, don't use, use @primary-color +@primary-7: color(~`colorPalette("@{primary-color}", 7)`); // replace shade(@primary-color, 5%) +@primary-8: color(~`colorPalette("@{primary-color}", 8)`); // unused +@primary-9: color(~`colorPalette("@{primary-color}", 9)`); // unused +@primary-10: color(~`colorPalette("@{primary-color}", 10)`); // unused + +// Base Scaffolding Variables +// --- + +// Background color for `` +@body-background : #fff; +// Base background color for most components +@component-background : #fff; +@font-family : "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif, +"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; +@code-family : "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; +@heading-color : fade(#000, 85%); +@text-color : fade(#000, 65%); +@text-color-secondary : fade(#000, 45%); +@heading-color-dark : fade(#fff, 100%); +@text-color-dark : fade(#fff, 85%); +@text-color-secondary-dark: fade(#fff, 65%); +@font-size-base : 14px; +@font-size-lg : @font-size-base + 2px; +@font-size-sm : 12px; +@line-height-base : 1.5; +@border-radius-base : 4px; +@border-radius-sm : 2px; + +// vertical paddings +@padding-lg : 24px; // containers +@padding-md : 16px; // small containers and buttons +@padding-sm : 12px; // Form controls and items +@padding-xs : 8px; // small items + +// vertical padding for all form controls +@control-padding-horizontal: @padding-sm; +@control-padding-horizontal-sm: @padding-xs; + +// The background colors for active and hover states for things like +// list items or table cells. +@item-active-bg : @primary-1; +@item-hover-bg : @primary-1; + +// ICONFONT +@iconfont-css-prefix : anticon; + +// LINK +@link-color : @primary-color; +@link-hover-color : color(~`colorPalette("@{link-color}", 5)`); +@link-active-color : color(~`colorPalette("@{link-color}", 7)`); +@link-decoration : none; +@link-hover-decoration : none; + +// Animation +@ease-base-out : cubic-bezier(0.7, 0.3, 0.1, 1); +@ease-base-in : cubic-bezier(0.9, 0, 0.3, 0.7); +@ease-out : cubic-bezier(0.215, 0.61, 0.355, 1); +@ease-in : cubic-bezier(0.55, 0.055, 0.675, 0.19); +@ease-in-out : cubic-bezier(0.645, 0.045, 0.355, 1); +@ease-out-back : cubic-bezier(0.12, 0.4, 0.29, 1.46); +@ease-in-back : cubic-bezier(0.71, -0.46, 0.88, 0.6); +@ease-in-out-back : cubic-bezier(0.71, -0.46, 0.29, 1.46); +@ease-out-circ : cubic-bezier(0.08, 0.82, 0.17, 1); +@ease-in-circ : cubic-bezier(0.6, 0.04, 0.98, 0.34); +@ease-in-out-circ : cubic-bezier(0.78, 0.14, 0.15, 0.86); +@ease-out-quint : cubic-bezier(0.23, 1, 0.32, 1); +@ease-in-quint : cubic-bezier(0.755, 0.05, 0.855, 0.06); +@ease-in-out-quint : cubic-bezier(0.86, 0, 0.07, 1); + +// Border color +@border-color-base : hsv(0, 0, 85%); // base border outline a component +@border-color-split : hsv(0, 0, 91%); // split border inside a component +@border-width-base : 1px; // width of the border for a component +@border-style-base : solid; // style of a components border + +// Outline +@outline-blur-size : 0; +@outline-width : 2px; +@outline-color : @primary-color; + +@background-color-light : hsv(0, 0, 98%); // background of header and selected item +@background-color-base : hsv(0, 0, 96%); // Default grey background color + +// Disabled states +@disabled-color : fade(#000, 25%); +@disabled-bg : @background-color-base; +@disabled-color-dark : fade(#fff, 35%); + +// Shadow +@shadow-color : rgba(0, 0, 0, .15); +@box-shadow-base : @shadow-1-down; +@shadow-1-up : 0 -2px 8px @shadow-color; +@shadow-1-down : 0 2px 8px @shadow-color; +@shadow-1-left : -2px 0 8px @shadow-color; +@shadow-1-right : 2px 0 8px @shadow-color; +@shadow-2 : 0 4px 12px @shadow-color; + +// Buttons +@btn-font-weight : 400; +@btn-border-radius-base : @border-radius-base; +@btn-border-radius-sm : @border-radius-base; + +@btn-primary-color : #fff; +@btn-primary-bg : @primary-color; + +@btn-default-color : @text-color; +@btn-default-bg : #fff; +@btn-default-border : @border-color-base; + +@btn-danger-color : @error-color; +@btn-danger-bg : @background-color-base; +@btn-danger-border : @border-color-base; + +@btn-disable-color : @disabled-color; +@btn-disable-bg : @disabled-bg; +@btn-disable-border : @border-color-base; + +@btn-padding-base : 0 @padding-md - 1px; +@btn-font-size-lg : @font-size-lg; +@btn-font-size-sm : @font-size-base; +@btn-padding-lg : @btn-padding-base; +@btn-padding-sm : 0 @padding-xs - 1px; + +@btn-height-base : 32px; +@btn-height-lg : 40px; +@btn-height-sm : 24px; + +@btn-circle-size : @btn-height-base; +@btn-circle-size-lg : @btn-height-lg; +@btn-circle-size-sm : @btn-height-sm; + +@btn-group-border : @primary-5; + +// Checkbox +@checkbox-size : 16px; +@checkbox-color : @primary-color; +@checkbox-check-color : #fff; + +// Radio +@radio-size : 16px; +@radio-dot-color : @primary-color; + +// Radio buttons +@radio-button-bg : @btn-default-bg; +@radio-button-color : @btn-default-color; +@radio-button-hover-color : @primary-5; +@radio-button-active-color : @primary-7; + +// Media queries breakpoints +// Extra small screen / phone +@screen-xs : 480px; +@screen-xs-min : @screen-xs; + +// Small screen / tablet +@screen-sm : 576px; +@screen-sm-min : @screen-sm; + +// Medium screen / desktop +@screen-md : 768px; +@screen-md-min : @screen-md; + +// Large screen / wide desktop +@screen-lg : 992px; +@screen-lg-min : @screen-lg; + +// Extra large screen / full hd +@screen-xl : 1200px; +@screen-xl-min : @screen-xl; + +// Extra extra large screen / large descktop +@screen-xxl : 1600px; +@screen-xxl-min : @screen-xxl; + +// provide a maximum +@screen-xs-max : (@screen-sm-min - 1px); +@screen-sm-max : (@screen-md-min - 1px); +@screen-md-max : (@screen-lg-min - 1px); +@screen-lg-max : (@screen-xl-min - 1px); +@screen-xl-max : (@screen-xxl-min - 1px); + +// Grid system +@grid-columns : 24; +@grid-gutter-width : 0; + +// Layout +@layout-body-background : #f0f2f5; +@layout-header-background : #001529; +@layout-footer-background : @layout-body-background; +@layout-header-height : 64px; +@layout-header-padding : 0 50px; +@layout-footer-padding : 24px 50px; +@layout-sider-background : @layout-header-background; +@layout-trigger-height : 48px; +@layout-trigger-background : #002140; +@layout-trigger-color : #fff; +@layout-zero-trigger-width : 36px; +@layout-zero-trigger-height : 42px; +// Layout light theme +@layout-sider-background-light : #fff; +@layout-trigger-background-light: #fff; +@layout-trigger-color-light : @text-color; + +// z-index list +@zindex-affix : 10; +@zindex-back-top : 10; +@zindex-modal-mask : 1000; +@zindex-modal : 1000; +@zindex-notification : 1010; +@zindex-message : 1010; +@zindex-popover : 1030; +@zindex-picker : 1050; +@zindex-dropdown : 1050; +@zindex-tooltip : 1060; + +// Animation +@animation-duration-slow: .3s; // Modal +@animation-duration-base: .2s; +@animation-duration-fast: .1s; // Tooltip + +// Form +// --- +@label-required-color : @highlight-color; +@label-color : @heading-color; +@form-item-margin-bottom : 24px; +@form-item-trailing-colon : true; +@form-vertical-label-padding : 0 0 8px; +@form-vertical-label-margin : 0; + +// Input +// --- +@input-height-base : 32px; +@input-height-lg : 40px; +@input-height-sm : 24px; +@input-padding-horizontal : @control-padding-horizontal - 1px; +@input-padding-horizontal-base: @input-padding-horizontal; +@input-padding-horizontal-sm : @control-padding-horizontal-sm - 1px; +@input-padding-horizontal-lg : @input-padding-horizontal; +@input-padding-vertical-base : 4px; +@input-padding-vertical-sm : 1px; +@input-padding-vertical-lg : 6px; +@input-placeholder-color : hsv(0, 0, 75%); +@input-color : @text-color; +@input-border-color : @border-color-base; +@input-bg : #fff; +@input-addon-bg : @background-color-light; +@input-hover-border-color : @primary-color; +@input-disabled-bg : @disabled-bg; +@input-outline-offset : 0 0; + +// Tooltip +// --- +//* Tooltip max width +@tooltip-max-width: 250px; +//** Tooltip text color +@tooltip-color: #fff; +//** Tooltip background color +@tooltip-bg: rgba(0, 0, 0, .75); +//** Tooltip arrow width +@tooltip-arrow-width: 5px; +//** Tooltip distance with trigger +@tooltip-distance: @tooltip-arrow-width - 1px + 4px; +//** Tooltip arrow color +@tooltip-arrow-color: @tooltip-bg; + +// Popover +// --- +//** Popover body background color +@popover-bg: #fff; +//** Popover text color +@popover-color: @text-color; +//** Popover maximum width +@popover-min-width: 177px; +//** Popover arrow width +@popover-arrow-width: 6px; +//** Popover arrow color +@popover-arrow-color: @popover-bg; +//** Popover outer arrow width +//** Popover outer arrow color +@popover-arrow-outer-color: @popover-bg; +//** Popover distance with trigger +@popover-distance: @popover-arrow-width + 4px; + +// Modal +// -- +@modal-mask-bg: rgba(0, 0, 0, 0.65); + +// Progress +// -- +@progress-default-color: @processing-color; +@progress-remaining-color: @background-color-base; +@progress-text-color: @text-color; + +// Menu +// --- +@menu-inline-toplevel-item-height: 40px; +@menu-item-height: 40px; +@menu-collapsed-width: 80px; +@menu-bg: @component-background; +@menu-item-color: @text-color; +@menu-highlight-color: @primary-color; +@menu-item-active-bg: @item-active-bg; +@menu-item-active-border-width: 3px; +@menu-item-group-title-color: @text-color-secondary; +// dark theme +@menu-dark-color: @text-color-secondary-dark; +@menu-dark-bg: @layout-header-background; +@menu-dark-arrow-color: #fff; +@menu-dark-submenu-bg: #000c17; +@menu-dark-highlight-color: #fff; +@menu-dark-item-active-bg: @primary-color; + +// Spin +// --- +@spin-dot-size-sm: 14px; +@spin-dot-size: 20px; +@spin-dot-size-lg: 32px; + +// Table +// -- +@table-header-bg: @background-color-light; +@table-header-color: @heading-color; +@table-header-sort-bg: @background-color-base; +@table-body-sort-bg: rgba(0, 0, 0, .01); +@table-row-hover-bg: @primary-1; +@table-selected-row-bg: #fafafa; +@table-expanded-row-bg: #fbfbfb; +@table-padding-vertical: 16px; +@table-padding-horizontal: 16px; + +// Tag +// -- +@tag-default-bg: @background-color-light; +@tag-default-color: @text-color; +@tag-font-size: @font-size-sm; + +// TimePicker +// --- +@time-picker-panel-column-width: 56px; +@time-picker-panel-width: @time-picker-panel-column-width * 3; +@time-picker-selected-bg: @background-color-base; + +// Carousel +// --- +@carousel-dot-width: 16px; +@carousel-dot-height: 3px; +@carousel-dot-active-width: 24px; + +// Badge +// --- +@badge-height: 20px; +@badge-dot-size: 6px; +@badge-font-size: @font-size-sm; +@badge-font-weight: normal; +@badge-status-size: 6px; + +// Rate +// --- +@rate-star-color: @yellow-6; +@rate-star-bg: @border-color-split; + +// Card +// --- +@card-head-color: @heading-color; +@card-head-background: transparent; +@card-head-padding: 16px; +@card-inner-head-padding: 12px; +@card-padding-base: 24px; +@card-padding-wider: 32px; +@card-actions-background: @background-color-light; +@card-shadow: 0 2px 8px rgba(0, 0, 0, .09); + +// Tabs +// --- +@tabs-card-head-background: @background-color-light; +@tabs-card-height: 40px; +@tabs-card-active-color: @primary-color; +@tabs-title-font-size: @font-size-base; +@tabs-title-font-size-lg: @font-size-lg; +@tabs-title-font-size-sm: @font-size-base; +@tabs-ink-bar-color: @primary-color; +@tabs-bar-margin: 0 0 16px 0; +@tabs-horizontal-margin: 0 32px 0 0; +@tabs-horizontal-padding: 12px 16px; +@tabs-vertical-padding: 8px 24px; +@tabs-vertical-margin: 0 0 16px 0; +@tabs-scrolling-size: 32px; +@tabs-highlight-color: @primary-color; +@tabs-hover-color: @primary-5; +@tabs-active-color: @primary-7; + +// BackTop +// --- +@back-top-color: #fff; +@back-top-bg: @text-color-secondary; +@back-top-hover-bg: @text-color; + +// Avatar +// --- +@avatar-size-base: 32px; +@avatar-size-lg: 40px; +@avatar-size-sm: 24px; +@avatar-font-size-base: 18px; +@avatar-font-size-lg: 24px; +@avatar-font-size-sm: 14px; +@avatar-bg: #ccc; +@avatar-color: #fff; +@avatar-border-radius: @border-radius-base; + +// Switch +// --- +@switch-height: 22px; +@switch-sm-height: 16px; +@switch-sm-checked-margin-left: -(@switch-sm-height - 3px); +@switch-disabled-opacity: 0.4; +@switch-color: @primary-color; + +// Pagination +// --- +@pagination-item-size: 32px; +@pagination-item-size-sm: 24px; +@pagination-font-family: Arial; +@pagination-font-weight-active: 500; + +// Breadcrumb +// --- +@breadcrumb-base-color: @text-color-secondary; +@breadcrumb-last-item-color: @text-color; +@breadcrumb-font-size: @font-size-base; +@breadcrumb-icon-font-size: @font-size-base; +@breadcrumb-link-color: @text-color-secondary; +@breadcrumb-link-color-hover: @primary-5; +@breadcrumb-separator-color: @text-color-secondary; +@breadcrumb-separator-margin: 0 @padding-xs; + +// Slider +// --- +@slider-margin: 14px 6px 10px; +@slider-rail-background-color: @background-color-base; +@slider-rail-background-color-hover: #e1e1e1; +@slider-track-background-color: @primary-3; +@slider-track-background-color-hover: @primary-4; +@slider-handle-color: @primary-3; +@slider-handle-color-hover: @primary-4; +@slider-handle-color-focus: tint(@primary-color, 20%); +@slider-handle-color-focus-shadow: tint(@primary-color, 50%); +@slider-handle-color-tooltip-open: @primary-color; +@slider-dot-border-color: @border-color-split; +@slider-dot-border-color-active: tint(@primary-color, 50%); +@slider-disabled-color: @disabled-color; +@slider-disabled-background-color: @component-background; + +// Tree +// --- +@tree-title-height: 24px; +@tree-child-padding: 18px; +@tree-directory-selected-color: #fff; +@tree-directory-selected-bg: @primary-color; + +// Collapse +// --- +@collapse-header-padding: 12px 0 12px 40px; +@collapse-header-bg: @background-color-light; +@collapse-content-padding: @padding-md; +@collapse-content-bg: @component-background; + +// Skeleton +// --- +@skeleton-color: #f2f2f2; + +// Transfer +// --- +@transfer-disabled-bg: @disabled-bg; + +// Message +// --- +@message-notice-content-padding: 10px 16px; + +// Motion +// --- +@wave-animation-width: 6px; + +// Alert +// --- +@alert-success-border-color: ~`colorPalette("@{success-color}", 3)`; +@alert-success-bg-color: ~`colorPalette("@{success-color}", 1)`; +@alert-success-icon-color: @success-color; +@alert-info-border-color: ~`colorPalette("@{info-color}", 3)`; +@alert-info-bg-color: ~`colorPalette("@{info-color}", 1)`; +@alert-info-icon-color: @info-color; +@alert-warning-border-color: ~`colorPalette("@{warning-color}", 3)`; +@alert-warning-bg-color: ~`colorPalette("@{warning-color}", 1)`; +@alert-warning-icon-color: @warning-color; +@alert-error-border-color: ~`colorPalette("@{error-color}", 3)`; +@alert-error-bg-color: ~`colorPalette("@{error-color}", 1)`; +@alert-error-icon-color: @error-color; + +// List +// --- +@list-empty-text-padding: @padding-md; +@list-item-padding: @padding-sm 0; +@list-item-content-margin: 0 0 @padding-md 0; +@list-item-meta-margin-bottom: @padding-md; +@list-item-meta-avatar-margin-right: @padding-md; +@list-item-meta-title-margin-bottom: @padding-sm; + +// Menu +@menu-dark-item-selected-bg: @menu-dark-item-active-bg; + +// Tabs +@tab-bar-margin: @tabs-bar-margin; +@tab-horizontal-margin: @tabs-horizontal-margin; +@tab-vertical-margin: @tabs-vertical-margin; +@tab-horizontal-padding: @tabs-horizontal-padding; +@tab-vertical-padding: @tabs-vertical-padding; +@tab-scrolling-size: @tabs-scrolling-size; +@tab-highlight-color: @tabs-highlight-color; +@tab-hover-color: @tabs-hover-color; +@tab-active-color: @tabs-active-color; +@tabs-ink-bar-bg-color: @tabs-ink-bar-color; + +.listContent .extra { + color: rgba(0, 0, 0, 0.45); +} +.listContent .extra > em { + color: rgba(0, 0, 0, 0.25); +} +.avatarItem :global .ant-avatar { + border: 1px solid #fff; +} +.chartCard .avatar img { + border-radius: 100%; +} +.chartCard .meta { + color: rgba(0, 0, 0, 0.45); +} +.chartCard .total { + color: rgba(0, 0, 0, 0.85); +} +.chartCard .footer { + border-top: 1px solid #e8e8e8; +} +.field span:last-child { + color: rgba(0, 0, 0, 0.85); +} +.miniProgress .progressWrap { + background-color: #f5f5f5; +} +.miniProgress .progress { + border-radius: 1px 0 0 1px; + background-color: @primary-color; +} +.miniProgress .target span { + border-radius: 100px; +} +.pie .dot { + border-radius: 8px; +} +.pie .line { + background-color: #e8e8e8; +} +.pie .legendTitle { + color: rgba(0, 0, 0, 0.65); +} +.pie .percent { + color: rgba(0, 0, 0, 0.45); +} +.pie .total > h4 { + color: rgba(0, 0, 0, 0.45); +} +.pie .total > p { + color: rgba(0, 0, 0, 0.85); +} +.radar .legend .legendItem { + color: rgba(0, 0, 0, 0.45); +} +.radar .legend .legendItem h6 { + color: rgba(0, 0, 0, 0.85); +} +.radar .legend .legendItem:after { + background-color: #e8e8e8; +} +.radar .legend .dot { + border-radius: 6px; +} + +.timelineChart { + background: #fff; +} +.waterWave .text span { + color: rgba(0, 0, 0, 0.45); +} +.waterWave .text h4 { + color: rgba(0, 0, 0, 0.85); +} +.descriptionList .title { + color: rgba(0, 0, 0, 0.85); +} +.descriptionList .term { + color: rgba(0, 0, 0, 0.85); +} +.descriptionList .detail { + color: rgba(0, 0, 0, 0.65); +} +.descriptionList.small .title { + color: rgba(0, 0, 0, 0.65); +} +.linkGroup > a { + color: rgba(0, 0, 0, 0.65); +} +.linkGroup > a:hover { + color: @primary-color; +} +.lines .shadow { + color: transparent; +} +.exception .imgEle { + background-repeat: no-repeat; + background-position: 50% 50%; + background-size: contain; +} +.exception .content h1 { + color: #434e59; +} +.exception .content .desc { + color: rgba(0, 0, 0, 0.45); +} +.toolbar { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.03); + background: #fff; + border-top: 1px solid #e8e8e8; +} +.globalFooter .links a { + color: rgba(0, 0, 0, 0.45); +} +.globalFooter .links a:hover { + color: rgba(0, 0, 0, 0.65); +} +.globalFooter .copyright { + color: rgba(0, 0, 0, 0.45); +} +.layout .header { + background-color: @primary-color !important; +} +i.trigger:hover { + background: rgba(0, 0, 0, 0.025); +} +.right .action > i { + color: rgba(0, 0, 0, 0.65); +} +.right .action:hover { + background: rgba(0, 0, 0, 0.025); +} +:global(.right .action.ant-popover-open) { + background: rgba(0, 0, 0, 0.025); +} +.right .search:hover { + background: transparent; +} +.right .account .avatar { + color: @primary-color; + background: rgba(255, 255, 255, 0.85); +} +.dark .action { + color: rgba(255, 255, 255, 0.85); +} +.dark .action > i { + color: rgba(255, 255, 255, 0.85); +} +.dark .action:hover, +.dark .action:global(.ant-popover-open) { + background: @primary-color; +} +.dark .action :global(.ant-badge) { + color: rgba(255, 255, 255, 0.85); +} +.headerSearch .input { + background: transparent; + border-radius: 0; +} +.headerSearch .input :global(.ant-select-selection) { + background: transparent; +} +.headerSearch .input input { + border: 0; + box-shadow: none !important; +} +.headerSearch .input, +.headerSearch .input:hover, +.headerSearch .input:focus { + border-bottom: 1px solid #d9d9d9; +} +.login :global .ant-tabs .ant-tabs-bar { + border-bottom: 0; +} +.login .icon { + color: rgba(0, 0, 0, 0.2); +} +.login .icon:hover { + color: @primary-color; +} +.login .prefixIcon { + color: rgba(0, 0, 0, 0.25); +} +.list .item .avatar { + background: #fff; +} +.list .item:last-child { + border-bottom: 0; +} +.list .item:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.list .item .extra { + color: rgba(0, 0, 0, 0.45); +} +.notFound { + color: rgba(0, 0, 0, 0.45); +} +.clear { + color: rgba(0, 0, 0, 0.65); + border-radius: 0 0 4px 4px; + border-top: 1px solid #e8e8e8; +} +.clear:hover { + color: rgba(0, 0, 0, 0.85); +} +.numberInfo .suffix { + color: rgba(0, 0, 0, 0.65); +} +.numberInfo .numberInfoTitle { + color: rgba(0, 0, 0, 0.65); +} +.numberInfo .numberInfoSubTitle { + color: rgba(0, 0, 0, 0.45); +} +.numberInfo .numberInfoValue > span { + color: rgba(0, 0, 0, 0.85); +} +.numberInfo .numberInfoValue .subTotal { + color: rgba(0, 0, 0, 0.45); +} +.numberInfo .numberInfoValue .subTotal :global .anticon-caret-up { + color: #f5222d; +} +.numberInfo .numberInfoValue .subTotal :global .anticon-caret-down { + color: #52c41a; +} +.numberInfolight .numberInfoValue > span { + color: rgba(0, 0, 0, 0.65); +} +.pageHeader { + background: #fff; + border-bottom: 1px solid #e8e8e8; +} +.pageHeader .tabs :global .ant-tabs-bar { + border-bottom: 1px solid #e8e8e8; +} +.pageHeader .logo > img { + border-radius: 4px; +} +.pageHeader .title { + color: rgba(0, 0, 0, 0.85); +} +.result .icon > .success { + color: #52c41a; +} +.result .icon > .error { + color: #f5222d; +} +.result .title { + color: rgba(0, 0, 0, 0.85); +} +.result .description { + color: rgba(0, 0, 0, 0.45); +} +.result .extra { + background: #fafafa; + border-radius: 2px; +} +.blockChecbox .item { + border-radius: 4px; +} +.blockChecbox .selectIcon { + color: @primary-color; +} +.color_block { + border-radius: 4px; +} +.title { + color: rgba(0, 0, 0, 0.85); +} +.handle { + background: @primary-color; + border-radius: 4px 0 0 4px; +} +.setting-drawer-index-handle { + /* 暂时不知道放哪解决 */ + background: @primary-color !important; +} +.themeColor .title { + color: rgba(0, 0, 0, 0.65); +} +.themeColor .colorBlock { + border-radius: 2px; + color: #fff; +} +.logo h1 { + color: white; +} +.sider { + box-shadow: 2px 116px 6px rgba(0, 21, 41, 0.35); +} +.sider.light { + box-shadow: 2px 116px 8px 0 rgba(29, 35, 41, 0.05); + background-color: white; +} +.sider.light .logo { + background-color: @primary-color !important; + box-shadow: 1px 1px 0 0 #e8e8e8; +} +.sider.light .logo h1 { + color: white; +} +.sider.light :global(.ant-menu-light) { + border-right-color: transparent; +} +:global .drawer .drawer-content { + background: #001529; +} +.standardFormRow { + border-bottom: 1px dashed #e8e8e8; +} +.standardFormRow :global .ant-form-item-label label { + color: rgba(0, 0, 0, 0.65); +} +.standardFormRow .label { + color: rgba(0, 0, 0, 0.85); +} +.standardFormRowLast { + border: none; +} + +.head { + box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08); +} +.head.light { + background-color: #fff; +} +.logo h1 { + color: #fff; +} +.light h1 { + color: #002140; +} +.trendItem .up { + color: #f5222d; +} +.trendItem .down { + color: #52c41a; +} +.trendItem.trendItemGrey .up, +.trendItem.trendItemGrey .down { + color: rgba(0, 0, 0, 0.65); +} +.trendItem.reverseColor .up { + color: #52c41a; +} +.trendItem.reverseColor .down { + color: #f5222d; +} +.container { + background: #f0f2f5; +} +.title { + color: rgba(0, 0, 0, 0.85); +} +.desc { + color: rgba(0, 0, 0, 0.45); +} +a.listItemMetaTitle { + color: rgba(0, 0, 0, 0.85); +} +.baseView .right .avatar_title { + color: rgba(0, 0, 0, 0.85); +} +.main { + background-color: #fff; +} +.main .leftmenu { + border-right: 1px solid #e8e8e8; +} +.main .leftmenu :global .ant-menu-inline { + border: none; +} +.main .right .title { + color: rgba(0, 0, 0, 0.85); +} +.main :global .ant-list-split .ant-list-item:last-child { + border-bottom: 1px solid #e8e8e8; +} +:global .ant-list-item-meta .taobao { + color: #ff4000; + border-radius: 4px; +} +:global .ant-list-item-meta .dingding { + background-color: #2eabff; + color: #fff; + border-radius: 4px; +} +:global .ant-list-item-meta .alipay { + color: #2eabff; + border-radius: 4px; +} +:global font.strong { + color: #52c41a; +} +:global font.medium { + color: #faad14; +} +:global font.weak { + color: #f5222d; +} + + + + +.trigger { + background: 'red'; +} +.desc { + color: rgba(0, 0, 0, 0.45); +} +.desc h3 { + color: rgba(0, 0, 0, 0.45); +} +.desc h4 { + color: rgba(0, 0, 0, 0.45); +} +.information .label { + color: rgba(0, 0, 0, 0.85); +} +.errorIcon { + color: #f5222d; +} +.errorListItem { + border-bottom: 1px solid #e8e8e8; +} +.errorListItem:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.errorListItem:last-child { + border: 0; +} +.errorListItem .errorIcon { + color: #f5222d; +} +.errorListItem .errorField { + color: rgba(0, 0, 0, 0.45); +} +.optional { + color: rgba(0, 0, 0, 0.45); +} +a.listItemMetaTitle { + color: rgba(0, 0, 0, 0.85); +} +.noData { + color: rgba(0, 0, 0, 0.25); +} +.heading { + color: rgba(0, 0, 0, 0.85); +} +.textSecondary { + color: rgba(0, 0, 0, 0.45); +} +.title { + color: rgba(0, 0, 0, 0.85); +} +.main .icon { + color: rgba(0, 0, 0, 0.2); +} +.main .icon:hover { + color: @primary-color; +} +.success { + color: #52c41a; +} +.warning { + color: #faad14; +} +.error { + color: #f5222d; +} +.progress-pass > .progress :global .ant-progress-bg { + background-color: #faad14; +} +html { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; +} +h1, +h2, +h3, +h4, +h5, +h6 { + color: rgba(0, 0, 0, 0.85); +} +abbr[title], +abbr[data-original-title] { + border-bottom: 0; +} +a { + color: @primary-color; + background-color: transparent; +} +a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +a:active { + color: color(~`colorPalette("@{primary-color}", 7)`); +} +a[disabled] { + color: rgba(0, 0, 0, 0.25); +} +img { + border-style: none; +} +table { + border-collapse: collapse; +} +caption { + color: rgba(0, 0, 0, 0.45); +} +input, +button, +select, +optgroup, +textarea { + color: inherit; +} +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; +} +fieldset { + border: 0; +} +legend { + color: inherit; +} +mark { + background-color: #feffe6; +} +::selection { + background: @primary-color; + color: #fff; +} +[ant-click-animating-without-extra-node]:after, +.ant-click-animating-node { + border-radius: inherit; + border: 0 solid @primary-color; +} +.ant-alert { + color: rgba(0, 0, 0, 0.65); + border-radius: 4px; +} +.ant-alert-success { + border: 1px solid #b7eb8f; + background-color: #f6ffed; +} +.ant-alert-success .ant-alert-icon { + color: #52c41a; +} +.ant-alert-info { + border: 1px solid color(~`colorPalette("@{primary-color}", 3)`); + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-alert-info .ant-alert-icon { + color: @primary-color; +} +.ant-alert-warning { + border: 1px solid #ffe58f; + background-color: #fffbe6; +} +.ant-alert-warning .ant-alert-icon { + color: #faad14; +} +.ant-alert-error { + border: 1px solid #ffa39e; + background-color: #fff1f0; +} +.ant-alert-error .ant-alert-icon { + color: #f5222d; +} +.ant-alert-close-icon .anticon-close { + color: rgba(0, 0, 0, 0.45); +} +.ant-alert-close-icon .anticon-close:hover { + color: #404040; +} +.ant-alert-with-description { + border-radius: 4px; + color: rgba(0, 0, 0, 0.65); +} +.ant-alert-with-description .ant-alert-message { + color: rgba(0, 0, 0, 0.85); +} +.ant-alert-banner { + border-radius: 0; + border: 0; +} +.ant-anchor { + color: rgba(0, 0, 0, 0.65); +} +.ant-anchor-wrapper { + background-color: #fff; +} +.ant-anchor-ink:before { + background-color: #e8e8e8; +} +.ant-anchor-ink-ball { + border-radius: 8px; + border: 2px solid @primary-color; + background-color: #fff; +} +.ant-anchor-link-title { + color: rgba(0, 0, 0, 0.65); +} +.ant-anchor-link-active > .ant-anchor-link-title { + color: @primary-color; +} +.ant-select-auto-complete { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-auto-complete.ant-select .ant-select-selection { + border: 0; + box-shadow: none; +} +.ant-select-auto-complete.ant-select .ant-input { + background: transparent; + border-width: 1px; +} +.ant-select-auto-complete.ant-select .ant-input:focus, +.ant-select-auto-complete.ant-select .ant-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-avatar { + color: rgba(0, 0, 0, 0.65); + background: #ccc; + color: #fff; + border-radius: 50%; +} +.ant-avatar-image { + background: transparent; +} +.ant-avatar-lg { + border-radius: 50%; +} +.ant-avatar-sm { + border-radius: 50%; +} +.ant-avatar-square { + border-radius: 4px; +} +.ant-back-top { + color: rgba(0, 0, 0, 0.65); +} +.ant-back-top-content { + border-radius: 20px; + background-color: rgba(0, 0, 0, 0.45); + color: #fff; +} +.ant-back-top-content:hover { + background-color: rgba(0, 0, 0, 0.65); +} +.ant-back-top-icon { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAoCAYAAACWwljjAAAABGdBTUEAALGPC/xhBQAAAbtJREFUWAntmMtKw0AUhhMvS5cuxILgQlRUpIggIoKIIoigG1eC+AA+jo+i6FIXBfeuXIgoeKVeitVWJX5HWhhDksnUpp3FDPyZk3Nm5nycmZKkXhAEOXSA3lG7muTeRzmfy6HneUvIhnYkQK+Q9NhAA0Opg0vBEhjBKHiyb8iGMyQMOYuK41BcBSypAL+MYXSKjtFAW7EAGEO3qN4uMQbbAkXiSfRQJ1H6a+yhlkKRcAoVFYiweYNjtCVQJJpBz2GCiPt7fBOZQpFgDpUikse5HgnkM4Fi4QX0Fpc5wf9EbLqpUCy4jMoJSXWhFwbMNgWKhVbRhy5jirhs9fy/oFhgHVVTJEs7RLZ8sSEoJm6iz7SZDMbJ+/OKERQTttCXQRLToRUmrKWCYuA2+jbN0MB4OQobYShfdTCgn/sL1K36M7TLrN3n+758aPy2rrpR6+/od5E8tf/A1uLS9aId5T7J3CNYihkQ4D9PiMdMC7mp4rjB9kjFjZp8BlnVHJBuO1yFXIV0FdDF3RlyFdJVQBdv5AxVdIsq8apiZ2PyYO1EVykesGfZEESsCkweyR8MUW+V8uJ1gkYipmpdP1pm2aJVPEGzAAAAAElFTkSuQmCC) 100%/100% no-repeat; +} +.ant-badge { + color: rgba(0, 0, 0, 0.65); + color: unset; +} +.ant-badge-count { + border-radius: 10px; + background: #f5222d; + color: #fff; + box-shadow: 0 0 0 1px #fff; +} +.ant-badge-count a, +.ant-badge-count a:hover { + color: #fff; +} +.ant-badge-dot { + border-radius: 100%; + background: #f5222d; + box-shadow: 0 0 0 1px #fff; +} +.ant-badge-status-dot { + border-radius: 50%; +} +.ant-badge-status-success { + background-color: #52c41a; +} +.ant-badge-status-processing { + background-color: @primary-color; +} +.ant-badge-status-processing:after { + border-radius: 50%; + border: 1px solid @primary-color; +} +.ant-badge-status-default { + background-color: #d9d9d9; +} +.ant-badge-status-error { + background-color: #f5222d; +} +.ant-badge-status-warning { + background-color: #faad14; +} +.ant-badge-status-text { + color: rgba(0, 0, 0, 0.65); +} +.ant-breadcrumb { + color: rgba(0, 0, 0, 0.65); + color: rgba(0, 0, 0, 0.45); +} +.ant-breadcrumb a { + color: rgba(0, 0, 0, 0.45); +} +.ant-breadcrumb a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-breadcrumb > span:last-child { + color: rgba(0, 0, 0, 0.65); +} +.ant-breadcrumb-separator { + color: rgba(0, 0, 0, 0.45); +} +.ant-btn { + background-image: none; + border: 1px solid transparent; + border-radius: 4px; + box-shadow: 0 2px 0 rgba(0, 0, 0, 0.015); + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + border-color: #d9d9d9; +} +.ant-btn:not([disabled]):active { + box-shadow: none; +} +.ant-btn-lg { + border-radius: 4px; +} +.ant-btn-sm { + border-radius: 4px; +} +.ant-btn > a:only-child { + color: currentColor; +} +.ant-btn > a:only-child:after { + background: transparent; +} +.ant-btn:hover, +.ant-btn:focus { + color: color(~`colorPalette("@{primary-color}", 5)`); + background-color: #fff; + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn:hover > a:only-child, +.ant-btn:focus > a:only-child { + color: currentColor; +} +.ant-btn:hover > a:only-child:after, +.ant-btn:focus > a:only-child:after { + background: transparent; +} +.ant-btn:active, +.ant-btn.active { + color: color(~`colorPalette("@{primary-color}", 7)`); + background-color: #fff; + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-btn:active > a:only-child, +.ant-btn.active > a:only-child { + color: currentColor; +} +.ant-btn:active > a:only-child:after, +.ant-btn.active > a:only-child:after { + background: transparent; +} +.ant-btn.disabled, +.ant-btn[disabled], +.ant-btn.disabled:hover, +.ant-btn[disabled]:hover, +.ant-btn.disabled:focus, +.ant-btn[disabled]:focus, +.ant-btn.disabled:active, +.ant-btn[disabled]:active, +.ant-btn.disabled.active, +.ant-btn[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn.disabled > a:only-child, +.ant-btn[disabled] > a:only-child, +.ant-btn.disabled:hover > a:only-child, +.ant-btn[disabled]:hover > a:only-child, +.ant-btn.disabled:focus > a:only-child, +.ant-btn[disabled]:focus > a:only-child, +.ant-btn.disabled:active > a:only-child, +.ant-btn[disabled]:active > a:only-child, +.ant-btn.disabled.active > a:only-child, +.ant-btn[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn.disabled > a:only-child:after, +.ant-btn[disabled] > a:only-child:after, +.ant-btn.disabled:hover > a:only-child:after, +.ant-btn[disabled]:hover > a:only-child:after, +.ant-btn.disabled:focus > a:only-child:after, +.ant-btn[disabled]:focus > a:only-child:after, +.ant-btn.disabled:active > a:only-child:after, +.ant-btn[disabled]:active > a:only-child:after, +.ant-btn.disabled.active > a:only-child:after, +.ant-btn[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn:hover, +.ant-btn:focus, +.ant-btn:active, +.ant-btn.active { + background: #fff; +} +.ant-btn-primary { + color: #fff; + background-color: @primary-color; + border-color: @primary-color; + box-shadow: 0 2px 0 rgba(0, 0, 0, 0.035); +} +.ant-btn-primary > a:only-child { + color: currentColor; +} +.ant-btn-primary > a:only-child:after { + background: transparent; +} +.ant-btn-primary:hover, +.ant-btn-primary:focus { + color: #fff; + background-color: color(~`colorPalette("@{primary-color}", 5)`); + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-primary:hover > a:only-child, +.ant-btn-primary:focus > a:only-child { + color: currentColor; +} +.ant-btn-primary:hover > a:only-child:after, +.ant-btn-primary:focus > a:only-child:after { + background: transparent; +} +.ant-btn-primary:active, +.ant-btn-primary.active { + color: #fff; + background-color: color(~`colorPalette("@{primary-color}", 7)`); + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-btn-primary:active > a:only-child, +.ant-btn-primary.active > a:only-child { + color: currentColor; +} +.ant-btn-primary:active > a:only-child:after, +.ant-btn-primary.active > a:only-child:after { + background: transparent; +} +.ant-btn-primary.disabled, +.ant-btn-primary[disabled], +.ant-btn-primary.disabled:hover, +.ant-btn-primary[disabled]:hover, +.ant-btn-primary.disabled:focus, +.ant-btn-primary[disabled]:focus, +.ant-btn-primary.disabled:active, +.ant-btn-primary[disabled]:active, +.ant-btn-primary.disabled.active, +.ant-btn-primary[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-primary.disabled > a:only-child, +.ant-btn-primary[disabled] > a:only-child, +.ant-btn-primary.disabled:hover > a:only-child, +.ant-btn-primary[disabled]:hover > a:only-child, +.ant-btn-primary.disabled:focus > a:only-child, +.ant-btn-primary[disabled]:focus > a:only-child, +.ant-btn-primary.disabled:active > a:only-child, +.ant-btn-primary[disabled]:active > a:only-child, +.ant-btn-primary.disabled.active > a:only-child, +.ant-btn-primary[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-primary.disabled > a:only-child:after, +.ant-btn-primary[disabled] > a:only-child:after, +.ant-btn-primary.disabled:hover > a:only-child:after, +.ant-btn-primary[disabled]:hover > a:only-child:after, +.ant-btn-primary.disabled:focus > a:only-child:after, +.ant-btn-primary[disabled]:focus > a:only-child:after, +.ant-btn-primary.disabled:active > a:only-child:after, +.ant-btn-primary[disabled]:active > a:only-child:after, +.ant-btn-primary.disabled.active > a:only-child:after, +.ant-btn-primary[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child) { + border-right-color: color(~`colorPalette("@{primary-color}", 5)`); + border-left-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child):disabled { + border-color: #d9d9d9; +} +.ant-btn-group .ant-btn-primary:first-child:not(:last-child) { + border-right-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-group .ant-btn-primary:first-child:not(:last-child)[disabled] { + border-right-color: #d9d9d9; +} +.ant-btn-group .ant-btn-primary:last-child:not(:first-child), +.ant-btn-group .ant-btn-primary + .ant-btn-primary { + border-left-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled], +.ant-btn-group .ant-btn-primary + .ant-btn-primary[disabled] { + border-left-color: #d9d9d9; +} +.ant-btn-ghost { + color: rgba(0, 0, 0, 0.65); + background-color: transparent; + border-color: #d9d9d9; +} +.ant-btn-ghost > a:only-child { + color: currentColor; +} +.ant-btn-ghost > a:only-child:after { + background: transparent; +} +.ant-btn-ghost:hover, +.ant-btn-ghost:focus { + color: color(~`colorPalette("@{primary-color}", 5)`); + background-color: transparent; + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-ghost:hover > a:only-child, +.ant-btn-ghost:focus > a:only-child { + color: currentColor; +} +.ant-btn-ghost:hover > a:only-child:after, +.ant-btn-ghost:focus > a:only-child:after { + background: transparent; +} +.ant-btn-ghost:active, +.ant-btn-ghost.active { + color: color(~`colorPalette("@{primary-color}", 7)`); + background-color: transparent; + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-btn-ghost:active > a:only-child, +.ant-btn-ghost.active > a:only-child { + color: currentColor; +} +.ant-btn-ghost:active > a:only-child:after, +.ant-btn-ghost.active > a:only-child:after { + background: transparent; +} +.ant-btn-ghost.disabled, +.ant-btn-ghost[disabled], +.ant-btn-ghost.disabled:hover, +.ant-btn-ghost[disabled]:hover, +.ant-btn-ghost.disabled:focus, +.ant-btn-ghost[disabled]:focus, +.ant-btn-ghost.disabled:active, +.ant-btn-ghost[disabled]:active, +.ant-btn-ghost.disabled.active, +.ant-btn-ghost[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-ghost.disabled > a:only-child, +.ant-btn-ghost[disabled] > a:only-child, +.ant-btn-ghost.disabled:hover > a:only-child, +.ant-btn-ghost[disabled]:hover > a:only-child, +.ant-btn-ghost.disabled:focus > a:only-child, +.ant-btn-ghost[disabled]:focus > a:only-child, +.ant-btn-ghost.disabled:active > a:only-child, +.ant-btn-ghost[disabled]:active > a:only-child, +.ant-btn-ghost.disabled.active > a:only-child, +.ant-btn-ghost[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-ghost.disabled > a:only-child:after, +.ant-btn-ghost[disabled] > a:only-child:after, +.ant-btn-ghost.disabled:hover > a:only-child:after, +.ant-btn-ghost[disabled]:hover > a:only-child:after, +.ant-btn-ghost.disabled:focus > a:only-child:after, +.ant-btn-ghost[disabled]:focus > a:only-child:after, +.ant-btn-ghost.disabled:active > a:only-child:after, +.ant-btn-ghost[disabled]:active > a:only-child:after, +.ant-btn-ghost.disabled.active > a:only-child:after, +.ant-btn-ghost[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn-dashed { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + border-color: #d9d9d9; + border-style: dashed; +} +.ant-btn-dashed > a:only-child { + color: currentColor; +} +.ant-btn-dashed > a:only-child:after { + background: transparent; +} +.ant-btn-dashed:hover, +.ant-btn-dashed:focus { + color: color(~`colorPalette("@{primary-color}", 5)`); + background-color: #fff; + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-dashed:hover > a:only-child, +.ant-btn-dashed:focus > a:only-child { + color: currentColor; +} +.ant-btn-dashed:hover > a:only-child:after, +.ant-btn-dashed:focus > a:only-child:after { + background: transparent; +} +.ant-btn-dashed:active, +.ant-btn-dashed.active { + color: color(~`colorPalette("@{primary-color}", 7)`); + background-color: #fff; + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-btn-dashed:active > a:only-child, +.ant-btn-dashed.active > a:only-child { + color: currentColor; +} +.ant-btn-dashed:active > a:only-child:after, +.ant-btn-dashed.active > a:only-child:after { + background: transparent; +} +.ant-btn-dashed.disabled, +.ant-btn-dashed[disabled], +.ant-btn-dashed.disabled:hover, +.ant-btn-dashed[disabled]:hover, +.ant-btn-dashed.disabled:focus, +.ant-btn-dashed[disabled]:focus, +.ant-btn-dashed.disabled:active, +.ant-btn-dashed[disabled]:active, +.ant-btn-dashed.disabled.active, +.ant-btn-dashed[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-dashed.disabled > a:only-child, +.ant-btn-dashed[disabled] > a:only-child, +.ant-btn-dashed.disabled:hover > a:only-child, +.ant-btn-dashed[disabled]:hover > a:only-child, +.ant-btn-dashed.disabled:focus > a:only-child, +.ant-btn-dashed[disabled]:focus > a:only-child, +.ant-btn-dashed.disabled:active > a:only-child, +.ant-btn-dashed[disabled]:active > a:only-child, +.ant-btn-dashed.disabled.active > a:only-child, +.ant-btn-dashed[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-dashed.disabled > a:only-child:after, +.ant-btn-dashed[disabled] > a:only-child:after, +.ant-btn-dashed.disabled:hover > a:only-child:after, +.ant-btn-dashed[disabled]:hover > a:only-child:after, +.ant-btn-dashed.disabled:focus > a:only-child:after, +.ant-btn-dashed[disabled]:focus > a:only-child:after, +.ant-btn-dashed.disabled:active > a:only-child:after, +.ant-btn-dashed[disabled]:active > a:only-child:after, +.ant-btn-dashed.disabled.active > a:only-child:after, +.ant-btn-dashed[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn-danger { + color: #f5222d; + background-color: #f5f5f5; + border-color: #d9d9d9; +} +.ant-btn-danger > a:only-child { + color: currentColor; +} +.ant-btn-danger > a:only-child:after { + background: transparent; +} +.ant-btn-danger:hover { + color: #fff; + background-color: #ff4d4f; + border-color: #ff4d4f; +} +.ant-btn-danger:hover > a:only-child { + color: currentColor; +} +.ant-btn-danger:hover > a:only-child:after { + background: transparent; +} +.ant-btn-danger:focus { + color: #ff4d4f; + background-color: #fff; + border-color: #ff4d4f; +} +.ant-btn-danger:focus > a:only-child { + color: currentColor; +} +.ant-btn-danger:focus > a:only-child:after { + background: transparent; +} +.ant-btn-danger:active, +.ant-btn-danger.active { + color: #fff; + background-color: #cf1322; + border-color: #cf1322; +} +.ant-btn-danger:active > a:only-child, +.ant-btn-danger.active > a:only-child { + color: currentColor; +} +.ant-btn-danger:active > a:only-child:after, +.ant-btn-danger.active > a:only-child:after { + background: transparent; +} +.ant-btn-danger.disabled, +.ant-btn-danger[disabled], +.ant-btn-danger.disabled:hover, +.ant-btn-danger[disabled]:hover, +.ant-btn-danger.disabled:focus, +.ant-btn-danger[disabled]:focus, +.ant-btn-danger.disabled:active, +.ant-btn-danger[disabled]:active, +.ant-btn-danger.disabled.active, +.ant-btn-danger[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-danger.disabled > a:only-child, +.ant-btn-danger[disabled] > a:only-child, +.ant-btn-danger.disabled:hover > a:only-child, +.ant-btn-danger[disabled]:hover > a:only-child, +.ant-btn-danger.disabled:focus > a:only-child, +.ant-btn-danger[disabled]:focus > a:only-child, +.ant-btn-danger.disabled:active > a:only-child, +.ant-btn-danger[disabled]:active > a:only-child, +.ant-btn-danger.disabled.active > a:only-child, +.ant-btn-danger[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-danger.disabled > a:only-child:after, +.ant-btn-danger[disabled] > a:only-child:after, +.ant-btn-danger.disabled:hover > a:only-child:after, +.ant-btn-danger[disabled]:hover > a:only-child:after, +.ant-btn-danger.disabled:focus > a:only-child:after, +.ant-btn-danger[disabled]:focus > a:only-child:after, +.ant-btn-danger.disabled:active > a:only-child:after, +.ant-btn-danger[disabled]:active > a:only-child:after, +.ant-btn-danger.disabled.active > a:only-child:after, +.ant-btn-danger[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn-circle, +.ant-btn-circle-outline { + border-radius: 50%; +} +.ant-btn-circle.ant-btn-lg, +.ant-btn-circle-outline.ant-btn-lg { + border-radius: 50%; +} +.ant-btn-circle.ant-btn-sm, +.ant-btn-circle-outline.ant-btn-sm { + border-radius: 50%; +} +.ant-btn:before { + background: #fff; + border-radius: inherit; +} +.ant-btn-group-lg > .ant-btn, +.ant-btn-group-lg > span > .ant-btn { + border-radius: 0; +} +.ant-btn-group-sm > .ant-btn, +.ant-btn-group-sm > span > .ant-btn { + border-radius: 0; +} +.ant-btn-group .ant-btn-primary + .ant-btn:not(.ant-btn-primary):not([disabled]) { + border-left-color: transparent; +} +.ant-btn-group .ant-btn { + border-radius: 0; +} +.ant-btn-group > .ant-btn:only-child { + border-radius: 4px; +} +.ant-btn-group > span:only-child > .ant-btn { + border-radius: 4px; +} +.ant-btn-group > .ant-btn:first-child:not(:last-child), +.ant-btn-group > span:first-child:not(:last-child) > .ant-btn { + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} +.ant-btn-group > .ant-btn:last-child:not(:first-child), +.ant-btn-group > span:last-child:not(:first-child) > .ant-btn { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} +.ant-btn-group-sm > .ant-btn:only-child { + border-radius: 4px; +} +.ant-btn-group-sm > span:only-child > .ant-btn { + border-radius: 4px; +} +.ant-btn-group-sm > .ant-btn:first-child:not(:last-child), +.ant-btn-group-sm > span:first-child:not(:last-child) > .ant-btn { + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} +.ant-btn-group-sm > .ant-btn:last-child:not(:first-child), +.ant-btn-group-sm > span:last-child:not(:first-child) > .ant-btn { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} +.ant-btn-group > .ant-btn-group:not(:first-child):not(:last-child) > .ant-btn { + border-radius: 0; +} +.ant-btn-group > .ant-btn-group:first-child:not(:last-child) > .ant-btn:last-child { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.ant-btn-group > .ant-btn-group:last-child:not(:first-child) > .ant-btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.ant-btn-background-ghost { + background: transparent !important; + border-color: #fff; + color: #fff; +} +.ant-btn-background-ghost.ant-btn-primary { + color: @primary-color; + background-color: transparent; + border-color: @primary-color; +} +.ant-btn-background-ghost.ant-btn-primary > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-primary > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-primary:hover, +.ant-btn-background-ghost.ant-btn-primary:focus { + color: color(~`colorPalette("@{primary-color}", 5)`); + background-color: transparent; + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-background-ghost.ant-btn-primary:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-primary:focus > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-primary:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary:focus > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-primary:active, +.ant-btn-background-ghost.ant-btn-primary.active { + color: color(~`colorPalette("@{primary-color}", 7)`); + background-color: transparent; + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-btn-background-ghost.ant-btn-primary:active > a:only-child, +.ant-btn-background-ghost.ant-btn-primary.active > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-primary:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary.active > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-primary.disabled, +.ant-btn-background-ghost.ant-btn-primary[disabled], +.ant-btn-background-ghost.ant-btn-primary.disabled:hover, +.ant-btn-background-ghost.ant-btn-primary[disabled]:hover, +.ant-btn-background-ghost.ant-btn-primary.disabled:focus, +.ant-btn-background-ghost.ant-btn-primary[disabled]:focus, +.ant-btn-background-ghost.ant-btn-primary.disabled:active, +.ant-btn-background-ghost.ant-btn-primary[disabled]:active, +.ant-btn-background-ghost.ant-btn-primary.disabled.active, +.ant-btn-background-ghost.ant-btn-primary[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-background-ghost.ant-btn-primary.disabled > a:only-child, +.ant-btn-background-ghost.ant-btn-primary[disabled] > a:only-child, +.ant-btn-background-ghost.ant-btn-primary.disabled:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-primary[disabled]:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-primary.disabled:focus > a:only-child, +.ant-btn-background-ghost.ant-btn-primary[disabled]:focus > a:only-child, +.ant-btn-background-ghost.ant-btn-primary.disabled:active > a:only-child, +.ant-btn-background-ghost.ant-btn-primary[disabled]:active > a:only-child, +.ant-btn-background-ghost.ant-btn-primary.disabled.active > a:only-child, +.ant-btn-background-ghost.ant-btn-primary[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-primary.disabled > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary[disabled] > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary.disabled:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary[disabled]:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary.disabled:focus > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary[disabled]:focus > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary.disabled:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary[disabled]:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary.disabled.active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-danger { + color: #f5222d; + background-color: transparent; + border-color: #f5222d; +} +.ant-btn-background-ghost.ant-btn-danger > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-danger > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-danger:hover, +.ant-btn-background-ghost.ant-btn-danger:focus { + color: #ff4d4f; + background-color: transparent; + border-color: #ff4d4f; +} +.ant-btn-background-ghost.ant-btn-danger:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-danger:focus > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-danger:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger:focus > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-danger:active, +.ant-btn-background-ghost.ant-btn-danger.active { + color: #cf1322; + background-color: transparent; + border-color: #cf1322; +} +.ant-btn-background-ghost.ant-btn-danger:active > a:only-child, +.ant-btn-background-ghost.ant-btn-danger.active > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-danger:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger.active > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-danger.disabled, +.ant-btn-background-ghost.ant-btn-danger[disabled], +.ant-btn-background-ghost.ant-btn-danger.disabled:hover, +.ant-btn-background-ghost.ant-btn-danger[disabled]:hover, +.ant-btn-background-ghost.ant-btn-danger.disabled:focus, +.ant-btn-background-ghost.ant-btn-danger[disabled]:focus, +.ant-btn-background-ghost.ant-btn-danger.disabled:active, +.ant-btn-background-ghost.ant-btn-danger[disabled]:active, +.ant-btn-background-ghost.ant-btn-danger.disabled.active, +.ant-btn-background-ghost.ant-btn-danger[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-background-ghost.ant-btn-danger.disabled > a:only-child, +.ant-btn-background-ghost.ant-btn-danger[disabled] > a:only-child, +.ant-btn-background-ghost.ant-btn-danger.disabled:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-danger[disabled]:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-danger.disabled:focus > a:only-child, +.ant-btn-background-ghost.ant-btn-danger[disabled]:focus > a:only-child, +.ant-btn-background-ghost.ant-btn-danger.disabled:active > a:only-child, +.ant-btn-background-ghost.ant-btn-danger[disabled]:active > a:only-child, +.ant-btn-background-ghost.ant-btn-danger.disabled.active > a:only-child, +.ant-btn-background-ghost.ant-btn-danger[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-danger.disabled > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger[disabled] > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger.disabled:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger[disabled]:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger.disabled:focus > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger[disabled]:focus > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger.disabled:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger[disabled]:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger.disabled.active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger[disabled].active > a:only-child:after { + background: transparent; +} +.christmas.ant-btn-primary:before { + background: url(data:image/png;base64,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) no-repeat 50% 0; + background-size: 64px; +} +.christmas.ant-btn-primary.ant-btn-lg:before { + background-size: 72px; +} +.christmas.ant-btn-primary.ant-btn-sm:before { + background-size: 56px; +} +.ant-fullcalendar { + color: rgba(0, 0, 0, 0.65); + border-top: 1px solid #d9d9d9; +} +.ant-fullcalendar table { + border-collapse: collapse; + background-color: transparent; +} +.ant-fullcalendar table, +.ant-fullcalendar th, +.ant-fullcalendar td { + border: 0; +} +.ant-fullcalendar-calendar-table { + border-spacing: 0; +} +.ant-fullcalendar-value { + color: rgba(0, 0, 0, 0.65); + border-radius: 2px; + background: transparent; +} +.ant-fullcalendar-value:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-fullcalendar-value:active { + background: @primary-color; + color: #fff; +} +.ant-fullcalendar-today .ant-fullcalendar-value, +.ant-fullcalendar-month-panel-current-cell .ant-fullcalendar-value { + box-shadow: 0 0 0 1px @primary-color inset; +} +.ant-fullcalendar-selected-day .ant-fullcalendar-value, +.ant-fullcalendar-month-panel-selected-cell .ant-fullcalendar-value { + background: @primary-color; + color: #fff; +} +.ant-fullcalendar-disabled-cell-first-of-row .ant-fullcalendar-value { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.ant-fullcalendar-disabled-cell-last-of-row .ant-fullcalendar-value { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.ant-fullcalendar-last-month-cell .ant-fullcalendar-value, +.ant-fullcalendar-next-month-btn-day .ant-fullcalendar-value { + color: rgba(0, 0, 0, 0.25); +} +.ant-fullcalendar-month-panel-table { + border-collapse: separate; +} +.ant-fullcalendar-fullscreen { + border-top: 0; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month, +.ant-fullcalendar-fullscreen .ant-fullcalendar-date { + color: rgba(0, 0, 0, 0.65); + border-top: 2px solid #e8e8e8; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month:hover, +.ant-fullcalendar-fullscreen .ant-fullcalendar-date:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month:active, +.ant-fullcalendar-fullscreen .ant-fullcalendar-date:active { + background: color(~`colorPalette("@{primary-color}", 2)`); +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-value { + background: transparent; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-today .ant-fullcalendar-value { + color: rgba(0, 0, 0, 0.65); +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-current-cell .ant-fullcalendar-month, +.ant-fullcalendar-fullscreen .ant-fullcalendar-today .ant-fullcalendar-date { + border-top-color: @primary-color; + background: transparent; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-current-cell .ant-fullcalendar-value, +.ant-fullcalendar-fullscreen .ant-fullcalendar-today .ant-fullcalendar-value { + box-shadow: none; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-selected-cell .ant-fullcalendar-month, +.ant-fullcalendar-fullscreen .ant-fullcalendar-selected-day .ant-fullcalendar-date { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-selected-cell .ant-fullcalendar-value, +.ant-fullcalendar-fullscreen .ant-fullcalendar-selected-day .ant-fullcalendar-value { + color: @primary-color; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-last-month-cell .ant-fullcalendar-date, +.ant-fullcalendar-fullscreen .ant-fullcalendar-next-month-btn-day .ant-fullcalendar-date { + color: rgba(0, 0, 0, 0.25); +} +.ant-fullcalendar-disabled-cell:not(.ant-fullcalendar-today) .ant-fullcalendar-date, +.ant-fullcalendar-disabled-cell:not(.ant-fullcalendar-today) .ant-fullcalendar-date:hover { + background: transparent; +} +.ant-fullcalendar-disabled-cell .ant-fullcalendar-value { + color: rgba(0, 0, 0, 0.25); + border-radius: 0; +} +.ant-card { + color: rgba(0, 0, 0, 0.65); + background: #fff; + border-radius: 2px; +} +.ant-card-hoverable:hover { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.09); + border-color: rgba(0, 0, 0, 0.09); +} +.ant-card-bordered { + border: 1px solid #e8e8e8; +} +.ant-card-head { + background: transparent; + border-bottom: 1px solid #e8e8e8; + border-radius: 2px 2px 0 0; + color: rgba(0, 0, 0, 0.85); +} +.ant-card-head .ant-tabs { + color: rgba(0, 0, 0, 0.65); +} +.ant-card-head .ant-tabs-bar { + border-bottom: 1px solid #e8e8e8; +} +.ant-card-extra { + color: rgba(0, 0, 0, 0.65); +} +.ant-card-grid { + border-radius: 0; + border: 0; + box-shadow: 1px 0 0 0 #e8e8e8, 0 1px 0 0 #e8e8e8, 1px 1px 0 0 #e8e8e8, 1px 0 0 0 #e8e8e8 inset, 0 1px 0 0 #e8e8e8 inset; +} +.ant-card-grid:hover { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-card-cover img { + border-radius: 2px 2px 0 0; +} +.ant-card-actions { + border-top: 1px solid #e8e8e8; + background: #fafafa; +} +.ant-card-actions > li { + color: rgba(0, 0, 0, 0.45); +} +.ant-card-actions > li > span:hover { + color: @primary-color; +} +.ant-card-actions > li > span a { + color: rgba(0, 0, 0, 0.45); +} +.ant-card-actions > li > span a:hover { + color: @primary-color; +} +.ant-card-actions > li:not(:last-child) { + border-right: 1px solid #e8e8e8; +} +.ant-card-type-inner .ant-card-head { + background: #fafafa; +} +.ant-card-meta-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-card-meta-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-card-loading-block { + border-radius: 2px; + background: linear-gradient(90deg, rgba(207, 216, 220, 0.2), rgba(207, 216, 220, 0.4), rgba(207, 216, 220, 0.2)); + background-size: 600% 600%; +} +.ant-carousel { + color: rgba(0, 0, 0, 0.65); +} +.ant-carousel .slick-slider { + -webkit-tap-highlight-color: transparent; +} +.ant-carousel .slick-vertical .slick-slide { + border: 1px solid transparent; +} +.ant-carousel .slick-prev, +.ant-carousel .slick-next { + background: transparent; + color: transparent; + border: 0; +} +.ant-carousel .slick-prev:hover, +.ant-carousel .slick-next:hover, +.ant-carousel .slick-prev:focus, +.ant-carousel .slick-next:focus { + background: transparent; + color: transparent; +} +.ant-carousel .slick-dots li button { + border: 0; + background: #fff; + border-radius: 1px; + color: transparent; +} +.ant-carousel .slick-dots li.slick-active button { + background: #fff; +} +.ant-cascader { + color: rgba(0, 0, 0, 0.65); +} +.ant-cascader-input.ant-input { + background-color: transparent !important; +} +.ant-cascader-picker { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + border-radius: 4px; +} +.ant-cascader-picker-with-value .ant-cascader-picker-label { + color: transparent; +} +.ant-cascader-picker-disabled { + background: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-cascader-picker:focus .ant-cascader-input { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-cascader-picker-show-search.ant-cascader-picker-focused { + color: rgba(0, 0, 0, 0.25); +} +.ant-cascader-picker-clear { + background: #fff; + color: rgba(0, 0, 0, 0.25); +} +.ant-cascader-picker-clear:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-cascader-picker-arrow { + color: rgba(0, 0, 0, 0.25); +} +.ant-cascader-menus { + background: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-cascader-menu { + border-right: 1px solid #e8e8e8; +} +.ant-cascader-menu:first-child { + border-radius: 4px 0 0 4px; +} +.ant-cascader-menu:last-child { + border-right-color: transparent; + border-radius: 0 4px 4px 0; +} +.ant-cascader-menu:only-child { + border-radius: 4px; +} +.ant-cascader-menu-item:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-cascader-menu-item-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-cascader-menu-item-disabled:hover { + background: transparent; +} +.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled), +.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled):hover { + background: #f5f5f5; +} +.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon, +.ant-cascader-menu-item-expand .ant-cascader-menu-item-loading-icon { + color: rgba(0, 0, 0, 0.45); +} +.ant-cascader-menu-item .ant-cascader-menu-item-keyword { + color: #f5222d; +} +.ant-checkbox { + color: rgba(0, 0, 0, 0.65); +} +.ant-checkbox-wrapper:hover .ant-checkbox-inner, +.ant-checkbox:hover .ant-checkbox-inner, +.ant-checkbox-input:focus + .ant-checkbox-inner { + border-color: @primary-color; +} +.ant-checkbox-checked:after { + border-radius: 2px; + border: 1px solid @primary-color; +} +.ant-checkbox-inner { + border: 1px solid #d9d9d9; + border-radius: 2px; + background-color: #fff; +} +.ant-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-checkbox-indeterminate .ant-checkbox-inner:after { + border: 0; + background-color: @primary-color; +} +.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-checkbox-checked .ant-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-checkbox-checked .ant-checkbox-inner { + background-color: @primary-color; + border-color: @primary-color; +} +.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-checkbox-disabled .ant-checkbox-inner { + border-color: #d9d9d9 !important; + background-color: #f5f5f5; +} +.ant-checkbox-disabled .ant-checkbox-inner:after { + border-color: #f5f5f5; +} +.ant-checkbox-disabled + span { + color: rgba(0, 0, 0, 0.25); +} +.ant-checkbox-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-checkbox-group { + color: rgba(0, 0, 0, 0.65); +} +.ant-collapse { + color: rgba(0, 0, 0, 0.65); + background-color: #fafafa; + border-radius: 4px; + border: 1px solid #d9d9d9; + border-bottom: 0; +} +.ant-collapse > .ant-collapse-item { + border-bottom: 1px solid #d9d9d9; +} +.ant-collapse > .ant-collapse-item:last-child, +.ant-collapse > .ant-collapse-item:last-child > .ant-collapse-header { + border-radius: 0 0 4px 4px; +} +.ant-collapse > .ant-collapse-item > .ant-collapse-header { + color: rgba(0, 0, 0, 0.85); +} +.ant-collapse-content { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + border-top: 1px solid #d9d9d9; +} +.ant-collapse-item:last-child > .ant-collapse-content { + border-radius: 0 0 4px 4px; +} +.ant-collapse-borderless { + background-color: #fff; + border: 0; +} +.ant-collapse-borderless > .ant-collapse-item { + border-bottom: 1px solid #d9d9d9; +} +.ant-collapse-borderless > .ant-collapse-item:last-child, +.ant-collapse-borderless > .ant-collapse-item:last-child .ant-collapse-header { + border-radius: 0; +} +.ant-collapse-borderless > .ant-collapse-item > .ant-collapse-content { + background-color: transparent; + border-top: 0; +} +.ant-collapse .ant-collapse-item-disabled > .ant-collapse-header, +.ant-collapse .ant-collapse-item-disabled > .ant-collapse-header > .arrow { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-picker-container { + color: rgba(0, 0, 0, 0.65); +} +.ant-calendar-picker { + color: rgba(0, 0, 0, 0.65); +} +.ant-calendar-picker:hover .ant-calendar-picker-input:not(.ant-input-disabled) { + border-color: @primary-color; +} +.ant-calendar-picker:focus .ant-calendar-picker-input:not(.ant-input-disabled) { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-calendar-picker-clear { + color: rgba(0, 0, 0, 0.25); + background: #fff; +} +.ant-calendar-picker-clear:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-picker-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar { + border: 1px solid #fff; + background-color: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + background-clip: padding-box; +} +.ant-calendar-input-wrap { + border-bottom: 1px solid #e8e8e8; +} +.ant-calendar-input { + border: 0; + color: rgba(0, 0, 0, 0.65); + background: #fff; +} +.ant-calendar-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-calendar-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-header { + border-bottom: 1px solid #e8e8e8; +} +.ant-calendar-header a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar-header .ant-calendar-century-select, +.ant-calendar-header .ant-calendar-decade-select, +.ant-calendar-header .ant-calendar-year-select, +.ant-calendar-header .ant-calendar-month-select { + color: rgba(0, 0, 0, 0.85); +} +.ant-calendar-header .ant-calendar-prev-century-btn, +.ant-calendar-header .ant-calendar-next-century-btn, +.ant-calendar-header .ant-calendar-prev-decade-btn, +.ant-calendar-header .ant-calendar-next-decade-btn, +.ant-calendar-header .ant-calendar-prev-month-btn, +.ant-calendar-header .ant-calendar-next-month-btn, +.ant-calendar-header .ant-calendar-prev-year-btn, +.ant-calendar-header .ant-calendar-next-year-btn { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar table { + border-collapse: collapse; + background-color: transparent; +} +.ant-calendar table, +.ant-calendar th, +.ant-calendar td { + border: 0; +} +.ant-calendar-calendar-table { + border-spacing: 0; +} +.ant-calendar-date { + color: rgba(0, 0, 0, 0.65); + border-radius: 2px; + border: 1px solid transparent; + background: transparent; +} +.ant-calendar-date:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-calendar-date:active { + color: #fff; + background: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar-today .ant-calendar-date { + border-color: @primary-color; + color: @primary-color; +} +.ant-calendar-last-month-cell .ant-calendar-date, +.ant-calendar-next-month-btn-day .ant-calendar-date { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-selected-day .ant-calendar-date { + background: #d1e9ff; +} +.ant-calendar-selected-date .ant-calendar-date, +.ant-calendar-selected-start-date .ant-calendar-date, +.ant-calendar-selected-end-date .ant-calendar-date { + background: @primary-color; + color: #fff; + border: 1px solid transparent; +} +.ant-calendar-selected-date .ant-calendar-date:hover, +.ant-calendar-selected-start-date .ant-calendar-date:hover, +.ant-calendar-selected-end-date .ant-calendar-date:hover { + background: @primary-color; +} +.ant-calendar-disabled-cell .ant-calendar-date { + color: #bcbcbc; + background: #f5f5f5; + border-radius: 0; + border: 1px solid transparent; +} +.ant-calendar-disabled-cell .ant-calendar-date:hover { + background: #f5f5f5; +} +.ant-calendar-disabled-cell.ant-calendar-today .ant-calendar-date:before { + border: 1px solid #bcbcbc; + border-radius: 2px; +} +.ant-calendar-disabled-cell-first-of-row .ant-calendar-date { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.ant-calendar-disabled-cell-last-of-row .ant-calendar-date { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.ant-calendar-footer { + border-top: 1px solid #e8e8e8; +} +.ant-calendar-footer:empty { + border-top: 0; +} +.ant-calendar .ant-calendar-today-btn-disabled, +.ant-calendar .ant-calendar-clear-btn-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar .ant-calendar-clear-btn:after { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar .ant-calendar-clear-btn:hover:after { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar .ant-calendar-ok-btn { + background-image: none; + border: 1px solid transparent; + box-shadow: 0 2px 0 rgba(0, 0, 0, 0.015); + color: #fff; + background-color: @primary-color; + border-color: @primary-color; + box-shadow: 0 2px 0 rgba(0, 0, 0, 0.035); + border-radius: 4px; +} +.ant-calendar .ant-calendar-ok-btn:not([disabled]):active { + box-shadow: none; +} +.ant-calendar .ant-calendar-ok-btn-lg { + border-radius: 4px; +} +.ant-calendar .ant-calendar-ok-btn-sm { + border-radius: 4px; +} +.ant-calendar .ant-calendar-ok-btn > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn > a:only-child:after { + background: transparent; +} +.ant-calendar .ant-calendar-ok-btn:hover, +.ant-calendar .ant-calendar-ok-btn:focus { + color: #fff; + background-color: color(~`colorPalette("@{primary-color}", 5)`); + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar .ant-calendar-ok-btn:hover > a:only-child, +.ant-calendar .ant-calendar-ok-btn:focus > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn:hover > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn:focus > a:only-child:after { + background: transparent; +} +.ant-calendar .ant-calendar-ok-btn:active, +.ant-calendar .ant-calendar-ok-btn.active { + color: #fff; + background-color: color(~`colorPalette("@{primary-color}", 7)`); + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-calendar .ant-calendar-ok-btn:active > a:only-child, +.ant-calendar .ant-calendar-ok-btn.active > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn:active > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn.active > a:only-child:after { + background: transparent; +} +.ant-calendar .ant-calendar-ok-btn.disabled, +.ant-calendar .ant-calendar-ok-btn[disabled], +.ant-calendar .ant-calendar-ok-btn.disabled:hover, +.ant-calendar .ant-calendar-ok-btn[disabled]:hover, +.ant-calendar .ant-calendar-ok-btn.disabled:focus, +.ant-calendar .ant-calendar-ok-btn[disabled]:focus, +.ant-calendar .ant-calendar-ok-btn.disabled:active, +.ant-calendar .ant-calendar-ok-btn[disabled]:active, +.ant-calendar .ant-calendar-ok-btn.disabled.active, +.ant-calendar .ant-calendar-ok-btn[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-calendar .ant-calendar-ok-btn.disabled > a:only-child, +.ant-calendar .ant-calendar-ok-btn[disabled] > a:only-child, +.ant-calendar .ant-calendar-ok-btn.disabled:hover > a:only-child, +.ant-calendar .ant-calendar-ok-btn[disabled]:hover > a:only-child, +.ant-calendar .ant-calendar-ok-btn.disabled:focus > a:only-child, +.ant-calendar .ant-calendar-ok-btn[disabled]:focus > a:only-child, +.ant-calendar .ant-calendar-ok-btn.disabled:active > a:only-child, +.ant-calendar .ant-calendar-ok-btn[disabled]:active > a:only-child, +.ant-calendar .ant-calendar-ok-btn.disabled.active > a:only-child, +.ant-calendar .ant-calendar-ok-btn[disabled].active > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn.disabled > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn[disabled] > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn.disabled:hover > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn[disabled]:hover > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn.disabled:focus > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn[disabled]:focus > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn.disabled:active > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn[disabled]:active > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn.disabled.active > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn[disabled].active > a:only-child:after { + background: transparent; +} +.ant-calendar .ant-calendar-ok-btn-disabled { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; +} +.ant-calendar .ant-calendar-ok-btn-disabled > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn-disabled > a:only-child:after { + background: transparent; +} +.ant-calendar .ant-calendar-ok-btn-disabled:hover { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; +} +.ant-calendar .ant-calendar-ok-btn-disabled:hover > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn-disabled:hover > a:only-child:after { + background: transparent; +} +.ant-calendar-range-picker-input { + background-color: transparent; + border: 0; +} +.ant-calendar-range-picker-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-calendar-range-picker-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-range-picker-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-range-picker-separator { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-range-left .ant-calendar-time-picker-inner { + border-right: 1px solid #e8e8e8; +} +.ant-calendar-range-right .ant-calendar-time-picker-inner { + border-left: 1px solid #e8e8e8; +} +.ant-calendar-range-middle { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-range .ant-calendar-input, +.ant-calendar-range .ant-calendar-time-picker-input { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + border: 0; + box-shadow: none; +} +.ant-calendar-range .ant-calendar-input::-moz-placeholder, +.ant-calendar-range .ant-calendar-time-picker-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-calendar-range .ant-calendar-input:-ms-input-placeholder, +.ant-calendar-range .ant-calendar-time-picker-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-range .ant-calendar-input::-webkit-input-placeholder, +.ant-calendar-range .ant-calendar-time-picker-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-range .ant-calendar-input:hover, +.ant-calendar-range .ant-calendar-time-picker-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-calendar-range .ant-calendar-input:focus, +.ant-calendar-range .ant-calendar-time-picker-input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-calendar-range .ant-calendar-input-disabled, +.ant-calendar-range .ant-calendar-time-picker-input-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-range .ant-calendar-input-disabled:hover, +.ant-calendar-range .ant-calendar-time-picker-input-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-calendar-range .ant-calendar-input:focus, +.ant-calendar-range .ant-calendar-time-picker-input:focus { + box-shadow: none; +} +.ant-calendar-range .ant-calendar-in-range-cell { + border-radius: 0; +} +.ant-calendar-range .ant-calendar-in-range-cell:before { + background: color(~`colorPalette("@{primary-color}", 1)`); + border-radius: 0; + border: 0; +} +.ant-calendar-range .ant-calendar-header, +.ant-calendar-range .ant-calendar-month-panel-header, +.ant-calendar-range .ant-calendar-year-panel-header { + border-bottom: 0; +} +.ant-calendar-range .ant-calendar-body, +.ant-calendar-range .ant-calendar-month-panel-body, +.ant-calendar-range .ant-calendar-year-panel-body { + border-top: 1px solid #e8e8e8; +} +.ant-calendar-range.ant-calendar-time .ant-calendar-time-picker-inner { + background: none; +} +.ant-calendar-range.ant-calendar-time .ant-calendar-time-picker-combobox { + background-color: #fff; + border-top: 1px solid #e8e8e8; +} +.ant-calendar-range.ant-calendar-show-time-picker .ant-calendar-body { + border-top-color: transparent; +} +.ant-calendar-time-picker { + background-color: #fff; +} +.ant-calendar-time-picker-inner { + background-color: #fff; + background-clip: padding-box; +} +.ant-calendar-time-picker-select { + border-right: 1px solid #e8e8e8; +} +.ant-calendar-time-picker-select:first-child { + border-left: 0; +} +.ant-calendar-time-picker-select:last-child { + border-right: 0; +} +.ant-calendar-time-picker-select li:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +li.ant-calendar-time-picker-select-option-selected { + background: #f5f5f5; +} +li.ant-calendar-time-picker-select-option-disabled { + color: rgba(0, 0, 0, 0.25); +} +li.ant-calendar-time-picker-select-option-disabled:hover { + background: transparent; +} +.ant-calendar-time .ant-calendar-day-select { + color: rgba(0, 0, 0, 0.85); +} +.ant-calendar-time .ant-calendar-footer .ant-calendar-time-picker-btn-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-month-panel { + border-radius: 4px; + background: #fff; +} +.ant-calendar-month-panel-header { + border-bottom: 1px solid #e8e8e8; +} +.ant-calendar-month-panel-header a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar-month-panel-header .ant-calendar-month-panel-century-select, +.ant-calendar-month-panel-header .ant-calendar-month-panel-decade-select, +.ant-calendar-month-panel-header .ant-calendar-month-panel-year-select, +.ant-calendar-month-panel-header .ant-calendar-month-panel-month-select { + color: rgba(0, 0, 0, 0.85); +} +.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-century-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-next-century-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-decade-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-next-decade-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-month-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-next-month-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-year-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-next-year-btn { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-month-panel-table { + border-collapse: separate; +} +.ant-calendar-month-panel-selected-cell .ant-calendar-month-panel-month { + background: @primary-color; + color: #fff; +} +.ant-calendar-month-panel-selected-cell .ant-calendar-month-panel-month:hover { + background: @primary-color; + color: #fff; +} +.ant-calendar-month-panel-cell-disabled .ant-calendar-month-panel-month, +.ant-calendar-month-panel-cell-disabled .ant-calendar-month-panel-month:hover { + color: #bcbcbc; + background: #f5f5f5; +} +.ant-calendar-month-panel-month { + color: rgba(0, 0, 0, 0.65); + background: transparent; + border-radius: 2px; +} +.ant-calendar-month-panel-month:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-calendar-year-panel { + border-radius: 4px; + background: #fff; +} +.ant-calendar-year-panel-header { + border-bottom: 1px solid #e8e8e8; +} +.ant-calendar-year-panel-header a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar-year-panel-header .ant-calendar-year-panel-century-select, +.ant-calendar-year-panel-header .ant-calendar-year-panel-decade-select, +.ant-calendar-year-panel-header .ant-calendar-year-panel-year-select, +.ant-calendar-year-panel-header .ant-calendar-year-panel-month-select { + color: rgba(0, 0, 0, 0.85); +} +.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-century-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-next-century-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-decade-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-next-decade-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-month-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-next-month-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-year-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-next-year-btn { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-year-panel-table { + border-collapse: separate; +} +.ant-calendar-year-panel-year { + color: rgba(0, 0, 0, 0.65); + background: transparent; + border-radius: 2px; +} +.ant-calendar-year-panel-year:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-calendar-year-panel-selected-cell .ant-calendar-year-panel-year { + background: @primary-color; + color: #fff; +} +.ant-calendar-year-panel-selected-cell .ant-calendar-year-panel-year:hover { + background: @primary-color; + color: #fff; +} +.ant-calendar-year-panel-last-decade-cell .ant-calendar-year-panel-year, +.ant-calendar-year-panel-next-decade-cell .ant-calendar-year-panel-year { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-decade-panel { + background: #fff; + border-radius: 4px; +} +.ant-calendar-decade-panel-header { + border-bottom: 1px solid #e8e8e8; +} +.ant-calendar-decade-panel-header a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-century-select, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-decade-select, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-year-select, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-month-select { + color: rgba(0, 0, 0, 0.85); +} +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-century-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-century-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-decade-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-decade-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-month-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-month-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-year-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-year-btn { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-decade-panel-table { + border-collapse: separate; +} +.ant-calendar-decade-panel-decade { + color: rgba(0, 0, 0, 0.65); + background: transparent; + border-radius: 2px; +} +.ant-calendar-decade-panel-decade:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-calendar-decade-panel-selected-cell .ant-calendar-decade-panel-decade { + background: @primary-color; + color: #fff; +} +.ant-calendar-decade-panel-selected-cell .ant-calendar-decade-panel-decade:hover { + background: @primary-color; + color: #fff; +} +.ant-calendar-decade-panel-last-century-cell .ant-calendar-decade-panel-decade, +.ant-calendar-decade-panel-next-century-cell .ant-calendar-decade-panel-decade { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-week-number .ant-calendar-body tr:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-calendar-week-number .ant-calendar-body tr.ant-calendar-active-week { + background: color(~`colorPalette("@{primary-color}", 2)`); +} +.ant-calendar-week-number .ant-calendar-body tr .ant-calendar-selected-day .ant-calendar-date, +.ant-calendar-week-number .ant-calendar-body tr .ant-calendar-selected-day:hover .ant-calendar-date { + background: transparent; + color: rgba(0, 0, 0, 0.65); +} +.ant-divider { + color: rgba(0, 0, 0, 0.65); + background: #e8e8e8; +} +.ant-divider-horizontal.ant-divider-with-text, +.ant-divider-horizontal.ant-divider-with-text-left, +.ant-divider-horizontal.ant-divider-with-text-right { + background: transparent; + color: rgba(0, 0, 0, 0.85); +} +.ant-divider-horizontal.ant-divider-with-text:before, +.ant-divider-horizontal.ant-divider-with-text-left:before, +.ant-divider-horizontal.ant-divider-with-text-right:before, +.ant-divider-horizontal.ant-divider-with-text:after, +.ant-divider-horizontal.ant-divider-with-text-left:after, +.ant-divider-horizontal.ant-divider-with-text-right:after { + border-top: 1px solid #e8e8e8; +} +.ant-divider-dashed { + background: none; + border-top: 1px dashed #e8e8e8; +} +.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed, +.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed, +.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed { + border-top: 0; +} +.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed:before, +.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed:before, +.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed:before, +.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed:after, +.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed:after, +.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed:after { + border-style: dashed none none; +} +.ant-drawer-left.ant-drawer-open .ant-drawer-content-wrapper { + box-shadow: 2px 0 8px rgba(0, 0, 0, 0.15); +} +.ant-drawer-right.ant-drawer-open .ant-drawer-content-wrapper { + box-shadow: -2px 0 8px rgba(0, 0, 0, 0.15); +} +.ant-drawer-top.ant-drawer-open .ant-drawer-content-wrapper { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-drawer-bottom.ant-drawer-open .ant-drawer-content-wrapper { + box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.15); +} +.ant-drawer-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-drawer-content { + background-color: #fff; + border: 0; + background-clip: padding-box; +} +.ant-drawer-close { + border: 0; + background: transparent; + color: rgba(0, 0, 0, 0.45); +} +.ant-drawer-close:focus, +.ant-drawer-close:hover { + color: #444; +} +.ant-drawer-header { + border-radius: 4px 4px 0 0; + background: #fff; + color: rgba(0, 0, 0, 0.65); + border-bottom: 1px solid #e8e8e8; +} +.ant-drawer-mask { + background-color: rgba(0, 0, 0, 0.65); +} +.ant-drawer-open-content { + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); +} +.ant-dropdown { + color: rgba(0, 0, 0, 0.65); +} +.ant-dropdown-menu { + background-color: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + background-clip: padding-box; +} +.ant-dropdown-menu-item-group-title { + color: rgba(0, 0, 0, 0.45); +} +.ant-dropdown-menu-item, +.ant-dropdown-menu-submenu-title { + color: rgba(0, 0, 0, 0.65); +} +.ant-dropdown-menu-item > a, +.ant-dropdown-menu-submenu-title > a { + color: rgba(0, 0, 0, 0.65); +} +.ant-dropdown-menu-item-selected, +.ant-dropdown-menu-submenu-title-selected, +.ant-dropdown-menu-item-selected > a, +.ant-dropdown-menu-submenu-title-selected > a { + color: @primary-color; + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-dropdown-menu-item:hover, +.ant-dropdown-menu-submenu-title:hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-dropdown-menu-item-disabled, +.ant-dropdown-menu-submenu-title-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-dropdown-menu-item-disabled:hover, +.ant-dropdown-menu-submenu-title-disabled:hover { + color: rgba(0, 0, 0, 0.25); + background-color: #fff; +} +.ant-dropdown-menu-item-divider, +.ant-dropdown-menu-submenu-title-divider { + background-color: #e8e8e8; +} +.ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow-icon, +.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon { + color: rgba(0, 0, 0, 0.45); +} +.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title, +.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-dropdown-menu-dark, +.ant-dropdown-menu-dark .ant-dropdown-menu { + background: #001529; +} +.ant-dropdown-menu-dark .ant-dropdown-menu-item, +.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title, +.ant-dropdown-menu-dark .ant-dropdown-menu-item > a { + color: rgba(255, 255, 255, 0.65); +} +.ant-dropdown-menu-dark .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow:after, +.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow:after, +.ant-dropdown-menu-dark .ant-dropdown-menu-item > a .ant-dropdown-menu-submenu-arrow:after { + color: rgba(255, 255, 255, 0.65); +} +.ant-dropdown-menu-dark .ant-dropdown-menu-item:hover, +.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title:hover, +.ant-dropdown-menu-dark .ant-dropdown-menu-item > a:hover { + color: #fff; + background: transparent; +} +.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected, +.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected:hover, +.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected > a { + background: @primary-color; + color: #fff; +} +.ant-form { + color: rgba(0, 0, 0, 0.65); +} +.ant-form legend { + color: rgba(0, 0, 0, 0.45); + border: 0; + border-bottom: 1px solid #d9d9d9; +} +.ant-form output { + color: rgba(0, 0, 0, 0.65); +} +.ant-form-item-required:before { + color: #f5222d; +} +.ant-form-item { + color: rgba(0, 0, 0, 0.65); +} +.ant-form-item-label label { + color: rgba(0, 0, 0, 0.85); +} +.ant-form-explain, +.ant-form-extra { + color: rgba(0, 0, 0, 0.45); +} +form .ant-upload { + background: transparent; +} +.ant-input-group-wrap .ant-select-selection { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.ant-input-group-wrap .ant-select-selection:hover { + border-color: #d9d9d9; +} +.ant-input-group-wrap .ant-select-selection--single { + background-color: #eee; +} +.ant-input-group-wrap .ant-select-open .ant-select-selection { + border-color: #d9d9d9; + box-shadow: none; +} +.has-success.has-feedback .ant-form-item-children-icon { + color: #52c41a; +} +.has-warning .ant-form-explain, +.has-warning .ant-form-split { + color: #faad14; +} +.has-warning .ant-input, +.has-warning .ant-input:hover { + border-color: #faad14; +} +.has-warning .ant-input:focus { + border-color: #ffc53d; + box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2); + border-right-width: 1px !important; +} +.has-warning .ant-input:not([disabled]):hover { + border-color: #faad14; +} +.has-warning .ant-calendar-picker-open .ant-calendar-picker-input { + border-color: #ffc53d; + box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2); + border-right-width: 1px !important; +} +.has-warning .ant-input-prefix { + color: #faad14; +} +.has-warning .ant-input-group-addon { + color: #faad14; + border-color: #faad14; + background-color: #fff; +} +.has-warning .has-feedback { + color: #faad14; +} +.has-warning.has-feedback .ant-form-item-children-icon { + color: #faad14; +} +.has-warning .ant-select-selection { + border-color: #faad14; +} +.has-warning .ant-select-open .ant-select-selection, +.has-warning .ant-select-focused .ant-select-selection { + border-color: #ffc53d; + box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2); + border-right-width: 1px !important; +} +.has-warning .ant-calendar-picker-icon:after, +.has-warning .ant-time-picker-icon:after, +.has-warning .ant-picker-icon:after, +.has-warning .ant-select-arrow, +.has-warning .ant-cascader-picker-arrow { + color: #faad14; +} +.has-warning .ant-input-number, +.has-warning .ant-time-picker-input { + border-color: #faad14; +} +.has-warning .ant-input-number-focused, +.has-warning .ant-time-picker-input-focused, +.has-warning .ant-input-number:focus, +.has-warning .ant-time-picker-input:focus { + border-color: #ffc53d; + box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2); + border-right-width: 1px !important; +} +.has-warning .ant-input-number:not([disabled]):hover, +.has-warning .ant-time-picker-input:not([disabled]):hover { + border-color: #faad14; +} +.has-warning .ant-cascader-picker:focus .ant-cascader-input { + border-color: #ffc53d; + box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-form-explain, +.has-error .ant-form-split { + color: #f5222d; +} +.has-error .ant-input, +.has-error .ant-input:hover { + border-color: #f5222d; +} +.has-error .ant-input:focus { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-input:not([disabled]):hover { + border-color: #f5222d; +} +.has-error .ant-calendar-picker-open .ant-calendar-picker-input { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-input-prefix { + color: #f5222d; +} +.has-error .ant-input-group-addon { + color: #f5222d; + border-color: #f5222d; + background-color: #fff; +} +.has-error .has-feedback { + color: #f5222d; +} +.has-error.has-feedback .ant-form-item-children-icon { + color: #f5222d; +} +.has-error .ant-select-selection { + border-color: #f5222d; +} +.has-error .ant-select-open .ant-select-selection, +.has-error .ant-select-focused .ant-select-selection { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-select.ant-select-auto-complete .ant-input:focus { + border-color: #f5222d; +} +.has-error .ant-input-group-addon .ant-select-selection { + border-color: transparent; + box-shadow: none; +} +.has-error .ant-calendar-picker-icon:after, +.has-error .ant-time-picker-icon:after, +.has-error .ant-picker-icon:after, +.has-error .ant-select-arrow, +.has-error .ant-cascader-picker-arrow { + color: #f5222d; +} +.has-error .ant-input-number, +.has-error .ant-time-picker-input { + border-color: #f5222d; +} +.has-error .ant-input-number-focused, +.has-error .ant-time-picker-input-focused, +.has-error .ant-input-number:focus, +.has-error .ant-time-picker-input:focus { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-input-number:not([disabled]):hover, +.has-error .ant-time-picker-input:not([disabled]):hover { + border-color: #f5222d; +} +.has-error .ant-mention-wrapper .ant-mention-editor, +.has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):hover { + border-color: #f5222d; +} +.has-error .ant-mention-wrapper.ant-mention-active:not([disabled]) .ant-mention-editor, +.has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):focus { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-cascader-picker:focus .ant-cascader-input { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.is-validating.has-feedback .ant-form-item-children-icon { + color: @primary-color; +} +.ant-input-number { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-input-number::-moz-placeholder { + color: #bfbfbf; +} +.ant-input-number:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-input-number::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-input-number:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-number:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-number-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-input-number-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-input-number-handler { + color: rgba(0, 0, 0, 0.45); +} +.ant-input-number-handler:active { + background: #f4f4f4; +} +.ant-input-number-handler:hover .ant-input-number-handler-up-inner, +.ant-input-number-handler:hover .ant-input-number-handler-down-inner { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-input-number-handler-up-inner, +.ant-input-number-handler-down-inner { + color: rgba(0, 0, 0, 0.45); +} +.ant-input-number:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-number-focused { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-number-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-input-number-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-input-number-input { + background-color: transparent; + border: 0; + border-radius: 4px; +} +.ant-input-number-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-input-number-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-input-number-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-input-number-handler-wrap { + border-left: 1px solid #d9d9d9; + background: #fff; + border-radius: 0 4px 4px 0; +} +.ant-input-number-handler-down { + border-top: 1px solid #d9d9d9; +} +.ant-input-number-handler-up-disabled:hover .ant-input-number-handler-up-inner, +.ant-input-number-handler-down-disabled:hover .ant-input-number-handler-down-inner { + color: rgba(0, 0, 0, 0.25); +} +.ant-input { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-input-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-input-group { + color: rgba(0, 0, 0, 0.65); + border-collapse: separate; + border-spacing: 0; +} +.ant-input-group-addon:not(:first-child):not(:last-child), +.ant-input-group-wrap:not(:first-child):not(:last-child), +.ant-input-group > .ant-input:not(:first-child):not(:last-child) { + border-radius: 0; +} +.ant-input-group .ant-input:focus { + border-right-width: 1px; +} +.ant-input-group .ant-input:hover { + border-right-width: 1px; +} +.ant-input-group-addon { + color: rgba(0, 0, 0, 0.65); + background-color: #fafafa; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-input-group-addon .ant-select .ant-select-selection { + background-color: inherit; + border: 1px solid transparent; + box-shadow: none; +} +.ant-input-group-addon .ant-select-open .ant-select-selection, +.ant-input-group-addon .ant-select-focused .ant-select-selection { + color: @primary-color; +} +.ant-input-group > .ant-input:first-child, +.ant-input-group-addon:first-child { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.ant-input-group > .ant-input:first-child .ant-select .ant-select-selection, +.ant-input-group-addon:first-child .ant-select .ant-select-selection { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.ant-input-group > .ant-input-affix-wrapper:not(:first-child) .ant-input { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.ant-input-group > .ant-input-affix-wrapper:not(:last-child) .ant-input { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.ant-input-group-addon:first-child { + border-right: 0; +} +.ant-input-group-addon:last-child { + border-left: 0; +} +.ant-input-group > .ant-input:last-child, +.ant-input-group-addon:last-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.ant-input-group > .ant-input:last-child .ant-select .ant-select-selection, +.ant-input-group-addon:last-child .ant-select .ant-select-selection { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child), +.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child), +.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child) { + border-right-width: 1px; + border-right-color: transparent; +} +.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):hover, +.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):hover, +.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child):hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):focus, +.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):focus, +.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child):focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact > * { + border-radius: 0; + border-right-width: 0; +} +.ant-input-group.ant-input-group-compact > span:not(:last-child) > .ant-input { + border-right-width: 0; +} +.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selection, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker .ant-input, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper .ant-mention-editor, +.ant-input-group.ant-input-group-compact > .ant-time-picker .ant-time-picker-input { + border-radius: 0; + border-right-width: 1px; + border-right-color: transparent; +} +.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selection:hover, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper .ant-mention-editor:hover, +.ant-input-group.ant-input-group-compact > .ant-time-picker .ant-time-picker-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selection:focus, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper .ant-mention-editor:focus, +.ant-input-group.ant-input-group-compact > .ant-time-picker .ant-time-picker-input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact > *:first-child, +.ant-input-group.ant-input-group-compact > .ant-select:first-child > .ant-select-selection, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker:first-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:first-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker:first-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper:first-child .ant-mention-editor, +.ant-input-group.ant-input-group-compact > .ant-time-picker:first-child .ant-time-picker-input { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.ant-input-group.ant-input-group-compact > *:last-child, +.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selection, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker:last-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:last-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper:last-child .ant-mention-editor, +.ant-input-group.ant-input-group-compact > .ant-time-picker:last-child .ant-time-picker-input { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-right-width: 1px; + border-right-color: #d9d9d9; +} +.ant-input-group.ant-input-group-compact > *:last-child:hover, +.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selection:hover, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker:last-child .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:last-child .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper:last-child .ant-mention-editor:hover, +.ant-input-group.ant-input-group-compact > .ant-time-picker:last-child .ant-time-picker-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact > *:last-child:focus, +.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selection:focus, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker:last-child .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:last-child .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper:last-child .ant-mention-editor:focus, +.ant-input-group.ant-input-group-compact > .ant-time-picker:last-child .ant-time-picker-input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact > *:last-child:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selection:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker:last-child .ant-input:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:last-child .ant-input:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper:last-child .ant-mention-editor:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-time-picker:last-child .ant-time-picker-input:focus .ant-cascader-input { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-affix-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled) { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-affix-wrapper .ant-input-prefix, +.ant-input-affix-wrapper .ant-input-suffix { + color: rgba(0, 0, 0, 0.65); +} +.ant-input-search-icon { + color: rgba(0, 0, 0, 0.45); +} +.ant-input-search-icon:hover { + color: #333; +} +.ant-input-search > .ant-input-suffix > .ant-input-search-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.ant-layout { + background: #f0f2f5; +} +.ant-layout-header { + background: #001529; +} +.ant-layout-footer { + background: #f0f2f5; + color: rgba(0, 0, 0, 0.65); +} +.ant-layout-sider { + background: #001529; +} +.ant-layout-sider-trigger { + color: #fff; + background: #002140; +} +.ant-layout-sider-zero-width-trigger { + background: #001529; + color: #fff; + border-radius: 0 4px 4px 0; +} +.ant-layout-sider-zero-width-trigger:hover { + background: #192c3e; +} +.ant-layout-sider-light { + background: #fff; +} +.ant-layout-sider-light .ant-layout-sider-trigger { + color: rgba(0, 0, 0, 0.65); + background: #fff; +} +.ant-layout-sider-light .ant-layout-sider-zero-width-trigger { + color: rgba(0, 0, 0, 0.65); + background: #fff; +} +.ant-list { + color: rgba(0, 0, 0, 0.65); +} +.ant-list-empty-text { + color: rgba(0, 0, 0, 0.45); +} +.ant-list-item-meta-title { + color: rgba(0, 0, 0, 0.65); +} +.ant-list-item-meta-title > a { + color: rgba(0, 0, 0, 0.65); +} +.ant-list-item-meta-title > a:hover { + color: @primary-color; +} +.ant-list-item-meta-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-list-item-action > li { + color: rgba(0, 0, 0, 0.45); +} +.ant-list-item-action-split { + background-color: #e8e8e8; +} +.ant-list-empty { + color: rgba(0, 0, 0, 0.45); +} +.ant-list-split .ant-list-item { + border-bottom: 1px solid #e8e8e8; +} +.ant-list-split .ant-list-item:last-child { + border-bottom: none; +} +.ant-list-split .ant-list-header { + border-bottom: 1px solid #e8e8e8; +} +.ant-list-something-after-last-item .ant-spin-container > .ant-list-item:last-child { + border-bottom: 1px solid #e8e8e8; +} +.ant-list-vertical .ant-list-item-meta-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-list-vertical .ant-list-item-content { + color: rgba(0, 0, 0, 0.65); +} +.ant-list-grid .ant-list-item { + border-bottom: none; +} +.ant-list-bordered { + border-radius: 4px; + border: 1px solid #d9d9d9; +} +.ant-list-bordered .ant-list-item { + border-bottom: 1px solid #e8e8e8; +} +.ant-mention-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-mention-wrapper .ant-mention-editor { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-mention-wrapper .ant-mention-editor::-moz-placeholder { + color: #bfbfbf; +} +.ant-mention-wrapper .ant-mention-editor:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-mention-wrapper .ant-mention-editor::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-mention-wrapper .ant-mention-editor:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-mention-wrapper .ant-mention-editor:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-mention-wrapper .ant-mention-editor-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-mention-wrapper .ant-mention-editor-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-mention-wrapper.ant-mention-active:not(.disabled) .ant-mention-editor { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-mention-wrapper.disabled .ant-mention-editor { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-mention-wrapper.disabled .ant-mention-editor:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-mention-wrapper .public-DraftEditorPlaceholder-root .public-DraftEditorPlaceholder-inner { + color: #bfbfbf; +} +.ant-mention-dropdown { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + border-radius: 4px; +} +.ant-mention-dropdown-notfound.ant-mention-dropdown-item { + color: rgba(0, 0, 0, 0.25); +} +.ant-mention-dropdown-notfound.ant-mention-dropdown-item .anticon-loading { + color: @primary-color; +} +.ant-mention-dropdown-item { + color: rgba(0, 0, 0, 0.65); +} +.ant-mention-dropdown-item:hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-mention-dropdown-item.focus, +.ant-mention-dropdown-item-active { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-mention-dropdown-item-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-mention-dropdown-item-disabled:hover { + color: rgba(0, 0, 0, 0.25); + background-color: #fff; +} +.ant-mention-dropdown-item-selected, +.ant-mention-dropdown-item-selected:hover { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.65); +} +.ant-mention-dropdown-item-divider { + background-color: #e8e8e8; +} +.ant-menu { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + color: rgba(0, 0, 0, 0.65); + background: #fff; +} +.ant-menu-item-group-title { + color: rgba(0, 0, 0, 0.45); +} +.ant-menu-item:active, +.ant-menu-submenu-title:active { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-menu-item > a { + color: rgba(0, 0, 0, 0.65); +} +.ant-menu-item > a:hover { + color: @primary-color; +} +.ant-menu-item > a:before { + background-color: transparent; +} +.ant-menu-item-divider { + background-color: #e8e8e8; +} +.ant-menu-item:hover, +.ant-menu-item-active, +.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open, +.ant-menu-submenu-active, +.ant-menu-submenu-title:hover { + color: @primary-color; +} +.ant-menu-horizontal > .ant-menu-item:hover, +.ant-menu-horizontal > .ant-menu-item-active, +.ant-menu-horizontal > .ant-menu-submenu .ant-menu-submenu-title:hover { + background-color: transparent; +} +.ant-menu-item-selected { + color: @primary-color; +} +.ant-menu-item-selected > a, +.ant-menu-item-selected > a:hover { + color: @primary-color; +} +.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-menu-inline, +.ant-menu-vertical, +.ant-menu-vertical-left { + border-right: 1px solid #e8e8e8; +} +.ant-menu-vertical-right { + border-left: 1px solid #e8e8e8; +} +.ant-menu-vertical.ant-menu-sub, +.ant-menu-vertical-left.ant-menu-sub, +.ant-menu-vertical-right.ant-menu-sub { + border-right: 0; +} +.ant-menu-vertical.ant-menu-sub .ant-menu-item, +.ant-menu-vertical-left.ant-menu-sub .ant-menu-item, +.ant-menu-vertical-right.ant-menu-sub .ant-menu-item { + border-right: 0; +} +.ant-menu-vertical.ant-menu-sub .ant-menu-item:after, +.ant-menu-vertical-left.ant-menu-sub .ant-menu-item:after, +.ant-menu-vertical-right.ant-menu-sub .ant-menu-item:after { + border-right: 0; +} +.ant-menu > .ant-menu-item-divider { + background-color: #e8e8e8; +} +.ant-menu-submenu-popup { + border-radius: 4px; +} +.ant-menu-submenu > .ant-menu { + background-color: #fff; + border-radius: 4px; +} +.ant-menu-submenu-vertical > .ant-menu-submenu-title .ant-menu-submenu-arrow:before, +.ant-menu-submenu-vertical-left > .ant-menu-submenu-title .ant-menu-submenu-arrow:before, +.ant-menu-submenu-vertical-right > .ant-menu-submenu-title .ant-menu-submenu-arrow:before, +.ant-menu-submenu-inline > .ant-menu-submenu-title .ant-menu-submenu-arrow:before, +.ant-menu-submenu-vertical > .ant-menu-submenu-title .ant-menu-submenu-arrow:after, +.ant-menu-submenu-vertical-left > .ant-menu-submenu-title .ant-menu-submenu-arrow:after, +.ant-menu-submenu-vertical-right > .ant-menu-submenu-title .ant-menu-submenu-arrow:after, +.ant-menu-submenu-inline > .ant-menu-submenu-title .ant-menu-submenu-arrow:after { + background: #fff; + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.65), rgba(0, 0, 0, 0.65)); + border-radius: 2px; +} +.ant-menu-submenu-vertical > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after, +.ant-menu-submenu-vertical-left > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after, +.ant-menu-submenu-vertical-right > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after, +.ant-menu-submenu-inline > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after, +.ant-menu-submenu-vertical > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before, +.ant-menu-submenu-vertical-left > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before, +.ant-menu-submenu-vertical-right > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before, +.ant-menu-submenu-inline > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before { + background: linear-gradient(to right, @primary-color, @primary-color); +} +.ant-menu-vertical .ant-menu-submenu-selected, +.ant-menu-vertical-left .ant-menu-submenu-selected, +.ant-menu-vertical-right .ant-menu-submenu-selected { + color: @primary-color; +} +.ant-menu-vertical .ant-menu-submenu-selected > a, +.ant-menu-vertical-left .ant-menu-submenu-selected > a, +.ant-menu-vertical-right .ant-menu-submenu-selected > a { + color: @primary-color; +} +.ant-menu-horizontal { + border: 0; + border-bottom: 1px solid #e8e8e8; + box-shadow: none; +} +.ant-menu-horizontal > .ant-menu-item, +.ant-menu-horizontal > .ant-menu-submenu { + border-bottom: 2px solid transparent; +} +.ant-menu-horizontal > .ant-menu-item:hover, +.ant-menu-horizontal > .ant-menu-submenu:hover, +.ant-menu-horizontal > .ant-menu-item-active, +.ant-menu-horizontal > .ant-menu-submenu-active, +.ant-menu-horizontal > .ant-menu-item-open, +.ant-menu-horizontal > .ant-menu-submenu-open, +.ant-menu-horizontal > .ant-menu-item-selected, +.ant-menu-horizontal > .ant-menu-submenu-selected { + border-bottom: 2px solid @primary-color; + color: @primary-color; +} +.ant-menu-horizontal > .ant-menu-item > a { + color: rgba(0, 0, 0, 0.65); +} +.ant-menu-horizontal > .ant-menu-item > a:hover { + color: @primary-color; +} +.ant-menu-horizontal > .ant-menu-item-selected > a { + color: @primary-color; +} +.ant-menu-vertical .ant-menu-item:after, +.ant-menu-vertical-left .ant-menu-item:after, +.ant-menu-vertical-right .ant-menu-item:after, +.ant-menu-inline .ant-menu-item:after { + border-right: 3px solid @primary-color; +} +.ant-menu-inline-collapsed-tooltip a { + color: rgba(255, 255, 255, 0.85); +} +.ant-menu-root.ant-menu-vertical, +.ant-menu-root.ant-menu-vertical-left, +.ant-menu-root.ant-menu-vertical-right, +.ant-menu-root.ant-menu-inline { + box-shadow: none; +} +.ant-menu-sub.ant-menu-inline { + border: 0; + box-shadow: none; + border-radius: 0; +} +.ant-menu-item-disabled, +.ant-menu-submenu-disabled { + color: rgba(0, 0, 0, 0.25) !important; + background: none; + border-color: transparent !important; +} +.ant-menu-item-disabled > a, +.ant-menu-submenu-disabled > a { + color: rgba(0, 0, 0, 0.25) !important; +} +.ant-menu-item-disabled > .ant-menu-submenu-title, +.ant-menu-submenu-disabled > .ant-menu-submenu-title { + color: rgba(0, 0, 0, 0.25) !important; +} +.ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after { + background: rgba(0, 0, 0, 0.25) !important; +} +.ant-menu-dark, +.ant-menu-dark .ant-menu-sub { + color: rgba(255, 255, 255, 0.65); + background: #001529; +} +.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:before { + background: #fff; +} +.ant-menu-dark.ant-menu-submenu-popup { + background: transparent; +} +.ant-menu-dark .ant-menu-inline.ant-menu-sub { + background: #000c17; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.45) inset; +} +.ant-menu-dark.ant-menu-horizontal { + border-bottom: 0; +} +.ant-menu-dark.ant-menu-horizontal > .ant-menu-item, +.ant-menu-dark.ant-menu-horizontal > .ant-menu-submenu { + border-color: #001529; + border-bottom: 0; +} +.ant-menu-dark .ant-menu-item, +.ant-menu-dark .ant-menu-item-group-title, +.ant-menu-dark .ant-menu-item > a { + color: rgba(255, 255, 255, 0.65); +} +.ant-menu-dark.ant-menu-inline, +.ant-menu-dark.ant-menu-vertical, +.ant-menu-dark.ant-menu-vertical-left, +.ant-menu-dark.ant-menu-vertical-right { + border-right: 0; +} +.ant-menu-dark.ant-menu-inline .ant-menu-item, +.ant-menu-dark.ant-menu-vertical .ant-menu-item, +.ant-menu-dark.ant-menu-vertical-left .ant-menu-item, +.ant-menu-dark.ant-menu-vertical-right .ant-menu-item { + border-right: 0; +} +.ant-menu-dark.ant-menu-inline .ant-menu-item:after, +.ant-menu-dark.ant-menu-vertical .ant-menu-item:after, +.ant-menu-dark.ant-menu-vertical-left .ant-menu-item:after, +.ant-menu-dark.ant-menu-vertical-right .ant-menu-item:after { + border-right: 0; +} +.ant-menu-dark .ant-menu-item:hover, +.ant-menu-dark .ant-menu-item-active, +.ant-menu-dark .ant-menu-submenu-active, +.ant-menu-dark .ant-menu-submenu-open, +.ant-menu-dark .ant-menu-submenu-selected, +.ant-menu-dark .ant-menu-submenu-title:hover { + background-color: transparent; + color: #fff; +} +.ant-menu-dark .ant-menu-item:hover > a, +.ant-menu-dark .ant-menu-item-active > a, +.ant-menu-dark .ant-menu-submenu-active > a, +.ant-menu-dark .ant-menu-submenu-open > a, +.ant-menu-dark .ant-menu-submenu-selected > a, +.ant-menu-dark .ant-menu-submenu-title:hover > a { + color: #fff; +} +.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before { + background: #fff; +} +.ant-menu-dark .ant-menu-item-selected { + border-right: 0; + color: #fff; +} +.ant-menu-dark .ant-menu-item-selected:after { + border-right: 0; +} +.ant-menu-dark .ant-menu-item-selected > a, +.ant-menu-dark .ant-menu-item-selected > a:hover { + color: #fff; +} +.ant-menu.ant-menu-dark .ant-menu-item-selected, +.ant-menu-submenu-popup.ant-menu-dark .ant-menu-item-selected { + background-color: @primary-color; +} +.ant-menu-dark .ant-menu-item-disabled, +.ant-menu-dark .ant-menu-submenu-disabled, +.ant-menu-dark .ant-menu-item-disabled > a, +.ant-menu-dark .ant-menu-submenu-disabled > a { + color: rgba(255, 255, 255, 0.35) !important; +} +.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title, +.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title { + color: rgba(255, 255, 255, 0.35) !important; +} +.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after { + background: rgba(255, 255, 255, 0.35) !important; +} +.ant-message { + color: rgba(0, 0, 0, 0.65); +} +.ant-message-notice-content { + border-radius: 4px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + background: #fff; +} +.ant-message-success .anticon { + color: #52c41a; +} +.ant-message-error .anticon { + color: #f5222d; +} +.ant-message-warning .anticon { + color: #faad14; +} +.ant-message-info .anticon, +.ant-message-loading .anticon { + color: @primary-color; +} +.ant-modal { + color: rgba(0, 0, 0, 0.65); +} +.ant-modal-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-modal-content { + background-color: #fff; + border: 0; + border-radius: 4px; + background-clip: padding-box; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); +} +.ant-modal-close { + border: 0; + background: transparent; + color: rgba(0, 0, 0, 0.45); +} +.ant-modal-close:focus, +.ant-modal-close:hover { + color: #444; +} +.ant-modal-header { + border-radius: 4px 4px 0 0; + background: #fff; + color: rgba(0, 0, 0, 0.65); + border-bottom: 1px solid #e8e8e8; +} +.ant-modal-footer { + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +.ant-modal-mask { + background-color: rgba(0, 0, 0, 0.65); +} +.ant-confirm-body .ant-confirm-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-confirm-body .ant-confirm-content { + color: rgba(0, 0, 0, 0.65); +} +.ant-confirm-error .ant-confirm-body > .anticon { + color: #f5222d; +} +.ant-confirm-warning .ant-confirm-body > .anticon, +.ant-confirm-confirm .ant-confirm-body > .anticon { + color: #faad14; +} +.ant-confirm-info .ant-confirm-body > .anticon { + color: @primary-color; +} +.ant-confirm-success .ant-confirm-body > .anticon { + color: #52c41a; +} +.ant-notification { + color: rgba(0, 0, 0, 0.65); +} +.ant-notification-notice { + border-radius: 4px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + background: #fff; +} +.ant-notification-notice-message { + color: rgba(0, 0, 0, 0.85); +} +.ant-notification-notice-message-single-line-auto-margin { + background-color: transparent; +} +.ant-notification-notice-icon-success { + color: #52c41a; +} +.ant-notification-notice-icon-info { + color: @primary-color; +} +.ant-notification-notice-icon-warning { + color: #faad14; +} +.ant-notification-notice-icon-error { + color: #f5222d; +} +.ant-notification-notice-close { + color: rgba(0, 0, 0, 0.45); +} +.ant-notification-notice-close:hover { + color: rgba(0, 0, 0, 0.67); +} +.ant-pagination { + color: rgba(0, 0, 0, 0.65); +} +.ant-pagination-item { + border-radius: 4px; + border: 1px solid #d9d9d9; + background-color: #fff; +} +.ant-pagination-item a { + color: rgba(0, 0, 0, 0.65); +} +.ant-pagination-item:focus, +.ant-pagination-item:hover { + border-color: @primary-color; +} +.ant-pagination-item:focus a, +.ant-pagination-item:hover a { + color: @primary-color; +} +.ant-pagination-item-active { + border-color: @primary-color; +} +.ant-pagination-item-active a { + color: @primary-color; +} +.ant-pagination-item-active:focus, +.ant-pagination-item-active:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-pagination-item-active:focus a, +.ant-pagination-item-active:hover a { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon, +.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon { + color: @primary-color; +} +.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-ellipsis, +.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-ellipsis { + color: rgba(0, 0, 0, 0.25); +} +.ant-pagination-prev, +.ant-pagination-next, +.ant-pagination-jump-prev, +.ant-pagination-jump-next { + color: rgba(0, 0, 0, 0.65); + border-radius: 4px; +} +.ant-pagination-prev a, +.ant-pagination-next a { + color: rgba(0, 0, 0, 0.65); +} +.ant-pagination-prev:hover a, +.ant-pagination-next:hover a { + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-pagination-prev .ant-pagination-item-link, +.ant-pagination-next .ant-pagination-item-link { + border: 1px solid #d9d9d9; + background-color: #fff; + border-radius: 4px; +} +.ant-pagination-prev:focus .ant-pagination-item-link, +.ant-pagination-next:focus .ant-pagination-item-link, +.ant-pagination-prev:hover .ant-pagination-item-link, +.ant-pagination-next:hover .ant-pagination-item-link { + border-color: @primary-color; + color: @primary-color; +} +.ant-pagination-disabled a, +.ant-pagination-disabled:hover a, +.ant-pagination-disabled:focus a, +.ant-pagination-disabled .ant-pagination-item-link, +.ant-pagination-disabled:hover .ant-pagination-item-link, +.ant-pagination-disabled:focus .ant-pagination-item-link { + border-color: #d9d9d9; + color: rgba(0, 0, 0, 0.25); +} +.ant-pagination-options-quick-jumper input { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-pagination-options-quick-jumper input::-moz-placeholder { + color: #bfbfbf; +} +.ant-pagination-options-quick-jumper input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-pagination-options-quick-jumper input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-pagination-options-quick-jumper input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-pagination-options-quick-jumper input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-pagination-options-quick-jumper input-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-pagination-options-quick-jumper input-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link, +.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link { + border: 0; +} +.ant-pagination-simple .ant-pagination-simple-pager input { + background-color: #fff; + border-radius: 4px; + border: 1px solid #d9d9d9; +} +.ant-pagination-simple .ant-pagination-simple-pager input:hover { + border-color: @primary-color; +} +.ant-pagination.mini .ant-pagination-item:not(.ant-pagination-item-active) { + background: transparent; + border-color: transparent; +} +.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link, +.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link { + border-color: transparent; + background: transparent; +} +.ant-popover { + color: rgba(0, 0, 0, 0.65); +} +.ant-popover:after { + background: rgba(255, 255, 255, 0.01); +} +.ant-popover-inner { + background-color: #fff; + background-clip: padding-box; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-popover-title { + border-bottom: 1px solid #e8e8e8; + color: rgba(0, 0, 0, 0.85); +} +.ant-popover-inner-content { + color: rgba(0, 0, 0, 0.65); +} +.ant-popover-message { + color: rgba(0, 0, 0, 0.65); +} +.ant-popover-message > .anticon { + color: #faad14; +} +.ant-popover-arrow { + background: #fff; + border-color: transparent; + border-style: solid; +} +.ant-popover-placement-top > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-topLeft > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-topRight > .ant-popover-content > .ant-popover-arrow { + box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07); +} +.ant-popover-placement-right > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-rightTop > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-rightBottom > .ant-popover-content > .ant-popover-arrow { + box-shadow: -3px 3px 7px rgba(0, 0, 0, 0.07); +} +.ant-popover-placement-bottom > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-bottomLeft > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-bottomRight > .ant-popover-content > .ant-popover-arrow { + box-shadow: -2px -2px 5px rgba(0, 0, 0, 0.06); +} +.ant-popover-placement-left > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-leftTop > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-leftBottom > .ant-popover-content > .ant-popover-arrow { + box-shadow: 3px -3px 7px rgba(0, 0, 0, 0.07); +} +.ant-progress { + color: rgba(0, 0, 0, 0.65); +} +.ant-progress-inner { + background-color: #f5f5f5; + border-radius: 100px; +} +.ant-progress-success-bg, +.ant-progress-bg { + background-color: @primary-color; +} +.ant-progress-success-bg { + background-color: #52c41a; +} +.ant-progress-text { + color: rgba(0, 0, 0, 0.45); +} +.ant-progress-status-active .ant-progress-bg:before { + background: #fff; + border-radius: 10px; +} +.ant-progress-status-exception .ant-progress-bg { + background-color: #f5222d; +} +.ant-progress-status-exception .ant-progress-text { + color: #f5222d; +} +.ant-progress-status-success .ant-progress-bg { + background-color: #52c41a; +} +.ant-progress-status-success .ant-progress-text { + color: #52c41a; +} +.ant-progress-circle .ant-progress-inner { + background-color: transparent; +} +.ant-progress-circle .ant-progress-text { + color: rgba(0, 0, 0, 0.65); +} +.ant-progress-circle.ant-progress-status-exception .ant-progress-text { + color: #f5222d; +} +.ant-progress-circle.ant-progress-status-success .ant-progress-text { + color: #52c41a; +} +.ant-radio-group { + color: rgba(0, 0, 0, 0.65); +} +.ant-radio-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-radio { + color: rgba(0, 0, 0, 0.65); +} +.ant-radio-wrapper:hover .ant-radio .ant-radio-inner, +.ant-radio:hover .ant-radio-inner, +.ant-radio-focused .ant-radio-inner { + border-color: @primary-color; +} +.ant-radio-checked:after { + border-radius: 50%; + border: 1px solid @primary-color; +} +.ant-radio-inner { + border-width: 1px; + border-style: solid; + border-radius: 100px; + border-color: #d9d9d9; + background-color: #fff; +} +.ant-radio-inner:after { + border-radius: 8px; + border-top: 0; + border-left: 0; + background-color: @primary-color; +} +.ant-radio-checked .ant-radio-inner { + border-color: @primary-color; +} +.ant-radio-disabled .ant-radio-inner { + border-color: #d9d9d9 !important; + background-color: #f5f5f5; +} +.ant-radio-disabled .ant-radio-inner:after { + background-color: #ccc; +} +.ant-radio-disabled + span { + color: rgba(0, 0, 0, 0.25); +} +.ant-radio-button-wrapper { + color: rgba(0, 0, 0, 0.65); + border: 1px solid #d9d9d9; + border-left: 0; + border-top-width: 1.02px; + background: #fff; +} +.ant-radio-button-wrapper a { + color: rgba(0, 0, 0, 0.65); +} +.ant-radio-button-wrapper:not(:first-child)::before { + background-color: #d9d9d9; +} +.ant-radio-button-wrapper:first-child { + border-radius: 4px 0 0 4px; + border-left: 1px solid #d9d9d9; +} +.ant-radio-button-wrapper:last-child { + border-radius: 0 4px 4px 0; +} +.ant-radio-button-wrapper:first-child:last-child { + border-radius: 4px; +} +.ant-radio-button-wrapper:hover, +.ant-radio-button-wrapper-focused { + color: @primary-color; +} +.ant-radio-button-wrapper-checked { + background: #fff; + border-color: @primary-color; + color: @primary-color; + box-shadow: -1px 0 0 0 @primary-color; +} +.ant-radio-button-wrapper-checked::before { + background-color: @primary-color !important; +} +.ant-radio-button-wrapper-checked:first-child { + border-color: @primary-color; + box-shadow: none !important; +} +.ant-radio-button-wrapper-checked:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: -1px 0 0 0 color(~`colorPalette("@{primary-color}", 5)`); + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-radio-button-wrapper-checked:active { + border-color: color(~`colorPalette("@{primary-color}", 7)`); + box-shadow: -1px 0 0 0 color(~`colorPalette("@{primary-color}", 7)`); + color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) { + background: @primary-color; + border-color: @primary-color; + color: #fff; +} +.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + background: color(~`colorPalette("@{primary-color}", 5)`); + color: #fff; +} +.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active { + border-color: color(~`colorPalette("@{primary-color}", 7)`); + background: color(~`colorPalette("@{primary-color}", 7)`); + color: #fff; +} +.ant-radio-button-wrapper-disabled { + border-color: #d9d9d9; + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-radio-button-wrapper-disabled:first-child, +.ant-radio-button-wrapper-disabled:hover { + border-color: #d9d9d9; + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-radio-button-wrapper-disabled:first-child { + border-left-color: #d9d9d9; +} +.ant-radio-button-wrapper-disabled.ant-radio-button-wrapper-checked { + color: #fff; + background-color: #e6e6e6; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-rate { + color: rgba(0, 0, 0, 0.65); + color: #fadb14; +} +.ant-rate-star { + color: inherit; +} +.ant-rate-star-first, +.ant-rate-star-second { + color: #e8e8e8; +} +.ant-rate-star-half .ant-rate-star-first, +.ant-rate-star-full .ant-rate-star-second { + color: inherit; +} +.ant-select { + color: rgba(0, 0, 0, 0.65); +} +.ant-select > ul > li > a { + background-color: #fff; +} +.ant-select-arrow { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-selection { + background-color: #fff; + border-radius: 4px; + border: 1px solid #d9d9d9; + border-top-width: 1.02px; +} +.ant-select-selection:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-select-focused .ant-select-selection, +.ant-select-selection:focus, +.ant-select-selection:active { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-select-selection__clear { + background: #fff; + color: rgba(0, 0, 0, 0.25); +} +.ant-select-selection__clear:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-select-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-disabled .ant-select-selection { + background: #f5f5f5; +} +.ant-select-disabled .ant-select-selection:hover, +.ant-select-disabled .ant-select-selection:focus, +.ant-select-disabled .ant-select-selection:active { + border-color: #d9d9d9; + box-shadow: none; +} +.ant-select-disabled .ant-select-selection--multiple .ant-select-selection__choice { + background: #f5f5f5; + color: #aaa; +} +.ant-select-disabled .ant-select-selection__choice__remove { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-disabled .ant-select-selection__choice__remove:hover { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-selection__placeholder, +.ant-select-search__field__placeholder { + color: #bfbfbf; +} +.ant-select-search--inline .ant-select-search__field { + border-width: 0; + background: transparent; + border-radius: 4px; +} +.ant-select-selection--multiple .ant-select-selection__choice { + color: rgba(0, 0, 0, 0.65); + background-color: #fafafa; + border: 1px solid #e8e8e8; + border-radius: 2px; +} +.ant-select-selection--multiple .ant-select-selection__choice__remove { + color: rgba(0, 0, 0, 0.45); +} +.ant-select-selection--multiple .ant-select-selection__choice__remove:hover { + color: #404040; +} +.ant-select-open .ant-select-selection { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-select-combobox .ant-select-search__field { + box-shadow: none; +} +.ant-select-dropdown { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + border-radius: 4px; +} +.ant-select-dropdown-menu-item-group-title { + color: rgba(0, 0, 0, 0.45); +} +.ant-select-dropdown-menu-item-group-list .ant-select-dropdown-menu-item:first-child:not(:last-child), +.ant-select-dropdown-menu-item-group:not(:last-child) .ant-select-dropdown-menu-item-group-list .ant-select-dropdown-menu-item:last-child { + border-radius: 0; +} +.ant-select-dropdown-menu-item { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-dropdown-menu-item:hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-select-dropdown-menu-item:first-child { + border-radius: 4px 4px 0 0; +} +.ant-select-dropdown-menu-item:last-child { + border-radius: 0 0 4px 4px; +} +.ant-select-dropdown-menu-item-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-dropdown-menu-item-disabled:hover { + color: rgba(0, 0, 0, 0.25); + background-color: #fff; +} +.ant-select-dropdown-menu-item-selected, +.ant-select-dropdown-menu-item-selected:hover { + background-color: #fafafa; + color: rgba(0, 0, 0, 0.65); +} +.ant-select-dropdown-menu-item-active { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-select-dropdown-menu-item-divider { + background-color: #e8e8e8; +} +.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item .ant-select-selected-icon { + color: transparent; +} +.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item:hover .ant-select-selected-icon { + color: #ddd; +} +.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item-selected .ant-select-selected-icon, +.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item-selected:hover .ant-select-selected-icon { + color: @primary-color; +} +.ant-skeleton-header .ant-skeleton-avatar { + background: #f2f2f2; +} +.ant-skeleton-header .ant-skeleton-avatar.ant-skeleton-avatar-circle { + border-radius: 50%; +} +.ant-skeleton-header .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle { + border-radius: 50%; +} +.ant-skeleton-header .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle { + border-radius: 50%; +} +.ant-skeleton-content .ant-skeleton-title { + background: #f2f2f2; +} +.ant-skeleton-content .ant-skeleton-paragraph > li { + background: #f2f2f2; +} +.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title, +.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph > li { + background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%); + background-size: 400% 100%; +} +.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar { + background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%); + background-size: 400% 100%; +} +.ant-slider { + color: rgba(0, 0, 0, 0.65); +} +.ant-slider-rail { + border-radius: 2px; + background-color: #f5f5f5; +} +.ant-slider-track { + border-radius: 4px; + background-color: color(~`colorPalette("@{primary-color}", 3)`); +} +.ant-slider-handle { + border-radius: 50%; + border: solid 2px color(~`colorPalette("@{primary-color}", 3)`); + background-color: #fff; +} +.ant-slider-handle:focus { + border-color: #46a6ff; + box-shadow: 0 0 0 5px #8cc8ff; +} +.ant-slider-handle.ant-tooltip-open { + border-color: @primary-color; +} +.ant-slider:hover .ant-slider-rail { + background-color: #e1e1e1; +} +.ant-slider:hover .ant-slider-track { + background-color: color(~`colorPalette("@{primary-color}", 4)`); +} +.ant-slider:hover .ant-slider-handle:not(.ant-tooltip-open) { + border-color: color(~`colorPalette("@{primary-color}", 4)`); +} +.ant-slider-mark-text { + color: rgba(0, 0, 0, 0.45); +} +.ant-slider-mark-text-active { + color: rgba(0, 0, 0, 0.65); +} +.ant-slider-step { + background: transparent; +} +.ant-slider-dot { + border: 2px solid #e8e8e8; + background-color: #fff; + border-radius: 50%; +} +.ant-slider-dot-active { + border-color: #8cc8ff; +} +.ant-slider-disabled .ant-slider-track { + background-color: rgba(0, 0, 0, 0.25) !important; +} +.ant-slider-disabled .ant-slider-handle, +.ant-slider-disabled .ant-slider-dot { + border-color: rgba(0, 0, 0, 0.25) !important; + background-color: #fff; + box-shadow: none; +} +.ant-spin { + color: rgba(0, 0, 0, 0.65); + color: @primary-color; +} +.ant-spin-blur:after { + background: #fff; +} +.ant-spin-tip { + color: rgba(0, 0, 0, 0.45); +} +.ant-spin-dot i { + border-radius: 100%; + background-color: @primary-color; +} +.ant-steps { + color: rgba(0, 0, 0, 0.65); +} +.ant-steps-item-icon { + border: 1px solid rgba(0, 0, 0, 0.25); + border-radius: 32px; +} +.ant-steps-item-icon > .ant-steps-icon { + color: @primary-color; +} +.ant-steps-item-tail:after { + background: #e8e8e8; + border-radius: 1px; +} +.ant-steps-item-title { + color: rgba(0, 0, 0, 0.65); +} +.ant-steps-item-title:after { + background: #e8e8e8; +} +.ant-steps-item-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-steps-item-wait .ant-steps-item-icon { + border-color: rgba(0, 0, 0, 0.25); + background-color: #fff; +} +.ant-steps-item-wait .ant-steps-item-icon > .ant-steps-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-steps-item-wait .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot { + background: rgba(0, 0, 0, 0.25); +} +.ant-steps-item-wait > .ant-steps-item-content > .ant-steps-item-title { + color: rgba(0, 0, 0, 0.45); +} +.ant-steps-item-wait > .ant-steps-item-content > .ant-steps-item-title:after { + background-color: #e8e8e8; +} +.ant-steps-item-wait > .ant-steps-item-content > .ant-steps-item-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-steps-item-wait > .ant-steps-item-tail:after { + background-color: #e8e8e8; +} +.ant-steps-item-process .ant-steps-item-icon { + border-color: @primary-color; + background-color: #fff; +} +.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon { + color: @primary-color; +} +.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot { + background: @primary-color; +} +.ant-steps-item-process > .ant-steps-item-content > .ant-steps-item-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-steps-item-process > .ant-steps-item-content > .ant-steps-item-title:after { + background-color: #e8e8e8; +} +.ant-steps-item-process > .ant-steps-item-content > .ant-steps-item-description { + color: rgba(0, 0, 0, 0.65); +} +.ant-steps-item-process > .ant-steps-item-tail:after { + background-color: #e8e8e8; +} +.ant-steps-item-process .ant-steps-item-icon { + background: @primary-color; +} +.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon { + color: #fff; +} +.ant-steps-item-finish .ant-steps-item-icon { + border-color: @primary-color; + background-color: #fff; +} +.ant-steps-item-finish .ant-steps-item-icon > .ant-steps-icon { + color: @primary-color; +} +.ant-steps-item-finish .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot { + background: @primary-color; +} +.ant-steps-item-finish > .ant-steps-item-content > .ant-steps-item-title { + color: rgba(0, 0, 0, 0.65); +} +.ant-steps-item-finish > .ant-steps-item-content > .ant-steps-item-title:after { + background-color: @primary-color; +} +.ant-steps-item-finish > .ant-steps-item-content > .ant-steps-item-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-steps-item-finish > .ant-steps-item-tail:after { + background-color: @primary-color; +} +.ant-steps-item-error .ant-steps-item-icon { + border-color: #f5222d; + background-color: #fff; +} +.ant-steps-item-error .ant-steps-item-icon > .ant-steps-icon { + color: #f5222d; +} +.ant-steps-item-error .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot { + background: #f5222d; +} +.ant-steps-item-error > .ant-steps-item-content > .ant-steps-item-title { + color: #f5222d; +} +.ant-steps-item-error > .ant-steps-item-content > .ant-steps-item-title:after { + background-color: #e8e8e8; +} +.ant-steps-item-error > .ant-steps-item-content > .ant-steps-item-description { + color: #f5222d; +} +.ant-steps-item-error > .ant-steps-item-tail:after { + background-color: #e8e8e8; +} +.ant-steps-item.ant-steps-next-error .ant-steps-item-title:after { + background: #f5222d; +} +.ant-steps-item-custom .ant-steps-item-icon { + background: none; + border: 0; +} +.ant-steps-item-custom.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon { + color: @primary-color; +} +.ant-steps-small .ant-steps-item-icon { + border-radius: 24px; +} +.ant-steps-small .ant-steps-item-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon { + border-radius: 0; + border: 0; + background: none; +} +.ant-steps-dot .ant-steps-item-icon { + border: 0; + background: transparent; +} +.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot { + border-radius: 100px; +} +.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot:after { + background: rgba(0, 0, 0, 0.001); +} +.ant-switch { + color: rgba(0, 0, 0, 0.65); + border-radius: 100px; + border: 1px solid transparent; + background-color: rgba(0, 0, 0, 0.25); +} +.ant-switch-inner { + color: #fff; +} +.ant-switch-loading-icon, +.ant-switch:after { + border-radius: 18px; + background-color: #fff; +} +.ant-switch:after { + box-shadow: 0 2px 4px 0 rgba(0, 35, 11, 0.2); +} +.ant-switch-loading-icon { + background: transparent; +} +.ant-switch-loading .ant-switch-loading-icon { + color: rgba(0, 0, 0, 0.65); +} +.ant-switch-checked.ant-switch-loading .ant-switch-loading-icon { + color: @primary-color; +} +.ant-switch:focus { + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); +} +.ant-switch:focus:hover { + box-shadow: none; +} +.ant-switch-checked { + background-color: @primary-color; +} +.ant-table { + color: rgba(0, 0, 0, 0.65); +} +.ant-table table { + border-collapse: collapse; + border-radius: 4px 4px 0 0; +} +.ant-table-thead > tr > th { + background: #fafafa; + color: rgba(0, 0, 0, 0.85); + border-bottom: 1px solid #e8e8e8; +} +.ant-table-thead > tr > th .anticon-filter, +.ant-table-thead > tr > th .ant-table-filter-icon { + color: #bfbfbf; +} +.ant-table-thead > tr > th .ant-table-filter-selected.anticon-filter { + color: @primary-color; +} +.ant-table-thead > tr > th .ant-table-column-sorter { + color: #bfbfbf; +} +.ant-table-thead > tr > th .ant-table-column-sorter-up.on, +.ant-table-thead > tr > th .ant-table-column-sorter-down.on { + color: @primary-color; +} +.ant-table-thead > tr > th.ant-table-column-has-actions:hover { + background: #f5f5f5; +} +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .anticon-filter, +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .ant-table-filter-icon { + background: #f5f5f5; +} +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .anticon-filter:hover, +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .ant-table-filter-icon:hover { + color: rgba(0, 0, 0, 0.45); + background: #ebebeb; +} +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .anticon-filter:active, +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .ant-table-filter-icon:active { + color: rgba(0, 0, 0, 0.65); +} +.ant-table-thead > tr > th.ant-table-column-has-actions .anticon-filter.ant-table-filter-open, +.ant-table-thead > tr > th.ant-table-column-has-actions .ant-table-filter-icon.ant-table-filter-open { + color: rgba(0, 0, 0, 0.45); + background: #ebebeb; +} +.ant-table-thead > tr > th.ant-table-column-has-actions:active .ant-table-column-sorter-up:not(.on), +.ant-table-thead > tr > th.ant-table-column-has-actions:active .ant-table-column-sorter-down:not(.on) { + color: rgba(0, 0, 0, 0.45); +} +.ant-table-thead > tr > th .ant-table-column-sorters:before { + background: transparent; +} +.ant-table-thead > tr > th .ant-table-column-sorters:hover:before { + background: rgba(0, 0, 0, 0.04); +} +.ant-table-thead > tr:first-child > th:first-child { + border-top-left-radius: 4px; +} +.ant-table-thead > tr:first-child > th:last-child { + border-top-right-radius: 4px; +} +.ant-table-thead > tr:not(:last-child) > th[colspan] { + border-bottom: 0; +} +.ant-table-tbody > tr > td { + border-bottom: 1px solid #e8e8e8; +} +.ant-table-thead > tr.ant-table-row-hover > td, +.ant-table-tbody > tr.ant-table-row-hover > td, +.ant-table-thead > tr:hover > td, +.ant-table-tbody > tr:hover > td { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-table-thead > tr:hover { + background: none; +} +.ant-table-footer { + background: #fafafa; + border-radius: 0 0 4px 4px; + border-top: 1px solid #e8e8e8; +} +.ant-table-footer:before { + background: #fafafa; +} +.ant-table.ant-table-bordered .ant-table-footer { + border: 1px solid #e8e8e8; +} +.ant-table-title { + border-radius: 4px 4px 0 0; +} +.ant-table.ant-table-bordered .ant-table-title { + border: 1px solid #e8e8e8; +} +.ant-table-title + .ant-table-content { + border-radius: 4px 4px 0 0; +} +.ant-table-bordered .ant-table-title + .ant-table-content, +.ant-table-bordered .ant-table-title + .ant-table-content table, +.ant-table-bordered .ant-table-title + .ant-table-content .ant-table-thead > tr:first-child > th { + border-radius: 0; +} +.ant-table-without-column-header .ant-table-title + .ant-table-content, +.ant-table-without-column-header table { + border-radius: 0; +} +.ant-table-tbody > tr.ant-table-row-selected td { + background: #fafafa; +} +.ant-table-thead > tr > th.ant-table-column-sort { + background: #f5f5f5; +} +.ant-table-tbody > tr > td.ant-table-column-sort { + background: rgba(0, 0, 0, 0.01); +} +.ant-table-header { + background: #fafafa; +} +.ant-table-header table { + border-radius: 4px 4px 0 0; +} +.ant-table-loading .ant-table-body { + background: #fff; +} +.ant-table-bordered .ant-table-header > table, +.ant-table-bordered .ant-table-body > table, +.ant-table-bordered .ant-table-fixed-left table, +.ant-table-bordered .ant-table-fixed-right table { + border: 1px solid #e8e8e8; + border-right: 0; + border-bottom: 0; +} +.ant-table-bordered.ant-table-empty .ant-table-placeholder { + border-left: 1px solid #e8e8e8; + border-right: 1px solid #e8e8e8; +} +.ant-table-bordered.ant-table-fixed-header .ant-table-header > table { + border-bottom: 0; +} +.ant-table-bordered.ant-table-fixed-header .ant-table-body > table { + border-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.ant-table-bordered.ant-table-fixed-header .ant-table-body-inner > table { + border-top: 0; +} +.ant-table-bordered.ant-table-fixed-header .ant-table-placeholder { + border: 0; +} +.ant-table-bordered .ant-table-thead > tr:not(:last-child) > th { + border-bottom: 1px solid #e8e8e8; +} +.ant-table-bordered .ant-table-thead > tr > th, +.ant-table-bordered .ant-table-tbody > tr > td { + border-right: 1px solid #e8e8e8; +} +.ant-table-placeholder { + background: #fff; + border-bottom: 1px solid #e8e8e8; + color: rgba(0, 0, 0, 0.45); +} +.ant-table-filter-dropdown { + background: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-table-filter-dropdown .ant-dropdown-menu { + border: 0; + box-shadow: none; + border-radius: 4px 4px 0 0; +} +.ant-table-filter-dropdown .ant-dropdown-menu-sub { + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-table-filter-dropdown .ant-dropdown-menu .ant-dropdown-submenu-contain-selected .ant-dropdown-menu-submenu-title:after { + color: @primary-color; +} +.ant-table-filter-dropdown > .ant-dropdown-menu > .ant-dropdown-menu-item:last-child, +.ant-table-filter-dropdown > .ant-dropdown-menu > .ant-dropdown-menu-submenu:last-child .ant-dropdown-menu-submenu-title { + border-radius: 0; +} +.ant-table-filter-dropdown-btns { + border-top: 1px solid #e8e8e8; +} +.ant-table-filter-dropdown-link { + color: @primary-color; +} +.ant-table-filter-dropdown-link:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-table-filter-dropdown-link:active { + color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-table-selection .anticon-down { + color: #bfbfbf; +} +.ant-table-selection-menu { + background: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-table-selection-menu .ant-action-down { + color: #bfbfbf; +} +.ant-table-selection-down:hover .anticon-down { + color: #666; +} +.ant-table-row-expand-icon { + border: 1px solid #e8e8e8; + background: #fff; +} +tr.ant-table-expanded-row, +tr.ant-table-expanded-row:hover { + background: #fbfbfb; +} +.ant-table-fixed-header > .ant-table-content > .ant-table-scroll > .ant-table-body { + background: #fff; +} +.ant-table-fixed-left, +.ant-table-fixed-right { + border-radius: 0; +} +.ant-table-fixed-left table, +.ant-table-fixed-right table { + background: #fff; +} +.ant-table-fixed-header .ant-table-fixed-left .ant-table-body-outer .ant-table-fixed, +.ant-table-fixed-header .ant-table-fixed-right .ant-table-body-outer .ant-table-fixed { + border-radius: 0; +} +.ant-table-fixed-left { + box-shadow: 6px 0 6px -4px rgba(0, 0, 0, 0.15); +} +.ant-table-fixed-left, +.ant-table-fixed-left table { + border-radius: 4px 0 0 0; +} +.ant-table-fixed-left .ant-table-thead > tr > th:last-child { + border-top-right-radius: 0; +} +.ant-table-fixed-right { + box-shadow: -6px 0 6px -4px rgba(0, 0, 0, 0.15); +} +.ant-table-fixed-right, +.ant-table-fixed-right table { + border-radius: 0 4px 0 0; +} +.ant-table-fixed-right .ant-table-expanded-row { + color: transparent; +} +.ant-table-fixed-right .ant-table-thead > tr > th:first-child { + border-top-left-radius: 0; +} +.ant-table.ant-table-scroll-position-left .ant-table-fixed-left { + box-shadow: none; +} +.ant-table.ant-table-scroll-position-right .ant-table-fixed-right { + box-shadow: none; +} +.ant-table-small { + border: 1px solid #e8e8e8; + border-radius: 4px; +} +.ant-table-small > .ant-table-title { + border-bottom: 1px solid #e8e8e8; +} +.ant-table-small > .ant-table-content > .ant-table-header > table, +.ant-table-small > .ant-table-content > .ant-table-body > table, +.ant-table-small > .ant-table-content > .ant-table-scroll > .ant-table-header > table, +.ant-table-small > .ant-table-content > .ant-table-scroll > .ant-table-body > table, +.ant-table-small > .ant-table-content > .ant-table-fixed-left > .ant-table-header > table, +.ant-table-small > .ant-table-content > .ant-table-fixed-right > .ant-table-header > table, +.ant-table-small > .ant-table-content > .ant-table-fixed-left > .ant-table-body-outer > .ant-table-body-inner > table, +.ant-table-small > .ant-table-content > .ant-table-fixed-right > .ant-table-body-outer > .ant-table-body-inner > table { + border: 0; +} +.ant-table-small > .ant-table-content > .ant-table-header > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-body > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-scroll > .ant-table-header > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-scroll > .ant-table-body > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-fixed-left > .ant-table-header > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-fixed-right > .ant-table-header > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-fixed-left > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-fixed-right > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-thead > tr > th { + background: #fff; + border-bottom: 1px solid #e8e8e8; +} +.ant-table-small > .ant-table-content .ant-table-header { + background: #fff; +} +.ant-table-small > .ant-table-content .ant-table-placeholder, +.ant-table-small > .ant-table-content .ant-table-row:last-child td { + border-bottom: 0; +} +.ant-table-small.ant-table-bordered { + border-right: 0; +} +.ant-table-small.ant-table-bordered .ant-table-title { + border: 0; + border-bottom: 1px solid #e8e8e8; + border-right: 1px solid #e8e8e8; +} +.ant-table-small.ant-table-bordered .ant-table-content { + border-right: 1px solid #e8e8e8; +} +.ant-table-small.ant-table-bordered .ant-table-footer { + border: 0; + border-top: 1px solid #e8e8e8; + border-right: 1px solid #e8e8e8; +} +.ant-table-small.ant-table-bordered .ant-table-placeholder { + border-left: 0; + border-bottom: 0; +} +.ant-table-small.ant-table-bordered .ant-table-thead > tr > th:last-child, +.ant-table-small.ant-table-bordered .ant-table-tbody > tr > td:last-child { + border-right: none; +} +.ant-table-small.ant-table-bordered .ant-table-fixed-left .ant-table-thead > tr > th:last-child, +.ant-table-small.ant-table-bordered .ant-table-fixed-left .ant-table-tbody > tr > td:last-child { + border-right: 1px solid #e8e8e8; +} +.ant-table-small.ant-table-bordered .ant-table-fixed-right { + border-right: 1px solid #e8e8e8; +} +.ant-tabs.ant-tabs-card > .ant-tabs-bar .ant-tabs-tab { + border: 1px solid #e8e8e8; + border-bottom: 0; + border-radius: 4px 4px 0 0; + background: #fafafa; +} +.ant-tabs.ant-tabs-card > .ant-tabs-bar .ant-tabs-tab-active { + background: #fff; + border-color: @primary-color !important; + color: @primary-color; +} +.ant-tabs.ant-tabs-card > .ant-tabs-bar .ant-tabs-tab .ant-tabs-close-x { + color: rgba(0, 0, 0, 0.45); +} +.ant-tabs.ant-tabs-card > .ant-tabs-bar .ant-tabs-tab .ant-tabs-close-x:hover { + color: rgba(0, 0, 0, 0.85); +} +.ant-tabs-extra-content .ant-tabs-new-tab { + border-radius: 2px; + border: 1px solid #e8e8e8; + color: rgba(0, 0, 0, 0.65); +} +.ant-tabs-extra-content .ant-tabs-new-tab:hover { + color: @primary-color; + border-color: @primary-color; +} +.ant-tabs-vertical.ant-tabs-card > .ant-tabs-bar .ant-tabs-tab { + border-bottom: 1px solid #e8e8e8; +} +.ant-tabs-vertical.ant-tabs-card.ant-tabs-left > .ant-tabs-bar .ant-tabs-tab { + border-right: 0; + border-radius: 4px 0 0 4px; +} +.ant-tabs-vertical.ant-tabs-card.ant-tabs-right > .ant-tabs-bar .ant-tabs-tab { + border-left: 0; + border-radius: 0 4px 4px 0; +} +.ant-tabs.ant-tabs-card.ant-tabs-bottom > .ant-tabs-bar .ant-tabs-tab { + border-bottom: 1px solid #e8e8e8; + border-top: 0; + border-radius: 0 0 4px 4px; +} +.ant-tabs.ant-tabs-card.ant-tabs-bottom > .ant-tabs-bar .ant-tabs-tab-active { + color: @primary-color; +} +.ant-tabs { + color: rgba(0, 0, 0, 0.65); +} +.ant-tabs-ink-bar { + background-color: @primary-color; +} +.ant-tabs-bar { + border-bottom: 1px solid #e8e8e8; +} +.ant-tabs-bottom .ant-tabs-bar { + border-bottom: none; + border-top: 1px solid #e8e8e8; +} +.ant-tabs-tab-prev, +.ant-tabs-tab-next { + border: 0; + background-color: transparent; + color: rgba(0, 0, 0, 0.45); +} +.ant-tabs-tab-prev:hover, +.ant-tabs-tab-next:hover { + color: rgba(0, 0, 0, 0.65); +} +.ant-tabs-tab-btn-disabled, +.ant-tabs-tab-btn-disabled:hover { + color: rgba(0, 0, 0, 0.25); +} +.ant-tabs-nav .ant-tabs-tab-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-tabs-nav .ant-tabs-tab:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-tabs-nav .ant-tabs-tab:active { + color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-tabs-nav .ant-tabs-tab-active { + color: @primary-color; +} +.ant-tabs-vertical > .ant-tabs-bar { + border-bottom: 0; +} +.ant-tabs-vertical.ant-tabs-left > .ant-tabs-bar { + border-right: 1px solid #e8e8e8; +} +.ant-tabs-vertical.ant-tabs-left > .ant-tabs-content { + border-left: 1px solid #e8e8e8; +} +.ant-tabs-vertical.ant-tabs-right > .ant-tabs-bar { + border-left: 1px solid #e8e8e8; +} +.ant-tabs-vertical.ant-tabs-right > .ant-tabs-content { + border-right: 1px solid #e8e8e8; +} +.ant-tag { + color: rgba(0, 0, 0, 0.65); + border-radius: 4px; + border: 1px solid #d9d9d9; + background: #fafafa; +} +.ant-tag, +.ant-tag a, +.ant-tag a:hover { + color: rgba(0, 0, 0, 0.65); +} +.ant-tag .anticon-close { + color: rgba(0, 0, 0, 0.45); +} +.ant-tag .anticon-close:hover { + color: rgba(0, 0, 0, 0.85); +} +.ant-tag-has-color { + border-color: transparent; +} +.ant-tag-has-color, +.ant-tag-has-color a, +.ant-tag-has-color a:hover, +.ant-tag-has-color .anticon-close, +.ant-tag-has-color .anticon-close:hover { + color: #fff; +} +.ant-tag-checkable { + background-color: transparent; + border-color: transparent; +} +.ant-tag-checkable:not(.ant-tag-checkable-checked):hover { + color: @primary-color; +} +.ant-tag-checkable:active, +.ant-tag-checkable-checked { + color: #fff; +} +.ant-tag-checkable-checked { + background-color: @primary-color; +} +.ant-tag-checkable:active { + background-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-tag-pink { + color: #eb2f96; + background: #fff0f6; + border-color: #ffadd2; +} +.ant-tag-pink-inverse { + background: #eb2f96; + border-color: #eb2f96; + color: #fff; +} +.ant-tag-magenta { + color: #eb2f96; + background: #fff0f6; + border-color: #ffadd2; +} +.ant-tag-magenta-inverse { + background: #eb2f96; + border-color: #eb2f96; + color: #fff; +} +.ant-tag-red { + color: #f5222d; + background: #fff1f0; + border-color: #ffa39e; +} +.ant-tag-red-inverse { + background: #f5222d; + border-color: #f5222d; + color: #fff; +} +.ant-tag-volcano { + color: #fa541c; + background: #fff2e8; + border-color: #ffbb96; +} +.ant-tag-volcano-inverse { + background: #fa541c; + border-color: #fa541c; + color: #fff; +} +.ant-tag-orange { + color: #fa8c16; + background: #fff7e6; + border-color: #ffd591; +} +.ant-tag-orange-inverse { + background: #fa8c16; + border-color: #fa8c16; + color: #fff; +} +.ant-tag-yellow { + color: #fadb14; + background: #feffe6; + border-color: #fffb8f; +} +.ant-tag-yellow-inverse { + background: #fadb14; + border-color: #fadb14; + color: #fff; +} +.ant-tag-gold { + color: #faad14; + background: #fffbe6; + border-color: #ffe58f; +} +.ant-tag-gold-inverse { + background: #faad14; + border-color: #faad14; + color: #fff; +} +.ant-tag-cyan { + color: #13c2c2; + background: #e6fffb; + border-color: #87e8de; +} +.ant-tag-cyan-inverse { + background: #13c2c2; + border-color: #13c2c2; + color: #fff; +} +.ant-tag-lime { + color: #a0d911; + background: #fcffe6; + border-color: #eaff8f; +} +.ant-tag-lime-inverse { + background: #a0d911; + border-color: #a0d911; + color: #fff; +} +.ant-tag-green { + color: #52c41a; + background: #f6ffed; + border-color: #b7eb8f; +} +.ant-tag-green-inverse { + background: #52c41a; + border-color: #52c41a; + color: #fff; +} +.ant-tag-blue { + color: @primary-color; + background: color(~`colorPalette("@{primary-color}", 1)`); + border-color: color(~`colorPalette("@{primary-color}", 3)`); +} +.ant-tag-blue-inverse { + background: @primary-color; + border-color: @primary-color; + color: #fff; +} +.ant-tag-geekblue { + color: #2f54eb; + background: #f0f5ff; + border-color: #adc6ff; +} +.ant-tag-geekblue-inverse { + background: #2f54eb; + border-color: #2f54eb; + color: #fff; +} +.ant-tag-purple { + color: #722ed1; + background: #f9f0ff; + border-color: #d3adf7; +} +.ant-tag-purple-inverse { + background: #722ed1; + border-color: #722ed1; + color: #fff; +} +.ant-time-picker-panel { + color: rgba(0, 0, 0, 0.65); +} +.ant-time-picker-panel-inner { + background-color: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + background-clip: padding-box; +} +.ant-time-picker-panel-input { + border: 0; +} +.ant-time-picker-panel-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-time-picker-panel-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-time-picker-panel-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-time-picker-panel-input-wrap { + border-bottom: 1px solid #e8e8e8; +} +.ant-time-picker-panel-input-invalid { + border-color: red; +} +.ant-time-picker-panel-clear-btn-icon svg { + color: rgba(0, 0, 0, 0.25); +} +.ant-time-picker-panel-clear-btn-icon svg:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-time-picker-panel-select { + border-left: 1px solid #e8e8e8; +} +.ant-time-picker-panel-select:first-child { + border-left: 0; +} +.ant-time-picker-panel-select:last-child { + border-right: 0; +} +.ant-time-picker-panel-select li:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +li.ant-time-picker-panel-select-option-selected { + background: #f5f5f5; +} +li.ant-time-picker-panel-select-option-selected:hover { + background: #f5f5f5; +} +li.ant-time-picker-panel-select-option-disabled { + color: rgba(0, 0, 0, 0.25); +} +li.ant-time-picker-panel-select-option-disabled:hover { + background: transparent; +} +.ant-time-picker-panel-addon { + border-top: 1px solid #e8e8e8; +} +.ant-time-picker { + color: rgba(0, 0, 0, 0.65); +} +.ant-time-picker-input { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-time-picker-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-time-picker-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-time-picker-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-time-picker-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-time-picker-input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-time-picker-input-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-time-picker-input-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-time-picker-input[disabled] { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-time-picker-input[disabled]:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-time-picker-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-time-picker-icon .ant-time-picker-clock-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-timeline { + color: rgba(0, 0, 0, 0.65); +} +.ant-timeline-item-tail { + border-left: 2px solid #e8e8e8; +} +.ant-timeline-item-head { + background-color: #fff; + border-radius: 100px; + border: 2px solid transparent; +} +.ant-timeline-item-head-blue { + border-color: @primary-color; + color: @primary-color; +} +.ant-timeline-item-head-red { + border-color: #f5222d; + color: #f5222d; +} +.ant-timeline-item-head-green { + border-color: #52c41a; + color: #52c41a; +} +.ant-timeline-item-head-custom { + border: 0; + border-radius: 0; +} +.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail { + border-left: 2px dotted #e8e8e8; +} +.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail { + border-left: 2px dotted #e8e8e8; +} +.ant-tooltip { + color: rgba(0, 0, 0, 0.65); +} +.ant-tooltip-inner { + color: #fff; + background-color: rgba(0, 0, 0, 0.75); + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-tooltip-arrow { + border-color: transparent; + border-style: solid; +} +.ant-tooltip-placement-top .ant-tooltip-arrow, +.ant-tooltip-placement-topLeft .ant-tooltip-arrow, +.ant-tooltip-placement-topRight .ant-tooltip-arrow { + border-width: 5px 5px 0; + border-top-color: rgba(0, 0, 0, 0.75); +} +.ant-tooltip-placement-right .ant-tooltip-arrow, +.ant-tooltip-placement-rightTop .ant-tooltip-arrow, +.ant-tooltip-placement-rightBottom .ant-tooltip-arrow { + border-width: 5px 5px 5px 0; + border-right-color: rgba(0, 0, 0, 0.75); +} +.ant-tooltip-placement-left .ant-tooltip-arrow, +.ant-tooltip-placement-leftTop .ant-tooltip-arrow, +.ant-tooltip-placement-leftBottom .ant-tooltip-arrow { + border-width: 5px 0 5px 5px; + border-left-color: rgba(0, 0, 0, 0.75); +} +.ant-tooltip-placement-bottom .ant-tooltip-arrow, +.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow, +.ant-tooltip-placement-bottomRight .ant-tooltip-arrow { + border-width: 0 5px 5px; + border-bottom-color: rgba(0, 0, 0, 0.75); +} +.ant-transfer { + color: rgba(0, 0, 0, 0.65); +} +.ant-transfer-disabled .ant-transfer-list { + background: #f5f5f5; +} +.ant-transfer-list { + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-transfer-list-search-action { + color: rgba(0, 0, 0, 0.25); +} +.ant-transfer-list-search-action .anticon { + color: rgba(0, 0, 0, 0.25); +} +.ant-transfer-list-search-action .anticon:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-transfer-list-header { + border-radius: 4px 4px 0 0; + background: #fff; + color: rgba(0, 0, 0, 0.65); + border-bottom: 1px solid #e8e8e8; +} +.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-transfer-list-content-item-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-transfer-list-body-not-found { + color: rgba(0, 0, 0, 0.25); +} +.ant-transfer-list-footer { + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +.ant-select-tree-checkbox { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-inner, +.ant-select-tree-checkbox:hover .ant-select-tree-checkbox-inner, +.ant-select-tree-checkbox-input:focus + .ant-select-tree-checkbox-inner { + border-color: @primary-color; +} +.ant-select-tree-checkbox-checked:after { + border-radius: 2px; + border: 1px solid @primary-color; +} +.ant-select-tree-checkbox-inner { + border: 1px solid #d9d9d9; + border-radius: 2px; + background-color: #fff; +} +.ant-select-tree-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner:after { + border: 0; + background-color: @primary-color; +} +.ant-select-tree-checkbox-indeterminate.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner { + background-color: @primary-color; + border-color: @primary-color; +} +.ant-select-tree-checkbox-disabled.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner { + border-color: #d9d9d9 !important; + background-color: #f5f5f5; +} +.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner:after { + border-color: #f5f5f5; +} +.ant-select-tree-checkbox-disabled + span { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-tree-checkbox-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree-checkbox-group { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree li .ant-select-tree-node-content-wrapper { + border-radius: 2px; + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree li .ant-select-tree-node-content-wrapper:hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-select-tree li .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected { + background-color: color(~`colorPalette("@{primary-color}", 2)`); +} +.ant-select-tree li span.ant-select-tree-switcher, +.ant-select-tree li span.ant-select-tree-iconEle { + border: 0 none; +} +.ant-select-tree li span.ant-select-icon_loading .ant-select-switcher-loading-icon { + color: @primary-color; +} +.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_open .ant-select-switcher-loading-icon, +.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_close .ant-select-switcher-loading-icon { + color: @primary-color; +} +li.ant-select-tree-treenode-disabled > span:not(.ant-select-tree-switcher), +li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper, +li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper span { + color: rgba(0, 0, 0, 0.25); +} +li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper:hover { + background: transparent; +} +.ant-select-tree-dropdown { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree-dropdown .ant-select-dropdown-search .ant-select-search__field { + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-select-tree-dropdown .ant-select-not-found { + color: rgba(0, 0, 0, 0.25); +} +.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li span.ant-tree-node-content-wrapper { + border-radius: 0; +} +.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper:hover, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li span.ant-tree-node-content-wrapper:hover { + background: transparent; +} +.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper:hover:before, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li span.ant-tree-node-content-wrapper:hover:before { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper.ant-tree-node-selected, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li span.ant-tree-node-content-wrapper.ant-tree-node-selected { + color: #fff; + background: transparent; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-switcher, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-switcher { + color: #fff; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-checkbox .ant-tree-checkbox-inner, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-checkbox .ant-tree-checkbox-inner { + border-color: @primary-color; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked:after, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked:after { + border-color: #fff; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner { + background: #fff; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after { + border-color: @primary-color; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-node-content-wrapper:before, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-node-content-wrapper:before { + background: @primary-color; +} +.ant-tree-checkbox { + color: rgba(0, 0, 0, 0.65); +} +.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-inner, +.ant-tree-checkbox:hover .ant-tree-checkbox-inner, +.ant-tree-checkbox-input:focus + .ant-tree-checkbox-inner { + border-color: @primary-color; +} +.ant-tree-checkbox-checked:after { + border-radius: 2px; + border: 1px solid @primary-color; +} +.ant-tree-checkbox-inner { + border: 1px solid #d9d9d9; + border-radius: 2px; + background-color: #fff; +} +.ant-tree-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner:after { + border: 0; + background-color: @primary-color; +} +.ant-tree-checkbox-indeterminate.ant-tree-checkbox-disabled .ant-tree-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-tree-checkbox-checked .ant-tree-checkbox-inner { + background-color: @primary-color; + border-color: @primary-color; +} +.ant-tree-checkbox-disabled.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-tree-checkbox-disabled .ant-tree-checkbox-inner { + border-color: #d9d9d9 !important; + background-color: #f5f5f5; +} +.ant-tree-checkbox-disabled .ant-tree-checkbox-inner:after { + border-color: #f5f5f5; +} +.ant-tree-checkbox-disabled + span { + color: rgba(0, 0, 0, 0.25); +} +.ant-tree-checkbox-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-tree-checkbox-group { + color: rgba(0, 0, 0, 0.65); +} +.ant-tree { + color: rgba(0, 0, 0, 0.65); +} +.ant-tree li span[draggable], +.ant-tree li span[draggable="true"] { + border-top: 2px transparent solid; + border-bottom: 2px transparent solid; +} +.ant-tree li.drag-over > span[draggable] { + background-color: @primary-color; + color: white; +} +.ant-tree li.drag-over-gap-top > span[draggable] { + border-top-color: @primary-color; +} +.ant-tree li.drag-over-gap-bottom > span[draggable] { + border-bottom-color: @primary-color; +} +.ant-tree li.filter-node > span { + color: #f5222d !important; +} +.ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-loading-icon, +.ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-loading-icon { + color: @primary-color; +} +.ant-tree li .ant-tree-node-content-wrapper { + border-radius: 2px; + color: rgba(0, 0, 0, 0.65); +} +.ant-tree li .ant-tree-node-content-wrapper:hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-tree li .ant-tree-node-content-wrapper.ant-tree-node-selected { + background-color: color(~`colorPalette("@{primary-color}", 2)`); +} +.ant-tree li span.ant-tree-switcher, +.ant-tree li span.ant-tree-iconEle { + border: 0 none; +} +li.ant-tree-treenode-disabled > span:not(.ant-tree-switcher), +li.ant-tree-treenode-disabled > .ant-tree-node-content-wrapper, +li.ant-tree-treenode-disabled > .ant-tree-node-content-wrapper span { + color: rgba(0, 0, 0, 0.25); +} +li.ant-tree-treenode-disabled > .ant-tree-node-content-wrapper:hover { + background: transparent; +} +.ant-tree.ant-tree-show-line li span.ant-tree-switcher { + background: #fff; + color: rgba(0, 0, 0, 0.45); +} +.ant-tree.ant-tree-show-line li:not(:last-child):before { + border-left: 1px solid #d9d9d9; +} +.ant-upload { + color: rgba(0, 0, 0, 0.65); +} +.ant-upload.ant-upload-select-picture-card { + border: 1px dashed #d9d9d9; + border-radius: 4px; + background-color: #fafafa; +} +.ant-upload.ant-upload-select-picture-card:hover { + border-color: @primary-color; +} +.ant-upload.ant-upload-drag { + border: 1px dashed #d9d9d9; + border-radius: 4px; + background: #fafafa; +} +.ant-upload.ant-upload-drag.ant-upload-drag-hover:not(.ant-upload-disabled) { + border: 2px dashed color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-upload.ant-upload-drag:not(.ant-upload-disabled):hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-upload.ant-upload-drag p.ant-upload-drag-icon .anticon { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-upload.ant-upload-drag p.ant-upload-text { + color: rgba(0, 0, 0, 0.85); +} +.ant-upload.ant-upload-drag p.ant-upload-hint { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload.ant-upload-drag .anticon-plus { + color: rgba(0, 0, 0, 0.25); +} +.ant-upload.ant-upload-drag .anticon-plus:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload.ant-upload-drag:hover .anticon-plus { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload-list { + color: rgba(0, 0, 0, 0.65); +} +.ant-upload-list-item-info .anticon-loading, +.ant-upload-list-item-info .anticon-paper-clip { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload-list-item .anticon-close { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload-list-item .anticon-close:hover { + color: rgba(0, 0, 0, 0.65); +} +.ant-upload-list-item:hover .ant-upload-list-item-info { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-upload-list-item-error, +.ant-upload-list-item-error .anticon-paper-clip, +.ant-upload-list-item-error .ant-upload-list-item-name { + color: #f5222d; +} +.ant-upload-list-item-error .anticon-close { + color: #f5222d !important; +} +.ant-upload-list-picture .ant-upload-list-item, +.ant-upload-list-picture-card .ant-upload-list-item { + border-radius: 4px; + border: 1px solid #d9d9d9; +} +.ant-upload-list-picture .ant-upload-list-item:hover, +.ant-upload-list-picture-card .ant-upload-list-item:hover { + background: transparent; +} +.ant-upload-list-picture .ant-upload-list-item-error, +.ant-upload-list-picture-card .ant-upload-list-item-error { + border-color: #f5222d; +} +.ant-upload-list-picture .ant-upload-list-item:hover .ant-upload-list-item-info, +.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info { + background: transparent; +} +.ant-upload-list-picture .ant-upload-list-item-uploading, +.ant-upload-list-picture-card .ant-upload-list-item-uploading { + border-style: dashed; +} +.ant-upload-list-picture .ant-upload-list-item-icon, +.ant-upload-list-picture-card .ant-upload-list-item-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-upload-list-picture .ant-upload-list-item-thumbnail.anticon:before, +.ant-upload-list-picture-card .ant-upload-list-item-thumbnail.anticon:before { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload-list-picture-card .ant-upload-list-item-info:before { + background-color: rgba(0, 0, 0, 0.5); +} +.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye-o, +.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete { + color: rgba(255, 255, 255, 0.85); +} +.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye-o:hover, +.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete:hover { + color: #fff; +} +.ant-upload-list-picture-card .ant-upload-list-item-uploading.ant-upload-list-item { + background-color: #fafafa; +} +.ant-upload-list-picture-card .ant-upload-list-item-uploading-text { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload-list .ant-upload-success-icon { + color: #52c41a; +} + +.drawer .drawer-content { + background: #001529; +} + +.ant-list-item-meta .taobao { + color: #ff4000; + border-radius: 4px; +} +.ant-list-item-meta .dingding { + background-color: #2eabff; + color: #fff; + border-radius: 4px; +} +.ant-list-item-meta .alipay { + color: #2eabff; + border-radius: 4px; +} +font.strong { + color: #52c41a; +} +font.medium { + color: #faad14; +} +font.weak { + color: #f5222d; +} + + +// begin -------- JAreaLinkage 三级联动样式 -------------- +.cascader-menu-list .cascader-menu-option.hover, +.cascader-menu-list .cascader-menu-option:hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} + +.area-selectable-list .area-select-option.hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} + +.area-select:hover { + border-color: @primary-color; +} + +.area-select:active { + box-shadow: 0 0 0 2px color(~`colorPalette("@{primary-color}", 1)`); +} +// end -------- JAreaLinkage 三级联动样式 -------------- \ No newline at end of file diff --git a/jshERP-web/public/doc/goods_template.xls b/jshERP-web/public/doc/goods_template.xls new file mode 100644 index 0000000000000000000000000000000000000000..1db5ee5c283c90339a0fb812975744b8ea33d58c GIT binary patch literal 19968 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 literal 0 HcmV?d00001 diff --git a/jshERP-web/public/favicon.ico b/jshERP-web/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..0cea3f1b670357bf419efc21151a1052d56cdcd3 GIT binary patch literal 51262 zcmeI534B~-x&KcA0mZ+lD9XM6&&7NF`%$l=NZDmaL4~3saB)MSE{N-8DT_es3W6Ye z>E0&knmtX^q*)o|Y?wSU-qrz=m?p7oZ@;6TX+2IiI70hvK z(uMrm26tnJyS`1ZH|D!FnQp}*w=&JG&U71Bh!BuqZKJ!Y3M%-@5)b!fr(PQv0&c}Z zwf0J{W7<`-0iM6d!gK|%kq^h7})Qf z`m`SbU-1IBF30Vvb~m(%=aDV7Il{Rl!7YwAD?!hp0c9O(Kx_|mNOeU0s+DeCu8;@zqFA>mPD>;R1>fLbwoo5KA|aZPNQfz@fTpfr z+FLZQzrTHQf37!wwhT*TI6RMrZ7P(I2kOFDEsH;0x`l zUFx}dR zs|2G3A28d>dW&LX$DB3e8hs2hO~2}#`WMFfkW@Gk4a+?$K!^Ydu!~M^5=iVIM&SIm zav6|fdkcQ7Tbk%AjcaY=@Ldrd#-??P6bZ%pwp~6z(k6h9&SSi!AX~oH@3#4#6$`w**E0f(W@MpU# z=E%+|P1>Iqo%_&rVtYUGhru7%E%+EVA^6AN=_K9lEV$j7a=EC$MrfP(u)7jtDbH=n zmvRSx9<3n4)+Ja}d~$hbgeYaeVC@jD!GK5FFOL!U68MSRQ(ud}<5L2>FZg}=zgqSr zB;XN~siPvm{}%t0d!3Z;J5e`y8=-LA?Y+n%qN6x;4J(8{LJ2F^s^f-Sw_wgmq5<5} zcoWQQQp6I@N9G9pxfcBHnNLSuf3D^BLmz|kALFOH(Ouo3$2EM_Venu0LnrM%2Z=Ok zv}DoZ`!3msPH$KyD+s3y{2TJz))Gk}WKn(g$$&qJDrHY_vO21zaN+r7e(=i@T3&r< z+LdP=3VYxcKmG(LaA})7@Cj3NRvya#7XS3I4o{|DDcv16=0A5YooPr=qK$w=!h=)D z)P#v@(%;)8=v^_}ZOrxf4O0`IUlwh|4l+NX?)jfizU+(u)Q5c%#J>ytan?w?G`nkC zh!^#ic=|UWe?0sjaF+bS$#}rQG-4Ob{@VFFGbiJMiSzA7XeyBR0SS1lT=*U)feiB1 z#_GT!!nXx{gpUFX@wI=yFJNRI7J2((5P!Z0wzuFDuQ(R|Sr0m_=$k}>m>bXAv1F2V z0ns^B0QjSe@jlQaZNx!& z;d{*-f~nkA5{OOO@-V!>k5MqWG_mEi-%P&DbFTt8AL)sQe_f{AU8^viUCK!I3;$)m zcb5IZBf-2|FL-x(lq^!bj}}N!tS8`)MO2sdUfKc*=_{&?fUR^(QzUj+c(|pB-7}s# zy23q(5Fz;2$#H}80e?Ng>YD!WKlm?y*vWg?nSG1YanhZiJx~&_pevG}=p0l~64_*s z-$Pk5cV&hQJa#t$;k+0zKXHbV_;(Utnt9C!4?_6phkfyH7x-ifHgvdM1HeE3QK#TB z>4LYu>}1@3xvwf!cdxT>=JYL9ClQOX1Dp_&u4EV{ZJ&L8$is(2sw%8x>5$Cx@SEjr;IHi5>&|-AV`Z-d_vV% z_Y!2IdJ5(z(vIYT`3XFhCN#eMi?=TcCR6&)_JL0Z@yC_3$ZuKWvbyUB&Hv!P@_7f< z%&$b<@X@{bb0meZmf?T+hb@5TQhOqKWZK252`^Vjd8sFPcBQ{H5OMHZRN%{-k&aadcGpN>7a9cBx$qe(vUv`Je|@%i64(L%9oBl( zarpQ*yzH!aL{ezZEf*XhNkn=S$%Fot79hl0LpJ|7CxH@+SPpDn>M#-e*!;zD`&_4{pzt!Eg-rcsrTWjI}2;krNs#E=(oZ=~$ zpS?3{isC}J09+A^a34X}>f_fI^&sT!KH>e6c#`RqMTIYUEEPQb8{mKN2mFm% z+czSgBZYtKn@;A>rHHe}UM)u(`2+KVKPmtzgk5)BW(Qo%wkC8|txK67K_2i|ggGJm zXIF+YaG1~i_~$6{3GCZ9d24NRr0{Qf!)boqiMkOIjM@}a+2t;*N^geTozG# z%ug9xaiY{N-fl_4hIxOb8Zb=EL;pO8KTR=!zhkqv)bty@lCX80#yJ zOS$`Vky5(>@&)my9TLvp^^UiO0RL6fo!Bwj0v%HxSED`lCyQM`#!Xw`crk>i50|Ur znLVE5H_RUyn==4DPeSnTba!oacWpE49mI0P`5*kN{$jVlfB7gCW(%Ny!5`C$CoTEM z$rhmTU*|@T4+bZimoB-|_|$v97%7|oaQH9P&<1Te<{0 z;0ymA?Ax{~<*4$QYs~Nmrv{X8Byk>@0~(y7MyutcK!A2>#th_<;Yr?%q8H{|NiPq4;l# zb5j1tdE+9deabkgJYc8j4i!KF2DbOGrzU;O0pm0s(*dFlr@6{IAw5qp!2>E|wth4eTDiccm!NqRf5_esbkjDz8^ayb@>{?g> zA2boQJ?LD75Bj$}sbt)3;1j@VKu>5gB~m)+veRjSnSA;CCSP&Z6xLPmpL+ENrhWB; z)2{u{jO#x#^QQA=-t@7mzuu>40Ld?42mAy3M1?Kgy)_wWV=r8I-}$LO`PibLekASw z4=o=1!Hl1ulljZ{XFYUw&Tr1j{r#ECA3kHnqo)^)JH6=1Q6*11w*D%R|0Vww8vhC9 zfAHTh-(8Ba)5l|OyE1tTi?C(FTedCeVS%2<| zeYrd3tu<*=*Ds0Mlsj+BiiGXOsr%}d%LCfA#ocGXKd@gU*tONSreSwY*3R-p+lmvm z7R=kSeAecrQ#WV5xiRg9bxF^3&HHWJ%==oV-q}3qTa9mATl=qzYF_wM%?qDg`QpcF zU;I$rKR;0a^4SfqoZ0l+8Le-g);4hz0{9bL!RapMK2;XWa17Ik){s$`8Mi z@yqL0Jbq{GE5B=<`KPY9S2kxw?>Zpb!*Aeg<$`a0%2$&n%ZD=*|MS=}oMnn$s)f!GY#z*hnu*Gjmi_uhWJSy^ zpNzljbBiCivgql1YF~lnCTz}_zPmViZ*{hh{udG%L=NE=7?=>2^cOe>KqjBNQTY@C zn;y<4ydygwKg*cl9lUKGJ)c- z{}+vvh5qaDmwo7q#Dc%U?TU;c}Gav$EE{lJclTehctdHdr3OuFYI zQ?EGtorSL{JghmH*B!H%9Lc7xSyUhY5IzI&<=0WQg$4 zVQ<_MEM%@xO3E;ahrGXN%2tm6i%sK-?LppzlxJl~xf=^=0g3l-k2C6Vqh>cLLE&w%!6{$Ot=oS?nSlW#8 z&}5-ZpjO*H^DrT(_`h41IV=TQLE)nc6BBSF1WL`Sg z7trLw$;0y&d^WW>-_Q1vHfwa@Qlmz~2kI6C3(FLcSoyq-Vm9Owf5JtvYxoj&5Y7(D zqE(BsD;5fxodWV!?65V^wpN~lCyUS6&+88neb_4Id-y^E*DRjcFIOblFNHMFfSN-q zg33)t9wac63P|k%KK7o#H&f=opAKTa#BKrX1eE&_w{IJ_tH21KBncl`K1}IJ4D!4u zZLE+tid78Hf&@q&xP|Qxsu0NX9(5h&l8NJWvg=DEbusVhTB3b`U<++QL>=oHDV8aZ zn{YRAc;1DSJw_Ix4&Z#?<-;`k@fj8ks{9Fm$e;5%UxmfU99KzBTJ2Cz6zMU+1`TC; ze(5HYRbUoRIMi7gafB|QDGx!!$OtKdY>|NBa%D-%3&V9>9sJKD*VT|aq+3AEbm)CV zB4XcKKGaDf8$AhcM5~mn;akg)7#Ng|iK!}d?YL~92j>8euu4~f2j*Ngqf?nDnMl2& zuW&vst3Au3_GVAnk^0)^xaZf#OjteRsg5a+wY>Fvk~>0`or0;e-#A|gtBq|GXLe2h zL-(wQ*Uf%>(}HKVCjMpTqJQqqn%J{^MsI$!uVAi^IdYtBd9p-k)gpB$FxFTkgIL)j zlW0_+AiwMf2*ijj>Yo|0#fUk28R!m!LugZFaDc?QJ=Pmvbc!Ck-EGR1 zn3A?N)($d%Lu*fIV(cAfGWI9#J5J(VPV)aashWQ>Dt+u}nZGyRn*DQK5EF3cEb>Ya{ynY zA=zD_#XuYA1@e{zoDya5LpgU^#u&e=RO1ZAe3*=<6ik7NfAEN*4xC)Y1X`d@JdhW? zBkhe%vCnl({NKuF@6P+(&5M6@@!VTJIsNK$rd+N;ZG^K}c$7G9{mhqn@i*c>I9B^? z@EJRw{BKKd=>Xzyg-y!8I&*FL;z@~79wT)idsTRT$j-<$dL z{-rPV=1np6^LE5EbXjcniy?}(&l0I8S+<4>JRh>&dAf&;a3}7ocgDo^F%y_!QvBGrQt$o3oUdOn^V)OY9(`H>;iH5m`u~=PKeqQ)6Mx1=g84CZ zRDTkg`deH7(>~ehoa%JVbk@#3d*gzSZ%w#xXX@4OX56(u=Xbr!U+T@DCTUg)QIe!M z4v`9wy1_P9or6E%T#;P)%-wNg{@<+YJ`4}PiHITF-^?9M!6(GUME`Fme@XW=Un2=G55h{Y2+@r#CJ z=(;9qBHOXPko?I1l0;^5&c6Bl064?&B#6Jwzst_Y!`+1TiD3P$t$#Zx{uaQ02l!_> zIlq$dtbJju#4q-b4Q}wbuGu#>L}Q2ci-aq3^vW>5RkC2r$VnbSD(@IUy&7F z^&!sTus{vbi$VM`apm6H*be@Gzx@FEdD*2Qiujy(RD zWY}HwlQOOi99bO#f0GHU8N+Yj^B)fFKRQbOC6xcc ze|M%6bF(bBT}(5>m4p9ben`M$*UHG_Uz;UGgYYNY!XoTYksLqf(<3B*z`tEF2cj0z zef0khzW=?S`LBcU-?!Xh#3e3C%bUNGS;%SFlYtPZfbt0614x!XQ9*9=VJ-i%+bmIV0TZ`pS@S!|qYx2t!rVbRqFhB3dKU?7=LJ*265o=Nr!a(Q$Fn=Z- z`Lie6X?{cepLpkIPVFD>Hv7eEc`X>+)l6{zNY^CBiS@FD-ynT#v4dB>qIJuslgUP~l0; zpGis;Da`O0IzQ`3bP2(qz@r7<Sf%;h_0fVdB4cnWlWd zd6A-;e-8tZ(&|MN9=NHcLKE%GZ=y=_V{mF*kkuNL)H}uY3Ft{+Qez_+(EQ z4p4dY`L}ldXJql;ze4k+Ii=d?e=7Zm31oB4Jff0TW=4eneT8!svB$*1=2y;T4kLZ` zEt|z$_o2i2NZ;(o-_9TNC(wz0cOG&6cDk8AJQVov%abTW1s6Sbn^+WiNUa6C0Q~WV zBa{y2z7k3sk^NDr+e|%Hq;5`pY2r}U+4ci}<{!3u)eGppj^O#6aM+K+-_$ALg|(GLg#Q&{C7*)l8))yUNL>^44AG|}p)_=_8~z_-=I@z-3?Ppn zVzrkYasK&`@&DdjXLYo?!)AZ&6Us5+lBnFp;13nLsw0EHHGW7v2aKPpMfLx9fPFV~ zI3MYo{rKDY!=@pZiWhRVZKXtghpzsd`p<*>UyL8{-)y2lGp{+9=&MS(Y`GEghs8*o z@(A2C4UxrWqqW`CdQ1DdD56A`(#uRl8yQkaHCN(aJeiF3kDGHAiC6A${G$U-Qiv zOJ&PNOwn3v@rdBRKTm`EWP--OsN@K2uPtCInotLk7@Vlc50U4hgb?F1dEq_(J)}4v z>C1!oQ*HoUadS+ABZ~KmIhmn&FTt7o>2g67!p(i^DH}z(4tJMd4ar`?ah@;t#gy z5h`E;g&hU*sy!)pA>ji4MBZq4DT(7we*sK}^GP54sgEKbO??!rrGRAU2;g7fEdGhK zQu(uYDG>?g0sL_U!ZtyDjK@d#kaMThoZth-f90ayf;m$eX%*4ICjI=jApZ9Lk1A9y z(`wEiDg5#5Fh%ly|8=)HPgO~bq(J`I#As(#m?o&^=@I$lwtbWuf?+67xF{0kR^84HCqkvtrri2$hKE z_7=>HT>X?7 zk^Pv5KZTd7R4*}|Dcr-3dz&sD5&ZY(J2n3h{;{|Jhe~#-3ZNv<@;~@*?&=M%BS2NP zT&A2~_@7oUf)8mO)1ScOi!8AH{I($eY7;2(+JY#6uQT`$d;9_X>nOzfGBau}P>nYs zSz8i`@B#lVYkXBDpZ3gQp=)P(Ey)--7Fm?Qol3H)nc z6#m@SQ1!8dKyBY2;6n(^(VC2~^sh?a3*F)b3IF8;e-hEi?bF5`2l$)2X97N1X&&pc z@k)jt|A73T{k4y)g+%z9l3?M#UG7+Tw^dbPKlr0|1NhgZw@({!{$FgGX!1-qBCScZ z(qxSk{^b+2E9czui9_(;p$esjrD5?uHMiIpfjb5g{H#guoblvH%m2luEsln-Oidr+ zab;$2{>bou@gHUX&;RECRqu(_zqkNa{*Z-f${RHPzWlkWc^3Y$Qogp~r8<3e)UzXO z|KOFdF%dhq8u(nY5mbaQqohlg`%a z41tet$h}Ug(t7h_hKT>y&vVGXGymtEh0cz23jUql*$(-4t)=FcJzsGOAN{6O5+%XR zNkHyGH2j?5^Q{wg7lxYW72f22!3cRu-4ed1Y$G?Woq4@8^IF|LmHJOEjmE=<7k{Sw z3ptk{{=1C)89e_h`H1}!Cch8M@SPkwaO%%`ycx2C+ZYsqAqP{5(LaDj%vlZM9Z7yp}?Ef50vAKr9I zwcZom_3)pg&TDo(n}YNoKgXgej0AzAktQI64Ak6=Tp0t^X+6bp`<6#-jD5cG)rU%- z{C3LSU!YWM;>Dxv)eWL|DTqIFU=aR*&%|k@V)??}712k>f9Y?W+}}A%el9T*#U#B; zLwMWl-)UEUAa=~BbAItv>S zn^~TGB>XeRI!k`$qRx!4={py`?wLX|7! z(lG3?ZHVX4bOx%(8CcyK`F%zeF{H>2EHe1xe>LO|+W(dOLCq0nBI4kM_I3*2TPwLH!K3M<$NP{?HzRu0OJQ5>b_zBw9 zmfU|u!%IJZC-rq7gESek!8T_Lb8Z^!*{QfCI1|RVVFYW>9QuCosswS)t=!ex<97ZEpD-KVf#sYldA0UCHLcCOA zfDp3D7wWGpIZzpdXpqe1#Tbf}wRFKBm|u~cjgYG~0TV6rlOe_nL+>%U38_e*bI zat6?a+O9$Ti8&y403XMkvnoyO&5KI-?pgD`>CCuRQzEULLD59ra2_{SrbWd^A-B>= zh2nGC_mC$Z=5|aU-COifn;u?on1h+;KvxAXB6+B-@;Y1$32c#JAk`Hlfnk35pS5+3 zFTCm8no~py1{kq11TWLBV0FXovb_UOl4Xi}ivl@|za;^af6~laEZuElWs+Um8qk9K zeVZGMYF{u>xm|QY@FEauGiYtD{L{U2Z@B=2#8Sb-pJs4k4)6frlNe%emd5wwMa{g{ z+-MKG@nUE4rDtaRWOUc`Cwky^v?t~PW1x^NAPHluKF9P*0JWO<%nUb82=q_x(#$mf z*fdC>#yUU#+7y8;V0Hmt=q>Y>-8FoEeRG&4pcr+&{COH4#gd^lU$Ib%vRGJL)FN7$ zgGLa@AiP*l^k|+~%XzU`V8p27E0N)QD)bB$~R<;uZ5E;A^48b4&s&S0Oc&1ydg- zof?grV9a}~#09S9%8VW96AK=>jZsdT@5E0ac9^?PKQgm{&2qVXPM4ow3Wmos>(CueD%2lLS_U%tdUKO zbOS4BLAVmAwMZJ;C;mev5Xs@@sd~} zPm)5&ua?n{oY4o&sBPOCrbjc9SK~=xe!r8b_8E+>GF;T&2=$5%18x!j3Hs(##NzL9zPWWNjyaY|&64BcN{{n%@L|@XAP9X}%#qA2?>P}a;(kOqj6*GkZ*;qe zH8JItW$qO&{260w25U2(w58Cu@)Ya?rn!Q;IN;dufN%R;Fp9hO>41?P;2&rpEqWO$AbjBb&?OQuB6y{kUy=uJs0!Wf3$O5RfG2oTe4L?P zrWw}U?z5AD(kz-E{oq3ab_do})#8%^juE;@9|0)bTlNBM56?^ZRCDMHFVZ_gS97BN zY%gO-nL>kvZ!PxKW}T>)ae|+>TQ-une?7s$J9YX(z&-rGy%+X4>$Ihre$32cS zKJ=s4sDbr|x4=I2AM$ozcBvHAIs6EZ&^azfs5;DkEO*9T81_n_km_Be2Y-f`dr z?c0G9_D(Nw!hz%Q79sC+11IdAZs3Fi#~0eqd#4+?fWWbL0iE9O`ws3|y`UK*;fhdOvWv9snW7 z27rT)JA>zE-VZr80OSVWKi07UXhQJw2Ok^2Lf$vW!H-)2k8&(PL*Oz19`$(qL7(S1 z1Wp5RpX2KfdjBxTA#fW49QF9ZKIAe434#CE#}K5?=MQt-8G@HMdO*hzw9n`Jahx0a zdwf2uV;H2*-;coYgwX5Z_lNp;M6cIu;J^iY@++`|*d6Ad$8ts*m>29{c<=I`PQ4I( z+wRHn!S_W}v-kZk@r@VypX14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>Z9h3PvC*V+MOep* z;I?H!$xWsW3%%1lTven((2w{X;JhR(}8@Fnhv>$?dV(<)7XF6)`4xySp%S zu*!M>IqW5#zOL-ISfqgLt)VTKfYek^7sn8Z%duyV3LOd%aJkqxorU9F-od+f?|%Jn z-{!g3Gw5jKmq&S059WI&2eUWNJW(kr&aC{+>Eb~Nwnhu@r(NC$9()Vg8MXJ~m!uC{ zZ^bOX{hI#|L*qja^Laka0<+HYc0c7h^tv~3ceg`H{RLTn!-k4SXJXfFuNI1TnN(#H zpDEbvV)WiWY?47l$EVN&!w6H$Qii%Y+R_iRckE3DI#9L5HKHUXu_VKdAd7@Arc8Ce+{Xd75q85mfL?Kecxkei>9nN|tXV4!PYqHAOpVqgGN2SgAJ z3qq}9ff{^4HWcTlm6RtIr80QtCZ?zQCZ=a5XDgWN8R!}6nkfVtnkiIRn8ll!C?ITC z$S5f(u+rBrFE7{21Ze_dpeDWiqV&5rm-+z>mH-(Xl2MwQWM$=&pIn-onpa|F6#!IP z%wV|u|89Mt8gV2wV5_aHJW?~$GfEf?&1Bcd z%-qzH%7Rn|u$%M?^3v@$g@IgyY?E&YP!)rrk-3qPp`nq10jDPKd!P~lBy)l@t5O+E zEX|$L%HlYIa?wa~p+TMuX_+~xK;P?U!k{QWzeK+{vjoi1OHC}U%uLSD)5}XO v(N9jv)6L9HM+he8=@%Cz>l>PyfUtq39?+GM7mPmxtzqzV^>bP0l+XkKoCT9z literal 0 HcmV?d00001 diff --git a/jshERP-web/public/index.html b/jshERP-web/public/index.html new file mode 100644 index 000000000..98dcec8af --- /dev/null +++ b/jshERP-web/public/index.html @@ -0,0 +1,278 @@ + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    + 正在加载系统,请耐心等待 +
    +
    +
    + + diff --git a/jshERP-web/public/logo.png b/jshERP-web/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8980dab4e188ba3c16f58a3345c5a31b0cdb6c9e GIT binary patch literal 6686 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 literal 0 HcmV?d00001 diff --git a/jshERP-web/public/tinymce/langs/zh_CN.js b/jshERP-web/public/tinymce/langs/zh_CN.js new file mode 100644 index 000000000..0f3cf923e --- /dev/null +++ b/jshERP-web/public/tinymce/langs/zh_CN.js @@ -0,0 +1,261 @@ +tinymce.addI18n('zh_CN',{ +"Redo": "\u91cd\u590d", +"Undo": "\u64a4\u6d88", +"Cut": "\u526a\u5207", +"Copy": "\u590d\u5236", +"Paste": "\u7c98\u8d34", +"Select all": "\u5168\u9009", +"New document": "\u65b0\u6587\u6863", +"Ok": "\u786e\u5b9a", +"Cancel": "\u53d6\u6d88", +"Visual aids": "\u7f51\u683c\u7ebf", +"Bold": "\u7c97\u4f53", +"Italic": "\u659c\u4f53", +"Underline": "\u4e0b\u5212\u7ebf", +"Strikethrough": "\u5220\u9664\u7ebf", +"Superscript": "\u4e0a\u6807", +"Subscript": "\u4e0b\u6807", +"Clear formatting": "\u6e05\u9664\u683c\u5f0f", +"Align left": "\u5de6\u5bf9\u9f50", +"Align center": "\u5c45\u4e2d", +"Align right": "\u53f3\u5bf9\u9f50", +"Justify": "\u4e24\u7aef\u5bf9\u9f50", +"Bullet list": "\u9879\u76ee\u7b26\u53f7", +"Numbered list": "\u7f16\u53f7\u5217\u8868", +"Decrease indent": "\u51cf\u5c11\u7f29\u8fdb", +"Increase indent": "\u589e\u52a0\u7f29\u8fdb", +"Close": "\u5173\u95ed", +"Formats": "\u683c\u5f0f", +"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u5bf9\u526a\u8d34\u677f\u7684\u8bbf\u95ee\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u952e\u8fdb\u884c\u590d\u5236\u7c98\u8d34\u3002", +"Headers": "\u6807\u9898", +"Header 1": "\u6807\u98981", +"Header 2": "\u6807\u98982", +"Header 3": "\u6807\u98983", +"Header 4": "\u6807\u98984", +"Header 5": "\u6807\u98985", +"Header 6": "\u6807\u98986", +"Headings": "\u6807\u9898", +"Heading 1": "\u6807\u98981", +"Heading 2": "\u6807\u98982", +"Heading 3": "\u6807\u98983", +"Heading 4": "\u6807\u98984", +"Heading 5": "\u6807\u98985", +"Heading 6": "\u6807\u98986", +"Preformatted": "\u9884\u683c\u5f0f\u5316", +"Div": "Div\u533a\u5757", +"Pre": "\u9884\u683c\u5f0f\u6587\u672c", +"Code": "\u4ee3\u7801", +"Paragraph": "\u6bb5\u843d", +"Blockquote": "\u5f15\u7528", +"Inline": "\u6587\u672c", +"Blocks": "\u533a\u5757", +"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002", +"Font Family": "\u5b57\u4f53", +"Font Sizes": "\u5b57\u53f7", +"Class": "Class", +"Browse for an image": "\u6d4f\u89c8\u56fe\u50cf", +"OR": "\u6216", +"Drop an image here": "\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64", +"Upload": "\u4e0a\u4f20", +"Block": "\u5757", +"Align": "\u5bf9\u9f50", +"Default": "\u9ed8\u8ba4", +"Circle": "\u7a7a\u5fc3\u5706", +"Disc": "\u5b9e\u5fc3\u5706", +"Square": "\u65b9\u5757", +"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd", +"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd", +"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd", +"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd", +"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd", +"Anchor": "\u951a\u70b9", +"Name": "\u540d\u79f0", +"Id": "\u6807\u8bc6\u7b26", +"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002", +"You have unsaved changes are you sure you want to navigate away?": "\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f", +"Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f", +"Special character": "\u7279\u6b8a\u7b26\u53f7", +"Source code": "\u6e90\u4ee3\u7801", +"Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b", +"Language": "\u8bed\u8a00", +"Code sample": "\u4ee3\u7801\u793a\u4f8b", +"Color": "\u989c\u8272", +"R": "R", +"G": "G", +"B": "B", +"Left to right": "\u4ece\u5de6\u5230\u53f3", +"Right to left": "\u4ece\u53f3\u5230\u5de6", +"Emoticons": "\u8868\u60c5", +"Document properties": "\u6587\u6863\u5c5e\u6027", +"Title": "\u6807\u9898", +"Keywords": "\u5173\u952e\u8bcd", +"Description": "\u63cf\u8ff0", +"Robots": "\u673a\u5668\u4eba", +"Author": "\u4f5c\u8005", +"Encoding": "\u7f16\u7801", +"Fullscreen": "\u5168\u5c4f", +"Action": "\u64cd\u4f5c", +"Shortcut": "\u5feb\u6377\u952e", +"Help": "\u5e2e\u52a9", +"Address": "\u5730\u5740", +"Focus to menubar": "\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f", +"Focus to toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f", +"Focus to element path": "\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84", +"Focus to contextual toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355", +"Insert link (if link plugin activated)": "\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)", +"Save (if save plugin activated)": "\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)", +"Find (if searchreplace plugin activated)": "\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)", +"Plugins installed ({0}):": "\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):", +"Premium plugins:": "\u4f18\u79c0\u63d2\u4ef6\uff1a", +"Learn more...": "\u4e86\u89e3\u66f4\u591a...", +"You are using {0}": "\u4f60\u6b63\u5728\u4f7f\u7528 {0}", +"Plugins": "\u63d2\u4ef6", +"Handy Shortcuts": "\u5feb\u6377\u952e", +"Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf", +"Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247", +"Image description": "\u56fe\u7247\u63cf\u8ff0", +"Source": "\u5730\u5740", +"Dimensions": "\u5927\u5c0f", +"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4", +"General": "\u666e\u901a", +"Advanced": "\u9ad8\u7ea7", +"Style": "\u6837\u5f0f", +"Vertical space": "\u5782\u76f4\u8fb9\u8ddd", +"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd", +"Border": "\u8fb9\u6846", +"Insert image": "\u63d2\u5165\u56fe\u7247", +"Image": "\u56fe\u7247", +"Image list": "\u56fe\u7247\u5217\u8868", +"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c", +"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c", +"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c", +"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c", +"Edit image": "\u7f16\u8f91\u56fe\u7247", +"Image options": "\u56fe\u7247\u9009\u9879", +"Zoom in": "\u653e\u5927", +"Zoom out": "\u7f29\u5c0f", +"Crop": "\u88c1\u526a", +"Resize": "\u8c03\u6574\u5927\u5c0f", +"Orientation": "\u65b9\u5411", +"Brightness": "\u4eae\u5ea6", +"Sharpen": "\u9510\u5316", +"Contrast": "\u5bf9\u6bd4\u5ea6", +"Color levels": "\u989c\u8272\u5c42\u6b21", +"Gamma": "\u4f3d\u9a6c\u503c", +"Invert": "\u53cd\u8f6c", +"Apply": "\u5e94\u7528", +"Back": "\u540e\u9000", +"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4", +"Date\/time": "\u65e5\u671f\/\u65f6\u95f4", +"Insert link": "\u63d2\u5165\u94fe\u63a5", +"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5", +"Text to display": "\u663e\u793a\u6587\u5b57", +"Url": "\u5730\u5740", +"Target": "\u6253\u5f00\u65b9\u5f0f", +"None": "\u65e0", +"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00", +"Remove link": "\u5220\u9664\u94fe\u63a5", +"Anchors": "\u951a\u70b9", +"Link": "\u94fe\u63a5", +"Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5", +"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f", +"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7f00\u5417\uff1f", +"Link list": "\u94fe\u63a5\u5217\u8868", +"Insert video": "\u63d2\u5165\u89c6\u9891", +"Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891", +"Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53", +"Alternative source": "\u955c\u50cf", +"Poster": "\u5c01\u9762", +"Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:", +"Embed": "\u5185\u5d4c", +"Media": "\u5a92\u4f53", +"Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c", +"Page break": "\u5206\u9875\u7b26", +"Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c", +"Preview": "\u9884\u89c8", +"Print": "\u6253\u5370", +"Save": "\u4fdd\u5b58", +"Find": "\u67e5\u627e", +"Replace with": "\u66ff\u6362\u4e3a", +"Replace": "\u66ff\u6362", +"Replace all": "\u5168\u90e8\u66ff\u6362", +"Prev": "\u4e0a\u4e00\u4e2a", +"Next": "\u4e0b\u4e00\u4e2a", +"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362", +"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.", +"Match case": "\u533a\u5206\u5927\u5c0f\u5199", +"Whole words": "\u5168\u5b57\u5339\u914d", +"Spellcheck": "\u62fc\u5199\u68c0\u67e5", +"Ignore": "\u5ffd\u7565", +"Ignore all": "\u5168\u90e8\u5ffd\u7565", +"Finish": "\u5b8c\u6210", +"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178", +"Insert table": "\u63d2\u5165\u8868\u683c", +"Table properties": "\u8868\u683c\u5c5e\u6027", +"Delete table": "\u5220\u9664\u8868\u683c", +"Cell": "\u5355\u5143\u683c", +"Row": "\u884c", +"Column": "\u5217", +"Cell properties": "\u5355\u5143\u683c\u5c5e\u6027", +"Merge cells": "\u5408\u5e76\u5355\u5143\u683c", +"Split cell": "\u62c6\u5206\u5355\u5143\u683c", +"Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165", +"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165", +"Delete row": "\u5220\u9664\u884c", +"Row properties": "\u884c\u5c5e\u6027", +"Cut row": "\u526a\u5207\u884c", +"Copy row": "\u590d\u5236\u884c", +"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9", +"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9", +"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165", +"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165", +"Delete column": "\u5220\u9664\u5217", +"Cols": "\u5217", +"Rows": "\u884c", +"Width": "\u5bbd", +"Height": "\u9ad8", +"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd", +"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd", +"Caption": "\u6807\u9898", +"Left": "\u5de6\u5bf9\u9f50", +"Center": "\u5c45\u4e2d", +"Right": "\u53f3\u5bf9\u9f50", +"Cell type": "\u5355\u5143\u683c\u7c7b\u578b", +"Scope": "\u8303\u56f4", +"Alignment": "\u5bf9\u9f50\u65b9\u5f0f", +"H Align": "\u6c34\u5e73\u5bf9\u9f50", +"V Align": "\u5782\u76f4\u5bf9\u9f50", +"Top": "\u9876\u90e8\u5bf9\u9f50", +"Middle": "\u5782\u76f4\u5c45\u4e2d", +"Bottom": "\u5e95\u90e8\u5bf9\u9f50", +"Header cell": "\u8868\u5934\u5355\u5143\u683c", +"Row group": "\u884c\u7ec4", +"Column group": "\u5217\u7ec4", +"Row type": "\u884c\u7c7b\u578b", +"Header": "\u8868\u5934", +"Body": "\u8868\u4f53", +"Footer": "\u8868\u5c3e", +"Border color": "\u8fb9\u6846\u989c\u8272", +"Insert template": "\u63d2\u5165\u6a21\u677f", +"Templates": "\u6a21\u677f", +"Template": "\u6a21\u677f", +"Text color": "\u6587\u5b57\u989c\u8272", +"Background color": "\u80cc\u666f\u8272", +"Custom...": "\u81ea\u5b9a\u4e49...", +"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272", +"No color": "\u65e0", +"Table of Contents": "\u5185\u5bb9\u5217\u8868", +"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846", +"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26", +"Words: {0}": "\u5b57\u6570\uff1a{0}", +"{0} words": "{0} \u5b57", +"File": "\u6587\u4ef6", +"Edit": "\u7f16\u8f91", +"Insert": "\u63d2\u5165", +"View": "\u89c6\u56fe", +"Format": "\u683c\u5f0f", +"Table": "\u8868\u683c", +"Tools": "\u5de5\u5177", +"Powered by {0}": "\u7531{0}\u9a71\u52a8", +"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9" +}); \ No newline at end of file diff --git a/jshERP-web/public/tinymce/skins/lightgray/content.min.css b/jshERP-web/public/tinymce/skins/lightgray/content.min.css new file mode 100644 index 000000000..125b622b3 --- /dev/null +++ b/jshERP-web/public/tinymce/skins/lightgray/content.min.css @@ -0,0 +1,554 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + */ +.mce-content-body .mce-item-anchor { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; + cursor: default; + display: inline-block; + height: 12px !important; + padding: 0 2px; + -webkit-user-modify: read-only; + -moz-user-modify: read-only; + -webkit-user-select: all; + -moz-user-select: all; + -ms-user-select: all; + user-select: all; + width: 8px !important; +} +.mce-content-body .mce-item-anchor[data-mce-selected] { + outline-offset: 1px; +} +.tox-comments-visible .tox-comment { + background-color: #fff0b7; +} +.tox-comments-visible .tox-comment--active { + background-color: #ffe168; +} +.tox-checklist > li:not(.tox-checklist--hidden) { + list-style: none; + margin: .25em 0; + position: relative; +} +.tox-checklist > li:not(.tox-checklist--hidden)::before { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); + background-size: 100%; + content: ''; + cursor: pointer; + height: 1em; + left: -1.5em; + position: absolute; + top: .125em; + width: 1em; +} +.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); +} +/* stylelint-disable */ +/* http://prismjs.com/ */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: .875rem; + direction: ltr; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + -moz-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: transparent !important; + border: 1px solid #ccc; +} +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; +} +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} +.token.punctuation { + color: #999; +} +.namespace { + opacity: .7; +} +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #a67f59; + background: rgba(255, 255, 255, 0.5); +} +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} +.token.function { + color: #DD4A68; +} +.token.regex, +.token.important, +.token.variable { + color: #e90; +} +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} +.token.entity { + cursor: help; +} +/* stylelint-enable */ +.mce-content-body .mce-visual-caret { + background-color: black; + background-color: currentcolor; + position: absolute; +} +.mce-content-body .mce-visual-caret-hidden { + display: none; +} +.mce-content-body *[data-mce-caret] { + left: -1000px; + margin: 0; + padding: 0; + position: absolute; + right: auto; + top: 0; +} +.mce-content-body .mce-offscreen-selection { + left: -9999999999px; + max-width: 1000000px; + position: absolute; +} +.mce-content-body *[contentEditable=false] { + cursor: default; +} +.mce-content-body *[contentEditable=true] { + cursor: text; +} +.tox-cursor-format-painter { + cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default; +} +.mce-content-body figure.align-left { + float: left; +} +.mce-content-body figure.align-right { + float: right; +} +.mce-content-body figure.image.align-center { + display: table; + margin-left: auto; + margin-right: auto; +} +.mce-preview-object { + border: 1px solid gray; + display: inline-block; + line-height: 0; + margin: 0 2px 0 2px; + position: relative; +} +.mce-preview-object .mce-shim { + background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-preview-object[data-mce-selected="2"] .mce-shim { + display: none; +} +.mce-object { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; + border: 1px dashed #aaa; +} +.mce-pagebreak { + border: 1px dashed #aaa; + cursor: default; + display: block; + height: 5px; + margin-top: 15px; + page-break-before: always; + width: 100%; +} +@media print { + .mce-pagebreak { + border: 0; + } +} +.tiny-pageembed .mce-shim { + background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tiny-pageembed[data-mce-selected="2"] .mce-shim { + display: none; +} +.tiny-pageembed { + display: inline-block; + position: relative; +} +.tiny-pageembed--21by9, +.tiny-pageembed--16by9, +.tiny-pageembed--4by3, +.tiny-pageembed--1by1 { + display: block; + overflow: hidden; + padding: 0; + position: relative; + width: 100%; +} +.tiny-pageembed--21by9::before, +.tiny-pageembed--16by9::before, +.tiny-pageembed--4by3::before, +.tiny-pageembed--1by1::before { + content: ""; + display: block; +} +.tiny-pageembed--21by9::before { + padding-top: 42.857143%; +} +.tiny-pageembed--16by9::before { + padding-top: 56.25%; +} +.tiny-pageembed--4by3::before { + padding-top: 75%; +} +.tiny-pageembed--1by1::before { + padding-top: 100%; +} +.tiny-pageembed--21by9 iframe, +.tiny-pageembed--16by9 iframe, +.tiny-pageembed--4by3 iframe, +.tiny-pageembed--1by1 iframe { + border: 0; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-content-body div.mce-resizehandle { + background-color: #4099ff; + border-color: #4099ff; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + height: 10px; + position: absolute; + width: 10px; + z-index: 10000; +} +.mce-content-body div.mce-resizehandle:hover { + background-color: #4099ff; +} +.mce-content-body div.mce-resizehandle:nth-of-type(1) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(2) { + cursor: nesw-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(3) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(4) { + cursor: nesw-resize; +} +.mce-content-body .mce-clonedresizable { + opacity: .5; + outline: 1px dashed black; + position: absolute; + z-index: 10000; +} +.mce-content-body .mce-resize-helper { + background: #555; + background: rgba(0, 0, 0, 0.75); + border: 1px; + border-radius: 3px; + color: white; + display: none; + font-family: sans-serif; + font-size: 12px; + line-height: 14px; + margin: 5px 10px; + padding: 5px; + position: absolute; + white-space: nowrap; + z-index: 10001; +} +.mce-match-marker { + background: #aaa; + color: #fff; +} +.mce-match-marker-selected { + background: #39f; + color: #fff; +} +.mce-content-body img[data-mce-selected], +.mce-content-body table[data-mce-selected] { + outline: 3px solid #b4d7ff; +} +.mce-content-body hr[data-mce-selected] { + outline: 3px solid #b4d7ff; + outline-offset: 1px; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false][data-mce-selected] { + cursor: not-allowed; + outline: 3px solid #b4d7ff; +} +.mce-content-body.mce-content-readonly *[contentEditable=true]:focus, +.mce-content-body.mce-content-readonly *[contentEditable=true]:hover { + outline: none; +} +.mce-content-body *[data-mce-selected="inline-boundary"] { + background-color: #b4d7ff; +} +.mce-content-body .mce-edit-focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body td[data-mce-selected], +.mce-content-body th[data-mce-selected] { + background-color: #b4d7ff !important; +} +.mce-content-body td[data-mce-selected]::-moz-selection, +.mce-content-body th[data-mce-selected]::-moz-selection { + background: none; +} +.mce-content-body td[data-mce-selected]::selection, +.mce-content-body th[data-mce-selected]::selection { + background: none; +} +.mce-content-body td[data-mce-selected] *, +.mce-content-body th[data-mce-selected] * { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.mce-content-body img::-moz-selection { + background: none; +} +.mce-content-body img::selection { + background: none; +} +.ephox-snooker-resizer-bar { + background-color: #b4d7ff; + opacity: 0; +} +.ephox-snooker-resizer-cols { + cursor: col-resize; +} +.ephox-snooker-resizer-rows { + cursor: row-resize; +} +.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging { + opacity: 1; +} +.mce-spellchecker-word { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.5'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; + height: 2rem; +} +.mce-spellchecker-grammar { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23008800'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; +} +.mce-toc { + border: 1px solid gray; +} +.mce-toc h2 { + margin: 4px; +} +.mce-toc li { + list-style-type: none; +} +.mce-item-table, +.mce-item-table td, +.mce-item-table th, +.mce-item-table caption { + border: 1px dashed #bbb; +} +.mce-visualblocks p, +.mce-visualblocks h1, +.mce-visualblocks h2, +.mce-visualblocks h3, +.mce-visualblocks h4, +.mce-visualblocks h5, +.mce-visualblocks h6, +.mce-visualblocks div:not([data-mce-bogus]), +.mce-visualblocks section, +.mce-visualblocks article, +.mce-visualblocks blockquote, +.mce-visualblocks address, +.mce-visualblocks pre, +.mce-visualblocks figure, +.mce-visualblocks figcaption, +.mce-visualblocks hgroup, +.mce-visualblocks aside, +.mce-visualblocks ul, +.mce-visualblocks ol, +.mce-visualblocks dl { + background-repeat: no-repeat; + border: 1px dashed #bbb; + margin-left: 3px; + padding-top: 10px; +} +.mce-visualblocks p { + background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); +} +.mce-visualblocks h1 { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); +} +.mce-visualblocks h2 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); +} +.mce-visualblocks h3 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); +} +.mce-visualblocks h4 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); +} +.mce-visualblocks h5 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); +} +.mce-visualblocks h6 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); +} +.mce-visualblocks div:not([data-mce-bogus]) { + background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); +} +.mce-visualblocks section { + background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); +} +.mce-visualblocks article { + background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); +} +.mce-visualblocks blockquote { + background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); +} +.mce-visualblocks address { + background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); +} +.mce-visualblocks pre { + background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); +} +.mce-visualblocks figure { + background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); +} +.mce-visualblocks figcaption { + border: 1px dashed #bbb; +} +.mce-visualblocks hgroup { + background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); +} +.mce-visualblocks aside { + background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); +} +.mce-visualblocks ul { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==); +} +.mce-visualblocks ol { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); +} +.mce-visualblocks dl { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==); +} +.mce-nbsp, +.mce-shy { + background: #aaa; +} +.mce-shy::after { + content: '-'; +} +body { + font-family: sans-serif; +} +table { + border-collapse: collapse; +} diff --git a/jshERP-web/public/tinymce/skins/lightgray/skin.min.css b/jshERP-web/public/tinymce/skins/lightgray/skin.min.css new file mode 100644 index 000000000..3ea9b442b --- /dev/null +++ b/jshERP-web/public/tinymce/skins/lightgray/skin.min.css @@ -0,0 +1,2159 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + */ +.tox, +.tox *:not(svg) { + background: transparent; + border: 0; + box-sizing: content-box; + color: #222f3e; + cursor: auto; + direction: ltr; + float: none; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + font-style: normal; + font-weight: normal; + height: auto; + line-height: normal; + margin: 0; + max-width: none; + outline: 0; + padding: 0; + position: static; + -webkit-tap-highlight-color: transparent; + text-align: left; + text-decoration: none; + text-shadow: none; + text-transform: none; + vertical-align: initial; + white-space: normal; + width: auto; +} +.tox *:not(svg) { + color: inherit; + cursor: inherit; + font-size: inherit; +} +.tox-tinymce { + border: 1px solid #cccccc; + border-radius: 0; + box-shadow: none; + box-sizing: border-box; + display: flex; + flex-direction: column; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + overflow: hidden; + visibility: inherit !important; +} +.tox-editor-container { + display: flex; + flex: 1 1 auto; + flex-direction: column; + overflow: hidden; +} +.tox-editor-container > *:first-child { + border-top: none !important; +} +.tox-tinymce-aux { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; +} +.tox-tinymce *:focus, +.tox-tinymce-aux *:focus { + outline: none; +} +button::-moz-focus-inner { + border: 0; +} +.tox-silver-sink { + z-index: 1300; +} +.tox[dir='rtl'] { + direction: rtl; +} +.tox[dir='rtl'] .tox-statusbar__resize-handle { + justify-content: flex-start; + margin-left: -8px; + margin-right: 0; + padding-left: 0; + padding-right: 1ch; +} +.tox[dir='rtl'] .tox-statusbar .tox-statusbar__path { + text-align: right; +} +.tox .tox-anchorbar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-bar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-button { + background-color: #3498db; + background-image: none; + background-position: none; + background-repeat: none; + border-color: #3498db; + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + color: #fff; + cursor: pointer; + display: inline-block; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 14px; + font-weight: bold; + letter-spacing: 1; + line-height: 24px; + margin: 0; + outline: none; + padding: 4px 16px; + text-align: center; + text-decoration: none; + text-transform: capitalize; + white-space: nowrap; +} +.tox .tox-button[disabled] { + background-color: #3498db; + background-image: none; + border-color: #3498db; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); + cursor: not-allowed; +} +.tox .tox-button:focus:not(:disabled) { + background-color: #258cd1; + background-image: none; + border-color: #258cd1; + box-shadow: none; + color: #fff; +} +.tox .tox-button:hover:not(:disabled) { + background-color: #258cd1; + background-image: none; + border-color: #258cd1; + box-shadow: none; + color: #fff; +} +.tox .tox-button:active:not(:disabled) { + background-color: #217dbb; + background-image: none; + border-color: #217dbb; + box-shadow: none; + color: #fff; +} +.tox .tox-button--secondary { + background-color: #f0f0f0; + background-image: none; + background-position: none; + background-repeat: none; + border-color: #f0f0f0; + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: none; + color: #222f3e; + outline: none; + padding: 4px 16px; + text-decoration: none; + text-transform: capitalize; +} +.tox .tox-button--secondary[disabled] { + background-color: #f0f0f0; + background-image: none; + border-color: #f0f0f0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); +} +.tox .tox-button--secondary:focus:not(:disabled) { + background-color: #e3e3e3; + background-image: none; + border-color: #e3e3e3; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--secondary:hover:not(:disabled) { + background-color: #e3e3e3; + background-image: none; + border-color: #e3e3e3; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--secondary:active:not(:disabled) { + background-color: #d6d6d6; + background-image: none; + border-color: #d6d6d6; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--icon, +.tox .tox-button.tox-button--icon, +.tox .tox-button.tox-button--secondary.tox-button--icon { + padding: 4px; +} +.tox .tox-button--icon .tox-icon svg, +.tox .tox-button.tox-button--icon .tox-icon svg, +.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg { + display: block; + fill: currentColor; +} +.tox .tox-button-link { + background: 0; + border: none; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + font-weight: normal; + line-height: 1.3; + margin: 0; + padding: 0; + white-space: nowrap; +} +.tox .tox-button-link--sm { + font-size: 14px; +} +.tox .tox-button--naked { + background-color: transparent; + border-color: transparent; + box-shadow: unset; + color: #222f3e; +} +.tox .tox-button--naked:hover:not(:disabled) { + background-color: #e3e3e3; + border-color: #e3e3e3; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--naked:focus:not(:disabled) { + background-color: #e3e3e3; + border-color: #e3e3e3; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--naked:active:not(:disabled) { + background-color: #d6d6d6; + border-color: #d6d6d6; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--naked .tox-icon svg { + fill: currentColor; +} +.tox .tox-button--naked.tox-button--icon { + color: currentColor; +} +.tox .tox-button--naked.tox-button--icon:hover:not(:disabled) { + color: #222f3e; +} +.tox .tox-checkbox { + align-items: center; + border-radius: 3px; + cursor: pointer; + display: flex; + height: 36px; + min-width: 36px; +} +.tox .tox-checkbox__input { + /* Hide from view but visible to screen readers */ + height: 1px; + left: -10000px; + overflow: hidden; + position: absolute; + top: auto; + width: 1px; +} +.tox .tox-checkbox__icons { + border-radius: 3px; + box-shadow: 0 0 0 2px transparent; + height: 24px; + padding: calc(3px); + width: 24px; +} +.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: block; + fill: rgba(34, 47, 62, 0.3); +} +.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + display: none; + fill: #3498db; +} +.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg { + display: none; + fill: #3498db; +} +.tox .tox-checkbox__label { + margin-left: 4px; +} +.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: none; +} +.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__checked svg { + display: block; +} +.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: none; +} +.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + display: block; +} +.tox input.tox-checkbox__input:focus + .tox-checkbox__icons { + border-radius: 3px; + box-shadow: inset 0 0 0 1px #3498db; + padding: calc(3px); +} +.tox .tox-bar .tox-checkbox { + margin-left: 4px; +} +.tox .tox-collection--toolbar .tox-collection__group { + display: flex; + padding: 0; +} +.tox .tox-collection--grid .tox-collection__group { + display: flex; + flex-wrap: wrap; + max-height: 208px; + overflow-x: hidden; + overflow-y: auto; + padding: 0; +} +.tox .tox-collection--list .tox-collection__group { + border-bottom-width: 0; + border-color: #cccccc; + border-left-width: 0; + border-right-width: 0; + border-style: solid; + border-top-width: 1px; + padding: 4px 0; +} +.tox .tox-collection--list .tox-collection__group:first-child { + border-top-width: 0; +} +.tox .tox-collection__group-heading { + background-color: #e6e6e6; + color: rgba(34, 47, 62, 0.6); + cursor: default; + font-size: 12px; + font-style: normal; + font-weight: normal; + margin-bottom: 4px; + margin-top: -4px; + padding: 4px 8px; + text-transform: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.tox .tox-collection__item { + align-items: center; + color: #222f3e; + cursor: pointer; + display: flex; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.tox .tox-collection__item--state-disabled { + background-color: unset; + color: rgba(34, 47, 62, 0.5); + cursor: default; +} +.tox .tox-collection--list .tox-collection__item { + padding: 4px 8px; +} +.tox .tox-collection--toolbar .tox-collection__item { + border-radius: 3px; + padding: 4px; +} +.tox .tox-collection--grid .tox-collection__item { + border-radius: 3px; + padding: 4px; +} +.tox .tox-collection--list .tox-collection__item--enabled { + background-color: inherit; + color: contrast(inherit, #222f3e, #fff); +} +.tox .tox-collection--list .tox-collection__item--active { + background-color: #dee0e2; + color: #222f3e; +} +.tox .tox-collection--toolbar .tox-collection__item--enabled { + background-color: #c8cbcf; + color: #222f3e; +} +.tox .tox-collection--toolbar .tox-collection__item--active { + background-color: #dee0e2; + color: #222f3e; +} +.tox .tox-collection--grid .tox-collection__item--enabled { + background-color: #c8cbcf; + color: #222f3e; +} +.tox .tox-collection--grid .tox-collection__item--active { + background-color: #dee0e2; + color: #222f3e; +} +.tox .tox-collection__item-icon { + align-items: center; + display: flex; + height: 24px; + justify-content: center; + width: 24px; +} +.tox .tox-collection__item-icon svg { + fill: currentColor; +} +.tox .tox-collection--toolbar-lg .tox-collection__item-icon { + height: 48px; + width: 48px; +} +.tox .tox-collection--list .tox-collection__item > *:not(:first-child) { + margin-left: 8px; +} +.tox .tox-collection__item[role="menuitemcheckbox"]:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg { + display: none; +} +.tox .tox-collection__item-label { + color: currentColor; + display: inline-block; + flex: 1; + -ms-flex-preferred-size: auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 24px; + text-transform: none; + word-break: break-all; +} +.tox .tox-collection--list .tox-collection__item-label:first-child { + margin-left: 4px; +} +.tox .tox-collection__item-accessory { + color: rgba(34, 47, 62, 0.6); + display: inline-block; + font-size: 14px; + height: 24px; + line-height: 24px; + margin-left: 16px; + text-align: right; + text-transform: normal; +} +.tox .tox-collection__item-caret { + align-items: center; + display: flex; + margin-left: 16px; + min-height: 24px; +} +.tox .tox-color-picker-container { + display: flex; + flex-direction: row; + height: 225px; + margin: 0; +} +.tox .tox-sv-palette { + border: 1px solid black; + box-sizing: border-box; + display: flex; + height: 100%; + margin-right: 15px; +} +.tox .tox-sv-palette-spectrum { + height: 100%; +} +.tox .tox-sv-palette, +.tox .tox-sv-palette-spectrum { + width: 225px; +} +.tox .tox-sv-palette-thumb { + background: none; + border: 1px solid black; + border-radius: 50%; + height: 12px; + position: absolute; + width: 12px; +} +.tox .tox-sv-palette-inner-thumb { + border: 1px solid white; + border-radius: 50%; + height: 10px; + position: absolute; + width: 10px; +} +.tox .tox-hue-slider { + border: 1px solid black; + box-sizing: border-box; + height: 100%; + margin-right: 15px; + width: 25px; +} +.tox .tox-hue-slider-spectrum { + background: linear-gradient(to bottom, #f00, #ff0080, #f0f, #8000ff, #00f, #0080ff, #0ff, #00ff80, #0f0, #80ff00, #ff0, #ff8000, #f00); + height: 100%; + width: 100%; +} +.tox .tox-hue-slider, +.tox .tox-hue-slider-spectrum { + width: 20px; +} +.tox .tox-hue-slider-thumb { + background: white; + border: 1px solid black; + height: 4px; + margin-left: -1px; + width: 100%; +} +.tox .tox-rgb-form { + display: flex; + flex-direction: column; + justify-content: space-between; +} +.tox .tox-rgb-form div { + align-items: center; + display: flex; + justify-content: space-between; + margin-bottom: 5px; + width: inherit; +} +.tox .tox-rgb-form input { + width: 6em; +} +.tox .tox-rgb-form input.tox-invalid { + /* Need !important to override Chrome's focus styling unfortunately */ + border: 1px solid red !important; +} +.tox .tox-rgb-form label { + margin-right: .5em; +} +.tox .tox-rgb-form .tox-rgba-preview { + border: 1px solid black; + flex-grow: 2; + margin-bottom: 0; +} +.tox .tox-toolbar .tox-swatches, +.tox .tox-toolbar__primary .tox-swatches, +.tox .tox-toolbar__overflow .tox-swatches { + margin: 2px 0 3px 4px; +} +.tox .tox-swatches__row { + display: flex; +} +.tox .tox-swatch { + height: 30px; + transition: transform 0.15s, box-shadow 0.15s; + width: 30px; +} +.tox .tox-swatch:hover, +.tox .tox-swatch:focus { + box-shadow: 0 0 0 1px rgba(127, 127, 127, 0.3) inset; + transform: scale(0.8); +} +.tox .tox-swatch--remove { + align-items: center; + display: flex; + justify-content: center; +} +.tox .tox-swatch--remove svg path { + stroke: #e74c3c; +} +.tox .tox-swatches__picker-btn { + align-items: center; + background-color: transparent; + border: 0; + cursor: pointer; + display: flex; + height: 30px; + justify-content: center; + margin-left: auto; + outline: none; + padding: 0; + width: 30px; +} +.tox .tox-swatches__picker-btn svg { + height: 24px; + width: 24px; +} +.tox .tox-swatches__picker-btn:hover { + background: #dee0e2; +} +.tox .tox-comment-thread { + background: #fff; + position: relative; +} +.tox .tox-comment-thread > *:not(:first-child) { + margin-top: 8px; +} +.tox .tox-comment { + background: #fff; + border: 1px solid #cccccc; + border-radius: 3px; + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); + padding: 8px 8px 16px 8px; + position: relative; +} +.tox .tox-comment__header { + align-items: center; + color: #222f3e; + display: flex; + justify-content: space-between; +} +.tox .tox-comment__date { + color: rgba(34, 47, 62, 0.6); + font-size: 12px; +} +.tox .tox-comment__body { + color: #222f3e; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + margin-top: 8px; + position: relative; + text-transform: initial; +} +.tox .tox-comment__body textarea { + resize: none; + white-space: normal; + width: 100%; +} +.tox .tox-comment__expander { + padding-top: 8px; +} +.tox .tox-comment__expander p { + color: rgba(34, 47, 62, 0.6); + font-size: 14px; + font-style: normal; +} +.tox .tox-comment__body p { + margin: 0; +} +.tox .tox-comment__buttonspacing { + padding-top: 16px; + text-align: center; +} +.tox .tox-comment__buttonspacing > *:last-child { + margin-left: 8px; +} +.tox .tox-comment-thread__overlay::after { + background: #fff; + bottom: 0; + content: ""; + display: flex; + left: 0; + opacity: .9; + position: absolute; + right: 0; + top: 0; + z-index: 5; +} +.tox .tox-comment__reply { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + justify-content: flex-end; + margin-top: 8px; +} +.tox .tox-comment__reply > *:first-child { + margin-bottom: 8px; + width: 100%; +} +.tox .tox-comment__reply > *:last-child { + margin-left: 8px; +} +.tox .tox-comment__edit { + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + margin-left: 8px; + margin-top: 16px; +} +.tox .tox-comment__edit > *:last-child { + margin-left: 8px; +} +.tox .tox-comment__gradient::after { + background: linear-gradient(rgba(255, 255, 255, 0), #fff); + bottom: 0; + content: ""; + display: block; + height: 5em; + margin-top: -40px; + position: absolute; + width: 100%; +} +.tox .tox-comment__overlay { + background: #fff; + bottom: 0; + display: flex; + flex-direction: column; + flex-grow: 1; + left: 0; + opacity: .9; + position: absolute; + right: 0; + text-align: center; + top: 0; + z-index: 5; +} +.tox .tox-comment__loading-text { + align-items: center; + color: #222f3e; + display: flex; + flex-direction: column; + position: relative; +} +.tox .tox-comment__loading-text > div { + padding-bottom: 16px; +} +.tox .tox-comment__overlaytext { + bottom: 0; + flex-direction: column; + font-size: 14px; + left: 0; + padding: 1em; + position: absolute; + right: 0; + top: 0; + z-index: 10; +} +.tox .tox-comment__overlaytext p { + background-color: #fff; + box-shadow: 0 0 8px 8px #fff; + color: #222f3e; + text-align: center; +} +.tox .tox-comment__overlaytext div:nth-of-type(2) { + font-size: .8em; +} +.tox .tox-comment__busy-spinner { + align-items: center; + background-color: #fff; + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1103; +} +.tox .tox-comment__scroll { + display: flex; + flex-direction: column; + flex-shrink: 1; + overflow: auto; +} +.tox .tox-conversations { + margin: 8px; +} +.tox .tox-user { + align-items: center; + display: flex; +} +.tox .tox-user__avatar svg { + fill: rgba(34, 47, 62, 0.6); + margin-right: 8px; +} +.tox .tox-user__name { + color: rgba(34, 47, 62, 0.6); + font-size: 12px; + font-style: normal; + font-weight: bold; + text-transform: uppercase; +} +.tox .tox-user__avatar + .tox-user__name { + margin-left: 8px; +} +.tox .tox-dialog-wrap { + align-items: center; + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: fixed; + right: 0; + top: 0; + z-index: 1100; +} +.tox .tox-dialog-wrap__backdrop { + background-color: rgba(255, 255, 255, 0.75); + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1101; +} +.tox .tox-dialog { + background-color: #fff; + border-color: #cccccc; + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: 0 16px 16px -10px rgba(34, 47, 62, 0.15), 0 0 40px 1px rgba(34, 47, 62, 0.15); + display: flex; + flex-direction: column; + max-height: 100%; + max-width: 480px; + overflow: hidden; + position: relative; + width: 95vw; + z-index: 1102; +} +.tox .tox-dialog__header { + align-items: center; + background-color: #fff; + border-bottom: none; + color: #222f3e; + display: flex; + font-size: 16px; + justify-content: space-between; + margin-bottom: 16px; + padding: 8px 16px 0 16px; + position: relative; +} +.tox .tox-dialog__header .tox-button { + z-index: 1; +} +.tox .tox-dialog__draghandle { + cursor: grab; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tox .tox-dialog__draghandle:active { + cursor: grabbing; +} +.tox .tox-dialog__dismiss { + margin-left: auto; +} +.tox .tox-dialog__title { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 20px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + margin: 0; + text-transform: normal; +} +.tox .tox-dialog__body { + color: #222f3e; + display: flex; + flex: 1; + -ms-flex-preferred-size: auto; + font-size: 16px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + padding: 0 16px; + text-align: left; + text-transform: normal; +} +.tox .tox-dialog__body-nav { + align-items: flex-start; + display: flex; + flex-direction: column; + margin-right: 32px; +} +.tox .tox-dialog__body-nav-item { + border-bottom: 2px solid transparent; + color: rgba(34, 47, 62, 0.6); + display: inline-block; + font-size: 14px; + line-height: 1.3; + margin-bottom: 8px; + text-decoration: none; +} +.tox .tox-dialog__body-nav-item--active { + border-bottom: 2px solid #3498db; + color: #3498db; +} +.tox .tox-dialog__body-content { + display: flex; + flex: 1; + flex-direction: column; + -ms-flex-preferred-size: auto; + max-height: 650px; + overflow: auto; +} +.tox .tox-dialog__body-content > * { + margin-bottom: 0; + margin-top: 16px; +} +.tox .tox-dialog__body-content > *:first-child { + margin-top: 0; +} +.tox .tox-dialog__body-content > *:last-child { + margin-bottom: 0; +} +.tox .tox-dialog__body-content > *:only-child { + margin-bottom: 0; + margin-top: 0; +} +.tox .tox-dialog--width-lg { + height: 650px; + max-width: 1200px; +} +.tox .tox-dialog--width-md { + max-width: 800px; +} +.tox .tox-dialog--width-md .tox-dialog__body-content { + overflow: auto; +} +.tox .tox-dialog__body-content--centered { + text-align: center; +} +.tox .tox-dialog__body-content--spacious { + margin-bottom: 16px; +} +.tox .tox-dialog__footer { + align-items: center; + background-color: #fff; + border-top: 1px solid #cccccc; + display: flex; + justify-content: space-between; + margin-top: 16px; + padding: 8px 16px; +} +.tox .tox-dialog__footer .tox-dialog__footer-start > *, +.tox .tox-dialog__footer .tox-dialog__footer-end > * { + margin-left: 8px; +} +.tox .tox-dialog__busy-spinner { + align-items: center; + background-color: rgba(255, 255, 255, 0.75); + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1103; +} +.tox .tox-dialog__table { + border-collapse: collapse; + width: 100%; +} +.tox .tox-dialog__table thead th { + font-weight: bold; + padding-bottom: 8px; +} +.tox .tox-dialog__table tbody tr { + border-bottom: 1px solid #cccccc; +} +.tox .tox-dialog__table tbody tr:last-child { + border-bottom: none; +} +.tox .tox-dialog__table td { + padding-bottom: 8px; + padding-top: 8px; +} +.tox .tox-dialog__popups { + position: absolute; + width: 100%; + z-index: 1100; +} +body.tox-dialog__disable-scroll { + overflow: hidden; +} +.tox .tox-dropzone-container { + display: flex; + flex: 1; + -ms-flex-preferred-size: auto; +} +.tox .tox-dropzone { + align-items: center; + background: #fff; + border: 2px dashed #cccccc; + box-sizing: border-box; + display: flex; + flex-direction: column; + flex-grow: 1; + justify-content: center; + min-height: 100px; + padding: 10px; +} +.tox .tox-dropzone p { + color: rgba(34, 47, 62, 0.6); + margin: 0 0 16px 0; +} +.tox .tox-edit-area { + border-top: 1px solid #cccccc; + display: flex; + flex: 1; + -ms-flex-preferred-size: auto; + overflow: hidden; + position: relative; +} +.tox .tox-edit-area__iframe { + background-color: #fff; + border: 0; + box-sizing: border-box; + flex: 1; + -ms-flex-preferred-size: auto; + height: 100%; + position: absolute; + width: 100%; +} +.tox.tox-inline-edit-area { + border: 1px dotted #cccccc; +} +.tox .tox-control-wrap { + flex: 1; + position: relative; +} +.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid, +.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown, +.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid { + display: none; +} +.tox .tox-control-wrap svg { + display: block; +} +.tox .tox-control-wrap .tox-textfield { + padding-right: 32px; +} +.tox .tox-control-wrap__status-icon-wrap { + position: absolute; + right: 4px; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-control-wrap__status-icon-invalid svg { + fill: #c00; +} +.tox .tox-control-wrap__status-icon-unknown svg { + fill: orange; +} +.tox .tox-control-wrap__status-icon-valid svg { + fill: transparent; +} +.tox .tox-autocompleter { + max-width: 25em; +} +.tox .tox-autocompleter .tox-menu { + max-width: 25em; +} +.tox .tox-color-input { + display: flex; +} +.tox .tox-color-input .tox-textfield { + border-radius: 3px 0 0 3px; + display: flex; +} +.tox .tox-color-input span { + border-color: rgba(34, 47, 62, 0.2); + border-radius: 0 3px 3px 0; + border-style: solid; + border-width: 1px 1px 1px 0; + box-shadow: none; + box-sizing: border-box; + cursor: pointer; + display: flex; + width: 35px; +} +.tox .tox-color-input span:focus { + border-color: #3498db; +} +.tox .tox-label, +.tox .tox-toolbar-label { + color: rgba(34, 47, 62, 0.6); + display: block; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + padding: 0 8px 0 0; + text-transform: normal; + white-space: nowrap; +} +.tox .tox-toolbar-label { + padding: 0 8px; +} +.tox .tox-form { + display: flex; + flex: 1; + flex-direction: column; + -ms-flex-preferred-size: auto; +} +.tox .tox-form__group { + box-sizing: border-box; + margin-bottom: 4px; +} +.tox .tox-form__group--error { + color: #c00; +} +.tox .tox-form__group--collection { + display: flex; +} +.tox .tox-form__grid { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; +} +.tox .tox-form__grid--2col > .tox-form__group { + width: calc(50% - (8px / 2)); +} +.tox .tox-form__grid--3col > .tox-form__group { + width: calc(100% / 3 - (8px / 2)); +} +.tox .tox-form__grid--4col > .tox-form__group { + width: calc(25% - (8px / 2)); +} +.tox .tox-form__controls-h-stack { + align-items: center; + display: flex; +} +.tox .tox-form__controls-h-stack > *:not(:first-child) { + margin-left: 4px; +} +.tox .tox-form__group--inline { + align-items: center; + display: flex; +} +.tox .tox-form__group--stretched { + display: flex; + flex: 1; + flex-direction: column; + -ms-flex-preferred-size: auto; +} +.tox .tox-form__group--stretched .tox-textarea { + flex: 1; + -ms-flex-preferred-size: auto; +} +.tox .tox-form__group--stretched .tox-navobj { + display: flex; + flex: 1; + -ms-flex-preferred-size: auto; +} +.tox .tox-form__group--stretched .tox-navobj :nth-child(2) { + flex: 1; + -ms-flex-preferred-size: auto; + height: 100%; +} +.tox .tox-lock.tox-locked .tox-lock-icon__unlock, +.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock { + display: none; +} +.tox .tox-selectfield { + cursor: pointer; + position: relative; +} +.tox .tox-selectfield select { + padding-right: 24px; +} +.tox .tox-selectfield select::-ms-expand { + display: none; +} +.tox .tox-selectfield svg { + pointer-events: none; + position: absolute; + right: 8px; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-textarea { + white-space: pre-wrap; +} +.tox .tox-textfield, +.tox .tox-selectfield select, +.tox .tox-textarea, +.tox .tox-toolbar-textfield { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: #fff; + border-color: #cccccc; + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + color: #222f3e; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + line-height: 24px; + margin: 0; + outline: none; + padding: 5px 4.75px; + resize: none; + width: 100%; +} +.tox .tox-textfield:focus, +.tox .tox-selectfield select:focus, +.tox .tox-textarea:focus { + border-color: #3498db; + box-shadow: none; + outline: none; +} +.tox .tox-toolbar-textfield { + border-width: 0; + margin-bottom: 3px; + margin-top: 2px; + max-width: 250px; +} +.tox .tox-toolbar-textfield + * { + margin-left: 4px; +} +.tox .tox-naked-btn { + background-color: transparent; + border: 0; + border-color: transparent; + box-shadow: unset; + color: #3498db; + cursor: pointer; + display: block; + margin: 0; + padding: 0; +} +.tox .tox-naked-btn svg { + display: block; + fill: #222f3e; +} +.tox-fullscreen { + border: 0; + height: 100%; + left: 0; + margin: 0; + overflow: hidden; + padding: 0; + position: fixed; + top: 0; + width: 100%; +} +.tox-fullscreen .tox .tox-statusbar__resize-handle { + display: none; +} +.tox-fullscreen .tox.tox-tinymce { + z-index: 1200; +} +.tox-fullscreen .tox.tox-tinymce-aux { + z-index: 1201; +} +.tox .tox-image-tools { + width: 100%; +} +.tox .tox-image-tools__toolbar { + align-items: center; + display: flex; + justify-content: center; +} +.tox .tox-image-tools__image { + background-color: #666; + height: 380px; + overflow: auto; + position: relative; + width: 100%; +} +.tox .tox-image-tools__image, +.tox .tox-image-tools__image + .tox-image-tools__toolbar { + margin-top: 8px; +} +.tox .tox-image-tools__image-bg { + background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==); +} +.tox .tox-image-tools__toolbar > .tox-slider:not(:first-of-type) { + margin-left: 8px; +} +.tox .tox-image-tools__toolbar > .tox-button + .tox-slider { + margin-left: 32px; +} +.tox .tox-image-tools__toolbar > .tox-slider + .tox-button { + margin-left: 32px; +} +.tox .tox-image-tools__toolbar > .tox-spacer { + flex: 1; + -ms-flex-preferred-size: auto; +} +.tox .tox-croprect-block { + background: black; + filter: alpha(opacity=50); + opacity: .5; + position: absolute; + zoom: 1; +} +.tox .tox-croprect-handle { + border: 2px solid white; + height: 20px; + left: 0; + position: absolute; + top: 0; + width: 20px; +} +.tox .tox-croprect-handle-move { + border: 0; + cursor: move; + position: absolute; +} +.tox .tox-croprect-handle-nw { + border-width: 2px 0 0 2px; + cursor: nw-resize; + left: 100px; + margin: -2px 0 0 -2px; + top: 100px; +} +.tox .tox-croprect-handle-ne { + border-width: 2px 2px 0 0; + cursor: ne-resize; + left: 200px; + margin: -2px 0 0 -20px; + top: 100px; +} +.tox .tox-croprect-handle-sw { + border-width: 0 0 2px 2px; + cursor: sw-resize; + left: 100px; + margin: -20px 2px 0 -2px; + top: 200px; +} +.tox .tox-croprect-handle-se { + border-width: 0 2px 2px 0; + cursor: se-resize; + left: 200px; + margin: -20px 0 0 -20px; + top: 200px; +} +.tox .tox-insert-table-picker { + display: flex; + flex-wrap: wrap; + width: 169px; +} +.tox .tox-insert-table-picker > div { + border-color: #cccccc; + border-style: solid; + border-width: 0 1px 1px 0; + box-sizing: content-box; + height: 16px; + width: 16px; +} +.tox .tox-insert-table-picker > div:nth-child(10n) { + border-right: 0; +} +.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker { + margin: -4px 0; +} +.tox .tox-insert-table-picker .tox-insert-table-picker__selected { + background-color: rgba(52, 152, 219, 0.5); + border-color: rgba(52, 152, 219, 0.5); +} +.tox .tox-insert-table-picker__label { + color: rgba(34, 47, 62, 0.6); + display: block; + font-size: 14px; + padding: 4px; + text-align: center; + width: 100%; +} +.tox { + /* stylelint-disable */ + /* stylelint-enable */ +} +.tox .tox-menu { + background-color: #fff; + border: 1px solid #cccccc; + border-radius: 3px; + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); + display: inline-block; + overflow: hidden; + vertical-align: top; + z-index: 1; +} +.tox .tox-menu.tox-collection.tox-collection--list { + padding: 0; +} +.tox .tox-menu.tox-collection.tox-collection--toolbar { + padding: 4px; +} +.tox .tox-menu.tox-collection.tox-collection--grid { + padding: 4px; +} +.tox .tox-menu__label h1, +.tox .tox-menu__label h2, +.tox .tox-menu__label h3, +.tox .tox-menu__label h4, +.tox .tox-menu__label h5, +.tox .tox-menu__label h6, +.tox .tox-menu__label p, +.tox .tox-menu__label blockquote, +.tox .tox-menu__label code { + margin: 0; +} +.tox .tox-menubar { + background: url("data:image/svg+xml;charset=utf8,%3Csvg height='43px' viewBox='0 0 40 43px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='42px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff; + background-color: #fff; + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: wrap; + margin-bottom: -1px; + padding: 0 4px; +} +.tox .tox-mbtn { + align-items: center; + background: none; + border: 0; + border-radius: 3px; + box-shadow: none; + color: #222f3e; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 34px; + justify-content: center; + margin: 2px 0 3px 0; + outline: none; + overflow: hidden; + padding: 0 4px; + text-transform: normal; + width: auto; +} +.tox .tox-mbtn[disabled] { + background-color: none; + border-color: none; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-mbtn:hover:not(:disabled) { + background: #dee0e2; + box-shadow: none; + color: #222f3e; +} +.tox .tox-mbtn:focus:not(:disabled) { + background: #dee0e2; + box-shadow: none; + color: #222f3e; +} +.tox .tox-mbtn--active { + background: #c8cbcf; + box-shadow: none; + color: #222f3e; +} +.tox .tox-mbtn__select-label { + cursor: default; + font-weight: normal; + margin: 0 4px; +} +.tox .tox-mbtn[disabled] .tox-mbtn__select-label { + cursor: not-allowed; +} +.tox .tox-mbtn__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; + display: none; +} +.tox .tox-notification { + background-color: #fff; + border-color: #c5c5c5; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + display: -ms-grid; + display: grid; + -ms-grid-columns: minmax(40px, 1fr) auto minmax(40px, 1fr); + grid-template-columns: minmax(40px, 1fr) auto minmax(40px, 1fr); + margin-top: 5px; + opacity: 0; + padding: 5px; + transition: transform 100ms ease-in, opacity 150ms ease-in; +} +.tox .tox-notification--in { + opacity: 1; +} +.tox .tox-notification--success { + background-color: #dff0d8; + border-color: #d6e9c6; +} +.tox .tox-notification--error { + background-color: #f2dede; + border-color: #ebccd1; +} +.tox .tox-notification--warn { + background-color: #fcf8e3; + border-color: #faebcc; +} +.tox .tox-notification--info { + background-color: #d9edf7; + border-color: #779ecb; +} +.tox .tox-notification__body { + -ms-grid-row-align: center; + align-self: center; + color: #31708f; + font-size: 14px; + grid-column-end: 3; + -ms-grid-column-span: 1; + -ms-grid-column: 2; + grid-column-start: 2; + grid-row-end: 2; + -ms-grid-row: 1; + grid-row-start: 1; + text-align: center; + white-space: normal; + word-break: break-all; + word-break: break-word; +} +.tox .tox-notification__body > * { + margin: 0; +} +.tox .tox-notification__body > * + * { + margin-top: 1rem; +} +.tox .tox-notification__icon { + -ms-grid-row-align: center; + align-self: center; + -ms-grid-column-align: end; + grid-column-end: 2; + -ms-grid-column-span: 1; + -ms-grid-column: 1; + grid-column-start: 1; + grid-row-end: 2; + -ms-grid-row: 1; + grid-row-start: 1; + justify-self: end; +} +.tox .tox-notification__icon svg { + display: block; +} +.tox .tox-notification__dismiss { + -ms-grid-row-align: start; + align-self: start; + -ms-grid-column-align: end; + grid-column-end: 4; + -ms-grid-column-span: 1; + -ms-grid-column: 3; + grid-column-start: 3; + grid-row-end: 2; + -ms-grid-row: 1; + grid-row-start: 1; + justify-self: end; +} +.tox .tox-notification .tox-progress-bar { + -ms-grid-column-align: center; + grid-column-end: 4; + -ms-grid-column-span: 3; + -ms-grid-column: 1; + grid-column-start: 1; + grid-row-end: 3; + -ms-grid-row-span: 1; + -ms-grid-row: 2; + grid-row-start: 2; + justify-self: center; +} +.tox .tox-pop { + display: inline-block; + position: relative; +} +.tox .tox-pop--resizing { + transition: width .1s ease; +} +.tox .tox-pop--resizing .tox-toolbar { + flex-wrap: nowrap; +} +.tox .tox-pop__dialog { + background-color: #fff; + border: 1px solid #cccccc; + border-radius: 3px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15); + min-width: 0; + overflow: hidden; +} +.tox .tox-pop__dialog > *:not(.tox-toolbar) { + margin: 4px 4px 4px 8px; +} +.tox .tox-pop__dialog .tox-toolbar { + background-color: transparent; +} +.tox .tox-pop::before, +.tox .tox-pop::after { + border-style: solid; + content: ''; + display: block; + height: 0; + position: absolute; + width: 0; +} +.tox .tox-pop.tox-pop--bottom::before, +.tox .tox-pop.tox-pop--bottom::after { + left: 50%; + top: 100%; +} +.tox .tox-pop.tox-pop--bottom::after { + border-color: #fff transparent transparent transparent; + border-width: 8px; + margin-left: -8px; + margin-top: -1px; +} +.tox .tox-pop.tox-pop--bottom::before { + border-color: #cccccc transparent transparent transparent; + border-width: 9px; + margin-left: -9px; +} +.tox .tox-pop.tox-pop--top::before, +.tox .tox-pop.tox-pop--top::after { + left: 50%; + top: 0; + transform: translateY(-100%); +} +.tox .tox-pop.tox-pop--top::after { + border-color: transparent transparent #fff transparent; + border-width: 8px; + margin-left: -8px; + margin-top: 1px; +} +.tox .tox-pop.tox-pop--top::before { + border-color: transparent transparent #cccccc transparent; + border-width: 9px; + margin-left: -9px; +} +.tox .tox-pop.tox-pop--left::before, +.tox .tox-pop.tox-pop--left::after { + left: 0; + top: calc(50% - 1px); + transform: translateY(-50%); +} +.tox .tox-pop.tox-pop--left::after { + border-color: transparent #fff transparent transparent; + border-width: 8px; + margin-left: -15px; +} +.tox .tox-pop.tox-pop--left::before { + border-color: transparent #cccccc transparent transparent; + border-width: 10px; + margin-left: -19px; +} +.tox .tox-pop.tox-pop--right::before, +.tox .tox-pop.tox-pop--right::after { + left: 100%; + top: calc(50% + 1px); + transform: translateY(-50%); +} +.tox .tox-pop.tox-pop--right::after { + border-color: transparent transparent transparent #fff; + border-width: 8px; + margin-left: -1px; +} +.tox .tox-pop.tox-pop--right::before { + border-color: transparent transparent transparent #cccccc; + border-width: 10px; + margin-left: -1px; +} +.tox .tox-pop.tox-pop--align-left::before, +.tox .tox-pop.tox-pop--align-left::after { + left: 20px; +} +.tox .tox-pop.tox-pop--align-right::before, +.tox .tox-pop.tox-pop--align-right::after { + left: calc(100% - 20px); +} +.tox .tox-sidebar-wrap { + display: flex; + flex-direction: row; + flex-grow: 1; + min-height: 0; +} +.tox .tox-sidebar { + display: flex; + flex-direction: row; + justify-content: flex-end; +} +.tox .tox-sidebar__slider { + display: flex; + overflow: hidden; +} +.tox .tox-sidebar__pane-container { + display: flex; +} +.tox .tox-sidebar__pane { + display: flex; +} +.tox .tox-sidebar--sliding-closed { + opacity: 0; +} +.tox .tox-sidebar--sliding-open { + opacity: 1; +} +.tox .tox-sidebar--sliding-growing, +.tox .tox-sidebar--sliding-shrinking { + transition: width .5s ease, opacity .5s ease; +} +.tox .tox-slider { + align-items: center; + display: flex; + flex: 1; + -ms-flex-preferred-size: auto; + height: 24px; + justify-content: center; + position: relative; +} +.tox .tox-slider__rail { + background-color: transparent; + border: 1px solid #cccccc; + border-radius: 6px; + height: 6px; + min-width: 120px; + width: 100%; +} +.tox .tox-slider__handle { + background-color: #3498db; + border-radius: 1.5px; + box-shadow: none; + height: 24px; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%); + width: 3px; +} +.tox .tox-source-code { + overflow: auto; +} +.tox .tox-spinner { + display: flex; +} +.tox .tox-spinner > div { + animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both; + background-color: rgba(34, 47, 62, 0.6); + border-radius: 100%; + height: 8px; + width: 8px; +} +.tox .tox-spinner > div:nth-child(1) { + animation-delay: -0.32s; +} +.tox .tox-spinner > div:nth-child(2) { + animation-delay: -0.16s; +} +.tox .tox-spinner > div:not(:first-child) { + margin-left: 4px; +} +@keyframes tam-bouncing-dots { + 0%, + 80%, + 100% { + transform: scale(0); + } + 40% { + transform: scale(1); + } +} +.tox .tox-statusbar { + align-items: center; + background-color: #fff; + border-top: 1px solid #cccccc; + color: rgba(34, 47, 62, 0.6); + display: flex; + flex: 0 0 auto; + font-size: 12px; + height: 18px; + overflow: hidden; + padding: 0 8px; + position: relative; + text-transform: uppercase; +} +.tox .tox-statusbar a { + color: rgba(34, 47, 62, 0.6); + text-decoration: none; +} +.tox .tox-statusbar a:hover { + text-decoration: underline; +} +.tox .tox-statusbar__text-container { + display: flex; + flex: 1 1 auto; + justify-content: flex-end; + overflow: hidden; +} +.tox .tox-statusbar__path { + display: flex; + flex: 1 1 auto; + margin-right: auto; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tox .tox-statusbar__path > * { + display: inline; + margin-right: 4px; + white-space: nowrap; +} +.tox .tox-statusbar__wordcount, +.tox .tox-statusbar__branding { + flex: 0 0 auto; + margin-left: 1ch; +} +.tox .tox-statusbar__resize-handle { + align-items: flex-end; + align-self: stretch; + cursor: nwse-resize; + display: flex; + flex: 0 0 auto; + justify-content: flex-end; + margin-left: auto; + margin-right: -8px; + padding-left: 1ch; +} +.tox .tox-statusbar__resize-handle svg { + display: block; + fill: rgba(34, 47, 62, 0.6); +} +.tox .tox-tbtn { + align-items: center; + background: none; + border: 0; + border-radius: 3px; + box-shadow: none; + color: #222f3e; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 34px; + justify-content: center; + margin: 2px 0 3px 0; + outline: none; + overflow: hidden; + padding: 0; + text-transform: normal; + width: 34px; +} +.tox .tox-tbtn svg { + display: block; + fill: #222f3e; +} +.tox .tox-tbtn.tox-tbtn-more { + padding-left: 5px; + padding-right: 5px; + width: inherit; +} +.tox .tox-tbtn + .tox-tbtn { + margin-left: 0; +} +.tox .tox-tbtn--enabled { + background: #c8cbcf; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tbtn--enabled > * { + transform: none; +} +.tox .tox-tbtn--enabled svg { + fill: #222f3e; +} +.tox .tox-tbtn:hover { + background: #dee0e2; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tbtn:hover svg { + fill: #222f3e; +} +.tox .tox-tbtn:focus { + background: #dee0e2; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tbtn:focus svg { + fill: #222f3e; +} +.tox .tox-tbtn:active { + background: #c8cbcf; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tbtn:active svg { + fill: #222f3e; +} +.tox .tox-tbtn--disabled, +.tox .tox-tbtn--disabled:hover, +.tox .tox-tbtn:disabled, +.tox .tox-tbtn:disabled:hover { + background: none; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-tbtn--disabled svg, +.tox .tox-tbtn--disabled:hover svg, +.tox .tox-tbtn:disabled svg, +.tox .tox-tbtn:disabled:hover svg { + /* stylelint-disable-line no-descending-specificity */ + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-tbtn:active > * { + transform: none; +} +.tox .tox-tbtn--md { + height: 51px; + width: 51px; +} +.tox .tox-tbtn--lg { + flex-direction: column; + height: 68px; + width: 68px; +} +.tox .tox-tbtn--return { + -ms-grid-row-align: stretch; + align-self: stretch; + height: unset; + width: 16px; +} +.tox .tox-tbtn--labeled { + padding: 0 4px; + width: unset; +} +.tox .tox-tbtn__vlabel { + display: block; + font-size: 10px; + font-weight: normal; + letter-spacing: -0.025em; + margin-bottom: 4px; + white-space: nowrap; +} +.tox .tox-tbtn--select { + margin: 2px 0 3px 0; + padding: 0 4px; + width: auto; +} +.tox .tox-tbtn__select-label { + cursor: default; + font-weight: normal; + margin: 0 4px; +} +.tox .tox-tbtn__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; +} +.tox .tox-tbtn__select-chevron svg { + fill: rgba(34, 47, 62, 0.6); +} +.tox .tox-tbtn--bespoke .tox-tbtn__select-label { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 7em; +} +.tox .tox-split-button { + border: 0; + border-radius: 3px; + box-sizing: border-box; + display: flex; + margin: 2px 0 3px 0; + overflow: hidden; +} +.tox .tox-split-button:hover { + box-shadow: 0 0 0 1px #dee0e2 inset; +} +.tox .tox-split-button:focus { + background: #dee0e2; + box-shadow: none; + color: #222f3e; +} +.tox .tox-split-button > * { + border-radius: 0; +} +.tox .tox-split-button__chevron { + width: 16px; +} +.tox .tox-split-button__chevron svg { + fill: rgba(34, 47, 62, 0.6); +} +.tox .tox-pop .tox-split-button__chevron svg { + transform: rotate(-90deg); +} +.tox .tox-split-button .tox-tbtn { + margin: 0; +} +.tox .tox-split-button.tox-tbtn--disabled:hover, +.tox .tox-split-button.tox-tbtn--disabled:focus, +.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover, +.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus { + background: none; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); +} +.tox .tox-toolbar, +.tox .tox-toolbar__primary, +.tox .tox-toolbar__overflow { + background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff; + background-color: #fff; + border-top: 1px solid #cccccc; + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: wrap; + margin-bottom: -1px; + padding: 0 0; +} +.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed { + display: none; +} +.tox .tox-pop .tox-toolbar { + border-width: 0; +} +.tox .tox-toolbar--no-divider { + background-image: none; +} +.tox.tox-tinymce-aux .tox-toolbar__overflow { + border-left: 1px solid #cccccc; + border-radius: 6px; + border-right: 1px solid #cccccc; +} +.tox .tox-toolbar__group { + align-items: center; + display: flex; + flex-wrap: wrap; + margin: 0 0; + padding: 0 4px; +} +.tox .tox-toolbar__group:not(:last-of-type) { + border-right: 1px solid #cccccc; +} +.tox .tox-toolbar__group--pull-right { + margin-left: auto; +} +.tox .tox-tooltip { + display: inline-block; + padding: 8px; + position: relative; +} +.tox .tox-tooltip__body { + background-color: #222f3e; + border-radius: 3px; + box-shadow: 0 2px 4px rgba(34, 47, 62, 0.3); + color: rgba(255, 255, 255, 0.75); + font-size: 14px; + font-style: normal; + font-weight: normal; + padding: 4px 8px; + text-transform: normal; +} +.tox .tox-tooltip__arrow { + position: absolute; +} +.tox .tox-tooltip--down .tox-tooltip__arrow { + border-left: 8px solid transparent; + border-right: 8px solid transparent; + border-top: 8px solid #222f3e; + bottom: 0; + left: 50%; + position: absolute; + transform: translateX(-50%); +} +.tox .tox-tooltip--up .tox-tooltip__arrow { + border-bottom: 8px solid #222f3e; + border-left: 8px solid transparent; + border-right: 8px solid transparent; + left: 50%; + position: absolute; + top: 0; + transform: translateX(-50%); +} +.tox .tox-tooltip--right .tox-tooltip__arrow { + border-bottom: 8px solid transparent; + border-left: 8px solid #222f3e; + border-top: 8px solid transparent; + position: absolute; + right: 0; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-tooltip--left .tox-tooltip__arrow { + border-bottom: 8px solid transparent; + border-right: 8px solid #222f3e; + border-top: 8px solid transparent; + left: 0; + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-well { + border: 1px solid #cccccc; + border-radius: 3px; + padding: 8px; + width: 100%; +} +.tox .tox-well > *:first-child { + margin-top: 0; +} +.tox .tox-well > *:last-child { + margin-bottom: 0; +} +.tox .tox-well > *:only-child { + margin: 0; +} +.tox .tox-custom-editor { + border: 1px solid #cccccc; + border-radius: 3px; + display: flex; + height: 525px; +} +/* stylelint-disable */ +.tox { + /* stylelint-enable */ +} +.tox .tox-dialog-loading::before { + background-color: rgba(0, 0, 0, 0.5); + content: ""; + height: 100%; + position: absolute; + width: 100%; + z-index: 1000; +} +.tox .tox-tab { + cursor: pointer; +} +.tox .tox-dialog__content-js { + display: flex; + flex: 1; + -ms-flex-preferred-size: auto; +} +.tox .tox-dialog__body-content .tox-collection { + display: flex; + flex: 1; + -ms-flex-preferred-size: auto; +} +.tox ul { + display: block; + list-style-type: disc; + -webkit-margin-before: 1em; + margin-block-start: 1em; + -webkit-margin-after: 1em; + margin-block-end: 1em; + -webkit-margin-start: 0px; + margin-inline-start: 0px; + -webkit-margin-end: 0px; + margin-inline-end: 0px; + -webkit-padding-start: 40px; + padding-inline-start: 40px; +} +.tox a { + cursor: pointer; + color: #2276d2; +} +.tox .tox-image-tools-edit-panel { + height: 60px; +} +.tox .tox-image-tools__sidebar { + height: 60px; +} diff --git a/jshERP-web/public/v2.js b/jshERP-web/public/v2.js new file mode 100644 index 000000000..ce0472827 --- /dev/null +++ b/jshERP-web/public/v2.js @@ -0,0 +1 @@ +!function(){"use strict";function e(e){return e===undefined||null===e}function t(e){return e!==undefined&&null!==e}function n(e){return null!==e&&"object"===(void 0===e?"undefined":d(e))}function r(e){return"object"===(void 0===e?"undefined":d(e))&&e instanceof HTMLElement}function o(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:""}function i(){return new RegExp("MSIE (\\d+\\.\\d+);").test(navigator.userAgent),parseFloat(RegExp.$1)||Infinity}function a(e,t){for(var n in t)e[n]=t[n];return e}function c(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}function u(e){return p.call(e).slice(8,-1)}function s(e){throw new Error("Vaptcha error: "+e)}function l(e){var t=e.mode,n=e.outage;return!!t&&"downtime"===(t=t.toLowerCase())&&!!n}function Promise(e){var t=this;this.state="pending",this.value=undefined,this.reason=undefined,this.onResolveAsyncCallbacks=[],this.onRejectAsyncCallbacks=[];var n=function(e){"pending"===t.state&&(t.state="fulfilled",t.value=e,t.onResolveAsyncCallbacks.map(function(e){return e()}))},r=function(e){"pending"===t.state&&(t.state="rejected",t.reason=e,t.onRejectAsyncCallbacks.map(function(t){return t(e)}))};try{e(n,r)}catch(o){r(o)}}window.HTMLElement=window.HTMLElement||Element,Array.prototype.map||(Array.prototype.map=function(e,t){var n,r,o;if(null==this)throw new TypeError(" this is null or not defined");var i=Object(this),a=i.length>>>0;if("[object Function]"!=Object.prototype.toString.call(e))throw new TypeError(e+" is not a function");for(t&&(n=t),r=new Array(a),o=0;o>>0;if(0===r)return!1;for(var o=0|t,i=Math.max(o>=0?o:r-Math.abs(o),0);i>>0;if("function"!=typeof e)throw new TypeError("predicate must be a function");for(var r=arguments[1],o=0;o-1||r.indexOf("https://")>-1;return r.indexOf("?")<0&&(i="?"+i.slice(1)),a?""+r+i:""+e+t+r+i},o=function(e){var t=document.getElementsByTagName("head")[0],n=document.createElement("script");return n.charset="UTF-8",n.src=e,t.appendChild(n),{remove:function(){t.removeChild(n)}}},i=function(e,t){return t=t||{},new Promise(function(n){var i="VaptchaJsonp"+(new Date).valueOf();window[i]&&(i+="1"),a(t,{callback:i}),e=r(e,t);var c=o(e),u=setTimeout(function(){clearTimeout(u),window[i]=null,c.remove(),n({code:"0703",msg:"Time out,Refresh Again!"})},1e4);window[i]=function(){clearTimeout(u),n.apply(this,arguments),c.remove(),window[i]=null}})};return i.setConfig=function(n){e=n.protocol||e,t=n.api_server||t},i}(),g={getConfig:function(e){return y("/config",{id:e.vid,type:e.type,scene:e.scene||""})},refresh:function(e){return y("/refresh",e)},click:function(e){return y("/click",e)},get:function(e){return y("/get",e)},verify:function(e){return y("/verify",e)},userbehavior:function(e){return y("/userbehavior",e)}},w={"0201":"id empty","0202":"id error","0208":"scene error","0209":"request used up","0906":"params error","0702":"domain not match"},b=function(){var o=!1,c=function(e){var t=new v(e);return t.add("outage","required","please configure outage"),t.validate(),a(e,{js_path:"vaptcha-sdk-downtime.2.0.2.js",api_server:window.location.host,protocol:window.location.protocol+"//",mode:"DownTime"}),y.setConfig(e),y(e.outage,{action:"get"}).then(function(t){return t.code!==m.Success?(s(w[t.msg]||t.msg),Promise.reject(t.code)):(a(e,t),Promise.resolve())})},f=function(e){return l(e)?c(e):g.getConfig(e).then(function(t){return t.code!==m.Success?(s(w[t.msg]||t.msg),Promise.reject(t.code)):(t.type!==e.type&&(t.mode=t.type,t.type=e.type),a(e,t),l(e)?c(e):Promise.resolve())})},d=function(e,t){return""+e.protocol+e.cdn_servers[0]+"/"+t},p=function(t){var n=document.getElementsByTagName("head")[0],r=document.getElementById("vaptcha_style");return new Promise(function(o){e(r)?(r=document.createElement("link"),a(r,{rel:"stylesheet",type:"text/css",href:t,id:"vaptcha_style",onload:o}),n&&n.appendChild(r)):o()})},b=function C(e){var n=document.getElementsByTagName("head")[0],r=document.querySelector("script[src='"+e+"']");return new Promise(function(o){if(t(r))return void(r.loaded?o():setTimeout(function(){return C(e).then(o)}));r=document.createElement("script");var i=function(){r.readyState&&"loaded"!==r.readyState&&"complete"!==r.readyState||(o(),r.loaded=!0,r.onload=null,r.onreadystatechange=null)};a(r,{async:!0,charset:"utf-8",src:e,onerror:function(){return s("load sdk timeout")},onload:i,onreadystatechange:i}),n.appendChild(r)})},j=function T(e){var t=e.sdkName,n=e.config,r=d(n,n.js_path);return b(r).then(function(){var e=window["_"+h(t)+"Vaptcha"],r=new e(n);return r.vaptcha.resetCaptcha=function(e,t){a(n,t),T({sdkName:e,config:n}).then(function(e){r.destroy(),r.options=e.options,r.vaptcha=e.vaptcha,e.render(),"character"===n.mode&&["click","float","popup"].includes(n.type)&&e.vaptcha.dtClickCb({target:e.vaptcha.btnDiv})})},Promise.resolve(r)})},A=function(e){o=!0,e.https=!0,e.protocol="https://",y.setConfig(e),!["embed","popup","invisible"].includes(e.type)&&(e.type="popup"),i()<9&&b(d(e,e.canvas_path));var t=new v(e);if(t.addValidateRules({elementOrSelector:function(t,o){if("String"===u(e.container)&&(e.container=document.querySelector(e.container)),n(e.container)&&r(e.container[0])&&(e.container=e.container[0]),!r(e.container))return o}}),t.add("vid","required","please configure vid"),"invisible"!==e.type&&t.add("container","elementOrSelector","please configure container with element or selector"),t.validate())return f(e).then(function(){var t="theme_https."+e.css_version+".css",n=d(e,t);return p(n)}).then(function(){var t=e.mode||e.type;return o=!1,j({sdkName:t,config:e})})};return function S(e){return new Promise(function(t){o?setTimeout(function(){S(e).then(t)},1e3):A(e).then(t)})["catch"](function(e){return o=!1,s(e),Promise.reject(e)})}}(),j=function(){var e=function(e){var n=e.getAttribute("data-config"),r={};if(t(n))try{r=JSON.parse(n)}catch(o){s("dom config format error")}return r},n=function(e){var n=e.getAttribute("data-vid");return t(n)?{vid:n}:{}},r=function(e,n){var r=Object.create(f);r.container=e,a(r,n),t(r.vid)&&b(r).then(function(e){e.renderTokenInput(),e.render()})};return function(){for(var t=document.querySelectorAll("[data-vid]"),o=document.querySelectorAll("[data-config]"),i=0;i + +
    + +
    +
    + + + \ No newline at end of file diff --git a/jshERP-web/src/api/GroupRequest.js b/jshERP-web/src/api/GroupRequest.js new file mode 100644 index 000000000..26881387a --- /dev/null +++ b/jshERP-web/src/api/GroupRequest.js @@ -0,0 +1,30 @@ +import Vue from 'vue' + +/** + * 将一个请求分组 + * + * @param getPromise 传入一个可以获取到Promise对象的方法 + * @param groupId 分组ID,如果不传或者为空则不分组 + * @param expire 过期时间,默认 半分钟 + */ +export function httpGroupRequest(getPromise, groupId, expire = 1000 * 30) { + if (groupId == null || groupId === '') { + console.log("--------popup----------getFrom DB-------with---no--groupId ") + return getPromise() + } + + if (Vue.ls.get(groupId)) { + console.log("---------popup--------getFrom Cache--------groupId = " + groupId) + return Promise.resolve(Vue.ls.get(groupId)); + } else { + console.log("--------popup----------getFrom DB---------groupId = " + groupId) + } + + // 还没有发出请求,就发出第一次的请求 + return getPromise().then(res => { + Vue.ls.set(groupId, res, expire); + return Promise.resolve(res); + }) +} + + diff --git a/jshERP-web/src/api/api.js b/jshERP-web/src/api/api.js new file mode 100644 index 000000000..5f0f0e0e5 --- /dev/null +++ b/jshERP-web/src/api/api.js @@ -0,0 +1,271 @@ +import { getAction, deleteAction, putAction, postAction, httpAction } from '@/api/manage' +import Vue from 'vue' +import {UI_CACHE_DB_DICT_DATA } from "@/store/mutation-types" + +//首页统计 +const getBuyAndSaleStatistics = (params)=>getAction("/depotHead/getBuyAndSaleStatistics",params); +const buyOrSalePrice = (params)=>getAction("/depotItem/buyOrSalePrice",params); + +//角色管理 +const addRole = (params)=>postAction("/role/add",params); +const editRole = (params)=>putAction("/role/update",params); +const checkRole = (params)=>getAction("/role/checkIsNameExist",params); +const findUserRole = (params)=>getAction("/role/findUserRole",params); +const queryall = (params)=>getAction("/sys/role/queryall",params); + +//用户管理 +const addUser = (params)=>postAction("/user/addUser",params); +const editUser = (params)=>putAction("/user/updateUser",params); +const queryUserRole = (params)=>getAction("/sys/user/queryUserRole",params); +const getUserList = (params)=>getAction("/sys/user/list",params); +const frozenBatch = (params)=>putAction("/sys/user/frozenBatch",params); +//验证用户是否存在 +const checkOnlyUser = (params)=>getAction("/sys/user/checkOnlyUser",params); +//改变密码 +const changePassword = (params)=>putAction("/sys/user/changePassword",params); + +//权限管理 +const addPermission= (params)=>postAction("/sys/permission/add",params); +const editPermission= (params)=>putAction("/sys/permission/edit",params); +const getPermissionList = (params)=>getAction("/sys/permission/list",params); +const getSystemMenuList = (params)=>getAction("/sys/permission/getSystemMenuList",params); +const getSystemSubmenu = (params)=>getAction("/sys/permission/getSystemSubmenu",params); +const getSystemSubmenuBatch = (params) => getAction('/sys/permission/getSystemSubmenuBatch', params) + +const queryTreeList = (params)=>getAction("/sys/permission/queryTreeList",params); +const queryTreeListForRole = (params)=>getAction("/sys/role/queryTreeList",params); +const queryListAsync = (params)=>getAction("/sys/permission/queryListAsync",params); +const queryRolePermission = (params)=>getAction("/sys/permission/queryRolePermission",params); +const saveRolePermission = (params)=>postAction("/sys/permission/saveRolePermission",params); +const queryPermissionsByUser = (params)=>postAction("/function/findMenuByPNumber",params); +const loadAllRoleIds = (params)=>getAction("/sys/permission/loadAllRoleIds",params); +const getPermissionRuleList = (params)=>getAction("/sys/permission/getPermRuleListByPermId",params); +const queryPermissionRule = (params)=>getAction("/sys/permission/queryPermissionRule",params); + +//机构管理 +const queryOrganizationTreeList = (params)=>getAction("/organization/getOrganizationTree",params); +const queryOrganizationById = (params)=>getAction("/organization/findById",params); +const queryIdTree = (params)=>getAction("/sys/sysDepart/queryIdTree",params); +const queryParentName = (params)=>getAction("/sys/sysDepart/queryParentName",params); +const searchByKeywords = (params)=>getAction("/sys/sysDepart/searchBy",params); +const deleteByDepartId = (params)=>deleteAction("/sys/sysDepart/delete",params); + +//二级部门管理 +const queryDepartPermission = (params)=>getAction("/sys/permission/queryDepartPermission",params); +const saveDepartPermission = (params)=>postAction("/sys/permission/saveDepartPermission",params); +const queryTreeListForDeptRole = (params)=>getAction("/sys/sysDepartPermission/queryTreeListForDeptRole",params); +const queryDeptRolePermission = (params)=>getAction("/sys/sysDepartPermission/queryDeptRolePermission",params); +const saveDeptRolePermission = (params)=>postAction("/sys/sysDepartPermission/saveDeptRolePermission",params); +const queryMyDepartTreeList = (params)=>getAction("/sys/sysDepart/queryMyDeptTreeList",params); + +//日志管理 +const deleteLog = (params)=>deleteAction("/sys/log/delete",params); +const deleteLogList = (params)=>deleteAction("/sys/log/deleteBatch",params); + +//数据字典 +const addDict = (params)=>postAction("/sys/dict/add",params); +const editDict = (params)=>putAction("/sys/dict/edit",params); +const treeList = (params)=>getAction("/sys/dict/treeList",params); +const addDictItem = (params)=>postAction("/sys/dictItem/add",params); +const editDictItem = (params)=>putAction("/sys/dictItem/edit",params); + +//字典标签专用(通过code获取字典数组) +export const ajaxGetDictItems = (code, params)=>getAction(`/systemConfig/getDictItems/${code}`,params); +//从缓存中获取字典配置 +function getDictItemsFromCache(dictCode) { + if (Vue.ls.get(UI_CACHE_DB_DICT_DATA) && Vue.ls.get(UI_CACHE_DB_DICT_DATA)[dictCode]) { + let dictItems = Vue.ls.get(UI_CACHE_DB_DICT_DATA)[dictCode]; + console.log("-----------getDictItemsFromCache----------dictCode="+dictCode+"---- dictItems=",dictItems) + return dictItems; + } +} + +//系统通告 +const doReleaseData = (params)=>getAction("/sys/annountCement/doReleaseData",params); +const doReovkeData = (params)=>getAction("/sys/annountCement/doReovkeData",params); + +// 根据部门主键查询用户信息 +const queryUserByDepId = (params)=>getAction("/sys/user/queryUserByDepId",params); +// 重复校验 +const duplicateCheck = (params)=>getAction("/sys/duplicate/check",params); +// 加载分类字典 +const loadCategoryData = (params)=>getAction("/sys/category/loadAllData",params); +const checkRuleByCode = (params) => getAction('/sys/checkRule/checkByCode', params) +//我的通告 +const getUserNoticeInfo= (params)=>getAction("/sys/sysAnnouncementSend/getMyAnnouncementSend",params); + +//经手人管理 +const addPerson = (params)=>postAction("/person/add",params); +const editPerson = (params)=>putAction("/person/update",params); +const checkPerson = (params)=>getAction("/person/checkIsNameExist",params); +const getPersonByType = (params)=>getAction("/person/getPersonByType",params); +//账户管理 +const addAccount = (params)=>postAction("/account/add",params); +const editAccount = (params)=>putAction("/account/update",params); +const checkAccount = (params)=>getAction("/account/checkIsNameExist",params); +const getAccount = (params)=>getAction("/account/getAccount",params); +//收支项目 +const addInOutItem = (params)=>postAction("/inOutItem/add",params); +const editInOutItem = (params)=>putAction("/inOutItem/update",params); +const checkInOutItem = (params)=>getAction("/inOutItem/checkIsNameExist",params); +const findInOutItemByParam = (params)=>getAction("/inOutItem/findBySelect",params); +//仓库信息 +const addDepot = (params)=>postAction("/depot/add",params); +const editDepot = (params)=>putAction("/depot/update",params); +const checkDepot = (params)=>getAction("/depot/checkIsNameExist",params); +//商品属性 +const editMaterialProperty = (params)=>putAction("/materialProperty/update",params); +//商品类型 +const queryMaterialCategoryTreeList = (params)=>getAction("/materialCategory/getMaterialCategoryTree",params); +const queryMaterialCategoryById = (params)=>getAction("/materialCategory/findById",params); +//商品管理 +const addMaterial = (params)=>postAction("/material/add",params); +const editMaterial = (params)=>putAction("/material/update",params); +const checkMaterial = (params)=>getAction("/material/checkIsNameExist",params); +const getMaterialBySelect = (params)=>getAction("/material/findBySelect",params); +const getSerialMaterialBySelect = (params)=>getAction("/material/getMaterialEnableSerialNumberList",params); +const getMaterialByBarCode = (params)=>getAction("/material/getMaterialByBarCode",params); +//序列号 +const addSerialNumber = (params)=>postAction("/serialNumber/add",params); +const editSerialNumber = (params)=>putAction("/serialNumber/update",params); +const checkSerialNumber = (params)=>getAction("/serialNumber/checkIsNameExist",params); +const batAddSerialNumber = (params)=>postAction("/serialNumber/batAddSerialNumber",params); +//功能管理 +const addFunction = (params)=>postAction("/function/add",params); +const editFunction = (params)=>putAction("/function/update",params); +const checkFunction = (params)=>getAction("/function/checkIsNameExist",params); +//系统配置 +const addSystemConfig = (params)=>postAction("/systemConfig/add",params); +const editSystemConfig = (params)=>putAction("/systemConfig/update",params); +const checkSystemConfig = (params)=>getAction("/systemConfig/checkIsNameExist",params); +//用户|角色|模块关系 +const addUserBusiness = (params)=>postAction("/userBusiness/add",params); +const editUserBusiness = (params)=>putAction("/userBusiness/update",params); +const checkUserBusiness = (params)=>getAction("/userBusiness/checkIsValueExist",params); +//计量单位 +const addUnit = (params)=>postAction("/unit/add",params); +const editUnit = (params)=>putAction("/unit/update",params); +const checkUnit = (params)=>getAction("/unit/checkIsNameExist",params); +//供应商|客户|会员 +const addSupplier = (params)=>postAction("/supplier/add",params); +const editSupplier = (params)=>putAction("/supplier/update",params); +const checkSupplier = (params)=>getAction("/supplier/checkIsNameExist",params); +const findBySelectSup = (params)=>postAction("/supplier/findBySelect_sup",params); +const findBySelectCus = (params)=>postAction("/supplier/findBySelect_cus",params); +const findBySelectRetail = (params)=>postAction("/supplier/findBySelect_retail",params); +const findSupplierById = (params)=>getAction("/supplier/findById",params); +//单据相关 +const findDepotHeadTotalPay = (params)=>getAction("/depotHead/findTotalPay",params); +const findStockByDepotAndBarCode = (params)=>getAction("/depotItem/findStockByDepotAndBarCode",params); +const findAccountHeadTotalPay = (params)=>getAction("/accountHead/findTotalPay",params); + +export { + getBuyAndSaleStatistics, + buyOrSalePrice, + addRole, + editRole, + checkRole, + findUserRole, + addUser, + editUser, + queryUserRole, + getUserList, + queryall, + frozenBatch, + checkOnlyUser, + changePassword, + getPermissionList, + addPermission, + editPermission, + queryTreeList, + queryListAsync, + queryRolePermission, + saveRolePermission, + queryPermissionsByUser, + loadAllRoleIds, + getPermissionRuleList, + queryPermissionRule, + queryOrganizationTreeList, + queryOrganizationById, + queryParentName, + searchByKeywords, + deleteByDepartId, + deleteLog, + deleteLogList, + addDict, + editDict, + treeList, + addDictItem, + editDictItem, + doReleaseData, + doReovkeData, + queryUserByDepId, + duplicateCheck, + queryTreeListForRole, + getSystemMenuList, + getSystemSubmenu, + getSystemSubmenuBatch, + loadCategoryData, + checkRuleByCode, + queryDepartPermission, + saveDepartPermission, + queryTreeListForDeptRole, + queryDeptRolePermission, + saveDeptRolePermission, + queryMyDepartTreeList, + getUserNoticeInfo, + getDictItemsFromCache, + addPerson, + editPerson, + checkPerson, + getPersonByType, + addAccount, + editAccount, + checkAccount, + getAccount, + addInOutItem, + editInOutItem, + checkInOutItem, + findInOutItemByParam, + addDepot, + editDepot, + checkDepot, + editMaterialProperty, + queryMaterialCategoryTreeList, + queryMaterialCategoryById, + addMaterial, + editMaterial, + checkMaterial, + getMaterialBySelect, + getSerialMaterialBySelect, + getMaterialByBarCode, + addSerialNumber, + editSerialNumber, + checkSerialNumber, + batAddSerialNumber, + addFunction, + editFunction, + checkFunction, + addSystemConfig, + editSystemConfig, + checkSystemConfig, + addUserBusiness, + editUserBusiness, + checkUserBusiness, + addUnit, + editUnit, + checkUnit, + addSupplier, + editSupplier, + checkSupplier, + findBySelectSup, + findBySelectCus, + findBySelectRetail, + findSupplierById, + findDepotHeadTotalPay, + findStockByDepotAndBarCode, + findAccountHeadTotalPay +} + + + diff --git a/jshERP-web/src/api/index.js b/jshERP-web/src/api/index.js new file mode 100644 index 000000000..de2c484b0 --- /dev/null +++ b/jshERP-web/src/api/index.js @@ -0,0 +1,10 @@ +const api = { + Login: '/user/login', + Logout: '/sys/logout', + ForgePassword: '/auth/forge-password', + Register: '/auth/register', + SendSms: '/account/sms', + // get my info + UserInfo: '/user/info' +} +export default api \ No newline at end of file diff --git a/jshERP-web/src/api/login.js b/jshERP-web/src/api/login.js new file mode 100644 index 000000000..dbb7c8611 --- /dev/null +++ b/jshERP-web/src/api/login.js @@ -0,0 +1,69 @@ +import api from './index' +import { axios } from '@/utils/request' + +/** + * login func + * parameter: { + * username: '', + * password: '', + * remember_me: true, + * captcha: '12345' + * } + * @param parameter + * @returns {*} + */ +export function login(parameter) { + return axios({ + url: '/user/login', + method: 'post', + data: parameter + }) +} + +export function phoneLogin(parameter) { + return axios({ + url: '/sys/phoneLogin', + method: 'post', + data: parameter + }) +} + +export function getSmsCaptcha(parameter) { + return axios({ + url: api.SendSms, + method: 'post', + data: parameter + }) +} + +export function getInfo() { + return axios({ + url: '/api/user/info', + method: 'get', + headers: { + 'Content-Type': 'application/json;charset=UTF-8' + } + }) +} + +export function logout() { + return axios({ + url: '/user/logout', + method: 'get' + }) +} + +/** + * 第三方登录 + * @param token + * @returns {*} + */ +export function thirdLogin(token) { + return axios({ + url: `/thirdLogin/getLoginUser/${token}`, + method: 'get', + headers: { + 'Content-Type': 'application/json;charset=UTF-8' + } + }) +} \ No newline at end of file diff --git a/jshERP-web/src/api/manage.js b/jshERP-web/src/api/manage.js new file mode 100644 index 000000000..2087b2286 --- /dev/null +++ b/jshERP-web/src/api/manage.js @@ -0,0 +1,177 @@ +import Vue from 'vue' +import { axios } from '@/utils/request' + +const api = { + user: '/api/user', + role: '/api/role', + service: '/api/service', + permission: '/api/permission', + permissionNoPager: '/api/permission/no-pager' +} + +export default api + +//post +export function postAction(url,parameter) { + return axios({ + url: url, + method:'post' , + data: parameter + }) +} + +//post method= {post | put} +export function httpAction(url,parameter,method) { + return axios({ + url: url, + method:method , + data: parameter + }) +} + +//put +export function putAction(url,parameter) { + return axios({ + url: url, + method:'put', + data: parameter + }) +} + +//get +export function getAction(url,parameter) { + return axios({ + url: url, + method: 'get', + params: parameter + }) +} + +//deleteAction +export function deleteAction(url,parameter) { + return axios({ + url: url, + method: 'delete', + params: parameter + }) +} + +export function getUserList(parameter) { + return axios({ + url: api.user, + method: 'get', + params: parameter + }) +} + +export function getRoleList(parameter) { + return axios({ + url: api.role, + method: 'get', + params: parameter + }) +} + +export function getServiceList(parameter) { + return axios({ + url: api.service, + method: 'get', + params: parameter + }) +} + +export function getPermissions(parameter) { + return axios({ + url: api.permissionNoPager, + method: 'get', + params: parameter + }) +} + +// id == 0 add post +// id != 0 update put +export function saveService(parameter) { + return axios({ + url: api.service, + method: parameter.id == 0 ? 'post' : 'put', + data: parameter + }) +} + +/** + * 下载文件 用于excel导出 + * @param url + * @param parameter + * @returns {*} + */ +export function downFile(url,parameter){ + return axios({ + url: url, + params: parameter, + method:'get' , + responseType: 'blob' + }) +} + +/** + * 下载文件 + * @param url 文件路径 + * @param fileName 文件名 + * @param parameter + * @returns {*} + */ +export function downloadFile(url, fileName, parameter) { + return downFile(url, parameter).then((data) => { + if (!data || data.size === 0) { + Vue.prototype['$message'].warning('文件下载失败') + return + } + if (typeof window.navigator.msSaveBlob !== 'undefined') { + window.navigator.msSaveBlob(new Blob([data]), fileName) + } else { + let url = window.URL.createObjectURL(new Blob([data])) + let link = document.createElement('a') + link.style.display = 'none' + link.href = url + link.setAttribute('download', fileName) + document.body.appendChild(link) + link.click() + document.body.removeChild(link) //下载完成移除元素 + window.URL.revokeObjectURL(url) //释放掉blob对象 + } + }) +} + +/** + * 文件上传 用于富文本上传图片 + * @param url + * @param parameter + * @returns {*} + */ +export function uploadAction(url,parameter){ + return axios({ + url: url, + data: parameter, + method:'post' , + headers: { + 'Content-Type': 'multipart/form-data', // 文件上传 + }, + }) +} + +/** + * 获取文件服务访问路径 + * @param avatar + * @param subStr + * @returns {*} + */ +export function getFileAccessHttpUrl(avatar,subStr) { + if(!subStr) subStr = 'http' + if(avatar && avatar.startsWith(subStr)){ + return avatar; + }else{ + if(avatar && avatar.length>0 && avatar.indexOf('[')==-1){ + return window._CONFIG['staticDomainURL'] + "/" + avatar; + } + } +} diff --git a/jshERP-web/src/assets/background.svg b/jshERP-web/src/assets/background.svg new file mode 100644 index 000000000..89c259764 --- /dev/null +++ b/jshERP-web/src/assets/background.svg @@ -0,0 +1,69 @@ + + + + Group 21 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jshERP-web/src/assets/checkcode.png b/jshERP-web/src/assets/checkcode.png new file mode 100644 index 0000000000000000000000000000000000000000..844fa70c56861efed68553088cfa059cd2a3a612 GIT binary patch literal 2236 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
    ^vqb!!kKGX(sK#D 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 N002ovPDHLkV1l?AYCr%0 literal 0 HcmV?d00001 diff --git a/jshERP-web/src/assets/less/JAreaLinkage.less b/jshERP-web/src/assets/less/JAreaLinkage.less new file mode 100644 index 000000000..d367073b0 --- /dev/null +++ b/jshERP-web/src/assets/less/JAreaLinkage.less @@ -0,0 +1,259 @@ +.area-zoom-in-top-enter-active, +.area-zoom-in-top-leave-active { + opacity: 1; + transform: scaleY(1); +} + +.area-zoom-in-top-enter, +.area-zoom-in-top-leave-active { + opacity: 0; + transform: scaleY(0); +} + +.area-select { + box-sizing: border-box; + margin: 0; + padding: 0; + color: rgba(0, 0, 0, 0.65); + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + list-style: none; + font-feature-settings: 'tnum'; + position: relative; + outline: 0; + display: block; + background-color: #fff; + border: 1px solid #d9d9d9; + border-top-width: 1.02px; + border-radius: 4px; + outline: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.area-select-wrap .area-select { + display: inline-block; +} + +.area-select * { + box-sizing: border-box; +} + +.area-select:hover { + border-color: #40a9ff; + border-right-width: 1px !important; + outline: 0; +} + + +.area-select:active { + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); +} + +.area-select.small { + width: 126px; +} + +.area-select.medium { + width: 160px; +} + +.area-select.large { + width: 194px; +} + +.area-select.is-disabled { + background: #eceff5; + cursor: not-allowed; +} + +.area-select.is-disabled:hover { + border-color: #e1e2e6; +} + +.area-select.is-disabled .area-selected-trigger { + cursor: not-allowed; +} + +.area-select .area-selected-trigger { + position: relative; + display: block; + font-size: 14px; + cursor: pointer; + margin: 0; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + height: 100%; + padding: 8px 20px 7px 12px; +} + +.area-select .area-select-icon { + position: absolute; + top: 50%; + margin-top: -2px; + right: 6px; + content: ""; + width: 0; + height: 0; + border: 6px solid transparent; + border-top-color: rgba(0, 0, 0, 0.25); + transition: all .3s linear; + transform-origin: center; +} + +.area-select .area-select-icon.active { + margin-top: -8px; + transform: rotate(180deg); +} + +.area-selectable-list-wrap { + position: absolute; + width: 100%; + max-height: 275px; + z-index: 15000; + background-color: #fff; + box-sizing: border-box; + overflow-x: auto; + margin: 2px 0; + border-radius: 4px; + outline: none; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + + transition: opacity 0.15s, transform 0.3s !important; + transform-origin: center top !important; +} + +.area-selectable-list { + position: relative; + margin: 0; + padding: 6px 0; + width: 100%; + font-size: 14px; + color: #565656; + list-style: none; +} + +.area-selectable-list .area-select-option { + position: relative; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + cursor: pointer; + padding: 0 15px 0 10px; + height: 32px; + line-height: 32px; +} + +.area-selectable-list .area-select-option.hover { + background-color: #e6f7ff; +} + +.area-selectable-list .area-select-option.selected { + color: rgba(0, 0, 0, 0.65); + font-weight: 600; + background-color: #efefef; +} + +.cascader-menu-list-wrap { + position: absolute; + white-space: nowrap; + z-index: 15000; + background-color: #fff; + box-sizing: border-box; + overflow: hidden; + font-size: 0; + margin: 2px 0; + border-radius: 4px; + outline: none; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + + transition: opacity 0.15s, transform 0.3s !important; + transform-origin: center top !important; +} + +.cascader-menu-list { + position: relative; + margin: 0; + font-size: 14px; + color: #565656; + padding: 6px 0; + list-style: none; + display: inline-block; + height: 204px; + overflow-x: hidden; + overflow-y: auto; + min-width: 160px; + vertical-align: top; + background-color: #fff; + border-right: 1px solid #e4e7ed; +} + +.cascader-menu-list:last-child { + border-right: none; +} + +.cascader-menu-list .cascader-menu-option { + position: relative; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + cursor: pointer; + padding: 0 15px 0 10px; + height: 32px; + line-height: 32px; +} + +.cascader-menu-list .cascader-menu-option.hover, +.cascader-menu-list .cascader-menu-option:hover { + background-color: #e6f7ff; +} + +.cascader-menu-list .cascader-menu-option.selected { + color: rgba(0, 0, 0, 0.65); + font-weight: 600; + background-color: #efefef; +} + +.cascader-menu-list .cascader-menu-option.cascader-menu-extensible:after { + position: absolute; + top: 50%; + margin-top: -4px; + right: 5px; + content: ""; + width: 0; + height: 0; + border: 4px solid transparent; + border-left-color: #a1a4ad; +} + +.cascader-menu-list::-webkit-scrollbar, +.area-selectable-list-wrap::-webkit-scrollbar { + width: 8px; + background: transparent; +} + +.area-selectable-list-wrap::-webkit-scrollbar-button:vertical:decremen, +.area-selectable-list-wrap::-webkit-scrollbar-button:vertical:end:decrement, +.area-selectable-list-wrap::-webkit-scrollbar-button:vertical:increment, +.area-selectable-list-wrap::-webkit-scrollbar-button:vertical:start:increment, +.cascader-menu-list::-webkit-scrollbar-button:vertical:decremen, +.cascader-menu-list::-webkit-scrollbar-button:vertical:end:decrement, +.cascader-menu-list::-webkit-scrollbar-button:vertical:increment, +.cascader-menu-list::-webkit-scrollbar-button:vertical:start:increment { + display: none; +} + +.cascader-menu-list::-webkit-scrollbar-thumb:vertical, +.area-selectable-list-wrap::-webkit-scrollbar-thumb:vertical { + background-color: #b8b8b8; + border-radius: 4px; +} + +.cascader-menu-list::-webkit-scrollbar-thumb:vertical:hover, +.area-selectable-list-wrap::-webkit-scrollbar-thumb:vertical:hover { + background-color: #777; +} \ No newline at end of file diff --git a/jshERP-web/src/assets/less/TableExpand.less b/jshERP-web/src/assets/less/TableExpand.less new file mode 100644 index 000000000..5616c9836 --- /dev/null +++ b/jshERP-web/src/assets/less/TableExpand.less @@ -0,0 +1,15 @@ +/** [表格主题样式一] 表格强制列不换行 */ +.j-table-force-nowrap { + td, th { + white-space: nowrap; + } + + .ant-table-selection-column { + padding: 12px 22px !important; + } + + /** 列自适应,弊端会导致列宽失效 */ + &.ant-table-wrapper .ant-table-content { + overflow-x: auto; + } +} diff --git a/jshERP-web/src/assets/less/common.less b/jshERP-web/src/assets/less/common.less new file mode 100644 index 000000000..d93afda67 --- /dev/null +++ b/jshERP-web/src/assets/less/common.less @@ -0,0 +1,58 @@ + +/*列表上方操作按钮区域*/ +.ant-card-body .table-operator { + margin-bottom: 0px; +} +/** Button按钮间距 */ +.table-operator .ant-btn { + margin: 0 8px 8px 0; +} +.table-operator .ant-btn-group .ant-btn { + margin: 0; +} + +.table-operator .ant-btn-group .ant-btn:last-child { + margin: 0 8px 8px 0; +} +/*列表td的padding设置 可以控制列表大小*/ +.ant-table-tbody .ant-table-row td { + padding-top: 15px; + padding-bottom: 15px; +} + +/*列表页面弹出modal*/ +.ant-modal-cust-warp { + height: 100% +} + +/*弹出modal Y轴滚动条*/ +.ant-modal-cust-warp .ant-modal-body { + height: calc(100% - 110px) !important; + overflow-y: auto +} + +/*弹出modal 先有content后有body 故滚动条控制在body上*/ +.ant-modal-cust-warp .ant-modal-content { + height: 90% !important; + overflow-y: hidden +} +/*列表中有图片的加这个样式 参考用户管理*/ +.anty-img-wrap { + height: 25px; + position: relative; +} +.anty-img-wrap > img { + max-height: 100%; +} +/*列表中范围查询样式*/ +.query-group-cust{width: calc(50% - 10px)} +.query-group-split-cust:before{content:"~";width: 20px;display: inline-block;text-align: center} + + +/*erp风格子表外框padding设置*/ +.ant-card-wider-padding.cust-erp-sub-tab>.ant-card-body{padding:5px 12px} + +/* 内嵌子表背景颜色 */ +.j-inner-table-wrapper /deep/ .ant-table-expanded-row .ant-table-wrapper .ant-table-tbody .ant-table-row { + background-color: #FFFFFF; +} \ No newline at end of file diff --git a/jshERP-web/src/assets/less/index.less b/jshERP-web/src/assets/less/index.less new file mode 100644 index 000000000..f086f5fe2 --- /dev/null +++ b/jshERP-web/src/assets/less/index.less @@ -0,0 +1,28 @@ +/** + * 列表查询通用样式,移动端自适应 + */ +.search{ + margin-bottom: 54px; +} +.fold{ + width: calc(100% - 216px); + display: inline-block +} +.operator{ + margin-bottom: 18px; +} +@media screen and (max-width: 900px) { + .fold { + width: 100%; + } +} +.operator button { + margin-right: 5px; +} +i { + cursor: pointer; +} +.trcolor{ + background-color: rgba(255, 192, 203, 0.31); + color:red; +} diff --git a/jshERP-web/src/assets/logo.png b/jshERP-web/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8980dab4e188ba3c16f58a3345c5a31b0cdb6c9e GIT binary patch literal 6686 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 literal 0 HcmV?d00001 diff --git a/jshERP-web/src/assets/logo.psd b/jshERP-web/src/assets/logo.psd new file mode 100644 index 0000000000000000000000000000000000000000..ae33aac4b058e297141d16362811582edadd42b9 GIT binary patch literal 56354 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 YAI$GqI-#v2>F{ics~t!8D0`IsFMtp~)Bpeg literal 0 HcmV?d00001 diff --git a/jshERP-web/src/assets/logo_top.png b/jshERP-web/src/assets/logo_top.png new file mode 100644 index 0000000000000000000000000000000000000000..af68090af03ba6ed7a67a781cfcbf14683c9248a GIT binary patch literal 1871 zcmbVN2~1OW94=I0B3i{`Dk8O@2-v==VaD$507{5nvfRC5T9^A-YLDd!L} zBE@8}h7aZ_;|sN5dSS9eR+uYe$_X)CJlnuR2~;2~#T!%`)H;@dLm1~}p=r&E^WsbmTjAfqpxNQq!Y(pl6f{F{e> zYSYTIS!n{%8(rv*L&$+)4GRGDdOb-`BSBgPKw&bOZVoDyh)NK31!`DoAgXmi6AS`S zC(|l5uo6<^-Hg(8P#(-7pq9RNL8TFk-x8~JZvuse3@}JF0EI*bR4TV$uL~EbqNo7GDcWVMr^1pbZlhkeUO*kS+((;Q8rv z{IU$CS`O)Tq3-m&_ErFDmHD7tq=i)Y@%XZo@6gW>{FmRavGV^DGXOOPa2Llvie=&m ztw8tkZRw+%x6K2p(T>rgt+DL%@?B`hl_Usw62tw+JzZ)2JR&kS$C%oI(X}l0m3|jPZR3Uvi~3*m>zv}==BRRS z+q^|anZddJ--w!YfiRnq(Ywa07j;8rYiU2i40Xo(~B ze;g7%#Kf~V<@vQ^%!4bvoQJS6b2K;T4pHIgPXXtLZONzp%-t6CRKBA>f8cIGewAWU zQuyFTPt%iCHNoqjwPVelo}G6aujYA3igu1Ycl2!ZlY}hbzHn`>96Oyz{&9f>8lbx3 z^rHdihQknE-=@B}i@C}Hp9o`XGk;;%l7mgBnQY{W)9!z1GvtdiCuCSob{#**z#@x~ z709S3IwT@YkC9@dn9)}8;mY-l;USyQ`YQhw6c9et_T3bF) zcdhHzuPybxgwFgMyN3%9Yu4FOa&NBY7(G&+mW^p9A;D&v4+7X!TPogOH5o~>E8IR5U+y4zu1M~XkbhqLQa?|?PCkcCF@XwMX`PhVj0gYcK% zH8xh;L%7qox0tLuzu9^;aq59In}2nSDJj;MhqJd^Oy#m$p@SX$4$;G_dnP-(f_p|e zeGGdB?V+KUtrh;TxI&v3>8I&oScGE!7{7 zHML%;7{}&nR%sNr?kr6d;>zx{`frZD)Y{xw=H2DHNHfcDNNg{omwKON7>!Pr$AwT~ i<-W=G`K11x7%WC}st0c?S{&*A#U%)n1r4!lKm7}zrUGvO literal 0 HcmV?d00001 diff --git a/jshERP-web/src/assets/nodata.png b/jshERP-web/src/assets/nodata.png new file mode 100644 index 0000000000000000000000000000000000000000..2cebdb380f5c1aba7e0acab147563d2352e0917c GIT binary patch literal 101556 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 z�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 literal 0 HcmV?d00001 diff --git a/jshERP-web/src/assets/pdf4.jpg b/jshERP-web/src/assets/pdf4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..10166e09eb8fd10c134e9d708fb91017baf0d406 GIT binary patch literal 50960 zcmXtg1z6MX_x1-AQBY92L1_V{l@bhMbO}{=AF>r3S{H zd#0uS03wop=Cl?kfPcB*sbS^=LDcl5Ut~~P1`C)D!5-W-4xHJ-2c%d|`K^Z#4`501 zlw28`|4Odj^WIR%B?b-@x)PB7Uh5E&sAI>FZG$6ajAC86Ec)K8d*QIko1nW zg?Ss}rxWsw8C1=L`&FZA4H)WSn{VIS9rBu(!b15I0G5YD$^ZphLCYJv;QGE z`N8h{$5H}IeRLnYO?R{%V|3!J?!;(`HVFag_?!8EFxiiP_26*=U*9T(m)f}6tgo4y zIG1WW$JETB<7<{Y<{9qE5txvM-!0U0JxfMRlE5VJXJv zI?|u4qsgt-dy0M8O}5+Y2J6l352VS^U&-#<4GC#>3Z-UQ^3@1?#J8MUrHh)e6sx%* z`5zV80;2avyeYza1Kr}BLX2!P6!=0C_)Lz-NOPCPv+P1l%^Ly=m+Rrzqy7`j|9CR? zQSrn^wea5D=)~4T*|Ce^v|(Y{Hnxhah3{81HMQadh3V4{#ByP+rnMe%otny|br!vo z@_XAY?*7FX6cVr4RK!bMXG@KW?pG`NSFd;TW)J5|p>rB}2c>fRa9pB{p_-bTngD%Y z7FXIqfO>amyX{&xCogH8oQJCF42bsY@IUDSWf=()LA*vEMmMIy^5vo+9RuiJ#{#x4 z+918apVv*tA~;_T_eizQ5;c>KKl8WR}p6a~qdzlA3@^LnO7Mph)*JT;r4kaHPr;%&a*i(D~OJV6Hx7*{#=>sfD8$p&Gtf~Zf{YxKfaVoWTRCq-AYhma!#^)0!tC`wPw84;f zQTvxiKe=J{c5^kSkK^f-$0=}~n9G^*$-+=B{yFTIDLgcYCBU|Z8T$Em+DcajeJe{l zv9?0H8tY4-WIYazuV`A}Io(Y_DDl7QnJ<61g|BBM86%9N`G_tOOytkRpwD)q2m_31~Q=#z*yMQ$ISfkkNaix?icv|rJ?!qdQb&`2E4 zL=+$yR-;#kybVL)¬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 u+I65RmF~U(2CCoxh`{0bz9yu)>;C~>1+!{RRN { + console.log("-------单点登录开始-------"); + let token = Vue.ls.get(ACCESS_TOKEN); + let st = getUrlParam("ticket"); + let sevice = "http://"+window.location.host+"/"; + if(token){ + loginSuccess(callback); + }else{ + if(st){ + validateSt(st,sevice,callback); + }else{ + let serviceUrl = encodeURIComponent(sevice); + window.location.href = window._CONFIG['casPrefixUrl']+"/login?service="+serviceUrl; + } + } + console.log("-------单点登录结束-------"); +}; +const SSO = { + init: init +}; + +function getUrlParam(paraName) { + let url = document.location.toString(); + let arrObj = url.split("?"); + + if (arrObj.length > 1) { + let arrPara = arrObj[1].split("&"); + let arr; + + for (let i = 0; i < arrPara.length; i++) { + arr = arrPara[i].split("="); + + if (arr != null && arr[0] == paraName) { + return arr[1]; + } + } + return ""; + } + else { + return ""; + } +} + +function validateSt(ticket,service,callback){ + let params = { + ticket: ticket, + service:service + }; + store.dispatch('ValidateLogin',params).then(res => { + //this.departConfirm(res) + if(res.success){ + loginSuccess(callback); + }else{ + let sevice = "http://"+window.location.host+"/"; + let serviceUrl = encodeURIComponent(sevice); + window.location.href = window._CONFIG['casPrefixUrl']+"/login?service="+serviceUrl; + } + }).catch((err) => { + console.log(err); + //that.requestFailed(err); + }); +} + +function loginSuccess (callback) { + callback(); +} +export default SSO; \ No newline at end of file diff --git a/jshERP-web/src/components/AvatarList/Item.vue b/jshERP-web/src/components/AvatarList/Item.vue new file mode 100644 index 000000000..f79429500 --- /dev/null +++ b/jshERP-web/src/components/AvatarList/Item.vue @@ -0,0 +1,46 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/components/AvatarList/List.vue b/jshERP-web/src/components/AvatarList/List.vue new file mode 100644 index 000000000..fb3412c8b --- /dev/null +++ b/jshERP-web/src/components/AvatarList/List.vue @@ -0,0 +1,100 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/components/AvatarList/index.js b/jshERP-web/src/components/AvatarList/index.js new file mode 100644 index 000000000..9621de657 --- /dev/null +++ b/jshERP-web/src/components/AvatarList/index.js @@ -0,0 +1,4 @@ +import AvatarList from './List' +import "./index.less" + +export default AvatarList \ No newline at end of file diff --git a/jshERP-web/src/components/AvatarList/index.less b/jshERP-web/src/components/AvatarList/index.less new file mode 100644 index 000000000..9ce073fd1 --- /dev/null +++ b/jshERP-web/src/components/AvatarList/index.less @@ -0,0 +1,60 @@ +@import "../index"; + +@avatar-list-prefix-cls: ~"@{ant-pro-prefix}-avatar-list"; +@avatar-list-item-prefix-cls: ~"@{ant-pro-prefix}-avatar-list-item"; + +.@{avatar-list-prefix-cls} { + display: inline-block; + + ul { + list-style: none; + display: inline-block; + padding: 0; + margin: 0 0 0 8px; + font-size: 0; + } +} + +.@{avatar-list-item-prefix-cls} { + display: inline-block; + font-size: @font-size-base; + margin-left: -8px; + width: @avatar-size-base; + height: @avatar-size-base; + + :global { + .ant-avatar { + border: 1px solid #fff; + cursor: pointer; + } + } + + &.large { + width: @avatar-size-lg; + height: @avatar-size-lg; + } + + &.small { + width: @avatar-size-sm; + height: @avatar-size-sm; + } + + &.mini { + width: 20px; + height: 20px; + + :global { + .ant-avatar { + width: 20px; + height: 20px; + line-height: 20px; + + .ant-avatar-string { + font-size: 12px; + line-height: 18px; + } + } + } + } +} + diff --git a/jshERP-web/src/components/ChartCard.vue b/jshERP-web/src/components/ChartCard.vue new file mode 100644 index 000000000..d55eabe91 --- /dev/null +++ b/jshERP-web/src/components/ChartCard.vue @@ -0,0 +1,105 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/CountDown/CountDown.vue b/jshERP-web/src/components/CountDown/CountDown.vue new file mode 100644 index 000000000..91cf47e15 --- /dev/null +++ b/jshERP-web/src/components/CountDown/CountDown.vue @@ -0,0 +1,103 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/CountDown/index.js b/jshERP-web/src/components/CountDown/index.js new file mode 100644 index 000000000..3015cc5b9 --- /dev/null +++ b/jshERP-web/src/components/CountDown/index.js @@ -0,0 +1,3 @@ +import CountDown from './CountDown' + +export default CountDown \ No newline at end of file diff --git a/jshERP-web/src/components/Ellipsis/Ellipsis.vue b/jshERP-web/src/components/Ellipsis/Ellipsis.vue new file mode 100644 index 000000000..0001a3b21 --- /dev/null +++ b/jshERP-web/src/components/Ellipsis/Ellipsis.vue @@ -0,0 +1,49 @@ + \ No newline at end of file diff --git a/jshERP-web/src/components/Ellipsis/index.js b/jshERP-web/src/components/Ellipsis/index.js new file mode 100644 index 000000000..d257156b3 --- /dev/null +++ b/jshERP-web/src/components/Ellipsis/index.js @@ -0,0 +1,3 @@ +import Ellipsis from './Ellipsis' + +export default Ellipsis \ No newline at end of file diff --git a/jshERP-web/src/components/NumberInfo/NumberInfo.vue b/jshERP-web/src/components/NumberInfo/NumberInfo.vue new file mode 100644 index 000000000..81508780b --- /dev/null +++ b/jshERP-web/src/components/NumberInfo/NumberInfo.vue @@ -0,0 +1,54 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/NumberInfo/index.js b/jshERP-web/src/components/NumberInfo/index.js new file mode 100644 index 000000000..a471501ab --- /dev/null +++ b/jshERP-web/src/components/NumberInfo/index.js @@ -0,0 +1,3 @@ +import NumberInfo from './NumberInfo' + +export default NumberInfo \ No newline at end of file diff --git a/jshERP-web/src/components/NumberInfo/index.less b/jshERP-web/src/components/NumberInfo/index.less new file mode 100644 index 000000000..719113da9 --- /dev/null +++ b/jshERP-web/src/components/NumberInfo/index.less @@ -0,0 +1,55 @@ +@import "../index"; + +@numberInfo-prefix-cls: ~"@{ant-pro-prefix}-number-info"; + +.@{numberInfo-prefix-cls} { + + .ant-pro-number-info-subtitle { + color: @text-color-secondary; + font-size: @font-size-base; + height: 22px; + line-height: 22px; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; + white-space: nowrap; + } + + .number-info-value { + margin-top: 4px; + font-size: 0; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; + white-space: nowrap; + + & > span { + color: @heading-color; + display: inline-block; + line-height: 32px; + height: 32px; + font-size: 24px; + margin-right: 32px; + } + + .sub-total { + color: @text-color-secondary; + font-size: @font-size-lg; + vertical-align: top; + margin-right: 0; + i { + font-size: 12px; + transform: scale(0.82); + margin-left: 4px; + } + :global { + .anticon-caret-up { + color: @red-6; + } + .anticon-caret-down { + color: @green-6; + } + } + } + } +} \ No newline at end of file diff --git a/jshERP-web/src/components/README.md b/jshERP-web/src/components/README.md new file mode 100644 index 000000000..1742c7052 --- /dev/null +++ b/jshERP-web/src/components/README.md @@ -0,0 +1,43 @@ +####1._util包:存放自定义函数 详细见代码注释 +####2.AvatarList:显示头像群并支持tip,用法参考src\views\Home.vue(如下图) +![输入图片说明](https://static.oschina.net/uploads/img/201904/12181253_O0Xi.png "在这里输入图片标题") +####3.chart包:存放各种图表相关的组件,条形图柱形图折线图等等 具体用法参考首页 +####4.countDown包:一个倒计时组件,用法参考home页,简单描述,该组件有3个属性, +target(时间/毫秒数)必填, +format(function,该方法接收一个毫秒数的参数,用于格式化显示当前倒计时时间)非必填, +onEnd倒计时结束触发函数 +![输入图片说明](https://static.oschina.net/uploads/img/201904/12182046_mwqJ.png "在这里输入图片标题") +####5.dict包:数据字典专用,用法参考文件夹下readme文件 +####6.Ellipsis包:字符串截取组件,可以指定字符串的显示长度,并将全部内容显示到tip中,简单使用参考src\views\system\PermissionList.vue +####7.jeecg包:该包下自定义了很多列表/表单中用到的组件 参考包下readme文件 +####8.jeecgbiz包:该包下定义了一些业务相关的组件,比如选择用户弹框,根据部门选择用户等等 +####9.layouts+page包:系统页面布局相关组件,比如登陆进去之后页面顶部显示什么,底部显示什么,菜单点击触发多个tab的布局等等 一般情况不需要修改 +####10.menun包:菜单组件,俩个,一个折叠菜单一个正常显示的菜单 +####11.NumberInfo:数字信息显示组件 如下图 +![输入图片说明](https://static.oschina.net/uploads/img/201904/12185858_uvJ5.png "在这里输入图片标题") +####12.online包:该包下封装了online表单的相关组件,用于展示表单各种控件,验证表单等等,相关用法参考readme +####13.setting包:该包下封装了首页风格切换等功能如下图 +![输入图片说明](https://static.oschina.net/uploads/img/201904/12190520_jySG.png "在这里输入图片标题") +####14.table包:一个二次封装的table组件,用于展示列表,参考readme +####15.tools包: +Breadcrumb.vue:面包屑二次封装,支持路由跳转 +DetailList.vue:详情展示用法参考src\views\profile\advanced\Advanced.vue(效果如下图) +![输入图片说明](https://static.oschina.net/uploads/img/201904/12193954_Uar6.png "在这里输入图片标题") +```` +个人认为该页面代码有两点值得学习: +1.vue provide/inject的使用 +2.该页面css定义方式,只定义一个顶层class,其余样式都定义在其下,这样只要顶层class不和别的页面冲突,整个页面的样式都是唯一生效的 +```` +FooterToolBar.vue:fixed定位的底部,通过是否定义内部控件的属性slot="extra"决定是左浮动或是右浮动 +HeaderNotice.vue:首页通知(如下图) +![输入图片说明](https://static.oschina.net/uploads/img/201904/12195340_fPe0.png "在这里输入图片标题") +HeaderInfo.vue:上下文字布局(如下图) +![输入图片说明](https://static.oschina.net/uploads/img/201904/12195638_dG5o.png "在这里输入图片标题") +Logo.vue:首页左上侧的log图 +![输入图片说明](https://static.oschina.net/uploads/img/201904/12200908_ihv3.png "在这里输入图片标题") +UserMenu.vue:首页右上侧的内容 +![输入图片说明](https://static.oschina.net/uploads/img/201904/12201226_laQK.png "在这里输入图片标题") +####16.trend包 趋势显示组件(如下图) +![输入图片说明](https://static.oschina.net/uploads/img/201904/12201600_Wo8K.png "在这里输入图片标题") +![corn表达式](https://oscimg.oschina.net/oscnet/661f9ac09016395f9f49286143af3241623.jpg) +![corn控件添加清除按钮](https://oscimg.oschina.net/oscnet/15096e49f2e29bd829e304d56770025d03c.jpg) \ No newline at end of file diff --git a/jshERP-web/src/components/Trend/Trend.vue b/jshERP-web/src/components/Trend/Trend.vue new file mode 100644 index 000000000..4cc885385 --- /dev/null +++ b/jshERP-web/src/components/Trend/Trend.vue @@ -0,0 +1,41 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/Trend/index.js b/jshERP-web/src/components/Trend/index.js new file mode 100644 index 000000000..761366d5f --- /dev/null +++ b/jshERP-web/src/components/Trend/index.js @@ -0,0 +1,3 @@ +import Trend from './Trend.vue' + +export default Trend \ No newline at end of file diff --git a/jshERP-web/src/components/Trend/index.less b/jshERP-web/src/components/Trend/index.less new file mode 100644 index 000000000..8a3d24cfb --- /dev/null +++ b/jshERP-web/src/components/Trend/index.less @@ -0,0 +1,42 @@ +@import "../index"; + +@trend-prefix-cls: ~"@{ant-pro-prefix}-trend"; + +.@{trend-prefix-cls} { + display: inline-block; + font-size: @font-size-base; + line-height: 22px; + + .up, + .down { + margin-left: 4px; + position: relative; + top: 1px; + + i { + font-size: 12px; + transform: scale(0.83); + } + } + + .item-text { + display: inline-block; + margin-left: 8px; + color: rgba(0,0,0,.85); + } + + .up { + color: @red-6; + } + .down { + color: @green-6; + top: -1px; + } + + &.reverse-color .up { + color: @green-6; + } + &.reverse-color .down { + color: @red-6; + } +} \ No newline at end of file diff --git a/jshERP-web/src/components/_util/Area.js b/jshERP-web/src/components/_util/Area.js new file mode 100644 index 000000000..89cba1fbb --- /dev/null +++ b/jshERP-web/src/components/_util/Area.js @@ -0,0 +1,79 @@ +import { pcaa } from 'area-data' + +/** + * 省市区 + */ +export default class Area { + /** + * 构造器 + * @param express + */ + constructor() { + let arr = [] + const province = pcaa['86'] + Object.keys(province).map(key=>{ + arr.push({id:key, text:province[key], pid:'86'}); + const city = pcaa[key]; + Object.keys(city).map(key2=>{ + arr.push({id:key2, text:city[key2], pid:key}); + const qu = pcaa[key2]; + Object.keys(qu).map(key3=>{ + arr.push({id:key3, text:qu[key3], pid:key2}); + }) + }) + }) + this.all = arr; + } + + get pca(){ + return this.all; + } + + getCode(text){ + if(!text || text.length==0){ + return '' + } + for(let item of this.all){ + if(item.text === text){ + return item.id; + } + } + } + + getText(code){ + if(!code || code.length==0){ + return '' + } + let arr = [] + this.getAreaBycode(code,arr); + return arr.join('/') + } + + getRealCode(code){ + let arr = [] + this.getPcode(code, arr) + return arr; + } + + getPcode(id, arr){ + for(let item of this.all){ + if(item.id === id){ + arr.unshift(id) + if(item.pid != '86'){ + this.getPcode(item.pid,arr) + } + } + } + } + + getAreaBycode(code,arr){ + //console.log("this.all.length",this.all) + for(let item of this.all){ + if(item.id === code){ + arr.unshift(item.text); + this.getAreaBycode(item.pid,arr) + } + } + } + +} \ No newline at end of file diff --git a/jshERP-web/src/components/_util/StringUtil.js b/jshERP-web/src/components/_util/StringUtil.js new file mode 100644 index 000000000..3f525982a --- /dev/null +++ b/jshERP-web/src/components/_util/StringUtil.js @@ -0,0 +1,35 @@ +/** + * 获取字符串的长度ascii长度为1 中文长度为2 + * @param str + * @returns {number} + */ +export const getStrFullLength = (str = '') => + str.split('').reduce((pre, cur) => { + const charCode = cur.charCodeAt(0) + if (charCode >= 0 && charCode <= 128) { + return pre + 1 + } + return pre + 2 + }, 0) + +/** + * 给定一个字符串和一个长度,将此字符串按指定长度截取 + * @param str + * @param maxLength + * @returns {string} + */ +export const cutStrByFullLength = (str = '', maxLength) => { + let showLength = 0 + return str.split('').reduce((pre, cur) => { + const charCode = cur.charCodeAt(0) + if (charCode >= 0 && charCode <= 128) { + showLength += 1 + } else { + showLength += 2 + } + if (showLength <= maxLength) { + return pre + cur + } + return pre + }, '') +} \ No newline at end of file diff --git a/jshERP-web/src/components/_util/util.js b/jshERP-web/src/components/_util/util.js new file mode 100644 index 000000000..98752a94c --- /dev/null +++ b/jshERP-web/src/components/_util/util.js @@ -0,0 +1,12 @@ +/** + * components util + */ + +/** + * 清理空值,对象 + * @param children + * @returns {*[]} + */ +export function filterEmpty (children = []) { + return children.filter(c => c.tag || (c.text && c.text.trim() !== '')) +} \ No newline at end of file diff --git a/jshERP-web/src/components/chart/AreaChartTy.vue b/jshERP-web/src/components/chart/AreaChartTy.vue new file mode 100644 index 000000000..3d201e795 --- /dev/null +++ b/jshERP-web/src/components/chart/AreaChartTy.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/chart/Bar.vue b/jshERP-web/src/components/chart/Bar.vue new file mode 100644 index 000000000..673ed3d06 --- /dev/null +++ b/jshERP-web/src/components/chart/Bar.vue @@ -0,0 +1,50 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/components/chart/BarAndLine.vue b/jshERP-web/src/components/chart/BarAndLine.vue new file mode 100644 index 000000000..549a31c4b --- /dev/null +++ b/jshERP-web/src/components/chart/BarAndLine.vue @@ -0,0 +1,60 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/components/chart/BarMultid.vue b/jshERP-web/src/components/chart/BarMultid.vue new file mode 100644 index 000000000..8a5272cbc --- /dev/null +++ b/jshERP-web/src/components/chart/BarMultid.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/chart/DashChartDemo.vue b/jshERP-web/src/components/chart/DashChartDemo.vue new file mode 100644 index 000000000..c2ebf0847 --- /dev/null +++ b/jshERP-web/src/components/chart/DashChartDemo.vue @@ -0,0 +1,187 @@ + + + diff --git a/jshERP-web/src/components/chart/IndexBar.vue b/jshERP-web/src/components/chart/IndexBar.vue new file mode 100644 index 000000000..2e44d96ac --- /dev/null +++ b/jshERP-web/src/components/chart/IndexBar.vue @@ -0,0 +1,61 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/components/chart/LineChartMultid.vue b/jshERP-web/src/components/chart/LineChartMultid.vue new file mode 100644 index 000000000..1d4f17499 --- /dev/null +++ b/jshERP-web/src/components/chart/LineChartMultid.vue @@ -0,0 +1,94 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/chart/Liquid.vue b/jshERP-web/src/components/chart/Liquid.vue new file mode 100644 index 000000000..85e5b6174 --- /dev/null +++ b/jshERP-web/src/components/chart/Liquid.vue @@ -0,0 +1,80 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/chart/MiniArea.vue b/jshERP-web/src/components/chart/MiniArea.vue new file mode 100644 index 000000000..97c8ff70e --- /dev/null +++ b/jshERP-web/src/components/chart/MiniArea.vue @@ -0,0 +1,69 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/chart/MiniBar.vue b/jshERP-web/src/components/chart/MiniBar.vue new file mode 100644 index 000000000..9dd6bca7c --- /dev/null +++ b/jshERP-web/src/components/chart/MiniBar.vue @@ -0,0 +1,76 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/chart/MiniProgress.vue b/jshERP-web/src/components/chart/MiniProgress.vue new file mode 100644 index 000000000..e6668288f --- /dev/null +++ b/jshERP-web/src/components/chart/MiniProgress.vue @@ -0,0 +1,75 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/chart/Pie.vue b/jshERP-web/src/components/chart/Pie.vue new file mode 100644 index 000000000..750e20308 --- /dev/null +++ b/jshERP-web/src/components/chart/Pie.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/components/chart/README.md b/jshERP-web/src/components/chart/README.md new file mode 100644 index 000000000..d2789c817 --- /dev/null +++ b/jshERP-web/src/components/chart/README.md @@ -0,0 +1,367 @@ +# 报表组件文档 + +## 柱状图 + +##### 引用方式 + +```js +import Bar from '@/components/chart/Bar' +``` + +##### 参数列表 + +| 参数名 | 类型 | 必填 | 说明 | +|------------|--------|----|------------| +| title | string | | 报表标题 | +| dataSource | array | ✔️ | 报表数据源 | +| height | number | | 报表高度,默认254 | + +##### dataSource 示例 + +```json +[ + { + "x": "1月", + "y": 320 + }, + { + "x": "2月", + "y": 457 + }, + { + "x": "3月", + "y": 182 + } +] +``` + +##### 代码示例 + +```html + + + + + +``` + +## 多列柱状图 + +##### 引用方式 + +```js +import BarMultid from '@/components/chart/BarMultid' +``` + +##### 参数列表 + +| 参数名 | 类型 | 必填 | 说明 | +|------------|--------|----|------------| +| title | string | | 报表标题 | +| fields | array | | 主列字段列表 | +| dataSource | array | | 报表数据源 | +| height | number | | 报表高度,默认254 | + +##### fields 示例 + +```json +["Jan.", "Feb.", "Mar.", "Apr.", "May", "Jun.", "Jul.", "Aug."] +``` + +##### dataSource 示例 + +```json +[ + { + "type": "Jeecg", // 列名 + "Jan.": 18.9, + "Feb.": 28.8, + "Mar.": 39.3, + "Apr.": 81.4, + "May": 47, + "Jun.": 20.3, + "Jul.": 24, + "Aug.": 35.6 + }, + { + "type": "Jeebt", + "Jan.": 12.4, + "Feb.": 23.2, + "Mar.": 34.5, + "Apr.": 99.7, + "May": 52.6, + "Jun.": 35.5, + "Jul.": 37.4, + "Aug.": 42.4 + } +] +``` + +## 迷你柱状图 + +不带标题和数据轴的柱状图 + +##### 引用方式 + +```js +import MiniBar from '@/components/chart/MiniBar' +``` + +##### 参数列表 + +| 参数名 | 类型 | 必填 | 说明 | +|------------|--------|----|---------------| +| width | number | | 报表宽度度,默认自适应宽度 | +| height | number | | 报表高度,默认200 | +| dataSource | array | | 报表数据源 | + +##### dataSource 示例 + +```json +[ + { + "x": "1月", + "y": 320 + }, + { + "x": "2月", + "y": 457 + }, + { + "x": "3月", + "y": 182 + } +] +``` + +## 面积图 + +##### 引用方式 + +```js +import AreaChartTy from '@/components/chart/AreaChartTy' +``` + +##### 参数列表 + +| 参数名 | 类型 | 必填 | 说明 | +|------------|--------|----|------------| +| title | string | | 报表标题 | +| dataSource | array | ✔️ | 报表数据源 | +| height | number | | 报表高度,默认254 | +| lineSize | number | | 线的粗细,默认2 | + +##### dataSource 示例 + +```json +[ + { + "x": "1月", + "y": 320 + }, + { + "x": "2月", + "y": 457 + }, + { + "x": "3月", + "y": 182 + } +] +``` + +## 多行折线图 + +##### 引用方式 + +```js +import LineChartMultid from '@/components/chart/LineChartMultid' +``` + +##### 参数列表 + +| 参数名 | 类型 | 必填 | 说明 | +|------------|--------|----|------------| +| title | string | | 报表标题 | +| fields | array | | 主列字段列表 | +| dataSource | array | | 报表数据源 | +| height | number | | 报表高度,默认254 | + +##### fields 示例 + +```json +["jeecg", "jeebt"] +``` + +##### dataSource 示例 + +```json +[ + { + "type": "Jan", // 列名 + "jeecg": 7, + "jeebt": 3.9 + }, + { "type": "Feb", "jeecg": 6.9, "jeebt": 4.2 }, + { "type": "Mar", "jeecg": 9.5, "jeebt": 5.7 }, + { "type": "Apr", "jeecg": 14.5, "jeebt": 8.5 }, + { "type": "May", "jeecg": 18.4, "jeebt": 11.9 }, + { "type": "Jun", "jeecg": 21.5, "jeebt": 15.2 }, + { "type": "Jul", "jeecg": 25.2, "jeebt": 17 }, + { "type": "Aug", "jeecg": 26.5, "jeebt": 16.6 }, + { "type": "Sep", "jeecg": 23.3, "jeebt": 14.2 }, + { "type": "Oct", "jeecg": 18.3, "jeebt": 10.3 }, + { "type": "Nov", "jeecg": 13.9, "jeebt": 6.6 }, + { "type": "Dec", "jeecg": 9.6, "jeebt": 4.8 } +] +``` + +## 饼状图 + +##### 引用方式 + +```js +import Pie from '@/components/chart/Pie' +``` + +##### 参数列表 + +| 参数名 | 类型 | 必填 | 说明 | +|------------|--------|----|------------| +| dataSource | array | | 报表数据源 | +| height | number | | 报表高度,默认254 | + +##### dataSource 示例 + +```json +[ + // 所有的 percent 相加等于 100 + { "item": "一月", "percent": 40 }, + { "item": "二月", "percent": 21 }, + { "item": "三月", "percent": 17 }, + { "item": "四月", "percent": 13 }, + { "item": "五月", "percent": 9 } +] +``` + +## 雷达图 + +##### 引用方式 + +```js +import Radar from '@/components/chart/Radar' +``` + +##### 参数列表 + +| 参数名 | 类型 | 必填 | 说明 | +|------------|--------|----|------------| +| dataSource | array | | 报表数据源 | +| height | number | | 报表高度,默认254 | + +##### dataSource 示例 + +```json +[ + // score 最小值为 0,最大值为 100 + { "item": "一月", "score": 40 }, + { "item": "二月", "score": 20 }, + { "item": "三月", "score": 67 }, + { "item": "四月", "score": 43 }, + { "item": "五月", "score": 90 } +] +``` + +## 进度条 + +##### 引用方式 + +```js +import MiniProgress from '@/components/chart/MiniProgress' +``` + +##### 参数列表 + +| 参数名 | 类型 | 必填 | 说明 | +|------------|--------|----|-------------------| +| percentage | number | | 当前进度百分比,默认0,最高100 | +| target | number | | 目标值,默认10 | +| height | number | | 进度条高度,默认10 | +| color | string | | 进度条颜色,默认 #13C2C2 | + +## 仪表盘 + +##### 引用方式 + +```js +import DashChartDemo from '@/components/chart/DashChartDemo' +``` + +##### 参数列表 + +| 参数名 | 类型 | 必填 | 说明 | +|--------|--------|----|----------------| +| title | string | | 报表标题 | +| value | number | | 当前值,默认6.7,最大为9 | +| height | number | | 报表高度,默认254 | + +## 排名列表 + +##### 引用方式 + +```js +import RankList from '@/components/chart/RankList' +``` + +##### 参数列表 + +| 参数名 | 类型 | 必填 | 说明 | +|--------|--------|----|--------------| +| title | string | | 报表标题 | +| list | array | | 排名列表数据 | +| height | number | | 报表高度,默认自适应高度 | + +##### list 示例 + +```json +[ + { + "name": "北京朝阳 1 号店", + "total": 1981 + }, + { "name": "北京朝阳 2 号店", "total": 1359 }, + { "name": "北京朝阳 3 号店", "total": 1354 }, + { "name": "北京朝阳 4 号店", "total": 263 }, + { "name": "北京朝阳 5 号店", "total": 446 }, + { "name": "北京朝阳 6 号店", "total": 796 } +] +``` \ No newline at end of file diff --git a/jshERP-web/src/components/chart/Radar.vue b/jshERP-web/src/components/chart/Radar.vue new file mode 100644 index 000000000..b7b30b05d --- /dev/null +++ b/jshERP-web/src/components/chart/Radar.vue @@ -0,0 +1,90 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/chart/RankList.vue b/jshERP-web/src/components/chart/RankList.vue new file mode 100644 index 000000000..f5d68fea7 --- /dev/null +++ b/jshERP-web/src/components/chart/RankList.vue @@ -0,0 +1,81 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/chart/StackBar.vue b/jshERP-web/src/components/chart/StackBar.vue new file mode 100644 index 000000000..01b566f5e --- /dev/null +++ b/jshERP-web/src/components/chart/StackBar.vue @@ -0,0 +1,54 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/components/chart/TransferBar.vue b/jshERP-web/src/components/chart/TransferBar.vue new file mode 100644 index 000000000..bb953e9f9 --- /dev/null +++ b/jshERP-web/src/components/chart/TransferBar.vue @@ -0,0 +1,66 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/components/chart/Trend.vue b/jshERP-web/src/components/chart/Trend.vue new file mode 100644 index 000000000..1ca1deb8b --- /dev/null +++ b/jshERP-web/src/components/chart/Trend.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/chart/chart.less b/jshERP-web/src/components/chart/chart.less new file mode 100644 index 000000000..e04fa095b --- /dev/null +++ b/jshERP-web/src/components/chart/chart.less @@ -0,0 +1,13 @@ +.antv-chart-mini { + position: relative; + width: 100%; + + .chart-wrapper { + position: absolute; + bottom: -28px; + width: 100%; + +/* margin: 0 -5px; + overflow: hidden;*/ + } +} \ No newline at end of file diff --git a/jshERP-web/src/components/chart/chart.scss b/jshERP-web/src/components/chart/chart.scss new file mode 100644 index 000000000..e04fa095b --- /dev/null +++ b/jshERP-web/src/components/chart/chart.scss @@ -0,0 +1,13 @@ +.antv-chart-mini { + position: relative; + width: 100%; + + .chart-wrapper { + position: absolute; + bottom: -28px; + width: 100%; + +/* margin: 0 -5px; + overflow: hidden;*/ + } +} \ No newline at end of file diff --git a/jshERP-web/src/components/chart/mixins/ChartMixins.js b/jshERP-web/src/components/chart/mixins/ChartMixins.js new file mode 100644 index 000000000..f99c0bd3d --- /dev/null +++ b/jshERP-web/src/components/chart/mixins/ChartMixins.js @@ -0,0 +1,10 @@ +export const ChartEventMixins = { + methods: { + handleClick(event, chart) { + this.handleEvent('click', event, chart) + }, + handleEvent(eventName, event, chart) { + this.$emit(eventName, event, chart) + }, + } +} \ No newline at end of file diff --git a/jshERP-web/src/components/dict/JDictSelectTag.vue b/jshERP-web/src/components/dict/JDictSelectTag.vue new file mode 100644 index 000000000..76d33c30f --- /dev/null +++ b/jshERP-web/src/components/dict/JDictSelectTag.vue @@ -0,0 +1,103 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/dict/JDictSelectUtil.js b/jshERP-web/src/components/dict/JDictSelectUtil.js new file mode 100644 index 000000000..4bc975d28 --- /dev/null +++ b/jshERP-web/src/components/dict/JDictSelectUtil.js @@ -0,0 +1,142 @@ +/** + * 字典 util + * author: scott + * date: 20190109 + */ + +import {ajaxGetDictItems,getDictItemsFromCache} from '@/api/api' +import {getAction} from '@/api/manage' + +/** + * 获取字典数组 + * @param dictCode 字典Code + * @return List + */ +export async function initDictOptions(dictCode) { + if (!dictCode) { + return '字典Code不能为空!'; + } + //优先从缓存中读取字典配置 + if(getDictItemsFromCache(dictCode)){ + let res = {} + res.result = getDictItemsFromCache(dictCode); + res.success = true; + return res; + } + //获取字典数组 + let res = await ajaxGetDictItems(dictCode); + return res; +} + +/** + * 字典值替换文本通用方法 + * @param dictOptions 字典数组 + * @param text 字典值 + * @return String + */ +export function filterDictText(dictOptions, text) { + // --update-begin----author:sunjianlei---date:20200323------for: 字典翻译 text 允许逗号分隔 --- + if (text != null && dictOptions instanceof Array) { + let result = [] + // 允许多个逗号分隔 + let splitText = text.toString().trim().split(',') + for (let txt of splitText) { + let dictText = txt + for (let dictItem of dictOptions) { + if (txt === dictItem.value.toString()) { + dictText = dictItem.text + break + } + } + result.push(dictText) + } + return result.join(',') + } + return text + // --update-end----author:sunjianlei---date:20200323------for: 字典翻译 text 允许逗号分隔 --- +} + +/** + * 字典值替换文本通用方法(多选) + * @param dictOptions 字典数组 + * @param text 字典值 + * @return String + */ +export function filterMultiDictText(dictOptions, text) { + //js “!text” 认为0为空,所以做提前处理 + if(text === 0 || text === '0'){ + if(dictOptions){ + for (let dictItem of dictOptions) { + if (text == dictItem.value) { + return dictItem.text + } + } + } + } + + if(!text || text=='null' || !dictOptions || dictOptions.length==0){ + return "" + } + let re = ""; + text = text.toString() + let arr = text.split(",") + dictOptions.forEach(function (option) { + if(option){ + for(let i=0;i t["value"] == key) + if(item && item.length>0){ + return item[0]["text"] + } + } +} + +/** 通过code获取字典数组 */ +export async function getDictItems(dictCode, params) { + //优先从缓存中读取字典配置 + if(getDictItemsFromCache(dictCode)){ + let desformDictItems = getDictItemsFromCache(dictCode).map(item => ({...item, label: item.text})) + return desformDictItems; + } + + //缓存中没有,就请求后台 + return await ajaxGetDictItems(dictCode, params).then(({success, result}) => { + if (success) { + let res = result.map(item => ({...item, label: item.text})) + console.log('------- 从DB中获取到了字典-------dictCode : ', dictCode, res) + return Promise.resolve(res) + } else { + console.error('getDictItems error: : ', res) + return Promise.resolve([]) + } + }).catch((res) => { + console.error('getDictItems error: ', res) + return Promise.resolve([]) + }) +} \ No newline at end of file diff --git a/jshERP-web/src/components/dict/JMultiSelectTag.vue b/jshERP-web/src/components/dict/JMultiSelectTag.vue new file mode 100644 index 000000000..c35834c25 --- /dev/null +++ b/jshERP-web/src/components/dict/JMultiSelectTag.vue @@ -0,0 +1,107 @@ + + + diff --git a/jshERP-web/src/components/dict/JSearchSelectTag.vue b/jshERP-web/src/components/dict/JSearchSelectTag.vue new file mode 100644 index 000000000..65f63f709 --- /dev/null +++ b/jshERP-web/src/components/dict/JSearchSelectTag.vue @@ -0,0 +1,201 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/dict/README.md b/jshERP-web/src/components/dict/README.md new file mode 100644 index 000000000..4106df044 --- /dev/null +++ b/jshERP-web/src/components/dict/README.md @@ -0,0 +1,181 @@ +# JDictSelectTag 组件用法 +---- +- 从字典表获取数据,dictCode格式说明: 字典code +```html + +``` + +v-decorator用法: +```html + +``` + +- 从数据库表获取字典数据,dictCode格式说明: 表名,文本字段,取值字段 +```html + +``` + + + +# JDictSelectUtil.js 列表字典函数用法 +---- + +- 第一步: 引入依赖方法 +```html + import {initDictOptions, filterDictText} from '@/components/dict/JDictSelectUtil' +``` + +- 第二步: 在created()初始化方法执行字典配置方法 +```html + //初始化字典配置 + this.initDictConfig(); +``` + +- 第三步: 实现initDictConfig方法,加载列表所需要的字典(列表上有多个字典项,就执行多次initDictOptions方法) + +```html + initDictConfig() { + //初始化字典 - 性别 + initDictOptions('sex').then((res) => { + if (res.success) { + this.sexDictOptions = res.result; + } + }); + }, +``` + +- 第四步: 实现字段的customRender方法 +```html + customRender: (text, record, index) => { + //字典值替换通用方法 + return filterDictText(this.sexDictOptions, text); + } +``` + + +# JMultiSelectTag 多选组件 +下拉/checkbox + +## 参数配置 +| 参数 | 类型 | 必填 |说明| +|--------------|---------|----|---------| +| placeholder |string | | placeholder | +| disabled |Boolean | | 是否禁用 | +| type |string | | 多选类型 select/checkbox 默认是select | +| dictCode |string | | 数据字典编码或者表名,显示字段名,存储字段名拼接而成的字符串,如果提供了options参数 则此参数可不填| +| options |Array | | 多选项,如果dictCode参数未提供,可以设置此参数加载多选项 | + +使用示例 +---- +```vue + + + +``` + +# JSearchSelectTag 字典表的搜索组件 +下拉搜索组件,支持异步加载,异步加载用于大数据量的字典表 + +## 参数配置 +| 参数 | 类型 | 必填 |说明| +|--------------|---------|----|---------| +| placeholder |string | | placeholder | +| disabled |Boolean | | 是否禁用 | +| dict |string | | 表名,显示字段名,存储字段名拼接而成的字符串,如果提供了dictOptions参数 则此参数可不填| +| dictOptions |Array | | 多选项,如果dict参数未提供,可以设置此参数加载多选项 | +| async |Boolean | | 是否支持异步加载,设置成true,则通过输入的内容加载远程数据,否则在本地过滤数据,默认false| + +使用示例 +---- +```vue + + + +``` + diff --git a/jshERP-web/src/components/dict/index.js b/jshERP-web/src/components/dict/index.js new file mode 100644 index 000000000..22c3235de --- /dev/null +++ b/jshERP-web/src/components/dict/index.js @@ -0,0 +1,7 @@ +import T from './JDictSelectTag.vue' +const JDictSelectTag = { + install: function (Vue) { + Vue.component('JDictSelectTag',T); + } +} +export default JDictSelectTag; \ No newline at end of file diff --git a/jshERP-web/src/components/index.less b/jshERP-web/src/components/index.less new file mode 100644 index 000000000..d8c97bbdb --- /dev/null +++ b/jshERP-web/src/components/index.less @@ -0,0 +1,4 @@ +@import "~ant-design-vue/lib/style/index"; + +// The prefix to use on all css classes from ant-pro. +@ant-pro-prefix : ant-pro; \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/JAreaLinkage.vue b/jshERP-web/src/components/jeecg/JAreaLinkage.vue new file mode 100644 index 000000000..47ff97ffb --- /dev/null +++ b/jshERP-web/src/components/jeecg/JAreaLinkage.vue @@ -0,0 +1,156 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/JCategorySelect.vue b/jshERP-web/src/components/jeecg/JCategorySelect.vue new file mode 100644 index 000000000..53cf6e614 --- /dev/null +++ b/jshERP-web/src/components/jeecg/JCategorySelect.vue @@ -0,0 +1,238 @@ + + diff --git a/jshERP-web/src/components/jeecg/JCheckbox.vue b/jshERP-web/src/components/jeecg/JCheckbox.vue new file mode 100644 index 000000000..a3c70f6ad --- /dev/null +++ b/jshERP-web/src/components/jeecg/JCheckbox.vue @@ -0,0 +1,43 @@ + + + diff --git a/jshERP-web/src/components/jeecg/JCodeEditor.vue b/jshERP-web/src/components/jeecg/JCodeEditor.vue new file mode 100644 index 000000000..196c2a9b0 --- /dev/null +++ b/jshERP-web/src/components/jeecg/JCodeEditor.vue @@ -0,0 +1,429 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/JCron.vue b/jshERP-web/src/components/jeecg/JCron.vue new file mode 100644 index 000000000..39c279e15 --- /dev/null +++ b/jshERP-web/src/components/jeecg/JCron.vue @@ -0,0 +1,65 @@ + + + diff --git a/jshERP-web/src/components/jeecg/JDate.vue b/jshERP-web/src/components/jeecg/JDate.vue new file mode 100644 index 000000000..f08a7507a --- /dev/null +++ b/jshERP-web/src/components/jeecg/JDate.vue @@ -0,0 +1,85 @@ + + diff --git a/jshERP-web/src/components/jeecg/JEditableTable.vue b/jshERP-web/src/components/jeecg/JEditableTable.vue new file mode 100644 index 000000000..52d33c759 --- /dev/null +++ b/jshERP-web/src/components/jeecg/JEditableTable.vue @@ -0,0 +1,3057 @@ + + + + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/JEditor.vue b/jshERP-web/src/components/jeecg/JEditor.vue new file mode 100644 index 000000000..b77b24a66 --- /dev/null +++ b/jshERP-web/src/components/jeecg/JEditor.vue @@ -0,0 +1,118 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/JEllipsis.vue b/jshERP-web/src/components/jeecg/JEllipsis.vue new file mode 100644 index 000000000..627113f49 --- /dev/null +++ b/jshERP-web/src/components/jeecg/JEllipsis.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/jshERP-web/src/components/jeecg/JFormContainer.vue b/jshERP-web/src/components/jeecg/JFormContainer.vue new file mode 100644 index 000000000..c941ed3d2 --- /dev/null +++ b/jshERP-web/src/components/jeecg/JFormContainer.vue @@ -0,0 +1,61 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/JGraphicCode.vue b/jshERP-web/src/components/jeecg/JGraphicCode.vue new file mode 100644 index 000000000..462a4b935 --- /dev/null +++ b/jshERP-web/src/components/jeecg/JGraphicCode.vue @@ -0,0 +1,202 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/JImageUpload.vue b/jshERP-web/src/components/jeecg/JImageUpload.vue new file mode 100644 index 000000000..91f513184 --- /dev/null +++ b/jshERP-web/src/components/jeecg/JImageUpload.vue @@ -0,0 +1,201 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/JImportModal.vue b/jshERP-web/src/components/jeecg/JImportModal.vue new file mode 100644 index 000000000..d69f5964b --- /dev/null +++ b/jshERP-web/src/components/jeecg/JImportModal.vue @@ -0,0 +1,123 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/JInput.vue b/jshERP-web/src/components/jeecg/JInput.vue new file mode 100644 index 000000000..619543c46 --- /dev/null +++ b/jshERP-web/src/components/jeecg/JInput.vue @@ -0,0 +1,100 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/JMarkdownEditor/default-options.js b/jshERP-web/src/components/jeecg/JMarkdownEditor/default-options.js new file mode 100644 index 000000000..b0f67ac2b --- /dev/null +++ b/jshERP-web/src/components/jeecg/JMarkdownEditor/default-options.js @@ -0,0 +1,30 @@ +export default { + minHeight: '200px', + previewStyle: 'vertical', + useCommandShortcut: true, + useDefaultHTMLSanitizer: true, + usageStatistics: false, + hideModeSwitch: false, + toolbarItems: [ + 'heading', + 'bold', + 'italic', + 'strike', + 'divider', + 'hr', + 'quote', + 'divider', + 'ul', + 'ol', + 'task', + 'indent', + 'outdent', + 'divider', + 'table', + 'image', + 'link', + 'divider', + 'code', + 'codeblock' + ] +} diff --git a/jshERP-web/src/components/jeecg/JMarkdownEditor/index.vue b/jshERP-web/src/components/jeecg/JMarkdownEditor/index.vue new file mode 100644 index 000000000..4ddde6abd --- /dev/null +++ b/jshERP-web/src/components/jeecg/JMarkdownEditor/index.vue @@ -0,0 +1,121 @@ + + + diff --git a/jshERP-web/src/components/jeecg/JModal/index.vue b/jshERP-web/src/components/jeecg/JModal/index.vue new file mode 100644 index 000000000..0e1510114 --- /dev/null +++ b/jshERP-web/src/components/jeecg/JModal/index.vue @@ -0,0 +1,225 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/JSelectMultiple.vue b/jshERP-web/src/components/jeecg/JSelectMultiple.vue new file mode 100644 index 000000000..d0ce043fb --- /dev/null +++ b/jshERP-web/src/components/jeecg/JSelectMultiple.vue @@ -0,0 +1,66 @@ + + + diff --git a/jshERP-web/src/components/jeecg/JSlider.vue b/jshERP-web/src/components/jeecg/JSlider.vue new file mode 100644 index 000000000..18fda6879 --- /dev/null +++ b/jshERP-web/src/components/jeecg/JSlider.vue @@ -0,0 +1,116 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/JSuperQuery.vue b/jshERP-web/src/components/jeecg/JSuperQuery.vue new file mode 100644 index 000000000..7397f4b79 --- /dev/null +++ b/jshERP-web/src/components/jeecg/JSuperQuery.vue @@ -0,0 +1,640 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/JSwitch.vue b/jshERP-web/src/components/jeecg/JSwitch.vue new file mode 100644 index 000000000..9d8f4dc6f --- /dev/null +++ b/jshERP-web/src/components/jeecg/JSwitch.vue @@ -0,0 +1,57 @@ + + diff --git a/jshERP-web/src/components/jeecg/JTreeDict.vue b/jshERP-web/src/components/jeecg/JTreeDict.vue new file mode 100644 index 000000000..dd413c7d5 --- /dev/null +++ b/jshERP-web/src/components/jeecg/JTreeDict.vue @@ -0,0 +1,199 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/JTreeSelect.vue b/jshERP-web/src/components/jeecg/JTreeSelect.vue new file mode 100644 index 000000000..41789a1ad --- /dev/null +++ b/jshERP-web/src/components/jeecg/JTreeSelect.vue @@ -0,0 +1,260 @@ + + diff --git a/jshERP-web/src/components/jeecg/JTreeTable.vue b/jshERP-web/src/components/jeecg/JTreeTable.vue new file mode 100644 index 000000000..bf14b81eb --- /dev/null +++ b/jshERP-web/src/components/jeecg/JTreeTable.vue @@ -0,0 +1,180 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/JUpload.vue b/jshERP-web/src/components/jeecg/JUpload.vue new file mode 100644 index 000000000..f481212bb --- /dev/null +++ b/jshERP-web/src/components/jeecg/JUpload.vue @@ -0,0 +1,434 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/README.md b/jshERP-web/src/components/jeecg/README.md new file mode 100644 index 000000000..23547473b --- /dev/null +++ b/jshERP-web/src/components/jeecg/README.md @@ -0,0 +1,512 @@ +# JDate 日期组件 使用文档 + +###### 说明: antd-vue日期组件需要用moment中转一下,用起来不是很方便,特二次封装,使用时只需要传字符串即可 +## 参数配置 +| 参数 | 类型 | 必填 |说明| +|--------------|---------|----|---------| +| placeholder |string | | placeholder | +| readOnly | boolean | | true/false 默认false | +| value | string | | 绑定v-model或是v-decorator后不需要设置 | +| showTime | boolean | | 是否展示时间true/false 默认false | +| dateFormat | string | |日期格式 默认'YYYY-MM-DD' 若showTime设置为true则需要将其设置成对应的时间格式(如:YYYY-MM-DD HH:mm:ss) | +| triggerChange | string | |触发组件值改变的事件是否是change,当使用v-decorator时且没有设置decorator的option.trigger为input需要设置该值为true | +使用示例 +---- +1.组件带有v-model的使用方法 +```vue + +``` + +2.组件带有v-decorator的使用方法 + a).设置trigger-change属性为true + ```vue + + ``` + + b).设置decorator的option.trigger为input + ```vue + + ``` + +3.其他使用 +添加style +```vue + +``` +添加placeholder +```vue + +``` +添加readOnly +```vue + +``` + +备注: +script内需引入jdate +```vue + +``` + + + --- + + +# JSuperQuery 高级查询 使用文档 +## 参数配置 +| 参数 | 类型 | 必填 | 说明 | +|--------------|---------|----|----------------------| +| fieldList | array |✔| 需要查询的列集合示例如下,type类型有:date/datetime/string/int/number | +| callback | array | | 回调函数名称(非必须)默认handleSuperQuery | + +fieldList结构示例: +```vue + const superQueryFieldList=[{ + type:"date", + value:"birthday", + text:"生日" + },{ + type:"string", + value:"name", + text:"用户名" + },{ + type:"int", + value:"age", + text:"年龄" + }] +``` +页面代码概述: +---- +1.import之后再components之内声明 +```vue +import JSuperQuery from '@/components/jeecg/JSuperQuery.vue'; + export default { + name: "JeecgDemoList", + components: { + JSuperQuery + }, + +``` +2.页面引用 +```vue + + +``` +3.list页面data中需要定义三个属性: +```vue + fieldList:superQueryFieldList, + superQueryFlag:false, + superQueryParams:"" +``` +4.list页面声明回调事件handleSuperQuery(与组件的callback对应即可) +```vue +//高级查询方法 +handleSuperQuery(arg) { + if(!arg){ + this.superQueryParams='' + this.superQueryFlag = false + }else{ + this.superQueryFlag = true + this.superQueryParams=JSON.stringify(arg) + } + this.loadData() +}, +``` +5.改造list页面方法 +```vue + // 获取查询条件 + getQueryParams() { + let sqp = {} + if(this.superQueryParams){ + sqp['superQueryParams']=encodeURI(this.superQueryParams) + } + var param = Object.assign(sqp, this.queryParam, this.isorter); + param.field = this.getQueryField(); + param.pageNo = this.ipagination.current; + param.pageSize = this.ipagination.pageSize; + return filterObj(param); + }, +``` +6.打开弹框调用show方法: +```vue +this.$refs.superQueryModal.show(); +``` + +# JEllipsis 字符串超长截取省略号显示 + +###### 说明: 遇到超长文本展示,通过此标签可以截取省略号显示,鼠标放置会提示全文本 +## 参数配置 +| 参数 | 类型 | 必填 | 说明 | +|--------|---------|----|----------------| +| value |string | 必填 | 字符串文本| +| length | number | 非必填 | 默认25 | +使用示例 +---- +1.组件带有v-model的使用方法 +```vue + + + +# Modal弹框实现最大化功能 + +1.定义modal的宽度: +```vue + +``` +2.自定义modal的title,居右显示切换图标 +```vue + +``` +3.定义toggleScreen事件,用于切换modal宽度 +```vue + toggleScreen(){ + if(this.modaltoggleFlag){ + this.modalWidth = window.innerWidth; + }else{ + this.modalWidth = 800; + } + this.modaltoggleFlag = !this.modaltoggleFlag; + }, +``` +4.data中声明上述用到的属性 +```vue + data () { + return { + modalWidth:800, + modaltoggleFlag:true, +``` + +# 下拉选项滚动错位的解决方法 + +## 问题描述 + +当使用了 `a-modal` 或其他带有滚动条的组件时,使用`a-select`组件并打开下拉框时滚动滚动条,就会导致错位的问题产生。 + +## 解决方法 + +大多数情况下,在 `a-select` 上添加一个 `getPopupContainer` 属性,值为`node => node.parentNode`即可解决。 +但是如果遇到 `a-select` 标签层级过深的情况,可能仍然会显示异常,只需要多加几个`.parentNode` (例:node => node.parentNode.parentNode.parentNode)多尝试几次直到解决问题即可。 + +### 代码示例 + +```html + +``` + +# JAsyncTreeList 异步数列表组件使用说明 + +## 引入组件 + +```js +import JTreeTable from '@/components/jeecg/JTreeTable' +export default { + components: { JTreeTable } +} +``` + +## 所需参数 + +| 参数 | 类型 | 必填 | 说明 | +|-------------|--------|--------|--------------------------------------------------------------| +| rowKey | String | 非必填 | 表格行 key 的取值,默认为"id" | +| columns | Array | 必填 | 表格列的配置描述,具体见Antd官方文档 | +| url | String | 必填 | 数据查询url | +| childrenUrl | String | 非必填 | 查询子级时的url,若不填则使用url参数查询子级 | +| queryKey | String | 非必填 | 根据某个字段查询,如果传递 id 就根据 id 查询,默认为parentId | +| queryParams | Object | 非必填 | 查询参数,当查询参数改变的时候会自动重新查询,默认为{} | +| topValue | String | 非必填 | 查询顶级时的值,如果顶级为0,则传0,默认为null | +| tableProps | Object | 非必填 | 自定义给内部table绑定的props | + +## 代码示例 + +```html + + + +``` + +# JCheckbox 使用文档 + +###### 说明: antd-vue checkbox组件处理的是数组,用起来不是很方便,特二次封装,使用时只需处理字符串即可 +## 参数配置 +| 参数 | 类型 | 必填 |说明| +|--------------|---------|----|---------| +| options |array |✔| checkbox需要配置的项,是个数组,数组中每个对象包含两个属性:label(用于显示)和value(用于存储) | + +使用示例 +---- +```vue + + + +``` + +# JCodeEditor 使用文档 + +###### 说明: 一个简易版的代码编辑器,支持语法高亮 +## 参数配置 +| 参数 | 类型 | 必填 |说明| +|--------------|---------|----|---------| +| language |string | | 表示当前编写代码的类型 javascript/html/css/sql | +| placeholder |string | | placeholder | +| lineNumbers |Boolean | | 是否显示行号 | +| fullScreen |Boolean | | 是否显示全屏按钮 | +| zIndex |string | | 全屏以后的z-index | + +使用示例 +---- +```vue + + + +``` + +# JFormContainer 使用文档 + +###### 说明: 暂用于表单禁用 + +使用示例 +---- +```vue + + + + + + +``` + +# JImportModal 使用文档 + +###### 说明: 用于列表页面导入excel功能 + +使用示例 +---- +```vue + + + + +``` + +# JSelectMultiple 多选下拉组件 +online用 实际开发请使用components/dict/JMultiSelectTag + +# JSlider 滑块验证码 + +使用示例 +---- +```vue + + + +``` + + +# JTreeSelect 树形下拉组件 +异步加载的树形下拉组件 + +## 参数配置 +| 参数 | 类型 | 必填 |说明| +|--------------|---------|----|---------| +| placeholder |string | | placeholder | +| dict |string | ✔| 表名,显示字段名,存储字段名拼接的字符串 | +| pidField |string | ✔| 父ID的字段名 | +| pidValue |string | | 根节点父ID的值 默认'0' 不可以设置为空,如果想使用此组件,而数据库根节点父ID为空,请修改之 | +| multiple |boolean | |是否支持多选 | + +使用示例 +---- +```vue + + + +``` + + diff --git a/jshERP-web/src/components/jeecg/README_JEditableTable.md b/jshERP-web/src/components/jeecg/README_JEditableTable.md new file mode 100644 index 000000000..981422c5b --- /dev/null +++ b/jshERP-web/src/components/jeecg/README_JEditableTable.md @@ -0,0 +1,577 @@ +# JEditableTable 帮助文档 + +## 参数配置 + +| 参数 | 类型 | 必填 | 说明 | +|--------------|---------|------|---------------------------------------------------------------------------------| +| columns | array | ✔️ | 表格列的配置描述,具体项见下表 | +| dataSource | array | ✔️ | 表格数据 | +| loading | boolean | | 是否正在加载,加载中不会显示任何行,默认false | +| actionButton | boolean | | 是否显示操作按钮,包括"新增"、"删除",默认false | +| rowNumber | boolean | | 是否显示行号,默认false | +| rowSelection | boolean | | 是否可选择行,默认false | +| dragSort | boolean | | 是否可拖动排序,默认false | +| dragSortKey | string | | 拖动排序存储的Key,无需定义在columns内也能在getValues()时获取到值,默认orderNum | +| maxHeight | number | | 设定最大高度(px),默认400 | +| disabledRows | object | | 设定禁用的行,被禁用的行无法被选择和编辑,配置方法可以查看示例 | +| disabled | boolean | | 是否禁用所有行,默认false | + +### columns 参数详解 + +| 参数 | 类型 | 必填 | 说明 | +|---------------|---------|------|--------------------------------------------------------------------------------------------------------------------------------------------------------| +| title | string | ✔️ | 表格列头显示的问题 | +| key | string | ✔️ | 列数据在数据项中对应的 key,必须是唯一的 | +| type | string | ✔️ | 表单的类型,可以通过`JEditableTableUtil.FormTypes`赋值 | +| width | string | | 列的宽度,可以是百分比,也可以是`px`或其他单位,建议设置为百分比,且每一列的宽度加起来不应超过100%,否则可能会不能达到预期的效果。留空会自动计算百分比 | +| placeholder | string | | 表单预期值的提示信息,可以使用`${...}`变量替换文本(详见`${...} 变量使用方式`) | +| defaultValue | string | | 默认值,在新增一行时生效 | +| validateRules | array | | 表单验证规则,配置方式见[validateRules 配置规则](#validaterules-配置规则) | +| props | object | | 设置添加给表单元素的自定义属性,例如:`props:{title: 'show title'}` | +| disabled | boolean | | 是否禁用当前列,默认false | + +#### 当 type=checkbox 时所需的参数 + +| 参数 | 类型 | 必填 | 说明 | +|----------------|---------|------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| defaultChecked | boolean | | 默认值是否选中 | +| customValue | array | | 自定义值,checkbox需要的是boolean值,如果数据是其他值(例如`'Y' or 'N'`)时,就会导致错误,所以提供了该属性进行转换,例:`customValue: ['Y','N']`,会将`true`转换为`'Y'`,`false`转换为`'N'`,反之亦然 | + +#### 当 type=select 时所需的参数 + +| 参数 | 类型 | 必填 | 说明 | +|------------|---------|------|----------------------------------------------------| +| options | array | ✔️ | 下拉选项列表,详见下表 | +| allowInput | boolean | | 是否允许用户输入内容,并创建新的内容 | +| dictCode | String | | 数据字典Code,若options也有值,则拼接在options后面 | + +##### options 所需参数 + +| 参数 | 类型 | 必填 | 说明 | +|-----------|------------|------|----------------------------------------------------------------------| +| text | string | ✔️ | 显示标题 | +| value | string | ✔️ | 真实值 | +| ~~title~~ | ~~string~~ | | ~~显示标题(已废弃,若同时填写了 title 和 text 那么优先使用 text)~~ | + +#### 当 type=upload 时所需的参数 + +| 参数 | 类型 | 必填 | 说明 | +|--------------|---------|------|--------------------------------------------------------------------------------------| +| action | string | ✔️ | 上传文件路径 | +| token | boolean | | 上传的时候是否传递token | +| responseName | string | ✔️ | 若要从上传成功后从response中取出返回的文件名,那么这里填后台返回的包含文件名的字段名 | + +#### 当 type=slot 时所需的参数 + +| 参数 | 类型 | 必填 | 说明 | +|----------|--------|------|------------| +| slotName | string | ✔️ | slot的名称 | + +### validateRules 配置规则 + +`validateRules` 需要的是一个数组,数组里每项都是一个规则,规则是object类型,规则的各个参数如下 + +- `required` 是否必填,可选值为`true`or`false` +- `pattern` 正则表达式验证,只有成功匹配该正则的值才能成功通过验证 +- `handler` 自定义函数校验,使用方法请见[示例五](#示例五) +- `message` 当验证未通过时显示的提示文本,可以使用`${...}`变量替换文本(详见`${...} 变量使用方式`) +- 配置示例请看[示例二](#示例二) + +## 事件 + +| 事件名 | 触发时机 | 参数 | +|-----------------|----------------------------------------------------|--------------------------------------------------| +| added | 当添加行操作完成后触发 | | +| deleted | 当删除行操作完成后触发(批量删除操作只会触发一次) | `deleteIds` 被逻辑删除的id | +| selectRowChange | 当行被选中或取消选中时触发 | `selectedRowIds` 被选中行的id | +| valueChange | 当数据发生改变的时候触发的事件 | `{ type, row, column, value, target }` Event对象 | + +## 方法 + +关于方法的如何调用的问题,请在**FAQ**中查看[方法如何调用](#方法如何调用) + +### initialize + +用于初始化表格(清空表格) + +- `参数:` 无 +- `返回值:` 无 + +### resetScrollTop + +重置滚动条Top位置 + +- `参数:` + +| 参数名 | 类型 | 必填 | 说明 | +|--------|--------|------|--------------------------------------------------------------------------------------------------------| +| top | number | | 新top位置,留空则滚动到上次记录的位置,用于解决切换tab选项卡时导致白屏以及自动将滚动条滚动到顶部的问题 | + +- `返回值:` 无 + +### add + +主动添加行,默认情况下,当用户的滚动条已经在底部的时候,会将滚动条固定在底部,即添加后无需用户手动滚动,而会自动滚动到底部 + +- `参数:` + +| 参数名 | 类型 | 必填 | 说明 | +|---------------------|---------|------|---------------------------------------------------------------------| +| num | number | | 添加几行,默认为1 | +| forceScrollToBottom | boolean | | 是否在添加后无论用户的滚动条在什么位置都强制滚动到底部,默认为false | + +- `返回值:` 无 + +### removeRows + +主动删除一行或多行 + +- `参数:` + +| 参数名 | 类型 | 必填 | 说明 | +|--------|-----------------|------|--------------------------------------------------------------------------------------------| +| id | string 或 array | ✔️ | 被删除行的id。如果要删除一个,可以直接传id,如果要删除多个,需要将多个id封装成一个数组传入 | + +- `返回值:` 无 + +### removeSelectedRows + +主动删除被选中的行 + +- `参数:` 无 +- `返回值:` 无 + +### getValues + +用于获取表格里所有表单的值,可进行表单验证 + +- `参数:` + +| 参数名 | 类型 | 必填 | 说明 | +|----------|----------|------|-----------------------------------------------------------------------------------------------------------------------------------------------------------| +| callback | function | ✔️ | 获取值的回调方法,会传入`error`和`values`两个参数。`error`:未通过验证的数量,当等于`0`时代表验证通过;`values`:获取的值(即使未通过验证该字段也有数据) | +| validate | boolean | | 是否进行表单验证,默认为`true`,设为`false`则代表忽略表单验证 | +| rowIds | array | | 默认返回所有行的数据,如果传入了`rowIds`,那么就会只返回与该`rowIds`相匹配的数据,如果没有匹配的数据,就会返回空数组 | + +- `返回值:` 无 + + +### getValuesSync + +`getValues`的同步版,会直接将获取到的数据返回 + +- `参数:` + +| 参数名 | 类型 | 必填 | 说明 | +|---------|--------|------|------------------------| +| options | object | | 选项,详见下方所需参数 | + +- - `options` 所需参数 + +| 参数名 | 类型 | 必填 | 说明 | +|----------|---------|------|----------------------------------------------------------------------------------------------------------------------| +| validate | boolean | | 是否进行表单验证,默认为`true`,设为`false`则代表忽略表单验证 | +| rowIds | array | | 默认返回所有行的数据,如果传入了`rowIds`,那么就会只返回与该`rowIds`相匹配的数据,如果没有匹配的数据,就会返回空数组 | + +- `返回值:` object + - `error` 未通过验证的数量,当等于`0`时代表验证通过 + - `values` 获取的值(即使未通过验证该字段也有数据) + +- `使用示例` + +```js +let { error, values } = this.$refs.editableTable.getValuesSync({ validate: true, rowIds: ['rowId1', 'rowId2'] }) +if (error === 0) { + console.log('表单验证通过,数据:', values); +} else { + console.log('未通过表单验证,数据:', values); +} +``` + +### getValuesPromise + +`getValues`的promise版,会在`resolve`中传入获取到的值,会在`reject`中传入失败原因,例如`VALIDATE_NO_PASSED` + +- `参数:` + +| 参数名 | 类型 | 必填 | 说明 | +|----------|---------|------|----------------------------------------------------------------------------------------------------------------------| +| validate | boolean | | 同`getValues`的`validate`参数 | +| rowIds | array | | 默认返回所有行的数据,如果传入了`rowIds`,那么就会只返回与该`rowIds`相匹配的数据,如果没有匹配的数据,就会返回空数组 | + +- `返回值:` Promise + +### getDeleteIds + +用于获取被逻辑删除的行的id,返回一个数组,用户可将该数组传入后台,并进行批量删除 + +- `参数:` 无 +- `返回值:` array + +### getAll + +获取所有的数据,包括values、deleteIds +会在`resolve`中传入获取到的值:`{values, deleteIds}` +会在`reject`中传入失败原因,例如`VALIDATE_NO_PASSED` + +- `参数:` + +| 参数名 | 类型 | 必填 | 说明 | +|----------|---------|------|-------------------------------| +| validate | boolean | | 同`getValues`的`validate`参数 | + +- `返回值:` Promise + +### setValues + +主动设置表格中某行某列的值 + +- `参数:` + +| 参数名 | 类型 | 必填 | 说明 | +|--------|-------|------|------------------------------------------------------------| +| values | array | | 传入一个数组,数组中的每项都是一行的新值,具体见下面的示例 | + +- `返回值:` 无 +- `示例:` + +```js +setValues([ + { + rowKey: id1, // 行的id + values: { // 在这里 values 中的 name 是你 columns 中配置的 key + 'name': 'zhangsan', + 'age': '20' + } + }, + { + rowKey: id2, + values: { + 'name': 'lisi', + 'age': '23' + } + } +]) +``` +### clearSelection + +主动清空选择的行 + +- `参数:` 无 +- `返回值:` 无 + +## 内置插槽 + +| 插槽名 | 说明 | +|--------------|------------------------------------------------------| +| buttonBefore | 在操作按钮的**前面**插入插槽,不受`actionButton`属性的影响 | +| buttonAfter | 在操作按钮的**后面**插入插槽,不受`actionButton`属性的影响 | + +## ${...} 变量使用方式 + +在`placeholder`和`message`这两个属性中可以使用`${...}`变量来替换文本 +在[示例二](#示例二)中,配置了`title`为`名称`的一列,而`placeholder`配置成了`请输入${title}`,那么最终显示效果为`请输入名称` +这就是`${...}`变量的使用方式,在`${}`中可以使用的变量有`title`、`key`、`defaultValue`这三个属性的值 + +## JEditableTableUtil 使用说明 + +在之前配置`columns`时提到过`JEditableTableUtil`这个工具类,那么如果想要知道详细的使用说明就请看这里 + +### export 的常量 + +#### FormTypes + +这是配置`columns.type`时用到的常量值,其中包括 + +- `normal` 默认,直接显示值,不渲染表单 +- `input` 显示输入框 +- `inputNumber` 显示数字输入框 +- `checkbox` 显示多选框 +- `select` 显示选择器(下拉框) +- `date` 日期选择器 +- `datetime` 日期时间选择器 +- `upload` 上传组件(文件域) +- `slot` 自定义插槽 + +### VALIDATE_NO_PASSED + +在判断表单验证是否通过时使用,如果 reject 的值 === VALIDATE_NO_PASSED 则代表表单验证未通过,你可以做相应的其他处理,反之则可能是发生了报错,可以使用 `console.error` 输出 + +### 封装的方法 + +#### validateTables + +当你的页面中存在多个JEditableTable实例的时候,如果要获取每个实例的值、判断表单验证是否通过,就会让代码变得极其冗余、繁琐,于是我们就将该操作封装成了一个函数供你调用,它可以同时获取并验证多个JEditableTable实例的值,只有当所有实例的表单验证都通过后才会返回值,否则将会告诉你具体哪个实例没有通过验证。具体使用方法请看下面的示例 + +- `参数:` + +| 参数名 | 类型 | 必填 | 说明 | +|--------|-------|------|--------------------------------------------------------| +| cases | array | | 传入一个数组,数组中的每项都是一个JEditableTable的实例 | + +- `返回值:` Promise +- `示例:` + +```js +import { validateTables, VALIDATE_NO_PASSED } from '@/utils/JEditableTableUtil' +// 封装cases +let cases = [] +cases.push(this.$refs.editableTable1) +cases.push(this.$refs.editableTable2) +cases.push(this.$refs.editableTable3) +cases.push(this.$refs.editableTable4) +cases.push(this.$refs.editableTable5) +// 同时验证并获取多个实例的值 +validateTables(cases).then((all) => { + // all 是一个数组,每项都对应传入cases的下标,包含values和deleteIds + console.log('所有实例的值:', all) +}).catch((e = {}) => { + // 判断表单验证是否未通过 + if (e.error === VALIDATE_NO_PASSED) { + console.log('未通过验证的实例下标:', e.index) + } else { + console.error('发生异常:', e) + } +}) +``` + +## FAQ + +### 方法如何调用? + +在[示例一](#示例一)中,设定了一个 `ref="editableTable"` 的属性,那么在vue中就可以使用`this.$refs.editableTable`获取到该表格的实例,并调取其中的方法。 +假如我要调取`initialize`方法,就可以这么写:`this.$refs.editableTable.initialize()` + +### 如何获取表单的值? + +使用`getValue`方法进行获取,详见[示例三](#示例三) + +### 如何进行表单验证? + +在获取值的时候默认会进行表单验证操作,用户在输入的时候也会对正在输入的表单进行验证,只要配置好规则就可以了 + +### 如何添加或删除一行? + +该功能已封装到组件中,你只需要将 `actionButton` 设置为 `true` 即可,当然你也可以在代码中主动调用新增方法或修改,具体见上方的方法介绍。 + +### 为什么使用了ATab组件后,切换选项卡会导致白屏或滚动条位置会归零? + +在ATab组件中确实会导致滚动条位置归零,且不会触发`onscroll`方法,所以无法动态加载行,导致白屏的问题出现。 +解决方法是在ATab组件的`onChange`事件触发时执行实例提供的`resetScrollTop()`方法即可,但是需要注意的是:代码主动改变ATab的`activeKey`不会触发`onChange`事件,还需要你手动调用下。 + +- `示例` + +```html + +``` + +```js +/*--- 忽略部分代码片段 ---*/ +methods: { + + /** 切换tab选项卡的时候重置editableTable的滚动条状态 */ + handleChangeTab(key) { + this.$refs[`editableTable${key}`].resetScrollTop() + } + +} +/*--- 忽略部分代码片段 ---*/ +``` + +### slot(自定义插槽)如何使用? + +代码示例请看:[示例四(slot)](#示例四(slot)) + +---------------------------------------------------------------------------------------- + +## 示例一 + +```html + +``` + +## 示例二 + +```js + +import { FormTypes } from '@/utils/JEditableTableUtil' + +/*--- 忽略部分代码片断 ---*/ +columns: [ + { + title: '名称', + key: 'name', + type: FormTypes.input, + placeholder: '请输入${title}', + defaultValue: '称名', + // 表单验证规则 + validateRules: [ + { + required: true, // 必填 + message: '${title}不能为空' // 提示的文本 + }, + { + pattern: /^[a-z|A-Z][a-z|A-Z\d_-]{0,}$/, // 正则 + message: '${title}必须以字母开头,可包含数字、下划线、横杠' + } + ] + }, + { + title: '年龄', + key: 'age', + type: FormTypes.inputNumber, + placeholder: '请输入${title}', + defaultValue: 18, + validateRules: [{required: true, message: '${title}不能为空'}] + } +] +/*--- 忽略部分代码片断 ---*/ +``` + +## 示例三 + +```js +// 获取被逻辑删除的字段id +let deleteIds = this.$refs.editableTable.getDeleteIds(); +// 获取所有表单的值,并进行验证 +this.$refs.editableTable.getValues((error, values) => { + // 错误数 = 0 则代表验证通过 + if (error === 0) { + this.$message.success('验证通过') + // 将通过后的数组提交到后台或自行进行其他处理 + console.log(deleteIds, values) + } else { + this.$message.error('验证未通过') + } +}) +``` + +## 示例四(slot) + +```html + + +``` + +## 示例五 + +```js +// 该示例是自定义函数校验 +columns: [ + { + title: '字段名称', + key: 'dbFieldName', + type: FormTypes.input, + defaultValue: '', + validateRules: [ + { + // 自定义函数校验 handler + handler(type, value, row, column, callback, target) { + // type 触发校验的类型(input、change、blur) + // value 当前校验的值 + // callback(flag, message) 方法必须执行且只能执行一次 + // flag = 是否通过了校验,不填写或者填写 null 代表不进行任何操作 + // message = 提示的类型,默认使用配置的 message + // target 行编辑的实例对象 + + if (type === 'blur') { + + if (value === 'abc') { + callback(false, '${title}不能是abc') // false = 未通过,可以跟自定义提示 + return + } + + let { values } = target.getValuesSync({ validate: false }) + let count = 0 + for (let val of values) { + if (val['dbFieldName'] === value) { + if (++count >= 2) { + callback(false, '${title}不能重复') + return + } + } + } + callback(true) // true = 通过验证 + } else { + callback() // 不填写或者填写 null 代表不进行任何操作 + } + }, + message: '${title}默认提示' + } + ] + }, +] +``` \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/index.js b/jshERP-web/src/components/jeecg/index.js new file mode 100644 index 000000000..0dbce8627 --- /dev/null +++ b/jshERP-web/src/components/jeecg/index.js @@ -0,0 +1,9 @@ +import JModal from './JModal' +import JFormContainer from './JFormContainer.vue' + +export default { + install(Vue) { + Vue.component('JFormContainer', JFormContainer) + Vue.component(JModal.name, JModal) + } +} \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/minipop/JFilePop.vue b/jshERP-web/src/components/jeecg/minipop/JFilePop.vue new file mode 100644 index 000000000..ce7c72a63 --- /dev/null +++ b/jshERP-web/src/components/jeecg/minipop/JFilePop.vue @@ -0,0 +1,113 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/minipop/JInputPop.vue b/jshERP-web/src/components/jeecg/minipop/JInputPop.vue new file mode 100644 index 000000000..2021fd38b --- /dev/null +++ b/jshERP-web/src/components/jeecg/minipop/JInputPop.vue @@ -0,0 +1,98 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecg/modal/JCronModal.vue b/jshERP-web/src/components/jeecg/modal/JCronModal.vue new file mode 100644 index 000000000..c33618998 --- /dev/null +++ b/jshERP-web/src/components/jeecg/modal/JCronModal.vue @@ -0,0 +1,928 @@ + + + + + diff --git a/jshERP-web/src/components/jeecgbiz/JSelectBizComponent/JSelectBizComponentModal.vue b/jshERP-web/src/components/jeecgbiz/JSelectBizComponent/JSelectBizComponentModal.vue new file mode 100644 index 000000000..ed5cf7549 --- /dev/null +++ b/jshERP-web/src/components/jeecgbiz/JSelectBizComponent/JSelectBizComponentModal.vue @@ -0,0 +1,334 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecgbiz/JSelectBizComponent/README.md b/jshERP-web/src/components/jeecgbiz/JSelectBizComponent/README.md new file mode 100644 index 000000000..db53e2250 --- /dev/null +++ b/jshERP-web/src/components/jeecgbiz/JSelectBizComponent/README.md @@ -0,0 +1,36 @@ +# JSelectBizComponent + +Jeecg 选择组件的公共可复用组件 + +## 引用方式 + +```js +import JSelectBizComponent from '@/src/components/jeecgbiz/JSelectBizComponent' + +export default { + components: { JSelectBizComponent } +} +``` + +## 参数 + +### 配置参数 + +| 参数名 | 类型 | 必填 | 默认值 | 备注 | +|-----------------------|---------|------|--------------|--------------------------------------------------------------------------------------| +| rowKey | String | | "id" | 唯一标识的字段名 | +| value(v-model) | String | | "" | 默认选择的数据,多个用半角逗号分割 | +| name | String | | "" | 显示名字,例如选择用户就填写"用户" | +| listUrl | String | 是 | | 数据请求地址,必须是封装了分页的地址 | +| valueUrl | String | | "" | 获取显示文本的地址,例如存的是 username,可以通过该地址获取到 realname | +| displayKey | String | | null | 显示在标签上的字段 key ,不传则直接显示数据 | +| returnKeys | Array | | ['id', 'id'] | v-model 绑定的 keys,是个数组,默认使用第二项,当配置了 `returnId=true` 就返回第一项 | +| returnId | Boolean | | false | 返回ID,设为true后将返回配置的 `returnKeys` 中的第一项 | +| selectButtonText | String | | "选择" | 选择按钮的文字 | +| queryParamText | String | | null | 查询条件显示文字,不传则使用 `name` | +| columns | Array | 是 | | 列配置项,与antd的table的配置完全一致。列的第一项会被配置成右侧已选择的列表上 | +| columns[0].widthRight | String | | null | 仅列的第一项可以应用此配置,表示右侧已选择列表的宽度,建议 `70%`,不传则应用`width` | +| placeholder | String | | "请选择" | 占位符 | +| disabled | Boolean | | false | 是否禁用 | +| multiple | Boolean | | false | 是否可多选 | +| buttons | Boolean | | true | 是否显示"选择"按钮,如果不显示,可以直接点击文本框打开选择界面 | diff --git a/jshERP-web/src/components/jeecgbiz/JSelectBizComponent/index.vue b/jshERP-web/src/components/jeecgbiz/JSelectBizComponent/index.vue new file mode 100644 index 000000000..fbc77d866 --- /dev/null +++ b/jshERP-web/src/components/jeecgbiz/JSelectBizComponent/index.vue @@ -0,0 +1,165 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecgbiz/JSelectDepart.vue b/jshERP-web/src/components/jeecgbiz/JSelectDepart.vue new file mode 100644 index 000000000..99ec2cb88 --- /dev/null +++ b/jshERP-web/src/components/jeecgbiz/JSelectDepart.vue @@ -0,0 +1,122 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecgbiz/JSelectMaterial.vue b/jshERP-web/src/components/jeecgbiz/JSelectMaterial.vue new file mode 100644 index 000000000..ddb9a3c46 --- /dev/null +++ b/jshERP-web/src/components/jeecgbiz/JSelectMaterial.vue @@ -0,0 +1,87 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecgbiz/JSelectMultiUser.vue b/jshERP-web/src/components/jeecgbiz/JSelectMultiUser.vue new file mode 100644 index 000000000..3f9a87957 --- /dev/null +++ b/jshERP-web/src/components/jeecgbiz/JSelectMultiUser.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecgbiz/JSelectPosition.vue b/jshERP-web/src/components/jeecgbiz/JSelectPosition.vue new file mode 100644 index 000000000..f863f8e37 --- /dev/null +++ b/jshERP-web/src/components/jeecgbiz/JSelectPosition.vue @@ -0,0 +1,37 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecgbiz/JSelectRole.vue b/jshERP-web/src/components/jeecgbiz/JSelectRole.vue new file mode 100644 index 000000000..6833a38c7 --- /dev/null +++ b/jshERP-web/src/components/jeecgbiz/JSelectRole.vue @@ -0,0 +1,38 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecgbiz/JSelectSerialMaterial.vue b/jshERP-web/src/components/jeecgbiz/JSelectSerialMaterial.vue new file mode 100644 index 000000000..396124f15 --- /dev/null +++ b/jshERP-web/src/components/jeecgbiz/JSelectSerialMaterial.vue @@ -0,0 +1,87 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecgbiz/JSelectUserByDep.vue b/jshERP-web/src/components/jeecgbiz/JSelectUserByDep.vue new file mode 100644 index 000000000..eaa9b98c2 --- /dev/null +++ b/jshERP-web/src/components/jeecgbiz/JSelectUserByDep.vue @@ -0,0 +1,89 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecgbiz/README.md b/jshERP-web/src/components/jeecgbiz/README.md new file mode 100644 index 000000000..be30730de --- /dev/null +++ b/jshERP-web/src/components/jeecgbiz/README.md @@ -0,0 +1,137 @@ +# JSelectDepart 部门选择组件 +选择部门组件,存储部门ID,显示部门名称 + +## 参数配置 +| 参数 | 类型 | 必填 |说明| +|--------------|---------|----|---------| +| modalWidth |Number | | 弹框宽度 默认500 | +| multi |Boolean | | 是否多选 默认false | +| rootOpened |Boolean | | 是否展开根节点 默认true | +| disabled |Boolean | | 是否禁用 默认false| + +使用示例 +---- +```vue + + + +``` +# JSelectMultiUser 用户多选组件 + +使用示例 +---- +```vue + + + +``` + +# JSelectUserByDep 根据部门选择用户 + +## 参数配置 +| 参数 | 类型 | 必填 |说明| +|--------------|---------|----|---------| +| modalWidth |Number | | 弹框宽度 默认1250 | +| disabled |Boolean | | 是否禁用 | + +使用示例 +---- +```vue + + + +``` + diff --git a/jshERP-web/src/components/jeecgbiz/modal/JSelectDepartModal.vue b/jshERP-web/src/components/jeecgbiz/modal/JSelectDepartModal.vue new file mode 100644 index 000000000..495c57288 --- /dev/null +++ b/jshERP-web/src/components/jeecgbiz/modal/JSelectDepartModal.vue @@ -0,0 +1,241 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecgbiz/modal/JSelectMaterialModal.vue b/jshERP-web/src/components/jeecgbiz/modal/JSelectMaterialModal.vue new file mode 100644 index 000000000..befeb7eaf --- /dev/null +++ b/jshERP-web/src/components/jeecgbiz/modal/JSelectMaterialModal.vue @@ -0,0 +1,296 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecgbiz/modal/JSelectSerialMaterialModal.vue b/jshERP-web/src/components/jeecgbiz/modal/JSelectSerialMaterialModal.vue new file mode 100644 index 000000000..d04c306e5 --- /dev/null +++ b/jshERP-web/src/components/jeecgbiz/modal/JSelectSerialMaterialModal.vue @@ -0,0 +1,244 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecgbiz/modal/JSelectUserByDepModal.vue b/jshERP-web/src/components/jeecgbiz/modal/JSelectUserByDepModal.vue new file mode 100644 index 000000000..0ff78f9ba --- /dev/null +++ b/jshERP-web/src/components/jeecgbiz/modal/JSelectUserByDepModal.vue @@ -0,0 +1,329 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/jeecgbiz/modal/SelectUserListModal.vue b/jshERP-web/src/components/jeecgbiz/modal/SelectUserListModal.vue new file mode 100644 index 000000000..1da014818 --- /dev/null +++ b/jshERP-web/src/components/jeecgbiz/modal/SelectUserListModal.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/jshERP-web/src/components/layouts/BasicLayout.vue b/jshERP-web/src/components/layouts/BasicLayout.vue new file mode 100644 index 000000000..65b40cd63 --- /dev/null +++ b/jshERP-web/src/components/layouts/BasicLayout.vue @@ -0,0 +1,60 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/layouts/BlankLayout.vue b/jshERP-web/src/components/layouts/BlankLayout.vue new file mode 100644 index 000000000..90c039985 --- /dev/null +++ b/jshERP-web/src/components/layouts/BlankLayout.vue @@ -0,0 +1,16 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/layouts/IframeFReportView.vue b/jshERP-web/src/components/layouts/IframeFReportView.vue new file mode 100644 index 000000000..c51e5b1ec --- /dev/null +++ b/jshERP-web/src/components/layouts/IframeFReportView.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/layouts/IframePageView.vue b/jshERP-web/src/components/layouts/IframePageView.vue new file mode 100644 index 000000000..76dc63a10 --- /dev/null +++ b/jshERP-web/src/components/layouts/IframePageView.vue @@ -0,0 +1,51 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/layouts/PageView.vue b/jshERP-web/src/components/layouts/PageView.vue new file mode 100644 index 000000000..fc330a0a0 --- /dev/null +++ b/jshERP-web/src/components/layouts/PageView.vue @@ -0,0 +1,85 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/layouts/RouteView.vue b/jshERP-web/src/components/layouts/RouteView.vue new file mode 100644 index 000000000..8a75e3036 --- /dev/null +++ b/jshERP-web/src/components/layouts/RouteView.vue @@ -0,0 +1,19 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/components/layouts/TabLayout.vue b/jshERP-web/src/components/layouts/TabLayout.vue new file mode 100644 index 000000000..807a589a0 --- /dev/null +++ b/jshERP-web/src/components/layouts/TabLayout.vue @@ -0,0 +1,412 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/layouts/UserLayout.vue b/jshERP-web/src/components/layouts/UserLayout.vue new file mode 100644 index 000000000..71a3f128d --- /dev/null +++ b/jshERP-web/src/components/layouts/UserLayout.vue @@ -0,0 +1,124 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/layouts/index.js b/jshERP-web/src/components/layouts/index.js new file mode 100644 index 000000000..7cf0f77eb --- /dev/null +++ b/jshERP-web/src/components/layouts/index.js @@ -0,0 +1,8 @@ +import UserLayout from '@/components/layouts/UserLayout' +import BlankLayout from '@/components/layouts/BlankLayout' +import BasicLayout from '@/components/layouts/BasicLayout' +import RouteView from '@/components/layouts/RouteView' +import PageView from '@/components/layouts/PageView' +import TabLayout from '@/components/layouts/TabLayout' + +export { UserLayout, BasicLayout, BlankLayout, RouteView, PageView, TabLayout } \ No newline at end of file diff --git a/jshERP-web/src/components/menu/Contextmenu.vue b/jshERP-web/src/components/menu/Contextmenu.vue new file mode 100644 index 000000000..f88f7b457 --- /dev/null +++ b/jshERP-web/src/components/menu/Contextmenu.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/jshERP-web/src/components/menu/SideMenu.vue b/jshERP-web/src/components/menu/SideMenu.vue new file mode 100644 index 000000000..605efa3ef --- /dev/null +++ b/jshERP-web/src/components/menu/SideMenu.vue @@ -0,0 +1,177 @@ + + + + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/menu/index.js b/jshERP-web/src/components/menu/index.js new file mode 100644 index 000000000..facafb823 --- /dev/null +++ b/jshERP-web/src/components/menu/index.js @@ -0,0 +1,188 @@ +import Menu from 'ant-design-vue/es/menu' +import Icon from 'ant-design-vue/es/icon' + +const { Item, SubMenu } = Menu + +export default { + name: 'SMenu', + props: { + menu: { + type: Array, + required: true + }, + theme: { + type: String, + required: false, + default: 'dark' + }, + mode: { + type: String, + required: false, + default: 'inline' + }, + collapsed: { + type: Boolean, + required: false, + default: false + } + }, + data () { + return { + openKeys: [], + selectedKeys: [], + cachedOpenKeys: [] + } + }, + computed: { + rootSubmenuKeys: vm => { + const keys = [] + vm.menu.forEach(item => keys.push(item.path)) + return keys + } + }, + mounted () { + this.updateMenu() + }, + watch: { + collapsed (val) { + if (val) { + this.cachedOpenKeys = this.openKeys.concat() + this.openKeys = [] + } else { + this.openKeys = this.cachedOpenKeys + } + }, + $route: function () { + this.updateMenu() + } + }, + methods: { + // select menu item + onOpenChange (openKeys) { + + // 在水平模式下时执行,并且不再执行后续 + if (this.mode === 'horizontal') { + this.openKeys = openKeys + return + } + // 非水平模式时 + const latestOpenKey = openKeys.find(key => !this.openKeys.includes(key)) + if (!this.rootSubmenuKeys.includes(latestOpenKey)) { + this.openKeys = openKeys + } else { + this.openKeys = latestOpenKey ? [latestOpenKey] : [] + } + }, + updateMenu () { + const routes = this.$route.matched.concat() + const { hidden } = this.$route.meta + if (routes.length >= 3 && hidden) { + routes.pop() + this.selectedKeys = [routes[routes.length - 1].path] + } else { + this.selectedKeys = [routes.pop().path] + } + const openKeys = [] + if (this.mode === 'inline') { + routes.forEach(item => { + openKeys.push(item.path) + }) + } + //update-begin-author:taoyan date:20190510 for:online表单菜单点击展开的一级目录不对 + if(!this.selectedKeys|| this.selectedKeys[0].indexOf(":")<0){ + this.collapsed ? (this.cachedOpenKeys = openKeys) : (this.openKeys = openKeys) + } + //update-end-author:taoyan date:20190510 for:online表单菜单点击展开的一级目录不对 + }, + + // render + renderItem (menu) { + if (!menu.hidden) { + return menu.children && !menu.alwaysShow ? this.renderSubMenu(menu) : this.renderMenuItem(menu) + } + return null + }, + renderMenuItem (menu) { + // const target = menu.meta.target || null + // const tag = target && 'a' || 'router-link' + let props = { to: { name: menu.name } } + if(menu.route && menu.route === '0'){ + props = { to: { path: menu.path } } + } + + const attrs = { href: menu.url, target: menu.text } + + if (menu.children) { + // 把有子菜单的 并且 父菜单是要隐藏子菜单的 + // 都给子菜单增加一个 hidden 属性 + // 用来给刷新页面时, selectedKeys 做控制用 + menu.children.forEach(item => { + item.meta = Object.assign(item.meta, { hidden: true }) + }) + } + + return ( + + + {this.renderIcon(menu.icon)} + {menu.text} + + + ) + }, + renderSubMenu (menu) { + const itemArr = [] + if (!menu.alwaysShow) { + menu.children.forEach(item => itemArr.push(this.renderItem(item))) + } + return ( + + + {this.renderIcon(menu.icon)} + {menu.text} + + {itemArr} + + ) + }, + renderIcon (icon) { + if (icon === 'none' || icon === undefined) { + return null + } + const props = {} + typeof (icon) === 'object' ? props.component = icon : props.type = icon + return ( + + ) + } + }, + + render () { + const { mode, theme, menu } = this + const props = { + mode: mode, + theme: theme, + openKeys: this.openKeys + } + const on = { + select: obj => { + this.selectedKeys = obj.selectedKeys + this.$emit('select', obj) + }, + openChange: this.onOpenChange + } + + const menuTree = menu.map(item => { + if (item.hidden) { + return null + } + return this.renderItem(item) + }) + // {...{ props, on: on }} + return ( +

    + {menuTree} + + ) + } +} diff --git a/jshERP-web/src/components/page/GlobalFooter.vue b/jshERP-web/src/components/page/GlobalFooter.vue new file mode 100644 index 000000000..f3a4e363b --- /dev/null +++ b/jshERP-web/src/components/page/GlobalFooter.vue @@ -0,0 +1,38 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/page/GlobalHeader.vue b/jshERP-web/src/components/page/GlobalHeader.vue new file mode 100644 index 000000000..a4a0e09aa --- /dev/null +++ b/jshERP-web/src/components/page/GlobalHeader.vue @@ -0,0 +1,219 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/page/GlobalLayout.vue b/jshERP-web/src/components/page/GlobalLayout.vue new file mode 100644 index 000000000..1ae99de50 --- /dev/null +++ b/jshERP-web/src/components/page/GlobalLayout.vue @@ -0,0 +1,682 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/page/PageHeader.vue b/jshERP-web/src/components/page/PageHeader.vue new file mode 100644 index 000000000..f7e86b573 --- /dev/null +++ b/jshERP-web/src/components/page/PageHeader.vue @@ -0,0 +1,238 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/page/PageLayout.vue b/jshERP-web/src/components/page/PageLayout.vue new file mode 100644 index 000000000..191fd8a42 --- /dev/null +++ b/jshERP-web/src/components/page/PageLayout.vue @@ -0,0 +1,127 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/page/SHeaderNotice.vue b/jshERP-web/src/components/page/SHeaderNotice.vue new file mode 100644 index 000000000..5e874e8c2 --- /dev/null +++ b/jshERP-web/src/components/page/SHeaderNotice.vue @@ -0,0 +1,58 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/setting/SettingDrawer.vue b/jshERP-web/src/components/setting/SettingDrawer.vue new file mode 100644 index 000000000..4c9bbde38 --- /dev/null +++ b/jshERP-web/src/components/setting/SettingDrawer.vue @@ -0,0 +1,330 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/setting/SettingItem.vue b/jshERP-web/src/components/setting/SettingItem.vue new file mode 100644 index 000000000..de0cbe0c5 --- /dev/null +++ b/jshERP-web/src/components/setting/SettingItem.vue @@ -0,0 +1,38 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/table/README.md b/jshERP-web/src/components/table/README.md new file mode 100644 index 000000000..ad5f64137 --- /dev/null +++ b/jshERP-web/src/components/table/README.md @@ -0,0 +1,292 @@ +Table 重封装组件说明 +==== + + +封装说明 +---- + +> 基础的使用方式与 API 与 [官方版(Table)](https://vuecomponent.github.io/ant-design-vue/components/table-cn/) 本一致,在其基础上,封装了加载数据的方法。 +> +> 你无需在你是用表格的页面进行分页逻辑处理,仅需向 Table 组件传递绑定 `:data="Promise"` 对象即可 + + + +例子1 +---- +(基础使用) + +```vue + + + + + +``` + + + +例子2 +---- + +(简单的表格,最后一列是各种操作) + +```vue + + + +``` + + + +内置方法 +---- + +通过 `this.$refs.table` 调用 + +`this.$refs.table.refresh()` 刷新列表 (用户新增/修改数据后,重载列表数据) + +> 注意:要调用 `refresh()` 需要给表格组件设定 `ref` 值 + + + +注意事项 +---- + +> 你可能需要为了与后端提供的接口返回结果一致而去修改以下代码: +(需要注意的是,这里的修改是全局性的,意味着整个项目所有使用该 table 组件都需要遵守这个返回结果定义的字段。) + +修改 `@/components/table/index.js` 第 106 行起 + + + +```javascript +result.then(r => { + this.localPagination = Object.assign({}, this.localPagination, { + current: r.pageNo, // 返回结果中的当前分页数 + total: r.totalCount, // 返回结果中的总记录数 + showSizeChanger: this.showSizeChanger, + pageSize: (pagination && pagination.pageSize) || + this.localPagination.pageSize + }); + + !r.totalCount && ['auto', false].includes(this.showPagination) && (this.localPagination = false) + this.localDataSource = r.data; // 返回结果中的数组数据 + this.localLoading = false +}); +``` +返回 JSON 例子: +```json +{ + "message": "", + "result": { + "data": [{ + id: 1, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png', + title: 'Alipay', + description: '那是一种内在的东西, 他们到达不了,也无法触及的', + status: 1, + updatedAt: '2018-07-26 00:00:00' + }, + { + id: 2, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png', + title: 'Angular', + description: '希望是一个好东西,也许是最好的,好东西是不会消亡的', + status: 1, + updatedAt: '2018-07-26 00:00:00' + }, + { + id: 3, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png', + title: 'Ant Design', + description: '城镇中有那么多的酒馆,她却偏偏走进了我的酒馆', + status: 1, + updatedAt: '2018-07-26 00:00:00' + }, + { + id: 4, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png', + title: 'Ant Design Pro', + description: '那时候我只会想自己想要什么,从不想自己拥有什么', + status: 1, + updatedAt: '2018-07-26 00:00:00' + }, + { + id: 5, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png', + title: 'Bootstrap', + description: '凛冬将至', + status: 1, + updatedAt: '2018-07-26 00:00:00' + }, + { + id: 6, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/ComBAopevLwENQdKWiIn.png', + title: 'Vue', + description: '生命就像一盒巧克力,结果往往出人意料', + status: 1, + updatedAt: '2018-07-26 00:00:00' + } + ], + "pageSize": 10, + "pageNo": 0, + "totalPage": 6, + "totalCount": 57 + }, + "status": 200, + "timestamp": 1534955098193 +} +``` + + + +更新时间 +---- + +该文档最后更新于: 2018-10-31 PM 08:15 \ No newline at end of file diff --git a/jshERP-web/src/components/table/StandardTable.vue b/jshERP-web/src/components/table/StandardTable.vue new file mode 100644 index 000000000..bc6044ac3 --- /dev/null +++ b/jshERP-web/src/components/table/StandardTable.vue @@ -0,0 +1,252 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/table/index.js b/jshERP-web/src/components/table/index.js new file mode 100644 index 000000000..8d19449e9 --- /dev/null +++ b/jshERP-web/src/components/table/index.js @@ -0,0 +1,268 @@ +import T from "ant-design-vue/es/table/Table"; +import get from "lodash.get" +export default { + data() { + return { + needTotalList: [], + + selectedRows: [], + selectedRowKeys: [], + + localLoading: false, + localDataSource: [], + localPagination: Object.assign({}, T.props.pagination) + }; + }, + props: Object.assign({}, T.props, { + rowKey: { + type: [String, Function], + default: 'id' + }, + data: { + type: Function, + required: true + }, + pageNum: { + type: Number, + default: 1 + }, + pageSize: { + type: Number, + default: 10 + }, + showSizeChanger: { + type: Boolean, + default: true + }, + showAlertInfo: { + type: Boolean, + default: false + }, + showPagination: { + default: 'auto' + } + }), + watch: { + 'localPagination.current'(val) { + this.$router.push({ + name: this.$route.name, + params: Object.assign({}, this.$route.params, { + pageNo: val + }), + }); + }, + pageNum(val) { + Object.assign(this.localPagination, { + current: val + }); + }, + pageSize(val) { + console.log('pageSize:', val) + Object.assign(this.localPagination, { + pageSize: val + }); + }, + showSizeChanger(val) { + console.log('showSizeChanger', val) + Object.assign(this.localPagination, { + showSizeChanger: val + }); + } + }, + created() { + this.localPagination = ['auto', true].includes(this.showPagination) && Object.assign({}, this.localPagination, { + current: this.pageNum, + pageSize: this.pageSize, + showSizeChanger: this.showSizeChanger + }); + this.needTotalList = this.initTotalList(this.columns) + this.loadData(); + }, + methods: { + refresh() { + this.loadData(); + }, + loadData(pagination, filters, sorter) { + + this.localLoading = true + var result = this.data( + Object.assign({ + pageNo: (pagination && pagination.current) || + this.localPagination.current, + pageSize: (pagination && pagination.pageSize) || + this.localPagination.pageSize + }, + (sorter && sorter.field && { + sortField: sorter.field + }) || {}, + (sorter && sorter.order && { + sortOrder: sorter.order + }) || {}, { + ...filters + } + ) + ); + + if (result instanceof Promise) { + result.then(r => { + this.localPagination = Object.assign({}, this.localPagination, { + current: r.pageNo, // 返回结果中的当前分页数 + total: r.totalCount, // 返回结果中的总记录数 + showSizeChanger: this.showSizeChanger, + pageSize: (pagination && pagination.pageSize) || + this.localPagination.pageSize + }); + + !r.totalCount && ['auto', false].includes(this.showPagination) && (this.localPagination = false) + this.localDataSource = r.data; // 返回结果中的数组数据 + this.localLoading = false + }); + } + }, + initTotalList(columns) { + const totalList = [] + columns && columns instanceof Array && columns.forEach(column => { + if (column.needTotal) { + totalList.push({ ...column, + total: 0 + }) + } + }) + return totalList + }, + updateSelect(selectedRowKeys, selectedRows) { + this.selectedRowKeys = selectedRowKeys + this.selectedRows = selectedRows + let list = this.needTotalList + this.needTotalList = list.map(item => { + return { + ...item, + total: selectedRows.reduce((sum, val) => { + let total = sum + get(val, item.dataIndex) + return isNaN(total) ? 0 : total + }, 0) + } + }) + // this.$emit('change', selectedRowKeys, selectedRows) + }, + updateEdit() { + this.selectedRows = [] + }, + onClearSelected() { + // 【TESTA-262】页面清空后还能才做所选行,增加 this.$emit('clearAll') + this.selectedRowKeys = [] + this.selectedRows = [] + this.updateSelect([], []) + this.$emit('clearAll') + }, + renderMsg(h) { + const _vm = this + let d = [] + // 构建 已选择 + d.push( + h('span', { + style: { + marginRight: '12px' + } + }, ['已选择 ', h('a', { + style: { + fontWeight: 600 + } + }, this.selectedRows.length)]) + ); + + // 构建 列统计 + this.needTotalList.map(item => { + d.push(h('span', { + style: { + marginRight: '12px' + } + }, + [ + `${ item.title }总计 `, + h('a', { + style: { + fontWeight: 600 + } + }, `${ !item.customRender ? item.total : item.customRender(item.total) }`) + ])) + }); + + // 构建 清空选择 + d.push(h('a', { + style: { + marginLeft: '24px' + }, + on: { + click: _vm.onClearSelected + } + }, '清空')) + + return d + }, + renderAlert(h) { + return h('span', { + slot: 'message' + }, this.renderMsg(h)) + }, + }, + + render(h) { + const _vm = this + + let props = {}, + localKeys = Object.keys(this.$data); + + Object.keys(T.props).forEach(k => { + let localKey = `local${k.substring(0,1).toUpperCase()}${k.substring(1)}`; + if (localKeys.includes(localKey)) { + return props[k] = _vm[localKey]; + } + return props[k] = _vm[k]; + }) + + + // 显示信息提示 + if (this.showAlertInfo) { + + props.rowSelection = { + selectedRowKeys: this.selectedRowKeys, + onChange: (selectedRowKeys, selectedRows) => { + _vm.updateSelect(selectedRowKeys, selectedRows) + _vm.$emit('onSelect', { selectedRowKeys: selectedRowKeys, selectedRows: selectedRows }) + } + }; + + return h('div', {}, [ + h("a-alert", { + style: { + marginBottom: '16px' + }, + props: { + type: 'info', + showIcon: true + } + }, [_vm.renderAlert(h)]), + h("a-table", { + tag: "component", + attrs: props, + on: { + change: _vm.loadData + }, + scopedSlots: this.$scopedSlots + }, this.$slots.default) + ]); + + } + + return h("a-table", { + tag: "component", + attrs: props, + on: { + change: _vm.loadData + }, + scopedSlots: this.$scopedSlots + }, this.$slots.default); + + } +}; \ No newline at end of file diff --git a/jshERP-web/src/components/tools/Breadcrumb.vue b/jshERP-web/src/components/tools/Breadcrumb.vue new file mode 100644 index 000000000..3bd067fa8 --- /dev/null +++ b/jshERP-web/src/components/tools/Breadcrumb.vue @@ -0,0 +1,48 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/tools/DepartSelect.vue b/jshERP-web/src/components/tools/DepartSelect.vue new file mode 100644 index 000000000..7a7e15ab9 --- /dev/null +++ b/jshERP-web/src/components/tools/DepartSelect.vue @@ -0,0 +1,162 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/tools/DetailList.vue b/jshERP-web/src/components/tools/DetailList.vue new file mode 100644 index 000000000..bd74971c3 --- /dev/null +++ b/jshERP-web/src/components/tools/DetailList.vue @@ -0,0 +1,147 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/tools/DynamicNotice.vue b/jshERP-web/src/components/tools/DynamicNotice.vue new file mode 100644 index 000000000..02cb7fc6e --- /dev/null +++ b/jshERP-web/src/components/tools/DynamicNotice.vue @@ -0,0 +1,36 @@ + + \ No newline at end of file diff --git a/jshERP-web/src/components/tools/FooterToolBar.vue b/jshERP-web/src/components/tools/FooterToolBar.vue new file mode 100644 index 000000000..63b3c1bd3 --- /dev/null +++ b/jshERP-web/src/components/tools/FooterToolBar.vue @@ -0,0 +1,32 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/tools/HeadInfo.vue b/jshERP-web/src/components/tools/HeadInfo.vue new file mode 100644 index 000000000..45ded3842 --- /dev/null +++ b/jshERP-web/src/components/tools/HeadInfo.vue @@ -0,0 +1,66 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/tools/HeaderNotice.vue b/jshERP-web/src/components/tools/HeaderNotice.vue new file mode 100644 index 000000000..8a7ab1ffa --- /dev/null +++ b/jshERP-web/src/components/tools/HeaderNotice.vue @@ -0,0 +1,319 @@ + + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/tools/Logo.vue b/jshERP-web/src/components/tools/Logo.vue new file mode 100644 index 000000000..8156d9208 --- /dev/null +++ b/jshERP-web/src/components/tools/Logo.vue @@ -0,0 +1,57 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/tools/ShowAnnouncement.vue b/jshERP-web/src/components/tools/ShowAnnouncement.vue new file mode 100644 index 000000000..b2c6d8892 --- /dev/null +++ b/jshERP-web/src/components/tools/ShowAnnouncement.vue @@ -0,0 +1,139 @@ + + + + + + diff --git a/jshERP-web/src/components/tools/TwoStepCaptcha.vue b/jshERP-web/src/components/tools/TwoStepCaptcha.vue new file mode 100644 index 000000000..8b4c94de3 --- /dev/null +++ b/jshERP-web/src/components/tools/TwoStepCaptcha.vue @@ -0,0 +1,89 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/tools/UserMenu.vue b/jshERP-web/src/components/tools/UserMenu.vue new file mode 100644 index 000000000..99a7e9b36 --- /dev/null +++ b/jshERP-web/src/components/tools/UserMenu.vue @@ -0,0 +1,242 @@ + + + + + + + \ No newline at end of file diff --git a/jshERP-web/src/components/tools/UserPassword.vue b/jshERP-web/src/components/tools/UserPassword.vue new file mode 100644 index 000000000..b26daf828 --- /dev/null +++ b/jshERP-web/src/components/tools/UserPassword.vue @@ -0,0 +1,157 @@ + + + + + + diff --git a/jshERP-web/src/components/tools/setting.js b/jshERP-web/src/components/tools/setting.js new file mode 100644 index 000000000..2e398538d --- /dev/null +++ b/jshERP-web/src/components/tools/setting.js @@ -0,0 +1,95 @@ +import { message } from 'ant-design-vue/es'; +// import defaultSettings from '../defaultSettings'; + +let lessNodesAppended; + +const colorList = [ + { + key: '薄暮', color: '#F5222D', + }, + { + key: '火山', color: '#FA541C', + }, + { + key: '日暮', color: '#FAAD14', + }, + { + key: '明青', color: '#13C2C2', + }, + { + key: '极光绿', color: '#52C41A', + }, + { + key: '拂晓蓝(默认)', color: '#1890FF', + }, + { + key: '极客蓝', color: '#2F54EB', + }, + { + key: '酱紫', color: '#722ED1', + }, +]; + +const updateTheme = primaryColor => { + // Don't compile less in production! + /* if (process.env.NODE_ENV === 'production') { + return; + } */ + // Determine if the component is remounted + if (!primaryColor) { + return; + } + const hideMessage = message.loading('正在编译主题!', 0); + console.info(`正在编译主题!`) + function buildIt() { + // 正确的判定less是否已经加载less.modifyVars可用 + if (!window.less || !window.less.modifyVars) { + return; + } + // less.modifyVars可用 + window.less.modifyVars({ + '@primary-color': primaryColor, + }) + .then(() => { + hideMessage(); + }) + .catch(() => { + message.error('Failed to update theme'); + hideMessage(); + }); + } + if (!lessNodesAppended) { + // insert less.js and color.less + const lessStyleNode = document.createElement('link'); + const lessConfigNode = document.createElement('script'); + const lessScriptNode = document.createElement('script'); + lessStyleNode.setAttribute('rel', 'stylesheet/less'); + lessStyleNode.setAttribute('href', '/color.less'); + lessConfigNode.innerHTML = ` + window.less = { + async: true, + env: 'production', + javascriptEnabled: true + }; + `; + lessScriptNode.src = 'https://gw.alipayobjects.com/os/lib/less.js/3.8.1/less.min.js'; + lessScriptNode.async = true; + lessScriptNode.onload = () => { + buildIt(); + lessScriptNode.onload = null; + }; + document.body.appendChild(lessStyleNode); + document.body.appendChild(lessConfigNode); + document.body.appendChild(lessScriptNode); + lessNodesAppended = true; + } else { + buildIt(); + } +}; + +const updateColorWeak = colorWeak => { + // document.body.className = colorWeak ? 'colorWeak' : ''; + colorWeak ? document.body.classList.add('colorWeak') : document.body.classList.remove('colorWeak') +}; + +export { updateTheme, colorList, updateColorWeak } \ No newline at end of file diff --git a/jshERP-web/src/config/router.config.js b/jshERP-web/src/config/router.config.js new file mode 100644 index 000000000..f1a29d916 --- /dev/null +++ b/jshERP-web/src/config/router.config.js @@ -0,0 +1,82 @@ +import { UserLayout, TabLayout, RouteView, BlankLayout, PageView } from '@/components/layouts' + +/** + * 走菜单,走权限控制 + * @type {[null,null]} + */ +export const asyncRouterMap = [ + + { + path: '/', + name: 'dashboard', + component: TabLayout, + meta: { title: '首页' }, + redirect: '/dashboard/analysis', + children: [ + + ] + }, + { + path: '*', redirect: '/404', hidden: true + } +] + +/** + * 基础路由 + * @type { *[] } + */ +export const constantRouterMap = [ + { + path: '/user', + component: UserLayout, + redirect: '/user/login', + hidden: true, + children: [ + { + path: 'login', + name: 'login', + component: () => import(/* webpackChunkName: "user" */ '@/views/user/Login') + }, + { + path: 'register', + name: 'register', + component: () => import(/* webpackChunkName: "user" */ '@/views/user/Register') + }, + { + path: 'register-result', + name: 'registerResult', + component: () => import(/* webpackChunkName: "user" */ '@/views/user/RegisterResult') + }, + ] + }, + { + path: '/dashboard', + component: TabLayout, + redirect: '/dashboard/analysis', + children: [ + { + path: 'analysis', + name: 'analysis', + meta: { title: '首页' }, + component: () => import(/* webpackChunkName: "dashboard" */ '@/views/dashboard/Analysis') + } + ] + }, + { + path: '/test', + component: BlankLayout, + redirect: '/test/home', + children: [ + { + path: 'home', + name: 'TestHome', + component: () => import('@/views/Home') + } + ] + }, + { + path: '/404', + component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404') + }, + +] diff --git a/jshERP-web/src/defaultSettings.js b/jshERP-web/src/defaultSettings.js new file mode 100644 index 000000000..832264fe1 --- /dev/null +++ b/jshERP-web/src/defaultSettings.js @@ -0,0 +1,32 @@ +/** + * 项目默认配置项 + * primaryColor - 默认主题色 + * navTheme - sidebar theme ['dark', 'light'] 两种主题 + * colorWeak - 色盲模式 + * layout - 整体布局方式 ['sidemenu', 'topmenu'] 两种布局 + * fixedHeader - 固定 Header : boolean + * fixSiderbar - 固定左侧菜单栏 : boolean + * autoHideHeader - 向下滚动时,隐藏 Header : boolean + * contentWidth - 内容区布局: 流式 | 固定 + * + * storageOptions: {} - Vue-ls 插件配置项 (localStorage/sessionStorage) + * + */ + +export default { + primaryColor: '#1890FF', // primary color of ant design + navTheme: 'light', // theme for nav menu + layout: 'sidemenu', // nav menu position: sidemenu or topmenu + contentWidth: 'Fixed', // layout of content: Fluid or Fixed, only works when layout is topmenu + fixedHeader: false, // sticky header + fixSiderbar: false, // sticky siderbar + autoHideHeader: false, // auto hide header + colorWeak: false, + multipage: true, //默认多页签模式 + // vue-ls options + storageOptions: { + namespace: 'pro__', // key prefix + name: 'ls', // name variable Vue.[ls] or this.[$ls], + storage: 'local', // storage name session, local, memory + } +} \ No newline at end of file diff --git a/jshERP-web/src/main.js b/jshERP-web/src/main.js new file mode 100644 index 000000000..ad360b12c --- /dev/null +++ b/jshERP-web/src/main.js @@ -0,0 +1,72 @@ +import Vue from 'vue' +import App from './App.vue' +import Storage from 'vue-ls' +import router from './router' +import store from './store/' + +import { VueAxios } from "@/utils/request" + +import Antd from 'ant-design-vue' +import Viser from 'viser-vue' +import 'ant-design-vue/dist/antd.less'; // or 'ant-design-vue/dist/antd.less' + +import '@/permission' // permission control +import '@/utils/filter' // base filter +import Print from 'vue-print-nb-jeecg' +/*import '@babel/polyfill'*/ +import preview from 'vue-photo-preview' +import 'vue-photo-preview/dist/skin.css' + +import { + ACCESS_TOKEN, + DEFAULT_COLOR, + DEFAULT_THEME, + DEFAULT_LAYOUT_MODE, + DEFAULT_COLOR_WEAK, + SIDEBAR_TYPE, + DEFAULT_FIXED_HEADER, + DEFAULT_FIXED_HEADER_HIDDEN, + DEFAULT_FIXED_SIDEMENU, + DEFAULT_CONTENT_WIDTH_TYPE, + DEFAULT_MULTI_PAGE +} from "@/store/mutation-types" +import config from '@/defaultSettings' + +import JDictSelectTag from './components/dict/index.js' +import hasPermission from '@/utils/hasPermission' +import vueBus from '@/utils/vueBus'; +import JeecgComponents from '@/components/jeecg/index' +import '@/assets/less/JAreaLinkage.less' +import VueAreaLinkage from 'vue-area-linkage' + +Vue.config.productionTip = false +Vue.use(Storage, config.storageOptions) +Vue.use(Antd) +Vue.use(VueAxios, router) +Vue.use(Viser) +Vue.use(hasPermission) +Vue.use(JDictSelectTag) +Vue.use(Print) +Vue.use(preview) +Vue.use(vueBus); +Vue.use(JeecgComponents); +Vue.use(VueAreaLinkage); + +new Vue({ + router, + store, + mounted () { + store.commit('SET_SIDEBAR_TYPE', Vue.ls.get(SIDEBAR_TYPE, true)) + store.commit('TOGGLE_THEME', Vue.ls.get(DEFAULT_THEME, config.navTheme)) + store.commit('TOGGLE_LAYOUT_MODE', Vue.ls.get(DEFAULT_LAYOUT_MODE, config.layout)) + store.commit('TOGGLE_FIXED_HEADER', Vue.ls.get(DEFAULT_FIXED_HEADER, config.fixedHeader)) + store.commit('TOGGLE_FIXED_SIDERBAR', Vue.ls.get(DEFAULT_FIXED_SIDEMENU, config.fixSiderbar)) + store.commit('TOGGLE_CONTENT_WIDTH', Vue.ls.get(DEFAULT_CONTENT_WIDTH_TYPE, config.contentWidth)) + store.commit('TOGGLE_FIXED_HEADER_HIDDEN', Vue.ls.get(DEFAULT_FIXED_HEADER_HIDDEN, config.autoHideHeader)) + store.commit('TOGGLE_WEAK', Vue.ls.get(DEFAULT_COLOR_WEAK, config.colorWeak)) + store.commit('TOGGLE_COLOR', Vue.ls.get(DEFAULT_COLOR, config.primaryColor)) + store.commit('SET_TOKEN', Vue.ls.get(ACCESS_TOKEN)) + store.commit('SET_MULTI_PAGE',Vue.ls.get(DEFAULT_MULTI_PAGE,config.multipage)) + }, + render: h => h(App) +}).$mount('#app') diff --git a/jshERP-web/src/mixins/DisabledAuthFilterMixin.js b/jshERP-web/src/mixins/DisabledAuthFilterMixin.js new file mode 100644 index 000000000..26aca7428 --- /dev/null +++ b/jshERP-web/src/mixins/DisabledAuthFilterMixin.js @@ -0,0 +1,19 @@ +/** + * + */ +import { disabledAuthFilter } from "@/utils/authFilter" + +export const DisabledAuthFilterMixin = { + props: ['formData'], + data(){ + return { + + } + }, + methods:{ + isDisabledAuth(code){ + return disabledAuthFilter(code,this.formData); + }, + } + +} \ No newline at end of file diff --git a/jshERP-web/src/mixins/JEditableTableMixin.js b/jshERP-web/src/mixins/JEditableTableMixin.js new file mode 100644 index 000000000..5199bf4a3 --- /dev/null +++ b/jshERP-web/src/mixins/JEditableTableMixin.js @@ -0,0 +1,163 @@ +import JEditableTable from '@/components/jeecg/JEditableTable' +import { VALIDATE_NO_PASSED, getRefPromise, validateFormAndTables } from '@/utils/JEditableTableUtil' +import { httpAction, getAction } from '@/api/manage' + +export const JEditableTableMixin = { + components: { + JEditableTable + }, + data() { + return { + title: '操作', + visible: false, + form: this.$form.createForm(this), + confirmLoading: false, + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 6 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 18 } + } + } + }, + methods: { + + /** 获取所有的editableTable实例 */ + getAllTable() { + if (!(this.refKeys instanceof Array)) { + throw this.throwNotArray('refKeys') + } + let values = this.refKeys.map(key => getRefPromise(this, key)) + return Promise.all(values) + }, + + /** 遍历所有的JEditableTable实例 */ + eachAllTable(callback) { + // 开始遍历 + this.getAllTable().then(tables => { + tables.forEach((item, index) => { + if (typeof callback === 'function') { + callback(item, index) + } + }) + }) + }, + + /** 当点击新增按钮时调用此方法 */ + add() { + if (typeof this.addBefore === 'function') this.addBefore() + // 默认新增空数据 + let rowNum = this.addDefaultRowNum + if (typeof rowNum !== 'number') { + rowNum = 1 + console.warn('由于你没有在 data 中定义 addDefaultRowNum 或 addDefaultRowNum 不是数字,所以默认添加一条空数据,如果不想默认添加空数据,请将定义 addDefaultRowNum 为 0') + } + this.eachAllTable((item) => { + item.add(rowNum) + }) + if (typeof this.addAfter === 'function') this.addAfter(this.model) + this.edit({}) + }, + /** 当点击了编辑(修改)按钮时调用此方法 */ + edit(record) { + if (typeof this.editBefore === 'function') this.editBefore(record) + this.visible = true + this.activeKey = this.refKeys[0] + this.form.resetFields() + this.model = Object.assign({}, record) + if (typeof this.editAfter === 'function') this.editAfter(this.model) + }, + /** 关闭弹窗,并将所有JEditableTable实例回归到初始状态 */ + close() { + this.visible = false + this.eachAllTable((item) => { + item.initialize() + }) + this.$emit('close') + }, + + /** 查询某个tab的数据 */ + requestSubTableData(url, params, tab, success) { + tab.loading = true + getAction(url, params).then(res => { + if(res && res.code === 200){ + tab.dataSource = res.data.rows + typeof success === 'function' ? success(res) : '' + } + }).finally(() => { + tab.loading = false + }) + }, + /** 发起请求,自动判断是执行新增还是修改操作 */ + request(formData) { + let url = this.url.add, method = 'post' + if (this.model.id) { + url = this.url.edit + method = 'put' + } + this.confirmLoading = true + httpAction(url, formData, method).then((res) => { + if(res.code === 200){ + this.$emit('ok') + } else { + this.$message.warning(res.data.message); + } + }).finally(() => { + this.confirmLoading = false + this.close() + }) + }, + + /* --- handle 事件 --- */ + + /** ATab 选项卡切换事件 */ + handleChangeTabs(key) { + // 自动重置scrollTop状态,防止出现白屏 + getRefPromise(this, key).then(editableTable => { + editableTable.resetScrollTop() + }) + }, + /** 关闭按钮点击事件 */ + handleCancel() { + this.close() + }, + /** 确定按钮点击事件 */ + handleOk() { + /** 触发表单验证 */ + this.getAllTable().then(tables => { + /** 一次性验证主表和所有的次表 */ + return validateFormAndTables(this.form, tables) + }).then(allValues => { + if (typeof this.classifyIntoFormData !== 'function') { + throw this.throwNotFunction('classifyIntoFormData') + } + let formData = this.classifyIntoFormData(allValues) + // 发起请求 + return this.request(formData) + }).catch(e => { + if (e.error === VALIDATE_NO_PASSED) { + // 如果有未通过表单验证的子表,就自动跳转到它所在的tab + this.activeKey = e.index == null ? this.activeKey : this.refKeys[e.index] + } else { + console.error(e) + } + }) + }, + + /* --- throw --- */ + + /** not a function */ + throwNotFunction(name) { + return `${name} 未定义或不是一个函数` + }, + + /** not a array */ + throwNotArray(name) { + return `${name} 未定义或不是一个数组` + } + + } +} \ No newline at end of file diff --git a/jshERP-web/src/mixins/JeecgListMixin.js b/jshERP-web/src/mixins/JeecgListMixin.js new file mode 100644 index 000000000..722791810 --- /dev/null +++ b/jshERP-web/src/mixins/JeecgListMixin.js @@ -0,0 +1,348 @@ +/** + * 新增修改完成调用 modalFormOk方法 编辑弹框组件ref定义为modalForm + * 高级查询按钮调用 superQuery方法 高级查询组件ref定义为superQueryModal + * data中url定义 list为查询列表 delete为删除单条记录 deleteBatch为批量删除 + */ +import { filterObj } from '@/utils/util'; +import { deleteAction, getAction, postAction, downFile, getFileAccessHttpUrl } from '@/api/manage' +import Vue from 'vue' +import { ACCESS_TOKEN } from "@/store/mutation-types" + +export const JeecgListMixin = { + data(){ + return { + //token header + tokenHeader: {'X-Access-Token': Vue.ls.get(ACCESS_TOKEN)}, + /* 查询条件-请不要在queryParam中声明非字符串值的属性 */ + queryParam: {}, + /* 数据源 */ + dataSource:[], + /* 分页参数 */ + ipagination:{ + current: 1, + pageSize: 10, + pageSizeOptions: ['10', '20', '30'], + showTotal: (total, range) => { + return range[0] + "-" + range[1] + " 共" + total + "条" + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + /* 排序参数 */ + isorter:{ + column: 'createTime', + order: 'desc', + }, + /* 筛选参数 */ + filters: {}, + /* table加载状态 */ + loading:false, + /* table选中keys*/ + selectedRowKeys: [], + /* table选中records*/ + selectionRows: [], + /* 查询折叠 */ + toggleSearchStatus:false, + /* 高级查询条件生效状态 */ + superQueryFlag:false, + /* 高级查询条件 */ + superQueryParams: '', + /** 高级查询拼接方式 */ + superQueryMatchType: 'and', + /** 是否加载时就执行 */ + disableMixinCreated: false + } + }, + created() { + if(!this.disableMixinCreated){ + console.log(' -- mixin created -- ') + this.loadData(); + //初始化字典配置 在自己页面定义 + this.initDictConfig(); + } + }, + methods:{ + loadData(arg) { + if(!this.url.list){ + this.$message.error("请设置url.list属性!") + return + } + //加载数据 若传入参数1则加载第一页的内容 + if (arg === 1) { + this.ipagination.current = 1; + } + var params = this.getQueryParams();//查询条件 + this.loading = true; + getAction(this.url.list, params).then((res) => { + if (res.code===200) { + this.dataSource = res.data.rows; + this.ipagination.total = res.data.total; + } + if(res.code===510){ + this.$message.warning(res.data) + } + this.loading = false; + }) + }, + initDictConfig(){ + console.log("--这是一个假的方法!") + }, + handleSuperQuery(params, matchType) { + //高级查询方法 + if(!params){ + this.superQueryParams='' + this.superQueryFlag = false + }else{ + this.superQueryFlag = true + this.superQueryParams=JSON.stringify(params) + this.superQueryMatchType = matchType + } + this.loadData(1) + }, + getQueryParams() { + //获取查询条件 + let sqp = {} + if(this.superQueryParams){ + sqp['superQueryParams']=encodeURI(this.superQueryParams) + sqp['superQueryMatchType'] = this.superQueryMatchType + } + let searchObj = {} + searchObj.search = JSON.stringify(this.queryParam); + var param = Object.assign(sqp, searchObj, this.isorter ,this.filters); + param.field = this.getQueryField(); + param.currentPage = this.ipagination.current; + param.pageSize = this.ipagination.pageSize; + return filterObj(param); + }, + getQueryField() { + //TODO 字段权限控制 + var str = "id,"; + this.columns.forEach(function (value) { + str += "," + value.dataIndex; + }); + return str; + }, + + onSelectChange(selectedRowKeys, selectionRows) { + this.selectedRowKeys = selectedRowKeys; + this.selectionRows = selectionRows; + }, + onClearSelected() { + this.selectedRowKeys = []; + this.selectionRows = []; + }, + searchQuery() { + this.loadData(1); + }, + superQuery() { + this.$refs.superQueryModal.show(); + }, + searchReset() { + this.queryParam = {} + this.loadData(1); + }, + batchSetStatus: function (status) { + if(!this.url.batchSetStatusUrl){ + this.$message.error("请设置url.batchSetStatusUrl属性!") + return + } + if (this.selectedRowKeys.length <= 0) { + this.$message.warning('请选择一条记录!'); + return; + } else { + var ids = ""; + for (var a = 0; a < this.selectedRowKeys.length; a++) { + ids += this.selectedRowKeys[a] + ","; + } + var that = this; + this.$confirm({ + title: "确认操作", + content: "是否操作选中数据?", + onOk: function () { + that.loading = true; + postAction(that.url.batchSetStatusUrl, {status: status, ids: ids}).then((res) => { + if(res.code === 200){ + that.loadData(); + that.onClearSelected(); + } else { + that.$message.warning(res.data.message); + } + }).finally(() => { + that.loading = false; + }); + } + }); + } + }, + batchDel: function () { + if(!this.url.deleteBatch){ + this.$message.error("请设置url.deleteBatch属性!") + return + } + if (this.selectedRowKeys.length <= 0) { + this.$message.warning('请选择一条记录!'); + return; + } else { + var ids = ""; + for (var a = 0; a < this.selectedRowKeys.length; a++) { + ids += this.selectedRowKeys[a] + ","; + } + var that = this; + this.$confirm({ + title: "确认删除", + content: "是否删除选中数据?", + onOk: function () { + that.loading = true; + deleteAction(that.url.deleteBatch, {ids: ids}).then((res) => { + if(res.code === 200){ + that.loadData(); + that.onClearSelected(); + } else { + that.$message.warning(res.data.message); + } + }).finally(() => { + that.loading = false; + }); + } + }); + } + }, + handleDelete: function (id) { + if(!this.url.delete){ + this.$message.error("请设置url.delete属性!") + return + } + var that = this; + deleteAction(that.url.delete, {id: id}).then((res) => { + if(res.code === 200){ + that.loadData(); + } else { + that.$message.warning(res.data.message); + } + }); + }, + handleEdit: function (record) { + this.$refs.modalForm.edit(record); + this.$refs.modalForm.title = "编辑"; + this.$refs.modalForm.disableSubmit = false; + }, + handleAdd: function () { + this.$refs.modalForm.add(); + this.$refs.modalForm.title = "新增"; + this.$refs.modalForm.disableSubmit = false; + }, + handleTableChange(pagination, filters, sorter) { + //分页、排序、筛选变化时触发 + //TODO 筛选 + if (Object.keys(sorter).length > 0) { + this.isorter.column = sorter.field; + this.isorter.order = "ascend" == sorter.order ? "asc" : "desc" + } + this.ipagination = pagination; + this.loadData(); + }, + handleToggleSearch(){ + this.toggleSearchStatus = !this.toggleSearchStatus; + }, + // 给popup查询使用(查询区域不支持回填多个字段,限制只返回一个字段) + getPopupField(fields){ + return fields.split(',')[0] + }, + modalFormOk() { + // 新增/修改 成功时,重载列表 + this.loadData(); + }, + handleDetail:function(record){ + this.$refs.modalForm.edit(record); + this.$refs.modalForm.title="详情"; + this.$refs.modalForm.disableSubmit = true; + }, + /* 导出 */ + handleExportXls2(){ + let paramsStr = encodeURI(JSON.stringify(this.getQueryParams())); + let url = `${window._CONFIG['domianURL']}/${this.url.exportXlsUrl}?paramsStr=${paramsStr}`; + window.location.href = url; + }, + handleExportXls(fileName){ + if(!fileName || typeof fileName != "string"){ + fileName = "导出文件" + } + let param = {...this.queryParam}; + if(this.selectedRowKeys && this.selectedRowKeys.length>0){ + param['selections'] = this.selectedRowKeys.join(",") + } + console.log("导出参数",param) + downFile(this.url.exportXlsUrl,param).then((data)=>{ + if (!data) { + this.$message.warning("文件下载失败") + return + } + if (typeof window.navigator.msSaveBlob !== 'undefined') { + window.navigator.msSaveBlob(new Blob([data],{type: 'application/vnd.ms-excel'}), fileName+'.xls') + }else{ + let url = window.URL.createObjectURL(new Blob([data],{type: 'application/vnd.ms-excel'})) + let link = document.createElement('a') + link.style.display = 'none' + link.href = url + link.setAttribute('download', fileName+'.xls') + document.body.appendChild(link) + link.click() + document.body.removeChild(link); //下载完成移除元素 + window.URL.revokeObjectURL(url); //释放掉blob对象 + } + }) + }, + /* 导入 */ + handleImportExcel(info){ + if (info.file.status !== 'uploading') { + console.log(info.file, info.fileList); + } + if (info.file.status === 'done') { + if (info.file.response) { + // this.$message.success(`${info.file.name} 文件上传成功`); + if (info.file.response.code === 200) { + this.$message.success(info.file.response.data || `${info.file.name} 文件上传成功`) + } else { + let { message, result: { msg, fileUrl, fileName } } = info.file.response + let href = window._CONFIG['domianURL'] + fileUrl + this.$warning({ + title: message, + content: ( +
    + ) + }) + } + this.loadData() + } else { + this.$message.error(`${info.file.name} ${info.file.response.data}.`); + } + } else if (info.file.status === 'error') { + this.$message.error(`文件上传失败: ${info.file.msg} `); + } + }, + /* 图片预览 */ + getImgView(text){ + if(text && text.indexOf(",")>0){ + text = text.substring(0,text.indexOf(",")) + } + return getFileAccessHttpUrl(text) + }, + /* 文件下载 */ + uploadFile(text){ + if(!text){ + this.$message.warning("未知的文件") + return; + } + if(text.indexOf(",")>0){ + text = text.substring(0,text.indexOf(",")) + } + let url = getFileAccessHttpUrl(text) + window.open(url); + }, + } + +} \ No newline at end of file diff --git a/jshERP-web/src/mixins/OnlAutoListMixin.js b/jshERP-web/src/mixins/OnlAutoListMixin.js new file mode 100644 index 000000000..7c94140ee --- /dev/null +++ b/jshERP-web/src/mixins/OnlAutoListMixin.js @@ -0,0 +1,78 @@ +export const HrefJump = { + data() { + return { + fieldHrefSlots: [], + hrefComponent: { + model: { + title: '', + width: '100%', + visible: false, + destroyOnClose: true, + style: { + top: 0, + left: 0, + height: '100%', + margin: 0, + padding: 0 + }, + bodyStyle: { padding: '8px', height: 'calc(100vh - 108px)', overflow: 'auto', overflowX: 'hidden' }, + // 隐藏掉取消按钮 + cancelButtonProps: { style: { display: 'none' } }, + afterClose: () => { + // 恢复body的滚动 + document.body.style.overflow = null + } + }, + on: { + ok: () => this.hrefComponent.model.visible = false, + cancel: () => this.hrefComponent.model.visible = false + }, + is: null, + params: {}, + } + } + }, + methods: { + //支持链接href跳转 + handleClickFieldHref(field, record) { + let href = field.href + let urlPattern = /(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?/ + let compPattern = /\.vue(\?.*)?$/ + if (typeof href === 'string') { + href = href.trim().replace(/\${([^}]+)?}/g, (s1, s2) => record[s2]) + if (urlPattern.test(href)) { + window.open(href, '_blank') + } else if (compPattern.test(href)) { + this.openHrefCompModal(href) + } else { + this.$router.push(href) + } + } + }, + openHrefCompModal(href) { + // 解析 href 参数 + let index = href.indexOf('?') + let path = href + if (index !== -1) { + path = href.substring(0, index) + let paramString = href.substring(index + 1, href.length) + let paramArray = paramString.split('&') + let params = {} + paramArray.forEach(paramObject => { + let paramItem = paramObject.split('=') + params[paramItem[0]] = paramItem[1] + }) + this.hrefComponent.params = params + } else { + this.hrefComponent.params = {} + } + this.hrefComponent.model.visible = true + this.hrefComponent.model.title = '@/views/' + path + this.hrefComponent.is = () => import('@/views/' + (path.startsWith('/')?path.slice(1):path)) + // 禁止body滚动,防止滚动穿透 + setTimeout(() => { + document.body.style.overflow = 'hidden' + }, 300) + }, + } +} \ No newline at end of file diff --git a/jshERP-web/src/mixins/OnlineCommonUtil.js b/jshERP-web/src/mixins/OnlineCommonUtil.js new file mode 100644 index 000000000..7de0b6dff --- /dev/null +++ b/jshERP-web/src/mixins/OnlineCommonUtil.js @@ -0,0 +1,26 @@ +import { formatDate } from '@/utils/util' +import Area from '@/components/_util/Area' + +const onlUtil = { + data(){ + return { + mixin_pca:'' + } + }, + created(){ + this.mixin_pca = new Area() + }, + methods:{ + simpleDateFormat(millisecond, format){ + return formatDate(millisecond, format) + }, + getPcaText(code){ + return this.mixin_pca.getText(code); + }, + getPcaCode(text){ + return this.mixin_pca.getCode(text) + } + } +} + +export { onlUtil } \ No newline at end of file diff --git a/jshERP-web/src/permission.js b/jshERP-web/src/permission.js new file mode 100644 index 000000000..d69a370bd --- /dev/null +++ b/jshERP-web/src/permission.js @@ -0,0 +1,65 @@ +import Vue from 'vue' +import router from './router' +import store from './store' +import NProgress from 'nprogress' // progress bar +import 'nprogress/nprogress.css' // progress bar style +import notification from 'ant-design-vue/es/notification' +import { USER_ID,INDEX_MAIN_PAGE_PATH } from '@/store/mutation-types' +import { generateIndexRouter } from "@/utils/util" + +NProgress.configure({ showSpinner: false }) // NProgress Configuration + +const whiteList = ['/user/login', '/user/register', '/user/register-result'] // no redirect whitelist + +router.beforeEach((to, from, next) => { + NProgress.start() // start progress bar + if (Vue.ls.get(USER_ID)) { + /* has token */ + if (to.path === '/' || to.path === '/user/login') { + next({ path: INDEX_MAIN_PAGE_PATH }) + NProgress.done() + } else { + if (store.getters.permissionList.length === 0) { + store.dispatch('GetPermissionList').then(res => { + const menuData = res; + if (menuData === null || menuData === "" || menuData === undefined) { + return; + } + let constRoutes = []; + constRoutes = generateIndexRouter(menuData); + // 添加主界面路由 + store.dispatch('UpdateAppRouter', { constRoutes }).then(() => { + // 根据roles权限生成可访问的路由表 + // 动态添加可访问路由表 + router.addRoutes(store.getters.addRouters) + const redirect = decodeURIComponent(from.query.redirect || to.path) + next({ path: redirect }) + }) + }) + .catch(() => { + /* notification.error({ + message: '系统提示', + description: '请求用户信息失败,请重试!' + })*/ + store.dispatch('Logout').then(() => { + next({ path: '/user/login', query: { redirect: to.fullPath } }) + }) + }) + } else { + next() + } + } + } else { + if (whiteList.indexOf(to.path) !== -1) { + // 在免登录白名单,直接进入 + next() + } else { + next({ path: '/user/login', query: { redirect: to.fullPath } }) + NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it + } + } +}) + +router.afterEach(() => { + NProgress.done() // finish progress bar +}) diff --git a/jshERP-web/src/router/README.md b/jshERP-web/src/router/README.md new file mode 100644 index 000000000..9e82538cc --- /dev/null +++ b/jshERP-web/src/router/README.md @@ -0,0 +1,139 @@ +路由/菜单说明 +==== + + + +配置文件路径 +---- + +`@/config/router.config.js` + + + +格式和说明 +---- + +```javascript +/** + * 路由配置说明: + * 建议:sider menu 请不要超过三级菜单,若超过三级菜单,则应该设计为顶部主菜单 配合左侧次级菜单 + * + **/ + { + redirect: noredirect, + name: 'router-name', + hidden: true, + meta: { + title: 'title', + icon: 'a-icon', + keepAlive: true, + hiddenHeaderContent: true, + } +} +``` + + + +`{ Route }` 对象 + +| 参数 | 说明 | 类型 | 默认值 | +| -------- | ----------------------------------------- | ------- | ------ | +| hidden | 控制路由是否显示在 sidebar | boolean | falase | +| redirect | 重定向地址, 访问这个路由时,自定进行重定向 | string | - | +| name | 路由名称, 建议设置,且不能重名 | string | - | +| meta | 路由元信息(路由附带扩展信息) | object | {} | + + + +`{ Meta }` 路由元信息对象 + +| 参数 | 说明 | 类型 | 默认值 | +| ------------------- | ------------------------------------------------------------ | ------- | ------ | +| title | 路由标题, 用于显示面包屑, 页面标题 *推荐设置 | string | - | +| icon | 路由在 menu 上显示的图标 | string | - | +| keepAlive | 缓存该路由 | boolean | false | +| hiddenHeaderContent | *特殊 隐藏 [PageHeader](https://github.com/sendya/ant-design-pro-vue/blob/master/src/components/layout/PageHeader.vue#L14) 组件中的页面带的 面包屑和页面标题栏 | boolean | false | +| permission | 与项目提供的权限拦截匹配的权限,如果不匹配,则会被禁止访问该路由页面 | array | [] | + + + +路由例子 +---- + +```ecmascript 6 +const asyncRouterMap = [ + { + path: '/', + name: 'index', + component: BasicLayout, + meta: { title: '首页' }, + redirect: '/dashboard/analysis', + children: [ + { + path: '/dashboard', + component: Layout, + name: 'dashboard', + redirect: '/dashboard/workplace', + meta: {title: '仪表盘', icon: 'dashboard', permission: ['dashboard']}, + children: [ + { + path: '/dashboard/analysis', + name: 'Analysis', + component: () => import('@/views/dashboard/Analysis'), + meta: {title: '分析页', permission: ['dashboard']} + }, + { + path: '/dashboard/monitor', + name: 'Monitor', + hidden: true, + component: () => import('@/views/dashboard/Monitor'), + meta: {title: '监控页', permission: ['dashboard']} + }, + { + path: '/dashboard/workplace', + name: 'Workplace', + component: () => import('@/views/dashboard/Workplace'), + meta: {title: '工作台', permission: ['dashboard']} + } + ] + }, + + // result + { + path: '/result', + name: 'result', + component: PageView, + redirect: '/result/success', + meta: { title: '结果页', icon: 'check-circle-o', permission: [ 'result' ] }, + children: [ + { + path: '/result/success', + name: 'ResultSuccess', + component: () => import(/* webpackChunkName: "result" */ '@/views/result/Success'), + // 该页面隐藏面包屑和页面标题栏 + meta: { title: '成功', hiddenHeaderContent: true, permission: [ 'result' ] } + }, + { + path: '/result/fail', + name: 'ResultFail', + component: () => import(/* webpackChunkName: "result" */ '@/views/result/Error'), + // 该页面隐藏面包屑和页面标题栏 + meta: { title: '失败', hiddenHeaderContent: true, permission: [ 'result' ] } + } + ] + }, + ... + ] + }, +] +``` + +> 1. 请注意 `component: () => import('..') ` 方式引入路由的页面组件为 懒加载模式。具体可以看 [Vue 官方文档](https://router.vuejs.org/zh/guide/advanced/lazy-loading.html) +> 2. 增加新的路由应该增加在 '/' (index) 路由的 `children` 内 +> 3. `permission` 可以进行自定义修改,只需要对这个模块进行自定义修改即可 [src/store/modules/permission.js#L10](https://github.com/sendya/ant-design-pro-vue/blob/master/src/store/modules/permission.js#L10) + + + +附权限路由结构: + +![权限结构](https://static-2.loacg.com/open/static/github/permissions.png) \ No newline at end of file diff --git a/jshERP-web/src/router/index.js b/jshERP-web/src/router/index.js new file mode 100644 index 000000000..d6a2a2928 --- /dev/null +++ b/jshERP-web/src/router/index.js @@ -0,0 +1,22 @@ +import Vue from 'vue' +import Router from 'vue-router' +import { constantRouterMap } from '@/config/router.config' + +//update-begin-author:taoyan date:20191011 for:TASK #3214 【优化】访问online功能测试 浏览器控制台抛出异常 +try { + const originalPush = Router.prototype.push + Router.prototype.push = function push(location) { + return originalPush.call(this, location).catch(err => err) + } +} catch (e) { +} +//update-end-author:taoyan date:20191011 for:TASK #3214 【优化】访问online功能测试 浏览器控制台抛出异常 + +Vue.use(Router) + +export default new Router({ + mode: 'history', + base: process.env.BASE_URL, + scrollBehavior: () => ({ y: 0 }), + routes: constantRouterMap +}) \ No newline at end of file diff --git a/jshERP-web/src/store/getters.js b/jshERP-web/src/store/getters.js new file mode 100644 index 000000000..74a4eaf60 --- /dev/null +++ b/jshERP-web/src/store/getters.js @@ -0,0 +1,22 @@ +import Vue from 'vue' +import { USER_INFO, ENHANCE_PRE } from "@/store/mutation-types" +const getters = { + device: state => state.app.device, + theme: state => state.app.theme, + color: state => state.app.color, + token: state => state.user.token, + // avatar: state => {state.user.avatar = Vue.ls.get(USER_INFO).avatar; return state.user.avatar}, + username: state => state.user.username, + nickname: state => {state.user.username = Vue.ls.get(USER_INFO).username; return state.user.username}, + welcome: state => state.user.welcome, + permissionList: state => state.user.permissionList, + userInfo: state => {state.user.info = Vue.ls.get(USER_INFO); return state.user.info}, + addRouters: state => state.permission.addRouters, + enhanceJs:(state) => (code) => { + state.enhance.enhanceJs[code] = Vue.ls.get(ENHANCE_PRE+code); + return state.enhance.enhanceJs[code] + } + +} + +export default getters \ No newline at end of file diff --git a/jshERP-web/src/store/index.js b/jshERP-web/src/store/index.js new file mode 100644 index 000000000..728e7e50c --- /dev/null +++ b/jshERP-web/src/store/index.js @@ -0,0 +1,29 @@ +import Vue from 'vue' +import Vuex from 'vuex' + +import app from './modules/app' +import user from './modules/user' +import permission from './modules/permission' +import enhance from './modules/enhance' +import getters from './getters' + +Vue.use(Vuex) + +export default new Vuex.Store({ + modules: { + app, + user, + permission, + enhance + }, + state: { + + }, + mutations: { + + }, + actions: { + + }, + getters +}) diff --git a/jshERP-web/src/store/modules/app.js b/jshERP-web/src/store/modules/app.js new file mode 100644 index 000000000..e7912e687 --- /dev/null +++ b/jshERP-web/src/store/modules/app.js @@ -0,0 +1,126 @@ +import Vue from 'vue' +import { + SIDEBAR_TYPE, + DEFAULT_THEME, + DEFAULT_LAYOUT_MODE, + DEFAULT_COLOR, + DEFAULT_COLOR_WEAK, + DEFAULT_FIXED_HEADER, + DEFAULT_FIXED_SIDEMENU, + DEFAULT_FIXED_HEADER_HIDDEN, + DEFAULT_CONTENT_WIDTH_TYPE, + DEFAULT_MULTI_PAGE +} from "@/store/mutation-types" + +const app = { + state: { + sidebar: { + opened: true, + withoutAnimation: false + }, + device: 'desktop', + theme: '', + layout: '', + contentWidth: '', + fixedHeader: false, + fixSiderbar: false, + autoHideHeader: false, + color: null, + weak: false, + multipage: true //默认多页签模式 + }, + mutations: { + SET_SIDEBAR_TYPE: (state, type) => { + state.sidebar.opened = type + Vue.ls.set(SIDEBAR_TYPE, type) + }, + CLOSE_SIDEBAR: (state, withoutAnimation) => { + Vue.ls.set(SIDEBAR_TYPE, true) + state.sidebar.opened = false + state.sidebar.withoutAnimation = withoutAnimation + }, + TOGGLE_DEVICE: (state, device) => { + state.device = device + }, + TOGGLE_THEME: (state, theme) => { + // setStore('_DEFAULT_THEME', theme) + Vue.ls.set(DEFAULT_THEME, theme) + state.theme = theme + }, + TOGGLE_LAYOUT_MODE: (state, layout) => { + Vue.ls.set(DEFAULT_LAYOUT_MODE, layout) + state.layout = layout + }, + TOGGLE_FIXED_HEADER: (state, fixed) => { + Vue.ls.set(DEFAULT_FIXED_HEADER, fixed) + state.fixedHeader = fixed + }, + TOGGLE_FIXED_SIDERBAR: (state, fixed) => { + Vue.ls.set(DEFAULT_FIXED_SIDEMENU, fixed) + state.fixSiderbar = fixed + }, + TOGGLE_FIXED_HEADER_HIDDEN: (state, show) => { + Vue.ls.set(DEFAULT_FIXED_HEADER_HIDDEN, show) + state.autoHideHeader = show + }, + TOGGLE_CONTENT_WIDTH: (state, type) => { + Vue.ls.set(DEFAULT_CONTENT_WIDTH_TYPE, type) + state.contentWidth = type + }, + TOGGLE_COLOR: (state, color) => { + Vue.ls.set(DEFAULT_COLOR, color) + state.color = color + }, + TOGGLE_WEAK: (state, flag) => { + Vue.ls.set(DEFAULT_COLOR_WEAK, flag) + state.weak = flag + }, + SET_MULTI_PAGE (state, multipageFlag) { + Vue.ls.set(DEFAULT_MULTI_PAGE, multipageFlag) + state.multipage = multipageFlag + } + }, + actions: { + setSidebar: ({ commit }, type) => { + commit('SET_SIDEBAR_TYPE', type) + }, + CloseSidebar({ commit }, { withoutAnimation }) { + commit('CLOSE_SIDEBAR', withoutAnimation) + }, + ToggleDevice({ commit }, device) { + commit('TOGGLE_DEVICE', device) + }, + ToggleTheme({ commit }, theme) { + commit('TOGGLE_THEME', theme) + }, + ToggleLayoutMode({ commit }, mode) { + commit('TOGGLE_LAYOUT_MODE', mode) + }, + ToggleFixedHeader({ commit }, fixedHeader) { + if (!fixedHeader) { + commit('TOGGLE_FIXED_HEADER_HIDDEN', false) + } + commit('TOGGLE_FIXED_HEADER', fixedHeader) + }, + ToggleFixSiderbar({ commit }, fixSiderbar) { + commit( 'TOGGLE_FIXED_SIDERBAR', fixSiderbar) + }, + ToggleFixedHeaderHidden({ commit }, show) { + commit('TOGGLE_FIXED_HEADER_HIDDEN', show) + }, + ToggleContentWidth({ commit }, type) { + commit('TOGGLE_CONTENT_WIDTH', type) + }, + ToggleColor({ commit }, color) { + commit('TOGGLE_COLOR', color) + }, + ToggleWeak({ commit }, weakFlag) { + commit('TOGGLE_WEAK', weakFlag) + }, + ToggleMultipage({ commit }, multipageFlag) { + commit('SET_MULTI_PAGE', multipageFlag) + } + } +} + +export default app \ No newline at end of file diff --git a/jshERP-web/src/store/modules/enhance.js b/jshERP-web/src/store/modules/enhance.js new file mode 100644 index 000000000..e7c254d8f --- /dev/null +++ b/jshERP-web/src/store/modules/enhance.js @@ -0,0 +1,37 @@ +import Vue from 'vue' +const enhance = { + state: { + enhanceJs:{ + + } + }, + mutations: { + ADD_TABLE_ENHANCE: (state, record) => { + if(!state.enhanceJs){ + let obj = {} + let arr = [] + arr.push({...record}) + obj[record.code] = arr + state.enhanceJs = obj + }else{ + if(!state.enhanceJs[record.code]){ + let arr = [] + arr.push({...record}) + state.enhanceJs[record.code] = arr + } + state.enhanceJs[record.code].push({...record}) + } + let arr = state.enhanceJs[record.code] + while(arr.length>16){ + arr.shift() + } + Vue.ls.set('enhance_'+record['code'], arr) + } + }, + actions: { + addEhanceRecord({ commit }, record) { + commit('ADD_TABLE_ENHANCE', record) + } + } +} +export default enhance \ No newline at end of file diff --git a/jshERP-web/src/store/modules/permission.js b/jshERP-web/src/store/modules/permission.js new file mode 100644 index 000000000..85f0b356e --- /dev/null +++ b/jshERP-web/src/store/modules/permission.js @@ -0,0 +1,91 @@ +import { asyncRouterMap, constantRouterMap } from "@/config/router.config" + +/** + * 过滤账户是否拥有某一个权限,并将菜单从加载列表移除 + * + * @param permission + * @param route + * @returns {boolean} + */ +function hasPermission(permission, route) { + if (route.meta && route.meta.permission) { + let flag = -1 + for (let i = 0, len = permission.length; i < len; i++) { + flag = route.meta.permission.indexOf(permission[i]) + if (flag >= 0) { + return true + } + } + return false + } + return true +} + +/** + * 单账户多角色时,使用该方法可过滤角色不存在的菜单 + * + * @param roles + * @param route + * @returns {*} + */ +// eslint-disable-next-line +function hasRole(roles, route) { + if (route.meta && route.meta.roles) { + return route.meta.roles.indexOf(roles.id) + } else { + return true + } +} + +function filterAsyncRouter(routerMap, roles) { + const accessedRouters = routerMap.filter(route => { + if (hasPermission(roles.permissionList, route)) { + if (route.children && route.children.length) { + route.children = filterAsyncRouter(route.children, roles) + } + return true + } + return false + }) + return accessedRouters +} + + +const permission = { + state: { + routers: constantRouterMap, + addRouters: [] + }, + mutations: { + SET_ROUTERS: (state, data) => { + console.log('-----mutations---SET_ROUTERS----', data) + state.addRouters = data + state.routers = constantRouterMap.concat(data) + // console.log('-----mutations last ---SET_ROUTERS----', state.routers) + } + }, + actions: { + GenerateRoutes({ commit }, data) { + return new Promise(resolve => { + const { roles } = data + console.log('-----mutations---data----', data) + let accessedRouters + accessedRouters = filterAsyncRouter(asyncRouterMap, roles) + console.log('-----mutations---accessedRouters----', accessedRouters) + commit('SET_ROUTERS', accessedRouters) + resolve() + }) + }, + // 动态添加主界面路由,需要缓存 + UpdateAppRouter({ commit }, routes) { + return new Promise(resolve => { + //const [ roles ] = routes.constRoutes + let routelist = routes.constRoutes; + commit('SET_ROUTERS', routelist) + resolve() + }) + } + } +} + +export default permission \ No newline at end of file diff --git a/jshERP-web/src/store/modules/user.js b/jshERP-web/src/store/modules/user.js new file mode 100644 index 000000000..a361f19c7 --- /dev/null +++ b/jshERP-web/src/store/modules/user.js @@ -0,0 +1,202 @@ +import Vue from 'vue' +import { login, logout, phoneLogin, thirdLogin } from "@/api/login" +import { ACCESS_TOKEN, USER_NAME,USER_INFO,USER_AUTH,SYS_BUTTON_AUTH,UI_CACHE_DB_DICT_DATA,USER_ID,USER_LOGIN_NAME } from "@/store/mutation-types" +import { welcome } from "@/utils/util" +import { queryPermissionsByUser } from '@/api/api' +import { getAction } from '@/api/manage' + +const user = { + state: { + token: '', + username: '', + realname: '', + welcome: '', + avatar: '', + permissionList: [], + info: {} + }, + + mutations: { + SET_TOKEN: (state, token) => { + state.token = token + }, + SET_NAME: (state, { username, realname, welcome }) => { + state.username = username + state.realname = realname + state.welcome = welcome + }, + SET_AVATAR: (state, avatar) => { + state.avatar = avatar + }, + SET_PERMISSIONLIST: (state, permissionList) => { + state.permissionList = permissionList + }, + SET_INFO: (state, info) => { + state.info = info + }, + }, + + actions: { + // CAS验证登录 + ValidateLogin({ commit }, userInfo) { + return new Promise((resolve, reject) => { + getAction("/cas/client/validateLogin",userInfo).then(response => { + console.log("----cas 登录--------",response); + if(response.success){ + const result = response.result + const userInfo = result.userInfo + Vue.ls.set(ACCESS_TOKEN, result.token, 7 * 24 * 60 * 60 * 1000) + Vue.ls.set(USER_NAME, userInfo.username, 7 * 24 * 60 * 60 * 1000) + Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000) + commit('SET_TOKEN', result.token) + commit('SET_INFO', userInfo) + commit('SET_NAME', { username: userInfo.username,realname: userInfo.realname, welcome: welcome() }) + commit('SET_AVATAR', userInfo.avatar) + resolve(response) + }else{ + resolve(response) + } + }).catch(error => { + reject(error) + }) + }) + }, + // 登录 + Login({ commit }, userInfo) { + return new Promise((resolve, reject) => { + login(userInfo).then(response => { + if(response.code ==200){ + if(response.data.msgTip == 'user can login'){ + const result = response.data + Vue.ls.set(USER_ID, result.user.id, 7 * 24 * 60 * 60 * 1000); + Vue.ls.set(USER_LOGIN_NAME, result.user.loginName, 7 * 24 * 60 * 60 * 1000); + //const userInfo = result.userInfo + Vue.ls.set(ACCESS_TOKEN, result.token, 1 * 24 * 60 * 60 * 1000) + // Vue.ls.set(USER_NAME, userInfo.username, 7 * 24 * 60 * 60 * 1000) + Vue.ls.set(USER_INFO, result.user, 7 * 24 * 60 * 60 * 1000) + //Vue.ls.set(UI_CACHE_DB_DICT_DATA, result.sysAllDictItems, 7 * 24 * 60 * 60 * 1000) + commit('SET_TOKEN', result.token) + } + commit('SET_INFO', userInfo) + //commit('SET_NAME', { username: userInfo.username,realname: userInfo.realname, welcome: welcome() }) + //commit('SET_AVATAR', userInfo.avatar) + resolve(response) + }else{ + reject(response) + } + }).catch(error => { + reject(error) + }) + }) + }, + //手机号登录 + PhoneLogin({ commit }, userInfo) { + return new Promise((resolve, reject) => { + phoneLogin(userInfo).then(response => { + if(response.code =='200'){ + const result = response.result + const userInfo = result.userInfo + Vue.ls.set(ACCESS_TOKEN, result.token, 7 * 24 * 60 * 60 * 1000) + Vue.ls.set(USER_NAME, userInfo.username, 7 * 24 * 60 * 60 * 1000) + Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000) + Vue.ls.set(UI_CACHE_DB_DICT_DATA, result.sysAllDictItems, 7 * 24 * 60 * 60 * 1000) + commit('SET_TOKEN', result.token) + commit('SET_INFO', userInfo) + commit('SET_NAME', { username: userInfo.username,realname: userInfo.realname, welcome: welcome() }) + commit('SET_AVATAR', userInfo.avatar) + resolve(response) + }else{ + reject(response) + } + }).catch(error => { + reject(error) + }) + }) + }, + // 获取用户信息 + GetPermissionList({ commit }) { + return new Promise((resolve, reject) => { + //let v_token = Vue.ls.get(ACCESS_TOKEN); + let params = {pNumber:0,userId: Vue.ls.get(USER_ID)}; + queryPermissionsByUser(params).then(response => { + const menuData = response; + // const authData = response.result.auth; + // const allAuthData = response.result.allAuth; + //Vue.ls.set(USER_AUTH,authData); + // sessionStorage.setItem(USER_AUTH,JSON.stringify(authData)); + // sessionStorage.setItem(SYS_BUTTON_AUTH,JSON.stringify(allAuthData)); + if (menuData && menuData.length > 0) { + //update--begin--autor:qinfeng-----date:20200109------for:JEECG-63 一级菜单的子菜单全部是隐藏路由,则一级菜单不显示------ + // menuData.forEach((item, index) => { + // if (item["children"]) { + // let hasChildrenMenu = item["children"].filter((i) => { + // return !i.hidden || i.hidden == false + // }) + // if (hasChildrenMenu == null || hasChildrenMenu.length == 0) { + // item["hidden"] = true + // } + // } + // }) + console.log(" menu show json ", menuData) + //update--end--autor:qinfeng-----date:20200109------for:JEECG-63 一级菜单的子菜单全部是隐藏路由,则一级菜单不显示------ + commit('SET_PERMISSIONLIST', menuData) + } else { + reject('getPermissionList: permissions must be a non-null array !') + } + resolve(response) + }).catch(error => { + reject(error) + }) + }) + }, + + // 登出 + Logout({ commit, state }) { + return new Promise((resolve) => { + //let logoutToken = state.token; + commit('SET_TOKEN', '') + commit('SET_PERMISSIONLIST', []) + Vue.ls.remove(USER_ID) + Vue.ls.remove(USER_LOGIN_NAME) + Vue.ls.remove(USER_INFO) + //Vue.ls.remove(ACCESS_TOKEN) + Vue.ls.remove(UI_CACHE_DB_DICT_DATA) + //console.log('logoutToken: '+ logoutToken) + logout().then(() => { + //let sevice = "http://"+window.location.host+"/"; + //let serviceUrl = encodeURIComponent(sevice); + //window.location.href = window._CONFIG['casPrefixUrl']+"/logout?service="+serviceUrl; + resolve() + }).catch(() => { + resolve() + }) + }) + }, + // 第三方登录 + ThirdLogin({ commit }, token) { + return new Promise((resolve, reject) => { + thirdLogin(token).then(response => { + if(response.code =='200'){ + const result = response.result + const userInfo = result.userInfo + Vue.ls.set(ACCESS_TOKEN, result.token, 7 * 24 * 60 * 60 * 1000) + Vue.ls.set(USER_NAME, userInfo.username, 7 * 24 * 60 * 60 * 1000) + Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000) + commit('SET_TOKEN', result.token) + commit('SET_INFO', userInfo) + commit('SET_NAME', { username: userInfo.username,realname: userInfo.realname, welcome: welcome() }) + commit('SET_AVATAR', userInfo.avatar) + resolve(response) + }else{ + reject(response) + } + }).catch(error => { + reject(error) + }) + }) + }, + + } +} + +export default user \ No newline at end of file diff --git a/jshERP-web/src/store/mutation-types.js b/jshERP-web/src/store/mutation-types.js new file mode 100644 index 000000000..e9cc61bf0 --- /dev/null +++ b/jshERP-web/src/store/mutation-types.js @@ -0,0 +1,26 @@ +export const ACCESS_TOKEN = 'Access-Token' +export const SIDEBAR_TYPE = 'SIDEBAR_TYPE' +export const DEFAULT_THEME = 'DEFAULT_THEME' +export const DEFAULT_LAYOUT_MODE = 'DEFAULT_LAYOUT_MODE' +export const DEFAULT_COLOR = 'DEFAULT_COLOR' +export const DEFAULT_COLOR_WEAK = 'DEFAULT_COLOR_WEAK' +export const DEFAULT_FIXED_HEADER = 'DEFAULT_FIXED_HEADER' +export const DEFAULT_FIXED_SIDEMENU= 'DEFAULT_FIXED_SIDEMENU' +export const DEFAULT_FIXED_HEADER_HIDDEN = 'DEFAULT_FIXED_HEADER_HIDDEN' +export const DEFAULT_CONTENT_WIDTH_TYPE = 'DEFAULT_CONTENT_WIDTH_TYPE' +export const DEFAULT_MULTI_PAGE = 'DEFAULT_MULTI_PAGE' +export const USER_ID = 'Login_userId' +export const USER_LOGIN_NAME = 'Login_loginName' +export const USER_NAME = 'Login_Username' +export const USER_INFO = 'Login_Userinfo' +export const USER_AUTH = 'LOGIN_USER_BUTTON_AUTH' +export const SYS_BUTTON_AUTH = 'SYS_BUTTON_AUTH' +export const ENCRYPTED_STRING = 'ENCRYPTED_STRING' +export const ENHANCE_PRE = 'enhance_' +export const UI_CACHE_DB_DICT_DATA = 'UI_CACHE_DB_DICT_DATA' +export const INDEX_MAIN_PAGE_PATH = "/dashboard/analysis" + +export const CONTENT_WIDTH_TYPE = { + Fluid: 'Fluid', + Fixed: 'Fixed' +} \ No newline at end of file diff --git a/jshERP-web/src/utils/JEditableTableUtil.js b/jshERP-web/src/utils/JEditableTableUtil.js new file mode 100644 index 000000000..8ff2c5ad3 --- /dev/null +++ b/jshERP-web/src/utils/JEditableTableUtil.js @@ -0,0 +1,113 @@ +const FormTypes = { + normal: 'normal', + input: 'input', + inputNumber: 'inputNumber', + checkbox: 'checkbox', + select: 'select', + date: 'date', + datetime: 'datetime', + upload: 'upload', + file: 'file', + image: 'image', + popup:'popup', + popupJsh:'popupJsh', + list_multi:"list_multi", + sel_search:"sel_search", + radio:'radio', + checkbox_meta:"checkbox_meta", + input_pop:'input_pop', + slot: 'slot', + hidden: 'hidden' +} +const VALIDATE_NO_PASSED = Symbol() +export { FormTypes, VALIDATE_NO_PASSED } + +/** + * 获取指定的 $refs 对象 + * 有时候可能会遇到组件未挂载到页面中的情况,导致无法获取 $refs 中的某个对象 + * 这个方法可以等待挂载完成之后再返回 $refs 的对象,避免报错 + * @author sunjianlei + **/ +export function getRefPromise(vm, name) { + return new Promise((resolve) => { + (function next() { + let ref = vm.$refs[name] + if (ref) { + resolve(ref) + } else { + setTimeout(() => { + next() + }, 10) + } + })() + }) +} + +/** + * 一次性验证主表单和所有的次表单 + * @param form 主表单 form 对象 + * @param cases 接收一个数组,每项都是一个JEditableTable实例 + * @returns {Promise} + * @author sunjianlei + */ +export function validateFormAndTables(form, cases) { + + if (!(form && typeof form.validateFields === 'function')) { + throw `form 参数需要的是一个form对象,而传入的却是${typeof form}` + } + + let options = {} + return new Promise((resolve, reject) => { + // 验证主表表单 + form.validateFields((err, values) => { + err ? reject({ error: VALIDATE_NO_PASSED }) : resolve(values) + }) + }).then(values => { + Object.assign(options, { formValue: values }) + // 验证所有子表的表单 + return validateTables(cases) + }).then(all => { + Object.assign(options, { tablesValue: all }) + return Promise.resolve(options) + }).catch(error => { + return Promise.reject(error) + }) + +} + +/** + * 验证并获取一个或多个表格的所有值 + * @param cases 接收一个数组,每项都是一个JEditableTable实例 + * @param deleteTempId 是否删除临时ID,如果设为true,行编辑就不返回新增行的ID,ID需要后台生成 + * @author sunjianlei + */ +export function validateTables(cases, deleteTempId) { + if (!(cases instanceof Array)) { + throw `'validateTables'函数的'cases'参数需要的是一个数组,而传入的却是${typeof cases}` + } + return new Promise((resolve, reject) => { + let tables = [] + let index = 0; + if(!cases || cases.length==0){ + resolve() + } + (function next() { + let vm = cases[index] + vm.getAll(true, deleteTempId).then(all => { + tables[index] = all + // 判断校验是否全部完成,完成返回成功,否则继续进行下一步校验 + if (++index === cases.length) { + resolve(tables) + } else ( + next() + ) + }, error => { + // 出现未验证通过的表单,不再进行下一步校验,直接返回失败并跳转到该表格 + if (error === VALIDATE_NO_PASSED) { + reject({ error: VALIDATE_NO_PASSED, index }) + } + reject(error) + }) + })() + }) +} \ No newline at end of file diff --git a/jshERP-web/src/utils/LunarFullCalendarUtil.js b/jshERP-web/src/utils/LunarFullCalendarUtil.js new file mode 100644 index 000000000..e68eb6335 --- /dev/null +++ b/jshERP-web/src/utils/LunarFullCalendarUtil.js @@ -0,0 +1,107 @@ +/** + * LunarFullCalendar 公共 js + * + * @version 1.0.0 + * @author sunjianlei + * + * */ + +import { getRefPromise } from '@/utils/JEditableTableUtil' + +/* 日历的视图类型 */ +const calendarViewType = { + month: 'month', // 月视图 + basicWeek: 'basicWeek', // 基础周视图 + basicDay: 'basicDay',// 基础天视图 + agendaWeek: 'agendaWeek', // 议程周视图 + agendaDay: 'agendaDay', // 议程天视图 +} + +/* 定义默认视图 */ +const defaultView = calendarViewType.month + +/* 定义日历默认配置 */ +const defaultSettings = { + locale: 'zh-cn', + // 按钮文字 + buttonText: { + today: '今天', + month: '月', + week: '周', + day: '日' + }, + // 头部排列方式 + header: { + left: 'prev,next, today', + center: 'title', + right: 'hide, custom, month,agendaWeek,agendaDay' + }, + //点击今天日列表图 + eventLimitClick: 'day', + // 隐藏超出的事件 + eventLimit: true, + // 设置每周开始日期为周日 + firstDay: 0, + // 默认显示视图 + defaultView, + timeFormat: 'H:mm', + axisFormat: 'H:mm', + // agenda视图下是否显示all-day + allDaySlot: true, + // agenda视图下all-day的显示文本 + allDayText: '全天', + // 时区默认本地的 + timezone: 'local', + // 周视图和日视同的左侧时间显示 + slotLabelFormat: 'HH:mm', + // 设置第二天阈值 + nextDayThreshold: '00:00:00', +} + +/** 提供了一些增强方法 */ +const CalendarMixins = { + data() { + return { + calenderCurrentViewType: defaultView + } + }, + methods: { + + getCalendarConfigEventHandler() { + return { + // 处理 view changed 事件 + viewRender: (view, element) => { + let { type } = view + + let lastViewType = this.calenderCurrentViewType + this.calenderCurrentViewType = type + + if (typeof this.handleViewRender === 'function') { + this.handleViewRender(type, view, element) + } + + if (lastViewType !== this.calenderCurrentViewType && typeof this.handleViewChanged === 'function') { + this.handleViewChanged(type, view, element) + } + + }, + } + }, + + /** 获取 LunarFullCalendar 实例,ref = baseCalendar */ + getCalendar(fn) { + return getRefPromise(this, 'baseCalendar').then(fn) + }, + + calendarEmit(name, data) { + this.getCalendar(ref => ref.$emit(name, data)) + }, + + /** 强制重新加载所有的事件(日程)*/ + calendarReloadEvents() { + this.calendarEmit('reload-events') + } + } +} + +export { defaultSettings, calendarViewType, CalendarMixins } \ No newline at end of file diff --git a/jshERP-web/src/utils/auth.js b/jshERP-web/src/utils/auth.js new file mode 100644 index 000000000..03ae469f5 --- /dev/null +++ b/jshERP-web/src/utils/auth.js @@ -0,0 +1,19 @@ +/** + * 弃用 + */ +import { setStore, getStore, clearStore } from "@/utils/storage" + +export const TokenKey = 'Access-Token' + +export function getToken() { + return getStore(TokenKey) +} + +export function setToken(token) { + // key, token, timeout = 86400s + return setStore(TokenKey, token, 86400) +} + +export function removeToken() { + return clearStore(TokenKey) +} \ No newline at end of file diff --git a/jshERP-web/src/utils/authFilter.js b/jshERP-web/src/utils/authFilter.js new file mode 100644 index 000000000..7200e247f --- /dev/null +++ b/jshERP-web/src/utils/authFilter.js @@ -0,0 +1,243 @@ +import { USER_AUTH,SYS_BUTTON_AUTH } from "@/store/mutation-types" + +export function disabledAuthFilter(code,formData) { + if(nodeDisabledAuth(code,formData)){ + return true; + }else{ + return globalDisabledAuth(code); + } +} + +function nodeDisabledAuth(code,formData){ + console.log("页面权限禁用--NODE--开始"); + let permissionList = []; + try { + console.log("页面权限禁用--NODE--开始",formData); + if (formData) { + let bpmList = formData.permissionList; + permissionList = bpmList.filter(item=>item.type=='2') + // for (let bpm of bpmList) { + // if(bpm.type == '2') { + // permissionList.push(bpm); + // } + // } + }else{ + return false; + } + } catch (e) { + //console.log("页面权限异常----", e); + } + if (permissionList.length == 0) { + return false; + } + + console.log("流程节点页面权限禁用--NODE--开始"); + let permissions = []; + for (let item of permissionList) { + if(item.type == '2') { + permissions.push(item.action); + } + } + //console.log("页面权限----"+code); + if (!permissions.includes(code)) { + return false; + }else{ + for (let item2 of permissionList) { + if(code === item2.action){ + console.log("流程节点页面权限禁用--NODE--生效"); + return true; + } + } + } + return false; +} + +function globalDisabledAuth(code){ + console.log("全局页面禁用权限--Global--开始"); + + let permissionList = []; + let allPermissionList = []; + + //let authList = Vue.ls.get(USER_AUTH); + let authList = JSON.parse(sessionStorage.getItem(USER_AUTH) || "[]"); + for (let auth of authList) { + if(auth.type == '2') { + permissionList.push(auth); + } + } + //console.log("页面禁用权限--Global--",sessionStorage.getItem(SYS_BUTTON_AUTH)); + let allAuthList = JSON.parse(sessionStorage.getItem(SYS_BUTTON_AUTH) || "[]"); + for (let gauth of allAuthList) { + if(gauth.type == '2') { + allPermissionList.push(gauth); + } + } + //设置全局配置是否有命中 + let gFlag = false;//禁用命中 + let invalidFlag = false;//无效命中 + if(allPermissionList != null && allPermissionList != "" && allPermissionList != undefined && allPermissionList.length > 0){ + for (let itemG of allPermissionList) { + if(code === itemG.action){ + if(itemG.status == '0'){ + invalidFlag = true; + break; + }else{ + gFlag = true; + break; + } + } + } + } + if(invalidFlag){ + return false; + } + if (permissionList === null || permissionList === "" || permissionList === undefined||permissionList.length<=0) { + return gFlag; + } + let permissions = []; + for (let item of permissionList) { + if(item.type == '2') { + permissions.push(item.action); + } + } + //console.log("页面禁用权限----"+code); + if (!permissions.includes(code)) { + return gFlag; + }else{ + for (let item2 of permissionList) { + if(code === item2.action){ + console.log("全局页面权限解除禁用--Global--生效"); + gFlag = false; + } + } + return gFlag; + } +} + + + +export function colAuthFilter(columns,pre) { + let authList = getNoAuthCols(pre); + const cols = columns.filter(item => { + if (hasColoum(item,authList)) { + return true + } + return false + }) + return cols +} + +/** + * 【子表行编辑】实现两个功能: + * 1、隐藏JEditableTable无权限的字段 + * 2、禁用JEditableTable无权限的字段 + * @param columns + * @param pre + * @returns {*} + */ +export function colAuthFilterJEditableTable(columns,pre) { + let authList = getAllShowAndDisabledAuthCols(pre); + const cols = columns.filter(item => { + let oneAuth = authList.find(auth => { + return auth.action === pre + item.key; + }); + if(!oneAuth){ + return true + } + + //代码严谨处理,防止一个授权标识,配置多次 + if(oneAuth instanceof Array){ + oneAuth = oneAuth[0] + } + + //禁用逻辑 + if (oneAuth.type == '2' && !oneAuth.isAuth) { + item["disabled"] = true + return true + } + //隐藏逻辑逻辑 + if (oneAuth.type == '1' && !oneAuth.isAuth) { + return false + } + return true + }) + return cols +} + + +function hasColoum(item,authList){ + if (authList.includes(item.dataIndex)) { + return false + } + return true +} + +//权限无效时不做控制,有效时控制,只能控制 显示不显示 +//根据授权码前缀获取未授权的列信息 +function getNoAuthCols(pre){ + let permissionList = []; + let allPermissionList = []; + + //let authList = Vue.ls.get(USER_AUTH); + let authList = JSON.parse(sessionStorage.getItem(USER_AUTH) || "[]"); + for (let auth of authList) { + //显示策略,有效状态 + if(auth.type == '1'&&startWith(auth.action,pre)) { + permissionList.push(substrPre(auth.action,pre)); + } + } + //console.log("页面禁用权限--Global--",sessionStorage.getItem(SYS_BUTTON_AUTH)); + let allAuthList = JSON.parse(sessionStorage.getItem(SYS_BUTTON_AUTH) || "[]"); + for (let gauth of allAuthList) { + //显示策略,有效状态 + if(gauth.type == '1'&&gauth.status == '1'&&startWith(gauth.action,pre)) { + allPermissionList.push(substrPre(gauth.action,pre)); + } + } + const cols = allPermissionList.filter(item => { + if (permissionList.includes(item)) { + return false; + } + return true; + }) + return cols; +} + + + +/** + * 额外增加方法【用于行编辑组件】 + * date: 2020-04-05 + * author: scott + * @param pre + * @returns {*[]} + */ +function getAllShowAndDisabledAuthCols(pre){ + //用户拥有的权限 + let userAuthList = JSON.parse(sessionStorage.getItem(USER_AUTH) || "[]"); + //全部权限配置 + let allAuthList = JSON.parse(sessionStorage.getItem(SYS_BUTTON_AUTH) || "[]"); + + let newAllAuthList = allAuthList.map(function (item, index) { + let hasAuthArray = userAuthList.filter(u => u.action===item.action ); + if (hasAuthArray && hasAuthArray.length>0) { + item["isAuth"] = true + } + return item; + }) + + return newAllAuthList; +} + +function startWith(str,pre) { + if (pre == null || pre == "" || str==null|| str==""|| str.length == 0 || pre.length > str.length) + return false; + if (str.substr(0, pre.length) == pre) + return true; + else + return false; +} + +function substrPre(str,pre) { + return str.substr(pre.length); +} \ No newline at end of file diff --git a/jshERP-web/src/utils/axios.js b/jshERP-web/src/utils/axios.js new file mode 100644 index 000000000..de27d4cee --- /dev/null +++ b/jshERP-web/src/utils/axios.js @@ -0,0 +1,37 @@ +const VueAxios = { + vm: {}, + // eslint-disable-next-line no-unused-vars + install(Vue, router = {}, instance) { + if (this.installed) { + return; + } + this.installed = true; + + if (!instance) { + // eslint-disable-next-line no-console + console.error('You have to install axios'); + return; + } + + Vue.axios = instance; + + Object.defineProperties(Vue.prototype, { + axios: { + get: function get() { + return instance; + } + }, + $http: { + get: function get() { + return instance; + } + } + }); + } +}; + +export { + VueAxios, + // eslint-disable-next-line no-undef + //instance as axios +} \ No newline at end of file diff --git a/jshERP-web/src/utils/commonUploadFile.js b/jshERP-web/src/utils/commonUploadFile.js new file mode 100644 index 000000000..eaa6dbb33 --- /dev/null +++ b/jshERP-web/src/utils/commonUploadFile.js @@ -0,0 +1,52 @@ +import { getFileAccessHttpUrl } from '@/api/manage' +const getFileName=(path)=>{ + if(path.lastIndexOf("\\")>=0){ + let reg=new RegExp("\\\\","g"); + path = path.replace(reg,"/"); + } + return path.substring(path.lastIndexOf("/")+1); +} + +const uidGenerator=()=>{ + return '-'+parseInt(Math.random()*10000+1,10); +} + +const getFilePaths=(uploadFiles)=>{ + let arr = []; + if(!uploadFiles){ + return "" + } + for(let a=0;a0){ + return arr.join(",") + } + return "" +} + +const getUploadFileList=(paths)=>{ + if(!paths){ + return []; + } + let fileList = []; + let arr = paths.split(",") + for(let a=0;a content(arg) + ' | 北京市'; // export 箭头函数也可以 +* +*/ + +/** 字段默认值官方示例:获取地址 */ +export function demoFieldDefVal_getAddress(arg) { + if (!arg) { + arg = '朝阳区' + } + return `北京市 ${arg}` +} \ No newline at end of file diff --git a/jshERP-web/src/utils/device.js b/jshERP-web/src/utils/device.js new file mode 100644 index 000000000..6bf15fc0a --- /dev/null +++ b/jshERP-web/src/utils/device.js @@ -0,0 +1,23 @@ +import enquireJs from 'enquire.js' + +const enquireScreen = function (call) { + // tablet + const handler = { + match: function () { + call && call(0) + }, + unmatch: function () { + call && call(-1) + } + } + // mobile + const handler2 = { + match: () => { + call && call(1) + } + } + enquireJs.register('screen and (max-width: 1087.99px)', handler) + enquireJs.register('screen and (max-width: 767.99px)', handler2) +} + +export default enquireScreen \ No newline at end of file diff --git a/jshERP-web/src/utils/encryption/aesEncrypt.js b/jshERP-web/src/utils/encryption/aesEncrypt.js new file mode 100644 index 000000000..07638cf22 --- /dev/null +++ b/jshERP-web/src/utils/encryption/aesEncrypt.js @@ -0,0 +1,6003 @@ +import { getAction } from '@/api/manage' +import { ENCRYPTED_STRING } from "@/store/mutation-types" +import Vue from 'vue' + +/** + * 获取加密字符串,并对结果进行缓存 + */ +export function getEncryptedString() { + return getAction("/sys/getEncryptedString",{}).then((res)=>{ + let encryptedString = {}; + encryptedString.key = res.result.key; + encryptedString.iv = res.result.iv; + Vue.ls.set(ENCRYPTED_STRING, encryptedString, 7 * 24 * 60 * 60 * 1000); + return encryptedString; + }); +} + +/** + * AES加密 :字符串 key iv 返回base64 + */ +export function encryption(word, keyStr, ivStr) { + + let key = CryptoJS.enc.Utf8.parse(keyStr) + let iv = CryptoJS.enc.Utf8.parse(ivStr) + + let srcs = CryptoJS.enc.Utf8.parse(word); + var encrypted = CryptoJS.AES.encrypt(srcs, key, { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.ZeroPadding + }); + // console.log("-=-=-=-", encrypted.ciphertext) + return CryptoJS.enc.Base64.stringify(encrypted.ciphertext); + +} + + +var CryptoJS = CryptoJS || (function (Math, undefined) { + /* + * Local polyfil of Object.create + */ + var create = Object.create || (function () { + function F() {}; + + return function (obj) { + var subtype; + + F.prototype = obj; + + subtype = new F(); + + F.prototype = null; + + return subtype; + }; + }()) + + /** + * CryptoJS namespace. + */ + var C = {}; + + /** + * Library namespace. + */ + var C_lib = C.lib = {}; + + /** + * Base object for prototypal inheritance. + */ + var Base = C_lib.Base = (function () { + + + return { + /** + * Creates a new object that inherits from this object. + * + * @param {Object} overrides Properties to copy into the new object. + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * field: 'value', + * + * method: function () { + * } + * }); + */ + extend: function (overrides) { + // Spawn + var subtype = create(this); + + // Augment + if (overrides) { + subtype.mixIn(overrides); + } + + // Create default initializer + if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { + subtype.init = function () { + subtype.$super.init.apply(this, arguments); + }; + } + + // Initializer's prototype is the subtype object + subtype.init.prototype = subtype; + + // Reference supertype + subtype.$super = this; + + return subtype; + }, + + /** + * Extends this object and runs the init method. + * Arguments to create() will be passed to init(). + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var instance = MyType.create(); + */ + create: function () { + var instance = this.extend(); + instance.init.apply(instance, arguments); + + return instance; + }, + + /** + * Initializes a newly created object. + * Override this method to add some logic when your objects are created. + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * init: function () { + * // ... + * } + * }); + */ + init: function () { + }, + + /** + * Copies properties into this object. + * + * @param {Object} properties The properties to mix in. + * + * @example + * + * MyType.mixIn({ + * field: 'value' + * }); + */ + mixIn: function (properties) { + for (var propertyName in properties) { + if (properties.hasOwnProperty(propertyName)) { + this[propertyName] = properties[propertyName]; + } + } + + // IE won't copy toString using the loop above + if (properties.hasOwnProperty('toString')) { + this.toString = properties.toString; + } + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = instance.clone(); + */ + clone: function () { + return this.init.prototype.extend(this); + } + }; + }()); + + /** + * An array of 32-bit words. + * + * @property {Array} words The array of 32-bit words. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var WordArray = C_lib.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of 32-bit words. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.create(); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 4; + } + }, + + /** + * Converts this word array to a string. + * + * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex + * + * @return {string} The stringified word array. + * + * @example + * + * var string = wordArray + ''; + * var string = wordArray.toString(); + * var string = wordArray.toString(CryptoJS.enc.Utf8); + */ + toString: function (encoder) { + return (encoder || Hex).stringify(this); + }, + + /** + * Concatenates a word array to this word array. + * + * @param {WordArray} wordArray The word array to append. + * + * @return {WordArray} This word array. + * + * @example + * + * wordArray1.concat(wordArray2); + */ + concat: function (wordArray) { + // Shortcuts + var thisWords = this.words; + var thatWords = wordArray.words; + var thisSigBytes = this.sigBytes; + var thatSigBytes = wordArray.sigBytes; + + // Clamp excess bits + this.clamp(); + + // Concat + if (thisSigBytes % 4) { + // Copy one byte at a time + for (var i = 0; i < thatSigBytes; i++) { + var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); + } + } else { + // Copy one word at a time + for (var i = 0; i < thatSigBytes; i += 4) { + thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; + } + } + this.sigBytes += thatSigBytes; + + // Chainable + return this; + }, + + /** + * Removes insignificant bits. + * + * @example + * + * wordArray.clamp(); + */ + clamp: function () { + // Shortcuts + var words = this.words; + var sigBytes = this.sigBytes; + + // Clamp + words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); + words.length = Math.ceil(sigBytes / 4); + }, + + /** + * Creates a copy of this word array. + * + * @return {WordArray} The clone. + * + * @example + * + * var clone = wordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone.words = this.words.slice(0); + + return clone; + }, + + /** + * Creates a word array filled with random bytes. + * + * @param {number} nBytes The number of random bytes to generate. + * + * @return {WordArray} The random word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.random(16); + */ + random: function (nBytes) { + var words = []; + + var r = (function (m_w) { + var m_w = m_w; + var m_z = 0x3ade68b1; + var mask = 0xffffffff; + + return function () { + m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; + m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; + var result = ((m_z << 0x10) + m_w) & mask; + result /= 0x100000000; + result += 0.5; + return result * (Math.random() > .5 ? 1 : -1); + } + }); + + for (var i = 0, rcache; i < nBytes; i += 4) { + var _r = r((rcache || Math.random()) * 0x100000000); + + rcache = _r() * 0x3ade67b7; + words.push((_r() * 0x100000000) | 0); + } + + return new WordArray.init(words, nBytes); + } + }); + + /** + * Encoder namespace. + */ + var C_enc = C.enc = {}; + + /** + * Hex encoding strategy. + */ + var Hex = C_enc.Hex = { + /** + * Converts a word array to a hex string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The hex string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.enc.Hex.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var hexChars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + hexChars.push((bite >>> 4).toString(16)); + hexChars.push((bite & 0x0f).toString(16)); + } + + return hexChars.join(''); + }, + + /** + * Converts a hex string to a word array. + * + * @param {string} hexStr The hex string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Hex.parse(hexString); + */ + parse: function (hexStr) { + // Shortcut + var hexStrLength = hexStr.length; + + // Convert + var words = []; + for (var i = 0; i < hexStrLength; i += 2) { + words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); + } + + return new WordArray.init(words, hexStrLength / 2); + } + }; + + /** + * Latin1 encoding strategy. + */ + var Latin1 = C_enc.Latin1 = { + /** + * Converts a word array to a Latin1 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Latin1 string. + * + * @static + * + * @example + * + * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var latin1Chars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + latin1Chars.push(String.fromCharCode(bite)); + } + + return latin1Chars.join(''); + }, + + /** + * Converts a Latin1 string to a word array. + * + * @param {string} latin1Str The Latin1 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); + */ + parse: function (latin1Str) { + // Shortcut + var latin1StrLength = latin1Str.length; + + // Convert + var words = []; + for (var i = 0; i < latin1StrLength; i++) { + words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); + } + + return new WordArray.init(words, latin1StrLength); + } + }; + + /** + * UTF-8 encoding strategy. + */ + var Utf8 = C_enc.Utf8 = { + /** + * Converts a word array to a UTF-8 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-8 string. + * + * @static + * + * @example + * + * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); + */ + stringify: function (wordArray) { + try { + return decodeURIComponent(escape(Latin1.stringify(wordArray))); + } catch (e) { + throw new Error('Malformed UTF-8 data'); + } + }, + + /** + * Converts a UTF-8 string to a word array. + * + * @param {string} utf8Str The UTF-8 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); + */ + parse: function (utf8Str) { + return Latin1.parse(unescape(encodeURIComponent(utf8Str))); + } + }; + + /** + * Abstract buffered block algorithm template. + * + * The property blockSize must be implemented in a concrete subtype. + * + * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 + */ + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ + /** + * Resets this block algorithm's data buffer to its initial state. + * + * @example + * + * bufferedBlockAlgorithm.reset(); + */ + reset: function () { + // Initial values + this._data = new WordArray.init(); + this._nDataBytes = 0; + }, + + /** + * Adds new data to this block algorithm's buffer. + * + * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. + * + * @example + * + * bufferedBlockAlgorithm._append('data'); + * bufferedBlockAlgorithm._append(wordArray); + */ + _append: function (data) { + // Convert string to WordArray, else assume WordArray already + if (typeof data == 'string') { + data = Utf8.parse(data); + } + + // Append + this._data.concat(data); + this._nDataBytes += data.sigBytes; + }, + + /** + * Processes available data blocks. + * + * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. + * + * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. + * + * @return {WordArray} The processed data. + * + * @example + * + * var processedData = bufferedBlockAlgorithm._process(); + * var processedData = bufferedBlockAlgorithm._process(!!'flush'); + */ + _process: function (doFlush) { + // Shortcuts + var data = this._data; + var dataWords = data.words; + var dataSigBytes = data.sigBytes; + var blockSize = this.blockSize; + var blockSizeBytes = blockSize * 4; + + // Count blocks ready + var nBlocksReady = dataSigBytes / blockSizeBytes; + if (doFlush) { + // Round up to include partial blocks + nBlocksReady = Math.ceil(nBlocksReady); + } else { + // Round down to include only full blocks, + // less the number of blocks that must remain in the buffer + nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); + } + + // Count words ready + var nWordsReady = nBlocksReady * blockSize; + + // Count bytes ready + var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); + + // Process blocks + if (nWordsReady) { + for (var offset = 0; offset < nWordsReady; offset += blockSize) { + // Perform concrete-algorithm logic + this._doProcessBlock(dataWords, offset); + } + + // Remove processed words + var processedWords = dataWords.splice(0, nWordsReady); + data.sigBytes -= nBytesReady; + } + + // Return processed words + return new WordArray.init(processedWords, nBytesReady); + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = bufferedBlockAlgorithm.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone._data = this._data.clone(); + + return clone; + }, + + _minBufferSize: 0 + }); + + /** + * Abstract hasher template. + * + * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) + */ + var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + */ + cfg: Base.extend(), + + /** + * Initializes a newly created hasher. + * + * @param {Object} cfg (Optional) The configuration options to use for this hash computation. + * + * @example + * + * var hasher = CryptoJS.algo.SHA256.create(); + */ + init: function (cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Set initial values + this.reset(); + }, + + /** + * Resets this hasher to its initial state. + * + * @example + * + * hasher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-hasher logic + this._doReset(); + }, + + /** + * Updates this hasher with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {Hasher} This hasher. + * + * @example + * + * hasher.update('message'); + * hasher.update(wordArray); + */ + update: function (messageUpdate) { + // Append + this._append(messageUpdate); + + // Update the hash + this._process(); + + // Chainable + return this; + }, + + /** + * Finalizes the hash computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The hash. + * + * @example + * + * var hash = hasher.finalize(); + * var hash = hasher.finalize('message'); + * var hash = hasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Final message update + if (messageUpdate) { + this._append(messageUpdate); + } + + // Perform concrete-hasher logic + var hash = this._doFinalize(); + + return hash; + }, + + blockSize: 512/32, + + /** + * Creates a shortcut function to a hasher's object interface. + * + * @param {Hasher} hasher The hasher to create a helper for. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); + */ + _createHelper: function (hasher) { + return function (message, cfg) { + return new hasher.init(cfg).finalize(message); + }; + }, + + /** + * Creates a shortcut function to the HMAC's object interface. + * + * @param {Hasher} hasher The hasher to use in this HMAC helper. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); + */ + _createHmacHelper: function (hasher) { + return function (message, key) { + return new C_algo.HMAC.init(hasher, key).finalize(message); + }; + } + }); + + /** + * Algorithm namespace. + */ + var C_algo = C.algo = {}; + + return C; +}(Math)); + + +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; + + /** + * Base64 encoding strategy. + */ + var Base64 = C_enc.Base64 = { + /** + * Converts a word array to a Base64 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Base64 string. + * + * @static + * + * @example + * + * var base64String = CryptoJS.enc.Base64.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + var map = this._map; + + // Clamp excess bits + wordArray.clamp(); + + // Convert + var base64Chars = []; + for (var i = 0; i < sigBytes; i += 3) { + var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; + var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; + + var triplet = (byte1 << 16) | (byte2 << 8) | byte3; + + for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { + base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); + } + } + + // Add padding + var paddingChar = map.charAt(64); + if (paddingChar) { + while (base64Chars.length % 4) { + base64Chars.push(paddingChar); + } + } + + return base64Chars.join(''); + }, + + /** + * Converts a Base64 string to a word array. + * + * @param {string} base64Str The Base64 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Base64.parse(base64String); + */ + parse: function (base64Str) { + // Shortcuts + var base64StrLength = base64Str.length; + var map = this._map; + var reverseMap = this._reverseMap; + + if (!reverseMap) { + reverseMap = this._reverseMap = []; + for (var j = 0; j < map.length; j++) { + reverseMap[map.charCodeAt(j)] = j; + } + } + + // Ignore padding + var paddingChar = map.charAt(64); + if (paddingChar) { + var paddingIndex = base64Str.indexOf(paddingChar); + if (paddingIndex !== -1) { + base64StrLength = paddingIndex; + } + } + + // Convert + return parseLoop(base64Str, base64StrLength, reverseMap); + + }, + + _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' + }; + + function parseLoop(base64Str, base64StrLength, reverseMap) { + var words = []; + var nBytes = 0; + for (var i = 0; i < base64StrLength; i++) { + if (i % 4) { + var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); + var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); + words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); + nBytes++; + } + } + return WordArray.create(words, nBytes); + } +}()); + + +(function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Constants table + var T = []; + + // Compute constants + (function () { + for (var i = 0; i < 64; i++) { + T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; + } + }()); + + /** + * MD5 hash algorithm. + */ + var MD5 = C_algo.MD5 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; + + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); + } + + // Shortcuts + var H = this._hash.words; + + var M_offset_0 = M[offset + 0]; + var M_offset_1 = M[offset + 1]; + var M_offset_2 = M[offset + 2]; + var M_offset_3 = M[offset + 3]; + var M_offset_4 = M[offset + 4]; + var M_offset_5 = M[offset + 5]; + var M_offset_6 = M[offset + 6]; + var M_offset_7 = M[offset + 7]; + var M_offset_8 = M[offset + 8]; + var M_offset_9 = M[offset + 9]; + var M_offset_10 = M[offset + 10]; + var M_offset_11 = M[offset + 11]; + var M_offset_12 = M[offset + 12]; + var M_offset_13 = M[offset + 13]; + var M_offset_14 = M[offset + 14]; + var M_offset_15 = M[offset + 15]; + + // Working varialbes + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + + // Computation + a = FF(a, b, c, d, M_offset_0, 7, T[0]); + d = FF(d, a, b, c, M_offset_1, 12, T[1]); + c = FF(c, d, a, b, M_offset_2, 17, T[2]); + b = FF(b, c, d, a, M_offset_3, 22, T[3]); + a = FF(a, b, c, d, M_offset_4, 7, T[4]); + d = FF(d, a, b, c, M_offset_5, 12, T[5]); + c = FF(c, d, a, b, M_offset_6, 17, T[6]); + b = FF(b, c, d, a, M_offset_7, 22, T[7]); + a = FF(a, b, c, d, M_offset_8, 7, T[8]); + d = FF(d, a, b, c, M_offset_9, 12, T[9]); + c = FF(c, d, a, b, M_offset_10, 17, T[10]); + b = FF(b, c, d, a, M_offset_11, 22, T[11]); + a = FF(a, b, c, d, M_offset_12, 7, T[12]); + d = FF(d, a, b, c, M_offset_13, 12, T[13]); + c = FF(c, d, a, b, M_offset_14, 17, T[14]); + b = FF(b, c, d, a, M_offset_15, 22, T[15]); + + a = GG(a, b, c, d, M_offset_1, 5, T[16]); + d = GG(d, a, b, c, M_offset_6, 9, T[17]); + c = GG(c, d, a, b, M_offset_11, 14, T[18]); + b = GG(b, c, d, a, M_offset_0, 20, T[19]); + a = GG(a, b, c, d, M_offset_5, 5, T[20]); + d = GG(d, a, b, c, M_offset_10, 9, T[21]); + c = GG(c, d, a, b, M_offset_15, 14, T[22]); + b = GG(b, c, d, a, M_offset_4, 20, T[23]); + a = GG(a, b, c, d, M_offset_9, 5, T[24]); + d = GG(d, a, b, c, M_offset_14, 9, T[25]); + c = GG(c, d, a, b, M_offset_3, 14, T[26]); + b = GG(b, c, d, a, M_offset_8, 20, T[27]); + a = GG(a, b, c, d, M_offset_13, 5, T[28]); + d = GG(d, a, b, c, M_offset_2, 9, T[29]); + c = GG(c, d, a, b, M_offset_7, 14, T[30]); + b = GG(b, c, d, a, M_offset_12, 20, T[31]); + + a = HH(a, b, c, d, M_offset_5, 4, T[32]); + d = HH(d, a, b, c, M_offset_8, 11, T[33]); + c = HH(c, d, a, b, M_offset_11, 16, T[34]); + b = HH(b, c, d, a, M_offset_14, 23, T[35]); + a = HH(a, b, c, d, M_offset_1, 4, T[36]); + d = HH(d, a, b, c, M_offset_4, 11, T[37]); + c = HH(c, d, a, b, M_offset_7, 16, T[38]); + b = HH(b, c, d, a, M_offset_10, 23, T[39]); + a = HH(a, b, c, d, M_offset_13, 4, T[40]); + d = HH(d, a, b, c, M_offset_0, 11, T[41]); + c = HH(c, d, a, b, M_offset_3, 16, T[42]); + b = HH(b, c, d, a, M_offset_6, 23, T[43]); + a = HH(a, b, c, d, M_offset_9, 4, T[44]); + d = HH(d, a, b, c, M_offset_12, 11, T[45]); + c = HH(c, d, a, b, M_offset_15, 16, T[46]); + b = HH(b, c, d, a, M_offset_2, 23, T[47]); + + a = II(a, b, c, d, M_offset_0, 6, T[48]); + d = II(d, a, b, c, M_offset_7, 10, T[49]); + c = II(c, d, a, b, M_offset_14, 15, T[50]); + b = II(b, c, d, a, M_offset_5, 21, T[51]); + a = II(a, b, c, d, M_offset_12, 6, T[52]); + d = II(d, a, b, c, M_offset_3, 10, T[53]); + c = II(c, d, a, b, M_offset_10, 15, T[54]); + b = II(b, c, d, a, M_offset_1, 21, T[55]); + a = II(a, b, c, d, M_offset_8, 6, T[56]); + d = II(d, a, b, c, M_offset_15, 10, T[57]); + c = II(c, d, a, b, M_offset_6, 15, T[58]); + b = II(b, c, d, a, M_offset_13, 21, T[59]); + a = II(a, b, c, d, M_offset_4, 6, T[60]); + d = II(d, a, b, c, M_offset_11, 10, T[61]); + c = II(c, d, a, b, M_offset_2, 15, T[62]); + b = II(b, c, d, a, M_offset_9, 21, T[63]); + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + + var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); + var nBitsTotalL = nBitsTotal; + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( + (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | + (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) + ); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | + (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) + ); + + data.sigBytes = (dataWords.length + 1) * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var hash = this._hash; + var H = hash.words; + + // Swap endian + for (var i = 0; i < 4; i++) { + // Shortcut + var H_i = H[i]; + + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); + } + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + function FF(a, b, c, d, x, s, t) { + var n = a + ((b & c) | (~b & d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function GG(a, b, c, d, x, s, t) { + var n = a + ((b & d) | (c & ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function HH(a, b, c, d, x, s, t) { + var n = a + (b ^ c ^ d) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function II(a, b, c, d, x, s, t) { + var n = a + (c ^ (b | ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.MD5('message'); + * var hash = CryptoJS.MD5(wordArray); + */ + C.MD5 = Hasher._createHelper(MD5); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacMD5(message, key); + */ + C.HmacMD5 = Hasher._createHmacHelper(MD5); +}(Math)); + + +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Reusable object + var W = []; + + /** + * SHA-1 hash algorithm. + */ + var SHA1 = C_algo.SHA1 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476, + 0xc3d2e1f0 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var H = this._hash.words; + + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + + // Computation + for (var i = 0; i < 80; i++) { + if (i < 16) { + W[i] = M[offset + i] | 0; + } else { + var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; + W[i] = (n << 1) | (n >>> 31); + } + + var t = ((a << 5) | (a >>> 27)) + e + W[i]; + if (i < 20) { + t += ((b & c) | (~b & d)) + 0x5a827999; + } else if (i < 40) { + t += (b ^ c ^ d) + 0x6ed9eba1; + } else if (i < 60) { + t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; + } else /* if (i < 80) */ { + t += (b ^ c ^ d) - 0x359d3e2a; + } + + e = d; + d = c; + c = (b << 30) | (b >>> 2); + b = a; + a = t; + } + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + H[4] = (H[4] + e) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Return final computed hash + return this._hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA1('message'); + * var hash = CryptoJS.SHA1(wordArray); + */ + C.SHA1 = Hasher._createHelper(SHA1); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA1(message, key); + */ + C.HmacSHA1 = Hasher._createHmacHelper(SHA1); +}()); + + +(function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Initialization and round constants tables + var H = []; + var K = []; + + // Compute constants + (function () { + function isPrime(n) { + var sqrtN = Math.sqrt(n); + for (var factor = 2; factor <= sqrtN; factor++) { + if (!(n % factor)) { + return false; + } + } + + return true; + } + + function getFractionalBits(n) { + return ((n - (n | 0)) * 0x100000000) | 0; + } + + var n = 2; + var nPrime = 0; + while (nPrime < 64) { + if (isPrime(n)) { + if (nPrime < 8) { + H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); + } + K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); + + nPrime++; + } + + n++; + } + }()); + + // Reusable object + var W = []; + + /** + * SHA-256 hash algorithm. + */ + var SHA256 = C_algo.SHA256 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init(H.slice(0)); + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var H = this._hash.words; + + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + var f = H[5]; + var g = H[6]; + var h = H[7]; + + // Computation + for (var i = 0; i < 64; i++) { + if (i < 16) { + W[i] = M[offset + i] | 0; + } else { + var gamma0x = W[i - 15]; + var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ + ((gamma0x << 14) | (gamma0x >>> 18)) ^ + (gamma0x >>> 3); + + var gamma1x = W[i - 2]; + var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ + ((gamma1x << 13) | (gamma1x >>> 19)) ^ + (gamma1x >>> 10); + + W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; + } + + var ch = (e & f) ^ (~e & g); + var maj = (a & b) ^ (a & c) ^ (b & c); + + var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); + var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); + + var t1 = h + sigma1 + ch + K[i] + W[i]; + var t2 = sigma0 + maj; + + h = g; + g = f; + f = e; + e = (d + t1) | 0; + d = c; + c = b; + b = a; + a = (t1 + t2) | 0; + } + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + H[4] = (H[4] + e) | 0; + H[5] = (H[5] + f) | 0; + H[6] = (H[6] + g) | 0; + H[7] = (H[7] + h) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Return final computed hash + return this._hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA256('message'); + * var hash = CryptoJS.SHA256(wordArray); + */ + C.SHA256 = Hasher._createHelper(SHA256); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA256(message, key); + */ + C.HmacSHA256 = Hasher._createHmacHelper(SHA256); +}(Math)); + + +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; + + /** + * UTF-16 BE encoding strategy. + */ + var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { + /** + * Converts a word array to a UTF-16 BE string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-16 BE string. + * + * @static + * + * @example + * + * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var utf16Chars = []; + for (var i = 0; i < sigBytes; i += 2) { + var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; + utf16Chars.push(String.fromCharCode(codePoint)); + } + + return utf16Chars.join(''); + }, + + /** + * Converts a UTF-16 BE string to a word array. + * + * @param {string} utf16Str The UTF-16 BE string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); + */ + parse: function (utf16Str) { + // Shortcut + var utf16StrLength = utf16Str.length; + + // Convert + var words = []; + for (var i = 0; i < utf16StrLength; i++) { + words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); + } + + return WordArray.create(words, utf16StrLength * 2); + } + }; + + /** + * UTF-16 LE encoding strategy. + */ + C_enc.Utf16LE = { + /** + * Converts a word array to a UTF-16 LE string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-16 LE string. + * + * @static + * + * @example + * + * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var utf16Chars = []; + for (var i = 0; i < sigBytes; i += 2) { + var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); + utf16Chars.push(String.fromCharCode(codePoint)); + } + + return utf16Chars.join(''); + }, + + /** + * Converts a UTF-16 LE string to a word array. + * + * @param {string} utf16Str The UTF-16 LE string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); + */ + parse: function (utf16Str) { + // Shortcut + var utf16StrLength = utf16Str.length; + + // Convert + var words = []; + for (var i = 0; i < utf16StrLength; i++) { + words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); + } + + return WordArray.create(words, utf16StrLength * 2); + } + }; + + function swapEndian(word) { + return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); + } +}()); + + +(function () { + // Check if typed arrays are supported + if (typeof ArrayBuffer != 'function') { + return; + } + + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + + // Reference original init + var superInit = WordArray.init; + + // Augment WordArray.init to handle typed arrays + var subInit = WordArray.init = function (typedArray) { + // Convert buffers to uint8 + if (typedArray instanceof ArrayBuffer) { + typedArray = new Uint8Array(typedArray); + } + + // Convert other array views to uint8 + if ( + typedArray instanceof Int8Array || + (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || + typedArray instanceof Int16Array || + typedArray instanceof Uint16Array || + typedArray instanceof Int32Array || + typedArray instanceof Uint32Array || + typedArray instanceof Float32Array || + typedArray instanceof Float64Array + ) { + typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); + } + + // Handle Uint8Array + if (typedArray instanceof Uint8Array) { + // Shortcut + var typedArrayByteLength = typedArray.byteLength; + + // Extract bytes + var words = []; + for (var i = 0; i < typedArrayByteLength; i++) { + words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); + } + + // Initialize this word array + superInit.call(this, words, typedArrayByteLength); + } else { + // Else call normal init + superInit.apply(this, arguments); + } + }; + + subInit.prototype = WordArray; +}()); + + +/** @preserve + (c) 2012 by Cédric Mesnil. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +(function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Constants table + var _zl = WordArray.create([ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); + var _zr = WordArray.create([ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); + var _sl = WordArray.create([ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); + var _sr = WordArray.create([ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); + + var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); + var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); + + /** + * RIPEMD160 hash algorithm. + */ + var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ + _doReset: function () { + this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); + }, + + _doProcessBlock: function (M, offset) { + + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; + + // Swap + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); + } + // Shortcut + var H = this._hash.words; + var hl = _hl.words; + var hr = _hr.words; + var zl = _zl.words; + var zr = _zr.words; + var sl = _sl.words; + var sr = _sr.words; + + // Working variables + var al, bl, cl, dl, el; + var ar, br, cr, dr, er; + + ar = al = H[0]; + br = bl = H[1]; + cr = cl = H[2]; + dr = dl = H[3]; + er = el = H[4]; + // Computation + var t; + for (var i = 0; i < 80; i += 1) { + t = (al + M[offset+zl[i]])|0; + if (i<16){ + t += f1(bl,cl,dl) + hl[0]; + } else if (i<32) { + t += f2(bl,cl,dl) + hl[1]; + } else if (i<48) { + t += f3(bl,cl,dl) + hl[2]; + } else if (i<64) { + t += f4(bl,cl,dl) + hl[3]; + } else {// if (i<80) { + t += f5(bl,cl,dl) + hl[4]; + } + t = t|0; + t = rotl(t,sl[i]); + t = (t+el)|0; + al = el; + el = dl; + dl = rotl(cl, 10); + cl = bl; + bl = t; + + t = (ar + M[offset+zr[i]])|0; + if (i<16){ + t += f5(br,cr,dr) + hr[0]; + } else if (i<32) { + t += f4(br,cr,dr) + hr[1]; + } else if (i<48) { + t += f3(br,cr,dr) + hr[2]; + } else if (i<64) { + t += f2(br,cr,dr) + hr[3]; + } else {// if (i<80) { + t += f1(br,cr,dr) + hr[4]; + } + t = t|0; + t = rotl(t,sr[i]) ; + t = (t+er)|0; + ar = er; + er = dr; + dr = rotl(cr, 10); + cr = br; + br = t; + } + // Intermediate hash value + t = (H[1] + cl + dr)|0; + H[1] = (H[2] + dl + er)|0; + H[2] = (H[3] + el + ar)|0; + H[3] = (H[4] + al + br)|0; + H[4] = (H[0] + bl + cr)|0; + H[0] = t; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | + (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) + ); + data.sigBytes = (dataWords.length + 1) * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var hash = this._hash; + var H = hash.words; + + // Swap endian + for (var i = 0; i < 5; i++) { + // Shortcut + var H_i = H[i]; + + // Swap + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); + } + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + + function f1(x, y, z) { + return ((x) ^ (y) ^ (z)); + + } + + function f2(x, y, z) { + return (((x)&(y)) | ((~x)&(z))); + } + + function f3(x, y, z) { + return (((x) | (~(y))) ^ (z)); + } + + function f4(x, y, z) { + return (((x) & (z)) | ((y)&(~(z)))); + } + + function f5(x, y, z) { + return ((x) ^ ((y) |(~(z)))); + + } + + function rotl(x,n) { + return (x<>>(32-n)); + } + + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.RIPEMD160('message'); + * var hash = CryptoJS.RIPEMD160(wordArray); + */ + C.RIPEMD160 = Hasher._createHelper(RIPEMD160); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacRIPEMD160(message, key); + */ + C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); +}(Math)); + + +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var C_enc = C.enc; + var Utf8 = C_enc.Utf8; + var C_algo = C.algo; + + /** + * HMAC algorithm. + */ + var HMAC = C_algo.HMAC = Base.extend({ + /** + * Initializes a newly created HMAC. + * + * @param {Hasher} hasher The hash algorithm to use. + * @param {WordArray|string} key The secret key. + * + * @example + * + * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); + */ + init: function (hasher, key) { + // Init hasher + hasher = this._hasher = new hasher.init(); + + // Convert string to WordArray, else assume WordArray already + if (typeof key == 'string') { + key = Utf8.parse(key); + } + + // Shortcuts + var hasherBlockSize = hasher.blockSize; + var hasherBlockSizeBytes = hasherBlockSize * 4; + + // Allow arbitrary length keys + if (key.sigBytes > hasherBlockSizeBytes) { + key = hasher.finalize(key); + } + + // Clamp excess bits + key.clamp(); + + // Clone key for inner and outer pads + var oKey = this._oKey = key.clone(); + var iKey = this._iKey = key.clone(); + + // Shortcuts + var oKeyWords = oKey.words; + var iKeyWords = iKey.words; + + // XOR keys with pad constants + for (var i = 0; i < hasherBlockSize; i++) { + oKeyWords[i] ^= 0x5c5c5c5c; + iKeyWords[i] ^= 0x36363636; + } + oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; + + // Set initial values + this.reset(); + }, + + /** + * Resets this HMAC to its initial state. + * + * @example + * + * hmacHasher.reset(); + */ + reset: function () { + // Shortcut + var hasher = this._hasher; + + // Reset + hasher.reset(); + hasher.update(this._iKey); + }, + + /** + * Updates this HMAC with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {HMAC} This HMAC instance. + * + * @example + * + * hmacHasher.update('message'); + * hmacHasher.update(wordArray); + */ + update: function (messageUpdate) { + this._hasher.update(messageUpdate); + + // Chainable + return this; + }, + + /** + * Finalizes the HMAC computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The HMAC. + * + * @example + * + * var hmac = hmacHasher.finalize(); + * var hmac = hmacHasher.finalize('message'); + * var hmac = hmacHasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Shortcut + var hasher = this._hasher; + + // Compute HMAC + var innerHash = hasher.finalize(messageUpdate); + hasher.reset(); + var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); + + return hmac; + } + }); +}()); + + +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var SHA1 = C_algo.SHA1; + var HMAC = C_algo.HMAC; + + /** + * Password-Based Key Derivation Function 2 algorithm. + */ + var PBKDF2 = C_algo.PBKDF2 = Base.extend({ + /** + * Configuration options. + * + * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) + * @property {Hasher} hasher The hasher to use. Default: SHA1 + * @property {number} iterations The number of iterations to perform. Default: 1 + */ + cfg: Base.extend({ + keySize: 128/32, + hasher: SHA1, + iterations: 1 + }), + + /** + * Initializes a newly created key derivation function. + * + * @param {Object} cfg (Optional) The configuration options to use for the derivation. + * + * @example + * + * var kdf = CryptoJS.algo.PBKDF2.create(); + * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); + * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); + */ + init: function (cfg) { + this.cfg = this.cfg.extend(cfg); + }, + + /** + * Computes the Password-Based Key Derivation Function 2. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * + * @return {WordArray} The derived key. + * + * @example + * + * var key = kdf.compute(password, salt); + */ + compute: function (password, salt) { + // Shortcut + var cfg = this.cfg; + + // Init HMAC + var hmac = HMAC.create(cfg.hasher, password); + + // Initial values + var derivedKey = WordArray.create(); + var blockIndex = WordArray.create([0x00000001]); + + // Shortcuts + var derivedKeyWords = derivedKey.words; + var blockIndexWords = blockIndex.words; + var keySize = cfg.keySize; + var iterations = cfg.iterations; + + // Generate key + while (derivedKeyWords.length < keySize) { + var block = hmac.update(salt).finalize(blockIndex); + hmac.reset(); + + // Shortcuts + var blockWords = block.words; + var blockWordsLength = blockWords.length; + + // Iterations + var intermediate = block; + for (var i = 1; i < iterations; i++) { + intermediate = hmac.finalize(intermediate); + hmac.reset(); + + // Shortcut + var intermediateWords = intermediate.words; + + // XOR intermediate with block + for (var j = 0; j < blockWordsLength; j++) { + blockWords[j] ^= intermediateWords[j]; + } + } + + derivedKey.concat(block); + blockIndexWords[0]++; + } + derivedKey.sigBytes = keySize * 4; + + return derivedKey; + } + }); + + /** + * Computes the Password-Based Key Derivation Function 2. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * @param {Object} cfg (Optional) The configuration options to use for this computation. + * + * @return {WordArray} The derived key. + * + * @static + * + * @example + * + * var key = CryptoJS.PBKDF2(password, salt); + * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); + * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); + */ + C.PBKDF2 = function (password, salt, cfg) { + return PBKDF2.create(cfg).compute(password, salt); + }; +}()); + + +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var MD5 = C_algo.MD5; + + /** + * This key derivation function is meant to conform with EVP_BytesToKey. + * www.openssl.org/docs/crypto/EVP_BytesToKey.html + */ + var EvpKDF = C_algo.EvpKDF = Base.extend({ + /** + * Configuration options. + * + * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) + * @property {Hasher} hasher The hash algorithm to use. Default: MD5 + * @property {number} iterations The number of iterations to perform. Default: 1 + */ + cfg: Base.extend({ + keySize: 128/32, + hasher: MD5, + iterations: 1 + }), + + /** + * Initializes a newly created key derivation function. + * + * @param {Object} cfg (Optional) The configuration options to use for the derivation. + * + * @example + * + * var kdf = CryptoJS.algo.EvpKDF.create(); + * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); + * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); + */ + init: function (cfg) { + this.cfg = this.cfg.extend(cfg); + }, + + /** + * Derives a key from a password. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * + * @return {WordArray} The derived key. + * + * @example + * + * var key = kdf.compute(password, salt); + */ + compute: function (password, salt) { + // Shortcut + var cfg = this.cfg; + + // Init hasher + var hasher = cfg.hasher.create(); + + // Initial values + var derivedKey = WordArray.create(); + + // Shortcuts + var derivedKeyWords = derivedKey.words; + var keySize = cfg.keySize; + var iterations = cfg.iterations; + + // Generate key + while (derivedKeyWords.length < keySize) { + if (block) { + hasher.update(block); + } + var block = hasher.update(password).finalize(salt); + hasher.reset(); + + // Iterations + for (var i = 1; i < iterations; i++) { + block = hasher.finalize(block); + hasher.reset(); + } + + derivedKey.concat(block); + } + derivedKey.sigBytes = keySize * 4; + + return derivedKey; + } + }); + + /** + * Derives a key from a password. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * @param {Object} cfg (Optional) The configuration options to use for this computation. + * + * @return {WordArray} The derived key. + * + * @static + * + * @example + * + * var key = CryptoJS.EvpKDF(password, salt); + * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); + * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); + */ + C.EvpKDF = function (password, salt, cfg) { + return EvpKDF.create(cfg).compute(password, salt); + }; +}()); + + +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var SHA256 = C_algo.SHA256; + + /** + * SHA-224 hash algorithm. + */ + var SHA224 = C_algo.SHA224 = SHA256.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, + 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 + ]); + }, + + _doFinalize: function () { + var hash = SHA256._doFinalize.call(this); + + hash.sigBytes -= 4; + + return hash; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA224('message'); + * var hash = CryptoJS.SHA224(wordArray); + */ + C.SHA224 = SHA256._createHelper(SHA224); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA224(message, key); + */ + C.HmacSHA224 = SHA256._createHmacHelper(SHA224); +}()); + + +(function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var X32WordArray = C_lib.WordArray; + + /** + * x64 namespace. + */ + var C_x64 = C.x64 = {}; + + /** + * A 64-bit word. + */ + var X64Word = C_x64.Word = Base.extend({ + /** + * Initializes a newly created 64-bit word. + * + * @param {number} high The high 32 bits. + * @param {number} low The low 32 bits. + * + * @example + * + * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); + */ + init: function (high, low) { + this.high = high; + this.low = low; + } + + /** + * Bitwise NOTs this word. + * + * @return {X64Word} A new x64-Word object after negating. + * + * @example + * + * var negated = x64Word.not(); + */ + // not: function () { + // var high = ~this.high; + // var low = ~this.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise ANDs this word with the passed word. + * + * @param {X64Word} word The x64-Word to AND with this word. + * + * @return {X64Word} A new x64-Word object after ANDing. + * + * @example + * + * var anded = x64Word.and(anotherX64Word); + */ + // and: function (word) { + // var high = this.high & word.high; + // var low = this.low & word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise ORs this word with the passed word. + * + * @param {X64Word} word The x64-Word to OR with this word. + * + * @return {X64Word} A new x64-Word object after ORing. + * + * @example + * + * var ored = x64Word.or(anotherX64Word); + */ + // or: function (word) { + // var high = this.high | word.high; + // var low = this.low | word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise XORs this word with the passed word. + * + * @param {X64Word} word The x64-Word to XOR with this word. + * + * @return {X64Word} A new x64-Word object after XORing. + * + * @example + * + * var xored = x64Word.xor(anotherX64Word); + */ + // xor: function (word) { + // var high = this.high ^ word.high; + // var low = this.low ^ word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Shifts this word n bits to the left. + * + * @param {number} n The number of bits to shift. + * + * @return {X64Word} A new x64-Word object after shifting. + * + * @example + * + * var shifted = x64Word.shiftL(25); + */ + // shiftL: function (n) { + // if (n < 32) { + // var high = (this.high << n) | (this.low >>> (32 - n)); + // var low = this.low << n; + // } else { + // var high = this.low << (n - 32); + // var low = 0; + // } + + // return X64Word.create(high, low); + // }, + + /** + * Shifts this word n bits to the right. + * + * @param {number} n The number of bits to shift. + * + * @return {X64Word} A new x64-Word object after shifting. + * + * @example + * + * var shifted = x64Word.shiftR(7); + */ + // shiftR: function (n) { + // if (n < 32) { + // var low = (this.low >>> n) | (this.high << (32 - n)); + // var high = this.high >>> n; + // } else { + // var low = this.high >>> (n - 32); + // var high = 0; + // } + + // return X64Word.create(high, low); + // }, + + /** + * Rotates this word n bits to the left. + * + * @param {number} n The number of bits to rotate. + * + * @return {X64Word} A new x64-Word object after rotating. + * + * @example + * + * var rotated = x64Word.rotL(25); + */ + // rotL: function (n) { + // return this.shiftL(n).or(this.shiftR(64 - n)); + // }, + + /** + * Rotates this word n bits to the right. + * + * @param {number} n The number of bits to rotate. + * + * @return {X64Word} A new x64-Word object after rotating. + * + * @example + * + * var rotated = x64Word.rotR(7); + */ + // rotR: function (n) { + // return this.shiftR(n).or(this.shiftL(64 - n)); + // }, + + /** + * Adds this word with the passed word. + * + * @param {X64Word} word The x64-Word to add with this word. + * + * @return {X64Word} A new x64-Word object after adding. + * + * @example + * + * var added = x64Word.add(anotherX64Word); + */ + // add: function (word) { + // var low = (this.low + word.low) | 0; + // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; + // var high = (this.high + word.high + carry) | 0; + + // return X64Word.create(high, low); + // } + }); + + /** + * An array of 64-bit words. + * + * @property {Array} words The array of CryptoJS.x64.Word objects. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var X64WordArray = C_x64.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.x64.WordArray.create(); + * + * var wordArray = CryptoJS.x64.WordArray.create([ + * CryptoJS.x64.Word.create(0x00010203, 0x04050607), + * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) + * ]); + * + * var wordArray = CryptoJS.x64.WordArray.create([ + * CryptoJS.x64.Word.create(0x00010203, 0x04050607), + * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) + * ], 10); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 8; + } + }, + + /** + * Converts this 64-bit word array to a 32-bit word array. + * + * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. + * + * @example + * + * var x32WordArray = x64WordArray.toX32(); + */ + toX32: function () { + // Shortcuts + var x64Words = this.words; + var x64WordsLength = x64Words.length; + + // Convert + var x32Words = []; + for (var i = 0; i < x64WordsLength; i++) { + var x64Word = x64Words[i]; + x32Words.push(x64Word.high); + x32Words.push(x64Word.low); + } + + return X32WordArray.create(x32Words, this.sigBytes); + }, + + /** + * Creates a copy of this word array. + * + * @return {X64WordArray} The clone. + * + * @example + * + * var clone = x64WordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + + // Clone "words" array + var words = clone.words = this.words.slice(0); + + // Clone each X64Word object + var wordsLength = words.length; + for (var i = 0; i < wordsLength; i++) { + words[i] = words[i].clone(); + } + + return clone; + } + }); +}()); + + +(function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_x64 = C.x64; + var X64Word = C_x64.Word; + var C_algo = C.algo; + + // Constants tables + var RHO_OFFSETS = []; + var PI_INDEXES = []; + var ROUND_CONSTANTS = []; + + // Compute Constants + (function () { + // Compute rho offset constants + var x = 1, y = 0; + for (var t = 0; t < 24; t++) { + RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; + + var newX = y % 5; + var newY = (2 * x + 3 * y) % 5; + x = newX; + y = newY; + } + + // Compute pi index constants + for (var x = 0; x < 5; x++) { + for (var y = 0; y < 5; y++) { + PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; + } + } + + // Compute round constants + var LFSR = 0x01; + for (var i = 0; i < 24; i++) { + var roundConstantMsw = 0; + var roundConstantLsw = 0; + + for (var j = 0; j < 7; j++) { + if (LFSR & 0x01) { + var bitPosition = (1 << j) - 1; + if (bitPosition < 32) { + roundConstantLsw ^= 1 << bitPosition; + } else /* if (bitPosition >= 32) */ { + roundConstantMsw ^= 1 << (bitPosition - 32); + } + } + + // Compute next LFSR + if (LFSR & 0x80) { + // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 + LFSR = (LFSR << 1) ^ 0x71; + } else { + LFSR <<= 1; + } + } + + ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); + } + }()); + + // Reusable objects for temporary values + var T = []; + (function () { + for (var i = 0; i < 25; i++) { + T[i] = X64Word.create(); + } + }()); + + /** + * SHA-3 hash algorithm. + */ + var SHA3 = C_algo.SHA3 = Hasher.extend({ + /** + * Configuration options. + * + * @property {number} outputLength + * The desired number of bits in the output hash. + * Only values permitted are: 224, 256, 384, 512. + * Default: 512 + */ + cfg: Hasher.cfg.extend({ + outputLength: 512 + }), + + _doReset: function () { + var state = this._state = [] + for (var i = 0; i < 25; i++) { + state[i] = new X64Word.init(); + } + + this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; + }, + + _doProcessBlock: function (M, offset) { + // Shortcuts + var state = this._state; + var nBlockSizeLanes = this.blockSize / 2; + + // Absorb + for (var i = 0; i < nBlockSizeLanes; i++) { + // Shortcuts + var M2i = M[offset + 2 * i]; + var M2i1 = M[offset + 2 * i + 1]; + + // Swap endian + M2i = ( + (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | + (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) + ); + M2i1 = ( + (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | + (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) + ); + + // Absorb message into state + var lane = state[i]; + lane.high ^= M2i1; + lane.low ^= M2i; + } + + // Rounds + for (var round = 0; round < 24; round++) { + // Theta + for (var x = 0; x < 5; x++) { + // Mix column lanes + var tMsw = 0, tLsw = 0; + for (var y = 0; y < 5; y++) { + var lane = state[x + 5 * y]; + tMsw ^= lane.high; + tLsw ^= lane.low; + } + + // Temporary values + var Tx = T[x]; + Tx.high = tMsw; + Tx.low = tLsw; + } + for (var x = 0; x < 5; x++) { + // Shortcuts + var Tx4 = T[(x + 4) % 5]; + var Tx1 = T[(x + 1) % 5]; + var Tx1Msw = Tx1.high; + var Tx1Lsw = Tx1.low; + + // Mix surrounding columns + var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); + var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); + for (var y = 0; y < 5; y++) { + var lane = state[x + 5 * y]; + lane.high ^= tMsw; + lane.low ^= tLsw; + } + } + + // Rho Pi + for (var laneIndex = 1; laneIndex < 25; laneIndex++) { + // Shortcuts + var lane = state[laneIndex]; + var laneMsw = lane.high; + var laneLsw = lane.low; + var rhoOffset = RHO_OFFSETS[laneIndex]; + + // Rotate lanes + if (rhoOffset < 32) { + var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); + var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); + } else /* if (rhoOffset >= 32) */ { + var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); + var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); + } + + // Transpose lanes + var TPiLane = T[PI_INDEXES[laneIndex]]; + TPiLane.high = tMsw; + TPiLane.low = tLsw; + } + + // Rho pi at x = y = 0 + var T0 = T[0]; + var state0 = state[0]; + T0.high = state0.high; + T0.low = state0.low; + + // Chi + for (var x = 0; x < 5; x++) { + for (var y = 0; y < 5; y++) { + // Shortcuts + var laneIndex = x + 5 * y; + var lane = state[laneIndex]; + var TLane = T[laneIndex]; + var Tx1Lane = T[((x + 1) % 5) + 5 * y]; + var Tx2Lane = T[((x + 2) % 5) + 5 * y]; + + // Mix rows + lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); + lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); + } + } + + // Iota + var lane = state[0]; + var roundConstant = ROUND_CONSTANTS[round]; + lane.high ^= roundConstant.high; + lane.low ^= roundConstant.low;; + } + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + var blockSizeBits = this.blockSize * 32; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); + dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var state = this._state; + var outputLengthBytes = this.cfg.outputLength / 8; + var outputLengthLanes = outputLengthBytes / 8; + + // Squeeze + var hashWords = []; + for (var i = 0; i < outputLengthLanes; i++) { + // Shortcuts + var lane = state[i]; + var laneMsw = lane.high; + var laneLsw = lane.low; + + // Swap endian + laneMsw = ( + (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | + (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) + ); + laneLsw = ( + (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | + (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) + ); + + // Squeeze state to retrieve hash + hashWords.push(laneLsw); + hashWords.push(laneMsw); + } + + // Return final computed hash + return new WordArray.init(hashWords, outputLengthBytes); + }, + + clone: function () { + var clone = Hasher.clone.call(this); + + var state = clone._state = this._state.slice(0); + for (var i = 0; i < 25; i++) { + state[i] = state[i].clone(); + } + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA3('message'); + * var hash = CryptoJS.SHA3(wordArray); + */ + C.SHA3 = Hasher._createHelper(SHA3); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA3(message, key); + */ + C.HmacSHA3 = Hasher._createHmacHelper(SHA3); +}(Math)); + + +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Hasher = C_lib.Hasher; + var C_x64 = C.x64; + var X64Word = C_x64.Word; + var X64WordArray = C_x64.WordArray; + var C_algo = C.algo; + + function X64Word_create() { + return X64Word.create.apply(X64Word, arguments); + } + + // Constants + var K = [ + X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), + X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), + X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), + X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), + X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), + X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), + X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), + X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), + X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), + X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), + X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), + X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), + X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), + X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), + X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), + X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), + X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), + X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), + X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), + X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), + X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), + X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), + X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), + X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), + X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), + X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), + X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), + X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), + X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), + X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), + X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), + X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), + X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), + X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), + X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), + X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), + X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), + X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), + X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), + X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) + ]; + + // Reusable objects + var W = []; + (function () { + for (var i = 0; i < 80; i++) { + W[i] = X64Word_create(); + } + }()); + + /** + * SHA-512 hash algorithm. + */ + var SHA512 = C_algo.SHA512 = Hasher.extend({ + _doReset: function () { + this._hash = new X64WordArray.init([ + new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), + new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), + new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), + new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) + ]); + }, + + _doProcessBlock: function (M, offset) { + // Shortcuts + var H = this._hash.words; + + var H0 = H[0]; + var H1 = H[1]; + var H2 = H[2]; + var H3 = H[3]; + var H4 = H[4]; + var H5 = H[5]; + var H6 = H[6]; + var H7 = H[7]; + + var H0h = H0.high; + var H0l = H0.low; + var H1h = H1.high; + var H1l = H1.low; + var H2h = H2.high; + var H2l = H2.low; + var H3h = H3.high; + var H3l = H3.low; + var H4h = H4.high; + var H4l = H4.low; + var H5h = H5.high; + var H5l = H5.low; + var H6h = H6.high; + var H6l = H6.low; + var H7h = H7.high; + var H7l = H7.low; + + // Working variables + var ah = H0h; + var al = H0l; + var bh = H1h; + var bl = H1l; + var ch = H2h; + var cl = H2l; + var dh = H3h; + var dl = H3l; + var eh = H4h; + var el = H4l; + var fh = H5h; + var fl = H5l; + var gh = H6h; + var gl = H6l; + var hh = H7h; + var hl = H7l; + + // Rounds + for (var i = 0; i < 80; i++) { + // Shortcut + var Wi = W[i]; + + // Extend message + if (i < 16) { + var Wih = Wi.high = M[offset + i * 2] | 0; + var Wil = Wi.low = M[offset + i * 2 + 1] | 0; + } else { + // Gamma0 + var gamma0x = W[i - 15]; + var gamma0xh = gamma0x.high; + var gamma0xl = gamma0x.low; + var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); + var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); + + // Gamma1 + var gamma1x = W[i - 2]; + var gamma1xh = gamma1x.high; + var gamma1xl = gamma1x.low; + var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); + var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); + + // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] + var Wi7 = W[i - 7]; + var Wi7h = Wi7.high; + var Wi7l = Wi7.low; + + var Wi16 = W[i - 16]; + var Wi16h = Wi16.high; + var Wi16l = Wi16.low; + + var Wil = gamma0l + Wi7l; + var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); + var Wil = Wil + gamma1l; + var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); + var Wil = Wil + Wi16l; + var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); + + Wi.high = Wih; + Wi.low = Wil; + } + + var chh = (eh & fh) ^ (~eh & gh); + var chl = (el & fl) ^ (~el & gl); + var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); + var majl = (al & bl) ^ (al & cl) ^ (bl & cl); + + var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); + var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); + var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); + var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); + + // t1 = h + sigma1 + ch + K[i] + W[i] + var Ki = K[i]; + var Kih = Ki.high; + var Kil = Ki.low; + + var t1l = hl + sigma1l; + var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); + var t1l = t1l + chl; + var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); + var t1l = t1l + Kil; + var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); + var t1l = t1l + Wil; + var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); + + // t2 = sigma0 + maj + var t2l = sigma0l + majl; + var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); + + // Update working variables + hh = gh; + hl = gl; + gh = fh; + gl = fl; + fh = eh; + fl = el; + el = (dl + t1l) | 0; + eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; + dh = ch; + dl = cl; + ch = bh; + cl = bl; + bh = ah; + bl = al; + al = (t1l + t2l) | 0; + ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; + } + + // Intermediate hash value + H0l = H0.low = (H0l + al); + H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); + H1l = H1.low = (H1l + bl); + H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); + H2l = H2.low = (H2l + cl); + H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); + H3l = H3.low = (H3l + dl); + H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); + H4l = H4.low = (H4l + el); + H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); + H5l = H5.low = (H5l + fl); + H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); + H6l = H6.low = (H6l + gl); + H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); + H7l = H7.low = (H7l + hl); + H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Convert hash to 32-bit word array before returning + var hash = this._hash.toX32(); + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + }, + + blockSize: 1024/32 + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA512('message'); + * var hash = CryptoJS.SHA512(wordArray); + */ + C.SHA512 = Hasher._createHelper(SHA512); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA512(message, key); + */ + C.HmacSHA512 = Hasher._createHmacHelper(SHA512); +}()); + + +(function () { + // Shortcuts + var C = CryptoJS; + var C_x64 = C.x64; + var X64Word = C_x64.Word; + var X64WordArray = C_x64.WordArray; + var C_algo = C.algo; + var SHA512 = C_algo.SHA512; + + /** + * SHA-384 hash algorithm. + */ + var SHA384 = C_algo.SHA384 = SHA512.extend({ + _doReset: function () { + this._hash = new X64WordArray.init([ + new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), + new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), + new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), + new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) + ]); + }, + + _doFinalize: function () { + var hash = SHA512._doFinalize.call(this); + + hash.sigBytes -= 16; + + return hash; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA384('message'); + * var hash = CryptoJS.SHA384(wordArray); + */ + C.SHA384 = SHA512._createHelper(SHA384); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA384(message, key); + */ + C.HmacSHA384 = SHA512._createHmacHelper(SHA384); +}()); + + +/** + * Cipher core components. + */ +CryptoJS.lib.Cipher || (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; + var C_enc = C.enc; + var Utf8 = C_enc.Utf8; + var Base64 = C_enc.Base64; + var C_algo = C.algo; + var EvpKDF = C_algo.EvpKDF; + + /** + * Abstract base cipher template. + * + * @property {number} keySize This cipher's key size. Default: 4 (128 bits) + * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) + * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. + * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. + */ + var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + * + * @property {WordArray} iv The IV to use for this operation. + */ + cfg: Base.extend(), + + /** + * Creates this cipher in encryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); + */ + createEncryptor: function (key, cfg) { + return this.create(this._ENC_XFORM_MODE, key, cfg); + }, + + /** + * Creates this cipher in decryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); + */ + createDecryptor: function (key, cfg) { + return this.create(this._DEC_XFORM_MODE, key, cfg); + }, + + /** + * Initializes a newly created cipher. + * + * @param {number} xformMode Either the encryption or decryption transormation mode constant. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @example + * + * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); + */ + init: function (xformMode, key, cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Store transform mode and key + this._xformMode = xformMode; + this._key = key; + + // Set initial values + this.reset(); + }, + + /** + * Resets this cipher to its initial state. + * + * @example + * + * cipher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-cipher logic + this._doReset(); + }, + + /** + * Adds data to be encrypted or decrypted. + * + * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. + * + * @return {WordArray} The data after processing. + * + * @example + * + * var encrypted = cipher.process('data'); + * var encrypted = cipher.process(wordArray); + */ + process: function (dataUpdate) { + // Append + this._append(dataUpdate); + + // Process available blocks + return this._process(); + }, + + /** + * Finalizes the encryption or decryption process. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. + * + * @return {WordArray} The data after final processing. + * + * @example + * + * var encrypted = cipher.finalize(); + * var encrypted = cipher.finalize('data'); + * var encrypted = cipher.finalize(wordArray); + */ + finalize: function (dataUpdate) { + // Final data update + if (dataUpdate) { + this._append(dataUpdate); + } + + // Perform concrete-cipher logic + var finalProcessedData = this._doFinalize(); + + return finalProcessedData; + }, + + keySize: 128/32, + + ivSize: 128/32, + + _ENC_XFORM_MODE: 1, + + _DEC_XFORM_MODE: 2, + + /** + * Creates shortcut functions to a cipher's object interface. + * + * @param {Cipher} cipher The cipher to create a helper for. + * + * @return {Object} An object with encrypt and decrypt shortcut functions. + * + * @static + * + * @example + * + * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); + */ + _createHelper: (function () { + function selectCipherStrategy(key) { + if (typeof key == 'string') { + return PasswordBasedCipher; + } else { + return SerializableCipher; + } + } + + return function (cipher) { + return { + encrypt: function (message, key, cfg) { + return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); + }, + + decrypt: function (ciphertext, key, cfg) { + return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); + } + }; + }; + }()) + }); + + /** + * Abstract base stream cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) + */ + var StreamCipher = C_lib.StreamCipher = Cipher.extend({ + _doFinalize: function () { + // Process partial blocks + var finalProcessedBlocks = this._process(!!'flush'); + + return finalProcessedBlocks; + }, + + blockSize: 1 + }); + + /** + * Mode namespace. + */ + var C_mode = C.mode = {}; + + /** + * Abstract base block cipher mode template. + */ + var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ + /** + * Creates this mode for encryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); + */ + createEncryptor: function (cipher, iv) { + return this.Encryptor.create(cipher, iv); + }, + + /** + * Creates this mode for decryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); + */ + createDecryptor: function (cipher, iv) { + return this.Decryptor.create(cipher, iv); + }, + + /** + * Initializes a newly created mode. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @example + * + * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); + */ + init: function (cipher, iv) { + this._cipher = cipher; + this._iv = iv; + } + }); + + /** + * Cipher Block Chaining mode. + */ + var CBC = C_mode.CBC = (function () { + /** + * Abstract base CBC mode. + */ + var CBC = BlockCipherMode.extend(); + + /** + * CBC encryptor. + */ + CBC.Encryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // XOR and encrypt + xorBlock.call(this, words, offset, blockSize); + cipher.encryptBlock(words, offset); + + // Remember this block to use with next block + this._prevBlock = words.slice(offset, offset + blockSize); + } + }); + + /** + * CBC decryptor. + */ + CBC.Decryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // Remember this block to use with next block + var thisBlock = words.slice(offset, offset + blockSize); + + // Decrypt and XOR + cipher.decryptBlock(words, offset); + xorBlock.call(this, words, offset, blockSize); + + // This block becomes the previous block + this._prevBlock = thisBlock; + } + }); + + function xorBlock(words, offset, blockSize) { + // Shortcut + var iv = this._iv; + + // Choose mixing block + if (iv) { + var block = iv; + + // Remove IV for subsequent blocks + this._iv = undefined; + } else { + var block = this._prevBlock; + } + + // XOR blocks + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= block[i]; + } + } + + return CBC; + }()); + + /** + * Padding namespace. + */ + var C_pad = C.pad = {}; + + /** + * PKCS #5/7 padding strategy. + */ + var Pkcs7 = C_pad.Pkcs7 = { + /** + * Pads data using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to pad. + * @param {number} blockSize The multiple that the data should be padded to. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.pad(wordArray, 4); + */ + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; + + // Create padding word + var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; + + // Create padding + var paddingWords = []; + for (var i = 0; i < nPaddingBytes; i += 4) { + paddingWords.push(paddingWord); + } + var padding = WordArray.create(paddingWords, nPaddingBytes); + + // Add padding + data.concat(padding); + }, + + /** + * Unpads data that had been padded using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to unpad. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.unpad(wordArray); + */ + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; + + /** + * Abstract base block cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) + */ + var BlockCipher = C_lib.BlockCipher = Cipher.extend({ + /** + * Configuration options. + * + * @property {Mode} mode The block mode to use. Default: CBC + * @property {Padding} padding The padding strategy to use. Default: Pkcs7 + */ + cfg: Cipher.cfg.extend({ + mode: CBC, + padding: Pkcs7 + }), + + reset: function () { + // Reset cipher + Cipher.reset.call(this); + + // Shortcuts + var cfg = this.cfg; + var iv = cfg.iv; + var mode = cfg.mode; + + // Reset block mode + if (this._xformMode == this._ENC_XFORM_MODE) { + var modeCreator = mode.createEncryptor; + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + var modeCreator = mode.createDecryptor; + // Keep at least one block in the buffer for unpadding + this._minBufferSize = 1; + } + + if (this._mode && this._mode.__creator == modeCreator) { + this._mode.init(this, iv && iv.words); + } else { + this._mode = modeCreator.call(mode, this, iv && iv.words); + this._mode.__creator = modeCreator; + } + }, + + _doProcessBlock: function (words, offset) { + this._mode.processBlock(words, offset); + }, + + _doFinalize: function () { + // Shortcut + var padding = this.cfg.padding; + + // Finalize + if (this._xformMode == this._ENC_XFORM_MODE) { + // Pad data + padding.pad(this._data, this.blockSize); + + // Process final blocks + var finalProcessedBlocks = this._process(!!'flush'); + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + // Process final blocks + var finalProcessedBlocks = this._process(!!'flush'); + + // Unpad data + padding.unpad(finalProcessedBlocks); + } + + return finalProcessedBlocks; + }, + + blockSize: 128/32 + }); + + /** + * A collection of cipher parameters. + * + * @property {WordArray} ciphertext The raw ciphertext. + * @property {WordArray} key The key to this ciphertext. + * @property {WordArray} iv The IV used in the ciphering operation. + * @property {WordArray} salt The salt used with a key derivation function. + * @property {Cipher} algorithm The cipher algorithm. + * @property {Mode} mode The block mode used in the ciphering operation. + * @property {Padding} padding The padding scheme used in the ciphering operation. + * @property {number} blockSize The block size of the cipher. + * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. + */ + var CipherParams = C_lib.CipherParams = Base.extend({ + /** + * Initializes a newly created cipher params object. + * + * @param {Object} cipherParams An object with any of the possible cipher parameters. + * + * @example + * + * var cipherParams = CryptoJS.lib.CipherParams.create({ + * ciphertext: ciphertextWordArray, + * key: keyWordArray, + * iv: ivWordArray, + * salt: saltWordArray, + * algorithm: CryptoJS.algo.AES, + * mode: CryptoJS.mode.CBC, + * padding: CryptoJS.pad.PKCS7, + * blockSize: 4, + * formatter: CryptoJS.format.OpenSSL + * }); + */ + init: function (cipherParams) { + this.mixIn(cipherParams); + }, + + /** + * Converts this cipher params object to a string. + * + * @param {Format} formatter (Optional) The formatting strategy to use. + * + * @return {string} The stringified cipher params. + * + * @throws Error If neither the formatter nor the default formatter is set. + * + * @example + * + * var string = cipherParams + ''; + * var string = cipherParams.toString(); + * var string = cipherParams.toString(CryptoJS.format.OpenSSL); + */ + toString: function (formatter) { + return (formatter || this.formatter).stringify(this); + } + }); + + /** + * Format namespace. + */ + var C_format = C.format = {}; + + /** + * OpenSSL formatting strategy. + */ + var OpenSSLFormatter = C_format.OpenSSL = { + /** + * Converts a cipher params object to an OpenSSL-compatible string. + * + * @param {CipherParams} cipherParams The cipher params object. + * + * @return {string} The OpenSSL-compatible string. + * + * @static + * + * @example + * + * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); + */ + stringify: function (cipherParams) { + // Shortcuts + var ciphertext = cipherParams.ciphertext; + var salt = cipherParams.salt; + + // Format + if (salt) { + var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); + } else { + var wordArray = ciphertext; + } + + return wordArray.toString(Base64); + }, + + /** + * Converts an OpenSSL-compatible string to a cipher params object. + * + * @param {string} openSSLStr The OpenSSL-compatible string. + * + * @return {CipherParams} The cipher params object. + * + * @static + * + * @example + * + * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); + */ + parse: function (openSSLStr) { + // Parse base64 + var ciphertext = Base64.parse(openSSLStr); + + // Shortcut + var ciphertextWords = ciphertext.words; + + // Test for salt + if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { + // Extract salt + var salt = WordArray.create(ciphertextWords.slice(2, 4)); + + // Remove salt from ciphertext + ciphertextWords.splice(0, 4); + ciphertext.sigBytes -= 16; + } + + return CipherParams.create({ ciphertext: ciphertext, salt: salt }); + } + }; + + /** + * A cipher wrapper that returns ciphertext as a serializable cipher params object. + */ + var SerializableCipher = C_lib.SerializableCipher = Base.extend({ + /** + * Configuration options. + * + * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL + */ + cfg: Base.extend({ + format: OpenSSLFormatter + }), + + /** + * Encrypts a message. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Encrypt + var encryptor = cipher.createEncryptor(key, cfg); + var ciphertext = encryptor.finalize(message); + + // Shortcut + var cipherCfg = encryptor.cfg; + + // Create and return serializable cipher params + return CipherParams.create({ + ciphertext: ciphertext, + key: key, + iv: cipherCfg.iv, + algorithm: cipher, + mode: cipherCfg.mode, + padding: cipherCfg.padding, + blockSize: cipher.blockSize, + formatter: cfg.format + }); + }, + + /** + * Decrypts serialized ciphertext. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Decrypt + var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); + + return plaintext; + }, + + /** + * Converts serialized ciphertext to CipherParams, + * else assumed CipherParams already and returns ciphertext unchanged. + * + * @param {CipherParams|string} ciphertext The ciphertext. + * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. + * + * @return {CipherParams} The unserialized ciphertext. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); + */ + _parse: function (ciphertext, format) { + if (typeof ciphertext == 'string') { + return format.parse(ciphertext, this); + } else { + return ciphertext; + } + } + }); + + /** + * Key derivation function namespace. + */ + var C_kdf = C.kdf = {}; + + /** + * OpenSSL key derivation function. + */ + var OpenSSLKdf = C_kdf.OpenSSL = { + /** + * Derives a key and IV from a password. + * + * @param {string} password The password to derive from. + * @param {number} keySize The size in words of the key to generate. + * @param {number} ivSize The size in words of the IV to generate. + * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. + * + * @return {CipherParams} A cipher params object with the key, IV, and salt. + * + * @static + * + * @example + * + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); + */ + execute: function (password, keySize, ivSize, salt) { + // Generate random salt + if (!salt) { + salt = WordArray.random(64/8); + } + + // Derive key and IV + var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); + + // Separate key and IV + var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); + key.sigBytes = keySize * 4; + + // Return params + return CipherParams.create({ key: key, iv: iv, salt: salt }); + } + }; + + /** + * A serializable cipher wrapper that derives the key from a password, + * and returns ciphertext as a serializable cipher params object. + */ + var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ + /** + * Configuration options. + * + * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL + */ + cfg: SerializableCipher.cfg.extend({ + kdf: OpenSSLKdf + }), + + /** + * Encrypts a message using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Encrypt + var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); + + // Mix in derived params + ciphertext.mixIn(derivedParams); + + return ciphertext; + }, + + /** + * Decrypts serialized ciphertext using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Decrypt + var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); + + return plaintext; + } + }); +}()); + + +/** + * Cipher Feedback block mode. + */ +CryptoJS.mode.CFB = (function () { + var CFB = CryptoJS.lib.BlockCipherMode.extend(); + + CFB.Encryptor = CFB.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); + + // Remember this block to use with next block + this._prevBlock = words.slice(offset, offset + blockSize); + } + }); + + CFB.Decryptor = CFB.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // Remember this block to use with next block + var thisBlock = words.slice(offset, offset + blockSize); + + generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); + + // This block becomes the previous block + this._prevBlock = thisBlock; + } + }); + + function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { + // Shortcut + var iv = this._iv; + + // Generate keystream + if (iv) { + var keystream = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } else { + var keystream = this._prevBlock; + } + cipher.encryptBlock(keystream, 0); + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + + return CFB; +}()); + + +/** + * Electronic Codebook block mode. + */ +CryptoJS.mode.ECB = (function () { + var ECB = CryptoJS.lib.BlockCipherMode.extend(); + + ECB.Encryptor = ECB.extend({ + processBlock: function (words, offset) { + this._cipher.encryptBlock(words, offset); + } + }); + + ECB.Decryptor = ECB.extend({ + processBlock: function (words, offset) { + this._cipher.decryptBlock(words, offset); + } + }); + + return ECB; +}()); + + +/** + * ANSI X.923 padding strategy. + */ +CryptoJS.pad.AnsiX923 = { + pad: function (data, blockSize) { + // Shortcuts + var dataSigBytes = data.sigBytes; + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; + + // Compute last byte position + var lastBytePos = dataSigBytes + nPaddingBytes - 1; + + // Pad + data.clamp(); + data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); + data.sigBytes += nPaddingBytes; + }, + + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } +}; + + +/** + * ISO 10126 padding strategy. + */ +CryptoJS.pad.Iso10126 = { + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; + + // Pad + data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). + concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); + }, + + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } +}; + + +/** + * ISO/IEC 9797-1 Padding Method 2. + */ +CryptoJS.pad.Iso97971 = { + pad: function (data, blockSize) { + // Add 0x80 byte + data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); + + // Zero pad the rest + CryptoJS.pad.ZeroPadding.pad(data, blockSize); + }, + + unpad: function (data) { + // Remove zero padding + CryptoJS.pad.ZeroPadding.unpad(data); + + // Remove one more byte -- the 0x80 byte + data.sigBytes--; + } +}; + + +/** + * Output Feedback block mode. + */ +CryptoJS.mode.OFB = (function () { + var OFB = CryptoJS.lib.BlockCipherMode.extend(); + + var Encryptor = OFB.Encryptor = OFB.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher + var blockSize = cipher.blockSize; + var iv = this._iv; + var keystream = this._keystream; + + // Generate keystream + if (iv) { + keystream = this._keystream = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } + cipher.encryptBlock(keystream, 0); + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + }); + + OFB.Decryptor = Encryptor; + + return OFB; +}()); + + +/** + * A noop padding strategy. + */ +CryptoJS.pad.NoPadding = { + pad: function () { + }, + + unpad: function () { + } +}; + + +(function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var CipherParams = C_lib.CipherParams; + var C_enc = C.enc; + var Hex = C_enc.Hex; + var C_format = C.format; + + var HexFormatter = C_format.Hex = { + /** + * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. + * + * @param {CipherParams} cipherParams The cipher params object. + * + * @return {string} The hexadecimally encoded string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.format.Hex.stringify(cipherParams); + */ + stringify: function (cipherParams) { + return cipherParams.ciphertext.toString(Hex); + }, + + /** + * Converts a hexadecimally encoded ciphertext string to a cipher params object. + * + * @param {string} input The hexadecimally encoded string. + * + * @return {CipherParams} The cipher params object. + * + * @static + * + * @example + * + * var cipherParams = CryptoJS.format.Hex.parse(hexString); + */ + parse: function (input) { + var ciphertext = Hex.parse(input); + return CipherParams.create({ ciphertext: ciphertext }); + } + }; +}()); + + +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var BlockCipher = C_lib.BlockCipher; + var C_algo = C.algo; + + // Lookup tables + var SBOX = []; + var INV_SBOX = []; + var SUB_MIX_0 = []; + var SUB_MIX_1 = []; + var SUB_MIX_2 = []; + var SUB_MIX_3 = []; + var INV_SUB_MIX_0 = []; + var INV_SUB_MIX_1 = []; + var INV_SUB_MIX_2 = []; + var INV_SUB_MIX_3 = []; + + // Compute lookup tables + (function () { + // Compute double table + var d = []; + for (var i = 0; i < 256; i++) { + if (i < 128) { + d[i] = i << 1; + } else { + d[i] = (i << 1) ^ 0x11b; + } + } + + // Walk GF(2^8) + var x = 0; + var xi = 0; + for (var i = 0; i < 256; i++) { + // Compute sbox + var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; + SBOX[x] = sx; + INV_SBOX[sx] = x; + + // Compute multiplication + var x2 = d[x]; + var x4 = d[x2]; + var x8 = d[x4]; + + // Compute sub bytes, mix columns tables + var t = (d[sx] * 0x101) ^ (sx * 0x1010100); + SUB_MIX_0[x] = (t << 24) | (t >>> 8); + SUB_MIX_1[x] = (t << 16) | (t >>> 16); + SUB_MIX_2[x] = (t << 8) | (t >>> 24); + SUB_MIX_3[x] = t; + + // Compute inv sub bytes, inv mix columns tables + var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); + INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); + INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); + INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); + INV_SUB_MIX_3[sx] = t; + + // Compute next counter + if (!x) { + x = xi = 1; + } else { + x = x2 ^ d[d[d[x8 ^ x2]]]; + xi ^= d[d[xi]]; + } + } + }()); + + // Precomputed Rcon lookup + var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; + + /** + * AES block cipher algorithm. + */ + var AES = C_algo.AES = BlockCipher.extend({ + _doReset: function () { + // Skip reset of nRounds has been set before and key did not change + if (this._nRounds && this._keyPriorReset === this._key) { + return; + } + + // Shortcuts + var key = this._keyPriorReset = this._key; + var keyWords = key.words; + var keySize = key.sigBytes / 4; + + // Compute number of rounds + var nRounds = this._nRounds = keySize + 6; + + // Compute number of key schedule rows + var ksRows = (nRounds + 1) * 4; + + // Compute key schedule + var keySchedule = this._keySchedule = []; + for (var ksRow = 0; ksRow < ksRows; ksRow++) { + if (ksRow < keySize) { + keySchedule[ksRow] = keyWords[ksRow]; + } else { + var t = keySchedule[ksRow - 1]; + + if (!(ksRow % keySize)) { + // Rot word + t = (t << 8) | (t >>> 24); + + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + + // Mix Rcon + t ^= RCON[(ksRow / keySize) | 0] << 24; + } else if (keySize > 6 && ksRow % keySize == 4) { + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + } + + keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; + } + } + + // Compute inv key schedule + var invKeySchedule = this._invKeySchedule = []; + for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { + var ksRow = ksRows - invKsRow; + + if (invKsRow % 4) { + var t = keySchedule[ksRow]; + } else { + var t = keySchedule[ksRow - 4]; + } + + if (invKsRow < 4 || ksRow <= 4) { + invKeySchedule[invKsRow] = t; + } else { + invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ + INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; + } + } + }, + + encryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); + }, + + decryptBlock: function (M, offset) { + // Swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; + + this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); + + // Inv swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; + }, + + _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { + // Shortcut + var nRounds = this._nRounds; + + // Get input, add round key + var s0 = M[offset] ^ keySchedule[0]; + var s1 = M[offset + 1] ^ keySchedule[1]; + var s2 = M[offset + 2] ^ keySchedule[2]; + var s3 = M[offset + 3] ^ keySchedule[3]; + + // Key schedule row counter + var ksRow = 4; + + // Rounds + for (var round = 1; round < nRounds; round++) { + // Shift rows, sub bytes, mix columns, add round key + var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; + var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; + var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; + var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; + + // Update state + s0 = t0; + s1 = t1; + s2 = t2; + s3 = t3; + } + + // Shift rows, sub bytes, add round key + var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; + var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; + var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; + var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; + + // Set output + M[offset] = t0; + M[offset + 1] = t1; + M[offset + 2] = t2; + M[offset + 3] = t3; + }, + + keySize: 256/32 + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); + */ + C.AES = BlockCipher._createHelper(AES); +}()); + + +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var BlockCipher = C_lib.BlockCipher; + var C_algo = C.algo; + + // Permuted Choice 1 constants + var PC1 = [ + 57, 49, 41, 33, 25, 17, 9, 1, + 58, 50, 42, 34, 26, 18, 10, 2, + 59, 51, 43, 35, 27, 19, 11, 3, + 60, 52, 44, 36, 63, 55, 47, 39, + 31, 23, 15, 7, 62, 54, 46, 38, + 30, 22, 14, 6, 61, 53, 45, 37, + 29, 21, 13, 5, 28, 20, 12, 4 + ]; + + // Permuted Choice 2 constants + var PC2 = [ + 14, 17, 11, 24, 1, 5, + 3, 28, 15, 6, 21, 10, + 23, 19, 12, 4, 26, 8, + 16, 7, 27, 20, 13, 2, + 41, 52, 31, 37, 47, 55, + 30, 40, 51, 45, 33, 48, + 44, 49, 39, 56, 34, 53, + 46, 42, 50, 36, 29, 32 + ]; + + // Cumulative bit shift constants + var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; + + // SBOXes and round permutation constants + var SBOX_P = [ + { + 0x0: 0x808200, + 0x10000000: 0x8000, + 0x20000000: 0x808002, + 0x30000000: 0x2, + 0x40000000: 0x200, + 0x50000000: 0x808202, + 0x60000000: 0x800202, + 0x70000000: 0x800000, + 0x80000000: 0x202, + 0x90000000: 0x800200, + 0xa0000000: 0x8200, + 0xb0000000: 0x808000, + 0xc0000000: 0x8002, + 0xd0000000: 0x800002, + 0xe0000000: 0x0, + 0xf0000000: 0x8202, + 0x8000000: 0x0, + 0x18000000: 0x808202, + 0x28000000: 0x8202, + 0x38000000: 0x8000, + 0x48000000: 0x808200, + 0x58000000: 0x200, + 0x68000000: 0x808002, + 0x78000000: 0x2, + 0x88000000: 0x800200, + 0x98000000: 0x8200, + 0xa8000000: 0x808000, + 0xb8000000: 0x800202, + 0xc8000000: 0x800002, + 0xd8000000: 0x8002, + 0xe8000000: 0x202, + 0xf8000000: 0x800000, + 0x1: 0x8000, + 0x10000001: 0x2, + 0x20000001: 0x808200, + 0x30000001: 0x800000, + 0x40000001: 0x808002, + 0x50000001: 0x8200, + 0x60000001: 0x200, + 0x70000001: 0x800202, + 0x80000001: 0x808202, + 0x90000001: 0x808000, + 0xa0000001: 0x800002, + 0xb0000001: 0x8202, + 0xc0000001: 0x202, + 0xd0000001: 0x800200, + 0xe0000001: 0x8002, + 0xf0000001: 0x0, + 0x8000001: 0x808202, + 0x18000001: 0x808000, + 0x28000001: 0x800000, + 0x38000001: 0x200, + 0x48000001: 0x8000, + 0x58000001: 0x800002, + 0x68000001: 0x2, + 0x78000001: 0x8202, + 0x88000001: 0x8002, + 0x98000001: 0x800202, + 0xa8000001: 0x202, + 0xb8000001: 0x808200, + 0xc8000001: 0x800200, + 0xd8000001: 0x0, + 0xe8000001: 0x8200, + 0xf8000001: 0x808002 + }, + { + 0x0: 0x40084010, + 0x1000000: 0x4000, + 0x2000000: 0x80000, + 0x3000000: 0x40080010, + 0x4000000: 0x40000010, + 0x5000000: 0x40084000, + 0x6000000: 0x40004000, + 0x7000000: 0x10, + 0x8000000: 0x84000, + 0x9000000: 0x40004010, + 0xa000000: 0x40000000, + 0xb000000: 0x84010, + 0xc000000: 0x80010, + 0xd000000: 0x0, + 0xe000000: 0x4010, + 0xf000000: 0x40080000, + 0x800000: 0x40004000, + 0x1800000: 0x84010, + 0x2800000: 0x10, + 0x3800000: 0x40004010, + 0x4800000: 0x40084010, + 0x5800000: 0x40000000, + 0x6800000: 0x80000, + 0x7800000: 0x40080010, + 0x8800000: 0x80010, + 0x9800000: 0x0, + 0xa800000: 0x4000, + 0xb800000: 0x40080000, + 0xc800000: 0x40000010, + 0xd800000: 0x84000, + 0xe800000: 0x40084000, + 0xf800000: 0x4010, + 0x10000000: 0x0, + 0x11000000: 0x40080010, + 0x12000000: 0x40004010, + 0x13000000: 0x40084000, + 0x14000000: 0x40080000, + 0x15000000: 0x10, + 0x16000000: 0x84010, + 0x17000000: 0x4000, + 0x18000000: 0x4010, + 0x19000000: 0x80000, + 0x1a000000: 0x80010, + 0x1b000000: 0x40000010, + 0x1c000000: 0x84000, + 0x1d000000: 0x40004000, + 0x1e000000: 0x40000000, + 0x1f000000: 0x40084010, + 0x10800000: 0x84010, + 0x11800000: 0x80000, + 0x12800000: 0x40080000, + 0x13800000: 0x4000, + 0x14800000: 0x40004000, + 0x15800000: 0x40084010, + 0x16800000: 0x10, + 0x17800000: 0x40000000, + 0x18800000: 0x40084000, + 0x19800000: 0x40000010, + 0x1a800000: 0x40004010, + 0x1b800000: 0x80010, + 0x1c800000: 0x0, + 0x1d800000: 0x4010, + 0x1e800000: 0x40080010, + 0x1f800000: 0x84000 + }, + { + 0x0: 0x104, + 0x100000: 0x0, + 0x200000: 0x4000100, + 0x300000: 0x10104, + 0x400000: 0x10004, + 0x500000: 0x4000004, + 0x600000: 0x4010104, + 0x700000: 0x4010000, + 0x800000: 0x4000000, + 0x900000: 0x4010100, + 0xa00000: 0x10100, + 0xb00000: 0x4010004, + 0xc00000: 0x4000104, + 0xd00000: 0x10000, + 0xe00000: 0x4, + 0xf00000: 0x100, + 0x80000: 0x4010100, + 0x180000: 0x4010004, + 0x280000: 0x0, + 0x380000: 0x4000100, + 0x480000: 0x4000004, + 0x580000: 0x10000, + 0x680000: 0x10004, + 0x780000: 0x104, + 0x880000: 0x4, + 0x980000: 0x100, + 0xa80000: 0x4010000, + 0xb80000: 0x10104, + 0xc80000: 0x10100, + 0xd80000: 0x4000104, + 0xe80000: 0x4010104, + 0xf80000: 0x4000000, + 0x1000000: 0x4010100, + 0x1100000: 0x10004, + 0x1200000: 0x10000, + 0x1300000: 0x4000100, + 0x1400000: 0x100, + 0x1500000: 0x4010104, + 0x1600000: 0x4000004, + 0x1700000: 0x0, + 0x1800000: 0x4000104, + 0x1900000: 0x4000000, + 0x1a00000: 0x4, + 0x1b00000: 0x10100, + 0x1c00000: 0x4010000, + 0x1d00000: 0x104, + 0x1e00000: 0x10104, + 0x1f00000: 0x4010004, + 0x1080000: 0x4000000, + 0x1180000: 0x104, + 0x1280000: 0x4010100, + 0x1380000: 0x0, + 0x1480000: 0x10004, + 0x1580000: 0x4000100, + 0x1680000: 0x100, + 0x1780000: 0x4010004, + 0x1880000: 0x10000, + 0x1980000: 0x4010104, + 0x1a80000: 0x10104, + 0x1b80000: 0x4000004, + 0x1c80000: 0x4000104, + 0x1d80000: 0x4010000, + 0x1e80000: 0x4, + 0x1f80000: 0x10100 + }, + { + 0x0: 0x80401000, + 0x10000: 0x80001040, + 0x20000: 0x401040, + 0x30000: 0x80400000, + 0x40000: 0x0, + 0x50000: 0x401000, + 0x60000: 0x80000040, + 0x70000: 0x400040, + 0x80000: 0x80000000, + 0x90000: 0x400000, + 0xa0000: 0x40, + 0xb0000: 0x80001000, + 0xc0000: 0x80400040, + 0xd0000: 0x1040, + 0xe0000: 0x1000, + 0xf0000: 0x80401040, + 0x8000: 0x80001040, + 0x18000: 0x40, + 0x28000: 0x80400040, + 0x38000: 0x80001000, + 0x48000: 0x401000, + 0x58000: 0x80401040, + 0x68000: 0x0, + 0x78000: 0x80400000, + 0x88000: 0x1000, + 0x98000: 0x80401000, + 0xa8000: 0x400000, + 0xb8000: 0x1040, + 0xc8000: 0x80000000, + 0xd8000: 0x400040, + 0xe8000: 0x401040, + 0xf8000: 0x80000040, + 0x100000: 0x400040, + 0x110000: 0x401000, + 0x120000: 0x80000040, + 0x130000: 0x0, + 0x140000: 0x1040, + 0x150000: 0x80400040, + 0x160000: 0x80401000, + 0x170000: 0x80001040, + 0x180000: 0x80401040, + 0x190000: 0x80000000, + 0x1a0000: 0x80400000, + 0x1b0000: 0x401040, + 0x1c0000: 0x80001000, + 0x1d0000: 0x400000, + 0x1e0000: 0x40, + 0x1f0000: 0x1000, + 0x108000: 0x80400000, + 0x118000: 0x80401040, + 0x128000: 0x0, + 0x138000: 0x401000, + 0x148000: 0x400040, + 0x158000: 0x80000000, + 0x168000: 0x80001040, + 0x178000: 0x40, + 0x188000: 0x80000040, + 0x198000: 0x1000, + 0x1a8000: 0x80001000, + 0x1b8000: 0x80400040, + 0x1c8000: 0x1040, + 0x1d8000: 0x80401000, + 0x1e8000: 0x400000, + 0x1f8000: 0x401040 + }, + { + 0x0: 0x80, + 0x1000: 0x1040000, + 0x2000: 0x40000, + 0x3000: 0x20000000, + 0x4000: 0x20040080, + 0x5000: 0x1000080, + 0x6000: 0x21000080, + 0x7000: 0x40080, + 0x8000: 0x1000000, + 0x9000: 0x20040000, + 0xa000: 0x20000080, + 0xb000: 0x21040080, + 0xc000: 0x21040000, + 0xd000: 0x0, + 0xe000: 0x1040080, + 0xf000: 0x21000000, + 0x800: 0x1040080, + 0x1800: 0x21000080, + 0x2800: 0x80, + 0x3800: 0x1040000, + 0x4800: 0x40000, + 0x5800: 0x20040080, + 0x6800: 0x21040000, + 0x7800: 0x20000000, + 0x8800: 0x20040000, + 0x9800: 0x0, + 0xa800: 0x21040080, + 0xb800: 0x1000080, + 0xc800: 0x20000080, + 0xd800: 0x21000000, + 0xe800: 0x1000000, + 0xf800: 0x40080, + 0x10000: 0x40000, + 0x11000: 0x80, + 0x12000: 0x20000000, + 0x13000: 0x21000080, + 0x14000: 0x1000080, + 0x15000: 0x21040000, + 0x16000: 0x20040080, + 0x17000: 0x1000000, + 0x18000: 0x21040080, + 0x19000: 0x21000000, + 0x1a000: 0x1040000, + 0x1b000: 0x20040000, + 0x1c000: 0x40080, + 0x1d000: 0x20000080, + 0x1e000: 0x0, + 0x1f000: 0x1040080, + 0x10800: 0x21000080, + 0x11800: 0x1000000, + 0x12800: 0x1040000, + 0x13800: 0x20040080, + 0x14800: 0x20000000, + 0x15800: 0x1040080, + 0x16800: 0x80, + 0x17800: 0x21040000, + 0x18800: 0x40080, + 0x19800: 0x21040080, + 0x1a800: 0x0, + 0x1b800: 0x21000000, + 0x1c800: 0x1000080, + 0x1d800: 0x40000, + 0x1e800: 0x20040000, + 0x1f800: 0x20000080 + }, + { + 0x0: 0x10000008, + 0x100: 0x2000, + 0x200: 0x10200000, + 0x300: 0x10202008, + 0x400: 0x10002000, + 0x500: 0x200000, + 0x600: 0x200008, + 0x700: 0x10000000, + 0x800: 0x0, + 0x900: 0x10002008, + 0xa00: 0x202000, + 0xb00: 0x8, + 0xc00: 0x10200008, + 0xd00: 0x202008, + 0xe00: 0x2008, + 0xf00: 0x10202000, + 0x80: 0x10200000, + 0x180: 0x10202008, + 0x280: 0x8, + 0x380: 0x200000, + 0x480: 0x202008, + 0x580: 0x10000008, + 0x680: 0x10002000, + 0x780: 0x2008, + 0x880: 0x200008, + 0x980: 0x2000, + 0xa80: 0x10002008, + 0xb80: 0x10200008, + 0xc80: 0x0, + 0xd80: 0x10202000, + 0xe80: 0x202000, + 0xf80: 0x10000000, + 0x1000: 0x10002000, + 0x1100: 0x10200008, + 0x1200: 0x10202008, + 0x1300: 0x2008, + 0x1400: 0x200000, + 0x1500: 0x10000000, + 0x1600: 0x10000008, + 0x1700: 0x202000, + 0x1800: 0x202008, + 0x1900: 0x0, + 0x1a00: 0x8, + 0x1b00: 0x10200000, + 0x1c00: 0x2000, + 0x1d00: 0x10002008, + 0x1e00: 0x10202000, + 0x1f00: 0x200008, + 0x1080: 0x8, + 0x1180: 0x202000, + 0x1280: 0x200000, + 0x1380: 0x10000008, + 0x1480: 0x10002000, + 0x1580: 0x2008, + 0x1680: 0x10202008, + 0x1780: 0x10200000, + 0x1880: 0x10202000, + 0x1980: 0x10200008, + 0x1a80: 0x2000, + 0x1b80: 0x202008, + 0x1c80: 0x200008, + 0x1d80: 0x0, + 0x1e80: 0x10000000, + 0x1f80: 0x10002008 + }, + { + 0x0: 0x100000, + 0x10: 0x2000401, + 0x20: 0x400, + 0x30: 0x100401, + 0x40: 0x2100401, + 0x50: 0x0, + 0x60: 0x1, + 0x70: 0x2100001, + 0x80: 0x2000400, + 0x90: 0x100001, + 0xa0: 0x2000001, + 0xb0: 0x2100400, + 0xc0: 0x2100000, + 0xd0: 0x401, + 0xe0: 0x100400, + 0xf0: 0x2000000, + 0x8: 0x2100001, + 0x18: 0x0, + 0x28: 0x2000401, + 0x38: 0x2100400, + 0x48: 0x100000, + 0x58: 0x2000001, + 0x68: 0x2000000, + 0x78: 0x401, + 0x88: 0x100401, + 0x98: 0x2000400, + 0xa8: 0x2100000, + 0xb8: 0x100001, + 0xc8: 0x400, + 0xd8: 0x2100401, + 0xe8: 0x1, + 0xf8: 0x100400, + 0x100: 0x2000000, + 0x110: 0x100000, + 0x120: 0x2000401, + 0x130: 0x2100001, + 0x140: 0x100001, + 0x150: 0x2000400, + 0x160: 0x2100400, + 0x170: 0x100401, + 0x180: 0x401, + 0x190: 0x2100401, + 0x1a0: 0x100400, + 0x1b0: 0x1, + 0x1c0: 0x0, + 0x1d0: 0x2100000, + 0x1e0: 0x2000001, + 0x1f0: 0x400, + 0x108: 0x100400, + 0x118: 0x2000401, + 0x128: 0x2100001, + 0x138: 0x1, + 0x148: 0x2000000, + 0x158: 0x100000, + 0x168: 0x401, + 0x178: 0x2100400, + 0x188: 0x2000001, + 0x198: 0x2100000, + 0x1a8: 0x0, + 0x1b8: 0x2100401, + 0x1c8: 0x100401, + 0x1d8: 0x400, + 0x1e8: 0x2000400, + 0x1f8: 0x100001 + }, + { + 0x0: 0x8000820, + 0x1: 0x20000, + 0x2: 0x8000000, + 0x3: 0x20, + 0x4: 0x20020, + 0x5: 0x8020820, + 0x6: 0x8020800, + 0x7: 0x800, + 0x8: 0x8020000, + 0x9: 0x8000800, + 0xa: 0x20800, + 0xb: 0x8020020, + 0xc: 0x820, + 0xd: 0x0, + 0xe: 0x8000020, + 0xf: 0x20820, + 0x80000000: 0x800, + 0x80000001: 0x8020820, + 0x80000002: 0x8000820, + 0x80000003: 0x8000000, + 0x80000004: 0x8020000, + 0x80000005: 0x20800, + 0x80000006: 0x20820, + 0x80000007: 0x20, + 0x80000008: 0x8000020, + 0x80000009: 0x820, + 0x8000000a: 0x20020, + 0x8000000b: 0x8020800, + 0x8000000c: 0x0, + 0x8000000d: 0x8020020, + 0x8000000e: 0x8000800, + 0x8000000f: 0x20000, + 0x10: 0x20820, + 0x11: 0x8020800, + 0x12: 0x20, + 0x13: 0x800, + 0x14: 0x8000800, + 0x15: 0x8000020, + 0x16: 0x8020020, + 0x17: 0x20000, + 0x18: 0x0, + 0x19: 0x20020, + 0x1a: 0x8020000, + 0x1b: 0x8000820, + 0x1c: 0x8020820, + 0x1d: 0x20800, + 0x1e: 0x820, + 0x1f: 0x8000000, + 0x80000010: 0x20000, + 0x80000011: 0x800, + 0x80000012: 0x8020020, + 0x80000013: 0x20820, + 0x80000014: 0x20, + 0x80000015: 0x8020000, + 0x80000016: 0x8000000, + 0x80000017: 0x8000820, + 0x80000018: 0x8020820, + 0x80000019: 0x8000020, + 0x8000001a: 0x8000800, + 0x8000001b: 0x0, + 0x8000001c: 0x20800, + 0x8000001d: 0x820, + 0x8000001e: 0x20020, + 0x8000001f: 0x8020800 + } + ]; + + // Masks that select the SBOX input + var SBOX_MASK = [ + 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, + 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f + ]; + + /** + * DES block cipher algorithm. + */ + var DES = C_algo.DES = BlockCipher.extend({ + _doReset: function () { + // Shortcuts + var key = this._key; + var keyWords = key.words; + + // Select 56 bits according to PC1 + var keyBits = []; + for (var i = 0; i < 56; i++) { + var keyBitPos = PC1[i] - 1; + keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; + } + + // Assemble 16 subkeys + var subKeys = this._subKeys = []; + for (var nSubKey = 0; nSubKey < 16; nSubKey++) { + // Create subkey + var subKey = subKeys[nSubKey] = []; + + // Shortcut + var bitShift = BIT_SHIFTS[nSubKey]; + + // Select 48 bits according to PC2 + for (var i = 0; i < 24; i++) { + // Select from the left 28 key bits + subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); + + // Select from the right 28 key bits + subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); + } + + // Since each subkey is applied to an expanded 32-bit input, + // the subkey can be broken into 8 values scaled to 32-bits, + // which allows the key to be used without expansion + subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); + for (var i = 1; i < 7; i++) { + subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); + } + subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); + } + + // Compute inverse subkeys + var invSubKeys = this._invSubKeys = []; + for (var i = 0; i < 16; i++) { + invSubKeys[i] = subKeys[15 - i]; + } + }, + + encryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._subKeys); + }, + + decryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._invSubKeys); + }, + + _doCryptBlock: function (M, offset, subKeys) { + // Get input + this._lBlock = M[offset]; + this._rBlock = M[offset + 1]; + + // Initial permutation + exchangeLR.call(this, 4, 0x0f0f0f0f); + exchangeLR.call(this, 16, 0x0000ffff); + exchangeRL.call(this, 2, 0x33333333); + exchangeRL.call(this, 8, 0x00ff00ff); + exchangeLR.call(this, 1, 0x55555555); + + // Rounds + for (var round = 0; round < 16; round++) { + // Shortcuts + var subKey = subKeys[round]; + var lBlock = this._lBlock; + var rBlock = this._rBlock; + + // Feistel function + var f = 0; + for (var i = 0; i < 8; i++) { + f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; + } + this._lBlock = rBlock; + this._rBlock = lBlock ^ f; + } + + // Undo swap from last round + var t = this._lBlock; + this._lBlock = this._rBlock; + this._rBlock = t; + + // Final permutation + exchangeLR.call(this, 1, 0x55555555); + exchangeRL.call(this, 8, 0x00ff00ff); + exchangeRL.call(this, 2, 0x33333333); + exchangeLR.call(this, 16, 0x0000ffff); + exchangeLR.call(this, 4, 0x0f0f0f0f); + + // Set output + M[offset] = this._lBlock; + M[offset + 1] = this._rBlock; + }, + + keySize: 64/32, + + ivSize: 64/32, + + blockSize: 64/32 + }); + + // Swap bits across the left and right words + function exchangeLR(offset, mask) { + var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; + this._rBlock ^= t; + this._lBlock ^= t << offset; + } + + function exchangeRL(offset, mask) { + var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; + this._lBlock ^= t; + this._rBlock ^= t << offset; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); + */ + C.DES = BlockCipher._createHelper(DES); + + /** + * Triple-DES block cipher algorithm. + */ + var TripleDES = C_algo.TripleDES = BlockCipher.extend({ + _doReset: function () { + // Shortcuts + var key = this._key; + var keyWords = key.words; + + // Create DES instances + this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); + this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); + this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); + }, + + encryptBlock: function (M, offset) { + this._des1.encryptBlock(M, offset); + this._des2.decryptBlock(M, offset); + this._des3.encryptBlock(M, offset); + }, + + decryptBlock: function (M, offset) { + this._des3.decryptBlock(M, offset); + this._des2.encryptBlock(M, offset); + this._des1.decryptBlock(M, offset); + }, + + keySize: 192/32, + + ivSize: 64/32, + + blockSize: 64/32 + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); + */ + C.TripleDES = BlockCipher._createHelper(TripleDES); +}()); + + +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var StreamCipher = C_lib.StreamCipher; + var C_algo = C.algo; + + /** + * RC4 stream cipher algorithm. + */ + var RC4 = C_algo.RC4 = StreamCipher.extend({ + _doReset: function () { + // Shortcuts + var key = this._key; + var keyWords = key.words; + var keySigBytes = key.sigBytes; + + // Init sbox + var S = this._S = []; + for (var i = 0; i < 256; i++) { + S[i] = i; + } + + // Key setup + for (var i = 0, j = 0; i < 256; i++) { + var keyByteIndex = i % keySigBytes; + var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; + + j = (j + S[i] + keyByte) % 256; + + // Swap + var t = S[i]; + S[i] = S[j]; + S[j] = t; + } + + // Counters + this._i = this._j = 0; + }, + + _doProcessBlock: function (M, offset) { + M[offset] ^= generateKeystreamWord.call(this); + }, + + keySize: 256/32, + + ivSize: 0 + }); + + function generateKeystreamWord() { + // Shortcuts + var S = this._S; + var i = this._i; + var j = this._j; + + // Generate keystream word + var keystreamWord = 0; + for (var n = 0; n < 4; n++) { + i = (i + 1) % 256; + j = (j + S[i]) % 256; + + // Swap + var t = S[i]; + S[i] = S[j]; + S[j] = t; + + keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); + } + + // Update counters + this._i = i; + this._j = j; + + return keystreamWord; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); + * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); + */ + C.RC4 = StreamCipher._createHelper(RC4); + + /** + * Modified RC4 stream cipher algorithm. + */ + var RC4Drop = C_algo.RC4Drop = RC4.extend({ + /** + * Configuration options. + * + * @property {number} drop The number of keystream words to drop. Default 192 + */ + cfg: RC4.cfg.extend({ + drop: 192 + }), + + _doReset: function () { + RC4._doReset.call(this); + + // Drop + for (var i = this.cfg.drop; i > 0; i--) { + generateKeystreamWord.call(this); + } + } + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); + * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); + */ + C.RC4Drop = StreamCipher._createHelper(RC4Drop); +}()); + + +/** @preserve + * Counter block mode compatible with Dr Brian Gladman fileenc.c + * derived from CryptoJS.mode.CTR + * Jan Hruby jhruby.web@gmail.com + */ +CryptoJS.mode.CTRGladman = (function () { + var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); + + function incWord(word) + { + if (((word >> 24) & 0xff) === 0xff) { //overflow + var b1 = (word >> 16)&0xff; + var b2 = (word >> 8)&0xff; + var b3 = word & 0xff; + + if (b1 === 0xff) // overflow b1 + { + b1 = 0; + if (b2 === 0xff) + { + b2 = 0; + if (b3 === 0xff) + { + b3 = 0; + } + else + { + ++b3; + } + } + else + { + ++b2; + } + } + else + { + ++b1; + } + + word = 0; + word += (b1 << 16); + word += (b2 << 8); + word += b3; + } + else + { + word += (0x01 << 24); + } + return word; + } + + function incCounter(counter) + { + if ((counter[0] = incWord(counter[0])) === 0) + { + // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 + counter[1] = incWord(counter[1]); + } + return counter; + } + + var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher + var blockSize = cipher.blockSize; + var iv = this._iv; + var counter = this._counter; + + // Generate keystream + if (iv) { + counter = this._counter = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } + + incCounter(counter); + + var keystream = counter.slice(0); + cipher.encryptBlock(keystream, 0); + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + }); + + CTRGladman.Decryptor = Encryptor; + + return CTRGladman; +}()); + + + + +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var StreamCipher = C_lib.StreamCipher; + var C_algo = C.algo; + + // Reusable objects + var S = []; + var C_ = []; + var G = []; + + /** + * Rabbit stream cipher algorithm + */ + var Rabbit = C_algo.Rabbit = StreamCipher.extend({ + _doReset: function () { + // Shortcuts + var K = this._key.words; + var iv = this.cfg.iv; + + // Swap endian + for (var i = 0; i < 4; i++) { + K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | + (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); + } + + // Generate initial state values + var X = this._X = [ + K[0], (K[3] << 16) | (K[2] >>> 16), + K[1], (K[0] << 16) | (K[3] >>> 16), + K[2], (K[1] << 16) | (K[0] >>> 16), + K[3], (K[2] << 16) | (K[1] >>> 16) + ]; + + // Generate initial counter values + var C = this._C = [ + (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), + (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), + (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), + (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) + ]; + + // Carry bit + this._b = 0; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + + // Modify the counters + for (var i = 0; i < 8; i++) { + C[i] ^= X[(i + 4) & 7]; + } + + // IV setup + if (iv) { + // Shortcuts + var IV = iv.words; + var IV_0 = IV[0]; + var IV_1 = IV[1]; + + // Generate four subvectors + var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); + var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); + var i1 = (i0 >>> 16) | (i2 & 0xffff0000); + var i3 = (i2 << 16) | (i0 & 0x0000ffff); + + // Modify counter values + C[0] ^= i0; + C[1] ^= i1; + C[2] ^= i2; + C[3] ^= i3; + C[4] ^= i0; + C[5] ^= i1; + C[6] ^= i2; + C[7] ^= i3; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + } + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var X = this._X; + + // Iterate the system + nextState.call(this); + + // Generate four keystream words + S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); + S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); + S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); + S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); + + for (var i = 0; i < 4; i++) { + // Swap endian + S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | + (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); + + // Encrypt + M[offset + i] ^= S[i]; + } + }, + + blockSize: 128/32, + + ivSize: 64/32 + }); + + function nextState() { + // Shortcuts + var X = this._X; + var C = this._C; + + // Save old counter values + for (var i = 0; i < 8; i++) { + C_[i] = C[i]; + } + + // Calculate new counter values + C[0] = (C[0] + 0x4d34d34d + this._b) | 0; + C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; + C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; + C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; + C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; + C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; + C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; + C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; + this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; + + // Calculate the g-values + for (var i = 0; i < 8; i++) { + var gx = X[i] + C[i]; + + // Construct high and low argument for squaring + var ga = gx & 0xffff; + var gb = gx >>> 16; + + // Calculate high and low result of squaring + var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; + var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); + + // High XOR low + G[i] = gh ^ gl; + } + + // Calculate new state values + X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; + X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; + X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; + X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; + X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; + X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; + X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; + X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); + * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); + */ + C.Rabbit = StreamCipher._createHelper(Rabbit); +}()); + + +/** + * Counter block mode. + */ +CryptoJS.mode.CTR = (function () { + var CTR = CryptoJS.lib.BlockCipherMode.extend(); + + var Encryptor = CTR.Encryptor = CTR.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher + var blockSize = cipher.blockSize; + var iv = this._iv; + var counter = this._counter; + + // Generate keystream + if (iv) { + counter = this._counter = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } + var keystream = counter.slice(0); + cipher.encryptBlock(keystream, 0); + + // Increment counter + counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + }); + + CTR.Decryptor = Encryptor; + + return CTR; +}()); + + +(function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var StreamCipher = C_lib.StreamCipher; + var C_algo = C.algo; + + // Reusable objects + var S = []; + var C_ = []; + var G = []; + + /** + * Rabbit stream cipher algorithm. + * + * This is a legacy version that neglected to convert the key to little-endian. + * This error doesn't affect the cipher's security, + * but it does affect its compatibility with other implementations. + */ + var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ + _doReset: function () { + // Shortcuts + var K = this._key.words; + var iv = this.cfg.iv; + + // Generate initial state values + var X = this._X = [ + K[0], (K[3] << 16) | (K[2] >>> 16), + K[1], (K[0] << 16) | (K[3] >>> 16), + K[2], (K[1] << 16) | (K[0] >>> 16), + K[3], (K[2] << 16) | (K[1] >>> 16) + ]; + + // Generate initial counter values + var C = this._C = [ + (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), + (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), + (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), + (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) + ]; + + // Carry bit + this._b = 0; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + + // Modify the counters + for (var i = 0; i < 8; i++) { + C[i] ^= X[(i + 4) & 7]; + } + + // IV setup + if (iv) { + // Shortcuts + var IV = iv.words; + var IV_0 = IV[0]; + var IV_1 = IV[1]; + + // Generate four subvectors + var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); + var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); + var i1 = (i0 >>> 16) | (i2 & 0xffff0000); + var i3 = (i2 << 16) | (i0 & 0x0000ffff); + + // Modify counter values + C[0] ^= i0; + C[1] ^= i1; + C[2] ^= i2; + C[3] ^= i3; + C[4] ^= i0; + C[5] ^= i1; + C[6] ^= i2; + C[7] ^= i3; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + } + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var X = this._X; + + // Iterate the system + nextState.call(this); + + // Generate four keystream words + S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); + S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); + S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); + S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); + + for (var i = 0; i < 4; i++) { + // Swap endian + S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | + (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); + + // Encrypt + M[offset + i] ^= S[i]; + } + }, + + blockSize: 128/32, + + ivSize: 64/32 + }); + + function nextState() { + // Shortcuts + var X = this._X; + var C = this._C; + + // Save old counter values + for (var i = 0; i < 8; i++) { + C_[i] = C[i]; + } + + // Calculate new counter values + C[0] = (C[0] + 0x4d34d34d + this._b) | 0; + C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; + C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; + C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; + C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; + C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; + C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; + C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; + this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; + + // Calculate the g-values + for (var i = 0; i < 8; i++) { + var gx = X[i] + C[i]; + + // Construct high and low argument for squaring + var ga = gx & 0xffff; + var gb = gx >>> 16; + + // Calculate high and low result of squaring + var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; + var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); + + // High XOR low + G[i] = gh ^ gl; + } + + // Calculate new state values + X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; + X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; + X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; + X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; + X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; + X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; + X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; + X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); + * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); + */ + C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); +}()); + + +/** + * Zero padding strategy. + */ +CryptoJS.pad.ZeroPadding = { + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Pad + data.clamp(); + data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); + }, + + unpad: function (data) { + // Shortcut + var dataWords = data.words; + + // Unpad + var i = data.sigBytes - 1; + while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { + i--; + } + data.sigBytes = i + 1; + } +}; + diff --git a/jshERP-web/src/utils/filter.js b/jshERP-web/src/utils/filter.js new file mode 100644 index 000000000..43c77effc --- /dev/null +++ b/jshERP-web/src/utils/filter.js @@ -0,0 +1,30 @@ +import Vue from "vue"; +import * as dayjs from "dayjs"; + +Vue.filter('NumberFormat', function (value) { + if (!value) { + return '0' + } + let intPartFormat = value.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') //将整数部分逢三一断 + return intPartFormat +}) + +Vue.filter('dayjs', function(dataStr, pattern = 'YYYY-MM-DD HH:mm:ss') { + return dayjs(dataStr).format(pattern) +}) + +Vue.filter('moment', function(dataStr, pattern = 'YYYY-MM-DD HH:mm:ss') { + return dayjs(dataStr).format(pattern) +}) + +/** 字符串超长截取省略号显示 */ +Vue.filter('ellipsis', function (value, vlength = 25) { + if(!value){ + return ""; + } + console.log('vlength: '+ vlength); + if (value.length > vlength) { + return value.slice(0, vlength) + '...' + } + return value +}) \ No newline at end of file diff --git a/jshERP-web/src/utils/hasPermission.js b/jshERP-web/src/utils/hasPermission.js new file mode 100644 index 000000000..8ba34f75a --- /dev/null +++ b/jshERP-web/src/utils/hasPermission.js @@ -0,0 +1,120 @@ +import { USER_AUTH,SYS_BUTTON_AUTH } from "@/store/mutation-types" + +const hasPermission = { + install (Vue, options) { + console.log(options); + Vue.directive('has', { + inserted: (el, binding, vnode)=>{ + console.log("页面权限控制----"); + //console.time() + //节点权限处理,如果命中则不进行全局权限处理 + if(!filterNodePermission(el, binding, vnode)){ + filterGlobalPermission(el, binding, vnode); + } + //console.timeEnd() //计时结束并输出时长 + } + }); + } +}; + +/** + * 流程节点权限控制 + */ +export function filterNodePermission(el, binding, vnode) { + let permissionList = []; + try { + let obj = vnode.context.$props.formData; + if (obj) { + let bpmList = obj.permissionList; + for (let bpm of bpmList) { + if(bpm.type != '2') { + permissionList.push(bpm); + } + } + }else{ + return false; + } + } catch (e) { + //console.log("页面权限异常----", e); + } + if (permissionList === null || permissionList === "" || permissionList === undefined||permissionList.length<=0) { + //el.parentNode.removeChild(el) + return false; + } + + console.log("流程节点页面权限--NODE--"); + let permissions = []; + for (let item of permissionList) { + if(item.type != '2') { + permissions.push(item.action); + } + } + //console.log("页面权限----"+permissions); + //console.log("页面权限----"+binding.value); + if (!permissions.includes(binding.value)) { + //el.parentNode.removeChild(el) + return false; + }else{ + for (let item2 of permissionList) { + if(binding.value === item2.action){ + return true; + } + } + } + return false; +} + +/** + * 全局权限控制 + */ +export function filterGlobalPermission(el, binding, vnode) { + console.log("全局页面权限--Global--"); + + let permissionList = []; + let allPermissionList = []; + + //let authList = Vue.ls.get(USER_AUTH); + let authList = JSON.parse(sessionStorage.getItem(USER_AUTH) || "[]"); + for (let auth of authList) { + if(auth.type != '2') { + permissionList.push(auth); + } + } + //console.log("页面权限--Global--",sessionStorage.getItem(SYS_BUTTON_AUTH)); + let allAuthList = JSON.parse(sessionStorage.getItem(SYS_BUTTON_AUTH) || "[]"); + for (let gauth of allAuthList) { + if(gauth.type != '2') { + allPermissionList.push(gauth); + } + } + //设置全局配置是否有命中 + let invalidFlag = false;//无效命中 + if(allPermissionList != null && allPermissionList != "" && allPermissionList != undefined && allPermissionList.length > 0){ + for (let itemG of allPermissionList) { + if(binding.value === itemG.action){ + if(itemG.status == '0'){ + invalidFlag = true; + break; + } + } + } + } + if(invalidFlag){ + return; + } + if (permissionList === null || permissionList === "" || permissionList === undefined||permissionList.length<=0) { + el.parentNode.removeChild(el); + return; + } + let permissions = []; + for (let item of permissionList) { + if(item.type != '2'){ + permissions.push(item.action); + } + } + if (!permissions.includes(binding.value)) { + el.parentNode.removeChild(el); + } +} + +export default hasPermission; diff --git a/jshERP-web/src/utils/mixin.js b/jshERP-web/src/utils/mixin.js new file mode 100644 index 000000000..4845529d9 --- /dev/null +++ b/jshERP-web/src/utils/mixin.js @@ -0,0 +1,40 @@ +// import Vue from 'vue' +import { mapState } from "vuex"; + +// const mixinsComputed = Vue.config.optionMergeStrategies.computed +// const mixinsMethods = Vue.config.optionMergeStrategies.methods + +const mixin = { + computed: { + ...mapState({ + layoutMode: state => state.app.layout, + navTheme: state => state.app.theme, + primaryColor: state => state.app.color, + colorWeak: state => state.app.weak, + multipage: state => state.app.multipage,//多页签设置 + fixedHeader: state => state.app.fixedHeader, + fixSiderbar: state => state.app.fixSiderbar, + contentWidth: state => state.app.contentWidth, + autoHideHeader: state => state.app.autoHideHeader, + sidebarOpened: state => state.app.sidebar.opened + }) + } +} + +const mixinDevice = { + computed: { + ...mapState({ + device: state => state.app.device, + }) + }, + methods: { + isMobile () { + return this.device === 'mobile' + }, + isDesktop () { + return this.device === 'desktop' + } + } +} + +export { mixin, mixinDevice } \ No newline at end of file diff --git a/jshERP-web/src/utils/permissions.js b/jshERP-web/src/utils/permissions.js new file mode 100644 index 000000000..e4b60bcd1 --- /dev/null +++ b/jshERP-web/src/utils/permissions.js @@ -0,0 +1,8 @@ +export function actionToObject(json) { + try { + return JSON.parse(json) + } catch (e) { + console.log('err', e.message) + } + return [] +} \ No newline at end of file diff --git a/jshERP-web/src/utils/props-util.js b/jshERP-web/src/utils/props-util.js new file mode 100644 index 000000000..9c9420049 --- /dev/null +++ b/jshERP-web/src/utils/props-util.js @@ -0,0 +1,115 @@ +/** + * 该文件截取自 "ant-design-vue/es/_util/props-util.js" 文件,并对其做出特殊修改 + */ +function classNames() { + let classes = [] + + for (let i = 0; i < arguments.length; i++) { + let arg = arguments[i] + if (!arg) continue + + let argType = typeof arg + + if (argType === 'string' || argType === 'number') { + classes.push(arg) + } else if (Array.isArray(arg) && arg.length) { + let inner = classNames.apply(null, arg) + if (inner) { + classes.push(inner) + } + } else if (argType === 'object') { + for (let key in arg) { + if (arg.hasOwnProperty(key) && arg[key]) { + classes.push(key) + } + } + } + } + return classes.join(' ') +} + +const camelizeRE = /-(\w)/g + +function camelize(str) { + return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : '')) +} + + +function objectCamelize(obj) { + let res = {} + Object.keys(obj).forEach(k => (res[camelize(k)] = obj[k])) + return res +} + +function parseStyleText(cssText = '', camel) { + const res = {} + const listDelimiter = /;(?![^(]*\))/g + const propertyDelimiter = /:(.+)/ + cssText.split(listDelimiter).forEach(function (item) { + if (item) { + const tmp = item.split(propertyDelimiter) + if (tmp.length > 1) { + const k = camel ? camelize(tmp[0].trim()) : tmp[0].trim() + res[k] = tmp[1].trim() + } + } + }) + return res +} + +export function getClass(ele) { + let data = {} + if (ele.data) { + data = ele.data + } else if (ele.$vnode && ele.$vnode.data) { + data = ele.$vnode.data + } + const tempCls = data.class || {} + const staticClass = data.staticClass + let cls = {} + staticClass && + staticClass.split(' ').forEach(c => { + cls[c.trim()] = true + }) + if (typeof tempCls === 'string') { + tempCls.split(' ').forEach(c => { + cls[c.trim()] = true + }) + } else if (Array.isArray(tempCls)) { + classNames(tempCls) + .split(' ') + .forEach(c => { + cls[c.trim()] = true + }) + } else { + cls = { ...cls, ...tempCls } + } + return cls +} + +export function getStyle(ele, camel) { + + getClass(ele) + + let data = {} + if (ele.data) { + data = ele.data + } else if (ele.$vnode && ele.$vnode.data) { + data = ele.$vnode.data + } + + // update-begin-author:sunjianlei date:20200303 for: style 和 staticStyle 可以共存 + let style = data.style || {} + let staticStyle = data.staticStyle + staticStyle = staticStyle ? objectCamelize(data.staticStyle) : {} + // update-end-author:sunjianlei date:20200303 for: style 和 staticStyle 可以共存 + + if (typeof style === 'string') { + style = parseStyleText(style, camel) + } else if (camel && style) { + // 驼峰化 + style = objectCamelize(style) + } + return { ...staticStyle, ...style } +} + diff --git a/jshERP-web/src/utils/request.js b/jshERP-web/src/utils/request.js new file mode 100644 index 000000000..2e1cf67b7 --- /dev/null +++ b/jshERP-web/src/utils/request.js @@ -0,0 +1,116 @@ +import Vue from 'vue' +import axios from 'axios' +import store from '@/store' +import { VueAxios } from './axios' +import {Modal, notification} from 'ant-design-vue' +import { ACCESS_TOKEN } from "@/store/mutation-types" + +/** + * 【指定 axios的 baseURL】 + * 如果手工指定 baseURL: '/jshERP-boot' + * 则映射后端域名,通过 vue.config.js + * @type {*|string} + */ +let apiBaseUrl = window._CONFIG['domianURL'] || "/jshERP-boot"; +console.log("apiBaseUrl= ",apiBaseUrl) +// 创建 axios 实例 +const service = axios.create({ + baseURL: apiBaseUrl, // api base_url + timeout: 9000 // 请求超时时间 +}) + +const err = (error) => { + if (error.response) { + let data = error.response.data + const token = Vue.ls.get(ACCESS_TOKEN) + console.log("------异常响应------",token) + console.log("------异常响应------",error.response.status) + switch (error.response.status) { + case 403: + notification.error({ message: '系统提示', description: '拒绝访问',duration: 4}) + break + case 500: + //notification.error({ message: '系统提示', description:'Token失效,请重新登录!',duration: 4}) + if(token && data.message=="Token失效,请重新登录"){ + // update-begin- --- author:scott ------ date:20190225 ---- for:Token失效采用弹框模式,不直接跳转---- + // store.dispatch('Logout').then(() => { + // window.location.reload() + // }) + Modal.error({ + title: '登录已过期', + content: '很抱歉,登录已过期,请重新登录', + okText: '重新登录', + mask: false, + onOk: () => { + store.dispatch('Logout').then(() => { + Vue.ls.remove(ACCESS_TOKEN) + window.location.reload() + }) + } + }) + // update-end- --- author:scott ------ date:20190225 ---- for:Token失效采用弹框模式,不直接跳转---- + } + break + case 404: + notification.error({ message: '系统提示', description:'很抱歉,资源未找到!',duration: 4}) + break + case 504: + notification.error({ message: '系统提示', description: '网络超时'}) + break + case 401: + notification.error({ message: '系统提示', description:'未授权,请重新登录',duration: 4}) + if (token) { + store.dispatch('Logout').then(() => { + setTimeout(() => { + window.location.reload() + }, 1500) + }) + } + break + default: + notification.error({ + message: '系统提示', + description: data.message, + duration: 4 + }) + break + } + } + return Promise.reject(error) +}; + +// request interceptor +service.interceptors.request.use(config => { + const token = Vue.ls.get(ACCESS_TOKEN) + if (token) { + config.headers[ 'X-Access-Token' ] = token // 让每个请求携带自定义 token 请根据实际情况自行修改 + } + if(config.method=='get'){ + if(config.url.indexOf("systemConfig/getDictItems")<0){ + config.params = { + _t: Date.parse(new Date())/1000, + ...config.params + } + } + } + return config +},(error) => { + return Promise.reject(error) +}) + +// response interceptor +service.interceptors.response.use((response) => { + return response.data + }, err) + +const installer = { + vm: {}, + install (Vue, router = {}) { + Vue.use(VueAxios, router, service) + } +} + +export { + installer as VueAxios, + service as axios +} \ No newline at end of file diff --git a/jshERP-web/src/utils/storage.js b/jshERP-web/src/utils/storage.js new file mode 100644 index 000000000..b3c29ab38 --- /dev/null +++ b/jshERP-web/src/utils/storage.js @@ -0,0 +1,78 @@ +/** + * Set storage + * + * @param name + * @param content + * @param maxAge + */ +export const setStore = (name, content, maxAge = null) => { + if (!global.window || !name) { + return; + } + + if (typeof content !== 'string') { + content = JSON.stringify(content) + } + + let storage = global.window.localStorage + + storage.setItem(name, content) + if (maxAge && !isNaN(parseInt(maxAge))) { + let timeout = parseInt(new Date().getTime() / 1000) + storage.setItem(`${name}_expire`, timeout + maxAge) + } +}; + +/** + * Get storage + * + * @param name + * @returns {*} + */ +export const getStore = name => { + if (!global.window || !name) { + return; + } + + let content = window.localStorage.getItem(name) + let _expire = window.localStorage.getItem(`${name}_expire`) + + if (_expire) { + let now = parseInt(new Date().getTime() / 1000) + if (now > _expire) { + return; + } + } + + try { + return JSON.parse(content) + } catch (e) { + return content + } +}; + +/** + * Clear storage + * + * @param name + */ +export const clearStore = name => { + if (!global.window || !name) { + return; + } + + window.localStorage.removeItem(name) + window.localStorage.removeItem(`${name}_expire`) +}; + +/** + * Clear all storage + */ +export const clearAll = () => { + if (!global.window || !name) { + return; + } + + window.localStorage.clear() +} + diff --git a/jshERP-web/src/utils/util.js b/jshERP-web/src/utils/util.js new file mode 100644 index 000000000..f6cb36c43 --- /dev/null +++ b/jshERP-web/src/utils/util.js @@ -0,0 +1,539 @@ +import * as api from '@/api/api' +import { isURL } from '@/utils/validate' +import Vue from 'vue' + +export function timeFix() { + const time = new Date() + const hour = time.getHours() + return hour < 9 ? '早上好' : (hour <= 11 ? '上午好' : (hour <= 13 ? '中午好' : (hour < 20 ? '下午好' : '晚上好'))) +} + +export function welcome() { + const arr = ['休息一会儿吧', '准备吃什么呢?', '要不要打一把 DOTA', '我猜你可能累了'] + let index = Math.floor((Math.random()*arr.length)) + return arr[index] +} + +/** + * 触发 window.resize + */ +export function triggerWindowResizeEvent() { + let event = document.createEvent('HTMLEvents') + event.initEvent('resize', true, true) + event.eventType = 'message' + window.dispatchEvent(event) +} + +/** + * 过滤对象中为空的属性 + * @param obj + * @returns {*} + */ +export function filterObj(obj) { + if (!(typeof obj == 'object')) { + return; + } + + for ( let key in obj) { + if (obj.hasOwnProperty(key) + && (obj[key] == null || obj[key] == undefined || obj[key] === '')) { + delete obj[key]; + } + } + return obj; +} + +/** + * 时间格式化 + * @param value + * @param fmt + * @returns {*} + */ +export function formatDate(value, fmt) { + let regPos = /^\d+(\.\d+)?$/; + if(regPos.test(value)){ + //如果是数字 + let getDate = new Date(value); + let o = { + 'M+': getDate.getMonth() + 1, + 'd+': getDate.getDate(), + 'h+': getDate.getHours(), + 'm+': getDate.getMinutes(), + 's+': getDate.getSeconds(), + 'q+': Math.floor((getDate.getMonth() + 3) / 3), + 'S': getDate.getMilliseconds() + }; + if (/(y+)/.test(fmt)) { + fmt = fmt.replace(RegExp.$1, (getDate.getFullYear() + '').substr(4 - RegExp.$1.length)) + } + for (let k in o) { + if (new RegExp('(' + k + ')').test(fmt)) { + fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))) + } + } + return fmt; + }else{ + //TODO + value = value.trim(); + return value.substr(0,fmt.length); + } +} + +// 生成首页路由 +export function generateIndexRouter(data) { + let indexRouter = generateChildRouters(data) +// let indexRouter = [{ +// path: '/', +// name: 'dashboard', +// //component: () => import('@/components/layouts/BasicLayout'), +// component: resolve => require(['@/components/layouts/TabLayout'], resolve), +// meta: { +// title: '首页', +// icon: 'icon-present' +// }, +// redirect: '/dashboard/analysis', +// children: [ +// ...generateChildRouters(data) +// ] +// }, +// { +// "path": "*", "redirect": "/404", "hidden": true +// }] + return indexRouter; +} + +// 生成嵌套路由(子路由) + +function generateChildRouters (data) { + const routers = []; + for (let item of data) { + let componentPath = ""; + item.route = "1"; + if(item.component.indexOf("layouts")>=0){ + componentPath = () => import('@/components'+item.component); + } else { + componentPath = () => import('@/views'+item.component); + } + // eslint-disable-next-line + let URL = (item.url|| '').replace(/{{([^}}]+)?}}/g, (s1, s2) => eval(s2)) // URL支持{{ window.xxx }}占位符变量 + if (isURL(URL)) { + item.url = URL; + } + let menu = { + path: item.url, + name: item.text, + component: componentPath, + meta: { + title: item.text, + icon: item.icon, + url: item.url, + // permissionList:"", + // keepAlive:"", + } + } + if (item.children && item.children.length > 0) { + menu.children = [...generateChildRouters( item.children)]; + } + //--update-begin----author:scott---date:20190320------for:根据后台菜单配置,判断是否路由菜单字段,动态选择是否生成路由(为了支持参数URL菜单)------ + //判断是否生成路由 + if(item.route && item.route === '0'){ + //console.log(' 不生成路由 item.route: '+item.route); + //console.log(' 不生成路由 item.path: '+item.path); + }else{ + routers.push(menu); + } + //--update-end----author:scott---date:20190320------for:根据后台菜单配置,判断是否路由菜单字段,动态选择是否生成路由(为了支持参数URL菜单)------ + } + return routers +} + +/** + * 深度克隆对象、数组 + * @param obj 被克隆的对象 + * @return 克隆后的对象 + */ +export function cloneObject(obj) { + return JSON.parse(JSON.stringify(obj)) +} + +/** + * 随机生成数字 + * + * 示例:生成长度为 12 的随机数:randomNumber(12) + * 示例:生成 3~23 之间的随机数:randomNumber(3, 23) + * + * @param1 最小值 | 长度 + * @param2 最大值 + * @return int 生成后的数字 + */ +export function randomNumber() { + // 生成 最小值 到 最大值 区间的随机数 + const random = (min, max) => { + return Math.floor(Math.random() * (max - min + 1) + min) + } + if (arguments.length === 1) { + let [length] = arguments + // 生成指定长度的随机数字,首位一定不是 0 + let nums = [...Array(length).keys()].map((i) => (i > 0 ? random(0, 9) : random(1, 9))) + return parseInt(nums.join('')) + } else if (arguments.length >= 2) { + let [min, max] = arguments + return random(min, max) + } else { + return Number.NaN + } +} + +/** + * 随机生成字符串 + * @param length 字符串的长度 + * @param chats 可选字符串区间(只会生成传入的字符串中的字符) + * @return string 生成的字符串 + */ +export function randomString(length, chats) { + if (!length) length = 1 + if (!chats) chats = '0123456789qwertyuioplkjhgfdsazxcvbnm' + let str = '' + for (let i = 0; i < length; i++) { + let num = randomNumber(0, chats.length - 1) + str += chats[num] + } + return str +} + +/** + * 随机生成uuid + * @return string 生成的uuid + */ +export function randomUUID() { + let chats = '0123456789abcdef' + return randomString(32, chats) +} + +/** + * 下划线转驼峰 + * @param string + * @returns {*} + */ +export function underLine2CamelCase(string){ + return string.replace( /_([a-z])/g, function( all, letter ) { + return letter.toUpperCase(); + }); +} + +/** + * 判断是否显示办理按钮 + * @param bpmStatus + * @returns {*} + */ +export function showDealBtn(bpmStatus){ + if(bpmStatus!="1"&&bpmStatus!="3"&&bpmStatus!="4"){ + return true; + } + return false; +} + +/** + * 增强CSS,可以在页面上输出全局css + * @param css 要增强的css + * @param id style标签的id,可以用来清除旧样式 + */ +export function cssExpand(css, id) { + let style = document.createElement('style') + style.type = "text/css" + style.innerHTML = `@charset "UTF-8"; ${css}` + // 清除旧样式 + if (id) { + let $style = document.getElementById(id) + if ($style != null) $style.outerHTML = '' + style.id = id + } + // 应用新样式 + document.head.appendChild(style) +} + + +/** 用于js增强事件,运行JS代码,可以传参 */ +// options 所需参数: +// 参数名 类型 说明 +// vm VueComponent vue实例 +// event Object event对象 +// jsCode String 待执行的js代码 +// errorMessage String 执行出错后的提示(控制台) +export function jsExpand(options = {}) { + + // 绑定到window上的keyName + let windowKeyName = 'J_CLICK_EVENT_OPTIONS' + if (typeof window[windowKeyName] != 'object') { + window[windowKeyName] = {} + } + + // 随机生成JS增强的执行id,防止冲突 + let id = randomString(16, 'qwertyuioplkjhgfdsazxcvbnm'.toUpperCase()) + // 封装按钮点击事件 + let code = ` + (function (o_${id}) { + try { + (function (globalEvent, vm) { + ${options.jsCode} + })(o_${id}.event, o_${id}.vm) + } catch (e) { + o_${id}.error(e) + } + o_${id}.done() + })(window['${windowKeyName}']['EVENT_${id}']) + ` + // 创建script标签 + const script = document.createElement('script') + // 将需要传递的参数挂载到window对象上 + window[windowKeyName]['EVENT_' + id] = { + vm: options.vm, + event: options.event, + // 当执行完成时,无论如何都会调用的回调事件 + done() { + // 执行完后删除新增的 script 标签不会撤销执行结果(已产生的结果不会被撤销) + script.outerHTML = '' + delete window[windowKeyName]['EVENT_' + id] + }, + // 当js运行出错的时候调用的事件 + error(e) { + console.group(`${options.errorMessage || '用户自定义JS增强代码运行出错'}(${new Date()})`) + console.error(e) + console.groupEnd() + } + } + // 将事件挂载到document中 + script.innerHTML = code + document.body.appendChild(script) +} + + +/** + * 重复值验证工具方法 + * + * 使用示例: + * { validator: (rule, value, callback) => validateDuplicateValue('sys_fill_rule', 'rule_code', value, this.model.id, callback) } + * + * @param tableName 被验证的表名 + * @param fieldName 被验证的字段名 + * @param fieldVal 被验证的值 + * @param dataId 数据ID,可空 + * @param callback + */ +export function validateDuplicateValue(tableName, fieldName, fieldVal, dataId, callback) { + if (fieldVal) { + let params = { tableName, fieldName, fieldVal, dataId } + api.duplicateCheck(params).then(res => { + res['success'] ? callback() : callback(res['message']) + }).catch(err => { + callback(err.message || err) + }) + } else { + callback() + } +} + +/** + * 根据编码校验规则code,校验传入的值是否合法 + * + * 使用示例: + * { validator: (rule, value, callback) => validateCheckRule('common', value, callback) } + * + * @param ruleCode 编码校验规则 code + * @param value 被验证的值 + * @param callback + */ +export function validateCheckRule(ruleCode, value, callback) { + if (ruleCode && value) { + value = encodeURIComponent(value) + api.checkRuleByCode({ ruleCode, value }).then(res => { + res['success'] ? callback() : callback(res['message']) + }).catch(err => { + callback(err.message || err) + }) + } else { + callback() + } +} + +/** + * 如果值不存在就 push 进数组,反之不处理 + * @param array 要操作的数据 + * @param value 要添加的值 + * @param key 可空,如果比较的是对象,可能存在地址不一样但值实际上是一样的情况,可以传此字段判断对象中唯一的字段,例如 id。不传则直接比较实际值 + * @returns {boolean} 成功 push 返回 true,不处理返回 false + */ +export function pushIfNotExist(array, value, key) { + for (let item of array) { + if (key && (item[key] === value[key])) { + return false + } else if (item === value) { + return false + } + } + array.push(value) + return true +} + +/** + * 可用于判断是否成功 + * @type {symbol} + */ +export const succeedSymbol = Symbol() +/** + * 可用于判断是否失败 + * @type {symbol} + */ +export const failedSymbol = Symbol() + +/** + * 使 promise 无论如何都会 resolve,除非传入的参数不是一个Promise对象或返回Promise对象的方法 + * 一般用在 Promise.all 中 + * + * @param promise 可传Promise对象或返回Promise对象的方法 + * @returns {Promise} + */ +export function alwaysResolve(promise) { + return new Promise((resolve, reject) => { + let p = promise + if (typeof promise === 'function') { + p = promise() + } + if (p instanceof Promise) { + p.then(data => { + resolve({ type: succeedSymbol, data }) + }).catch(error => { + resolve({ type: failedSymbol, error }) + }) + } else { + reject('alwaysResolve: 传入的参数不是一个Promise对象或返回Promise对象的方法') + } + }) +} + +/** + * 简单实现防抖方法 + * + * 防抖(debounce)函数在第一次触发给定的函数时,不立即执行函数,而是给出一个期限值(delay),比如100ms。 + * 如果100ms内再次执行函数,就重新开始计时,直到计时结束后再真正执行函数。 + * 这样做的好处是如果短时间内大量触发同一事件,只会执行一次函数。 + * + * @param fn 要防抖的函数 + * @param delay 防抖的毫秒数 + * @returns {Function} + */ +export function simpleDebounce(fn, delay = 100) { + let timer = null + return function () { + let args = arguments + if (timer) { + clearTimeout(timer) + } + timer = setTimeout(() => { + fn.apply(null, args) + }, delay) + } +} + +/** + * 不用正则的方式替换所有值 + * @param text 被替换的字符串 + * @param checker 替换前的内容 + * @param replacer 替换后的内容 + * @returns {String} 替换后的字符串 + */ +export function replaceAll(text, checker, replacer) { + let lastText = text + text = text.replace(checker, replacer) + if (lastText !== text) { + return replaceAll(text, checker, replacer) + } + return text +} + +/** + * 转换商品扩展字段的格式 + * @param thisRows + * @param checker + * @param replacer + * @returns {string} + */ +export function getMpListShort(thisRows, checker, replacer) { + let mPropertyListShort = '' + let nativeNameStr = '' + for (let i = 0; i < thisRows.length; i++) { + if (thisRows[i].enabled) { + nativeNameStr += thisRows[i].nativeName + ","; + } + } + if (nativeNameStr) { + mPropertyListShort = nativeNameStr.substring(0, nativeNameStr.length - 1); + } + return mPropertyListShort +} + +/** + * js获取当前月份, 格式“yyyy-MM” + */ +export function getNowFormatMonth() { + var date = new Date(); + var seperator1 = "-"; + var month = date.getMonth() + 1; + if (month >= 1 && month <= 9) { + month = "0" + month; + } + var currentdate = date.getFullYear() + seperator1 + month; + return currentdate; +} + +/** + * js获取当前日期, 格式“yyyy-MM-dd” + */ +export function getFormatDate() { + var date = new Date(); + var seperator1 = "-"; + var year = date.getFullYear(); + var month = date.getMonth() + 1; + var strDate = date.getDate(); + if (month >= 1 && month <= 9) { + month = "0" + month; + } + if (strDate >= 0 && strDate <= 9) { + strDate = "0" + strDate; + } + var currentdate = year + seperator1 + month + seperator1 + strDate; + return currentdate; +} + +/** + * js获取当前时间, 格式“yyyy-MM-dd HH:MM:SS” + */ +export function getNowFormatDateTime() { + var date = new Date(); + var seperator1 = "-"; + var seperator2 = ":"; + var month = date.getMonth() + 1; + var strDate = date.getDate(); + var strHours = date.getHours(); + var strMinutes = date.getMinutes(); + var strSeconds = date.getSeconds(); + if (month >= 1 && month <= 9) { + month = "0" + month; + } + if (strDate >= 0 && strDate <= 9) { + strDate = "0" + strDate; + } + if (strHours >= 0 && strHours <= 9) { + strHours = "0" + strHours; + } + if (strMinutes >= 0 && strMinutes <= 9) { + strMinutes = "0" + strMinutes; + } + if (strSeconds >= 0 && strSeconds <= 9) { + strSeconds = "0" + strSeconds; + } + var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate + + " " + strHours + seperator2 + strMinutes + + seperator2 + strSeconds; + return currentdate; +} \ No newline at end of file diff --git a/jshERP-web/src/utils/validate.js b/jshERP-web/src/utils/validate.js new file mode 100644 index 000000000..c8edcac42 --- /dev/null +++ b/jshERP-web/src/utils/validate.js @@ -0,0 +1,31 @@ +/** + * 邮箱 + * @param {*} s + */ +export function isEmail (s) { + return /^([a-zA-Z0-9._-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s) +} + +/** + * 手机号码 + * @param {*} s + */ +export function isMobile (s) { + return /^1[0-9]{10}$/.test(s) +} + +/** + * 电话号码 + * @param {*} s + */ +export function isPhone (s) { + return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s) +} + +/** + * URL地址 + * @param {*} s + */ +export function isURL (s) { + return /^http[s]?:\/\/.*/.test(s) +} diff --git a/jshERP-web/src/utils/vueBus.js b/jshERP-web/src/utils/vueBus.js new file mode 100644 index 000000000..95235a03e --- /dev/null +++ b/jshERP-web/src/utils/vueBus.js @@ -0,0 +1,5 @@ +import Bus from 'vue'; +let install = function (Vue) { + Vue.prototype.$bus = new Bus() +} +export default { install }; \ No newline at end of file diff --git a/jshERP-web/src/views/404.vue b/jshERP-web/src/views/404.vue new file mode 100644 index 000000000..90fe06591 --- /dev/null +++ b/jshERP-web/src/views/404.vue @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/Home.vue b/jshERP-web/src/views/Home.vue new file mode 100644 index 000000000..d851cbacd --- /dev/null +++ b/jshERP-web/src/views/Home.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/jshERP-web/src/views/account/center/Index.vue b/jshERP-web/src/views/account/center/Index.vue new file mode 100644 index 000000000..8a13f7050 --- /dev/null +++ b/jshERP-web/src/views/account/center/Index.vue @@ -0,0 +1,286 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/account/center/page/App.vue b/jshERP-web/src/views/account/center/page/App.vue new file mode 100644 index 000000000..e563bd27d --- /dev/null +++ b/jshERP-web/src/views/account/center/page/App.vue @@ -0,0 +1,113 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/account/center/page/Article.vue b/jshERP-web/src/views/account/center/page/Article.vue new file mode 100644 index 000000000..0d743ef5f --- /dev/null +++ b/jshERP-web/src/views/account/center/page/Article.vue @@ -0,0 +1,24 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/account/center/page/Project.vue b/jshERP-web/src/views/account/center/page/Project.vue new file mode 100644 index 000000000..460e02fdc --- /dev/null +++ b/jshERP-web/src/views/account/center/page/Project.vue @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/account/center/page/index.js b/jshERP-web/src/views/account/center/page/index.js new file mode 100644 index 000000000..e80351ade --- /dev/null +++ b/jshERP-web/src/views/account/center/page/index.js @@ -0,0 +1,5 @@ +import AppPage from './App' +import ArticlePage from './Article' +import ProjectPage from './Project' + +export { AppPage, ArticlePage, ProjectPage } \ No newline at end of file diff --git a/jshERP-web/src/views/account/settings/AvatarModal.vue b/jshERP-web/src/views/account/settings/AvatarModal.vue new file mode 100644 index 000000000..7eb3d8154 --- /dev/null +++ b/jshERP-web/src/views/account/settings/AvatarModal.vue @@ -0,0 +1,103 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/account/settings/BaseSetting.vue b/jshERP-web/src/views/account/settings/BaseSetting.vue new file mode 100644 index 000000000..eb544cdd0 --- /dev/null +++ b/jshERP-web/src/views/account/settings/BaseSetting.vue @@ -0,0 +1,161 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/account/settings/Binding.vue b/jshERP-web/src/views/account/settings/Binding.vue new file mode 100644 index 000000000..273825baa --- /dev/null +++ b/jshERP-web/src/views/account/settings/Binding.vue @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/account/settings/Custom.vue b/jshERP-web/src/views/account/settings/Custom.vue new file mode 100644 index 000000000..8734c6f87 --- /dev/null +++ b/jshERP-web/src/views/account/settings/Custom.vue @@ -0,0 +1,75 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/account/settings/Index.vue b/jshERP-web/src/views/account/settings/Index.vue new file mode 100644 index 000000000..c3b317cd5 --- /dev/null +++ b/jshERP-web/src/views/account/settings/Index.vue @@ -0,0 +1,154 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/account/settings/Notification.vue b/jshERP-web/src/views/account/settings/Notification.vue new file mode 100644 index 000000000..273825baa --- /dev/null +++ b/jshERP-web/src/views/account/settings/Notification.vue @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/account/settings/Security.vue b/jshERP-web/src/views/account/settings/Security.vue new file mode 100644 index 000000000..35aedb137 --- /dev/null +++ b/jshERP-web/src/views/account/settings/Security.vue @@ -0,0 +1,41 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/AllocationOutList.vue b/jshERP-web/src/views/bill/AllocationOutList.vue new file mode 100644 index 000000000..2c482fc75 --- /dev/null +++ b/jshERP-web/src/views/bill/AllocationOutList.vue @@ -0,0 +1,162 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/AssembleList.vue b/jshERP-web/src/views/bill/AssembleList.vue new file mode 100644 index 000000000..1f6664785 --- /dev/null +++ b/jshERP-web/src/views/bill/AssembleList.vue @@ -0,0 +1,162 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/DisassembleList.vue b/jshERP-web/src/views/bill/DisassembleList.vue new file mode 100644 index 000000000..5edca794b --- /dev/null +++ b/jshERP-web/src/views/bill/DisassembleList.vue @@ -0,0 +1,162 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/OtherInList.vue b/jshERP-web/src/views/bill/OtherInList.vue new file mode 100644 index 000000000..dcf388c6c --- /dev/null +++ b/jshERP-web/src/views/bill/OtherInList.vue @@ -0,0 +1,163 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/OtherOutList.vue b/jshERP-web/src/views/bill/OtherOutList.vue new file mode 100644 index 000000000..723f54f60 --- /dev/null +++ b/jshERP-web/src/views/bill/OtherOutList.vue @@ -0,0 +1,163 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/PurchaseBackList.vue b/jshERP-web/src/views/bill/PurchaseBackList.vue new file mode 100644 index 000000000..c95952d61 --- /dev/null +++ b/jshERP-web/src/views/bill/PurchaseBackList.vue @@ -0,0 +1,170 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/PurchaseInList.vue b/jshERP-web/src/views/bill/PurchaseInList.vue new file mode 100644 index 000000000..e7ef2d44e --- /dev/null +++ b/jshERP-web/src/views/bill/PurchaseInList.vue @@ -0,0 +1,170 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/PurchaseOrderList.vue b/jshERP-web/src/views/bill/PurchaseOrderList.vue new file mode 100644 index 000000000..19bd2721b --- /dev/null +++ b/jshERP-web/src/views/bill/PurchaseOrderList.vue @@ -0,0 +1,174 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/RetailBackList.vue b/jshERP-web/src/views/bill/RetailBackList.vue new file mode 100644 index 000000000..d773877e9 --- /dev/null +++ b/jshERP-web/src/views/bill/RetailBackList.vue @@ -0,0 +1,164 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/RetailOutList.vue b/jshERP-web/src/views/bill/RetailOutList.vue new file mode 100644 index 000000000..8d23276c9 --- /dev/null +++ b/jshERP-web/src/views/bill/RetailOutList.vue @@ -0,0 +1,164 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/SaleBackList.vue b/jshERP-web/src/views/bill/SaleBackList.vue new file mode 100644 index 000000000..628fa8362 --- /dev/null +++ b/jshERP-web/src/views/bill/SaleBackList.vue @@ -0,0 +1,162 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/SaleOrderList.vue b/jshERP-web/src/views/bill/SaleOrderList.vue new file mode 100644 index 000000000..2f5037fcc --- /dev/null +++ b/jshERP-web/src/views/bill/SaleOrderList.vue @@ -0,0 +1,174 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/SaleOutList.vue b/jshERP-web/src/views/bill/SaleOutList.vue new file mode 100644 index 000000000..a914a741d --- /dev/null +++ b/jshERP-web/src/views/bill/SaleOutList.vue @@ -0,0 +1,170 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/dialog/ManyAccountModal.vue b/jshERP-web/src/views/bill/dialog/ManyAccountModal.vue new file mode 100644 index 000000000..0569e35b7 --- /dev/null +++ b/jshERP-web/src/views/bill/dialog/ManyAccountModal.vue @@ -0,0 +1,170 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/mixins/BillListMixin.js b/jshERP-web/src/views/bill/mixins/BillListMixin.js new file mode 100644 index 000000000..b1d974e2b --- /dev/null +++ b/jshERP-web/src/views/bill/mixins/BillListMixin.js @@ -0,0 +1,50 @@ +export const BillListMixin = { + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + }, + + isBatchDelEnabled: function () { + for (let i = 0; i < this.selectedRowKeys.length; i++) { + if (!this.selectionRows[i].actionsEnabled.delete) { + return false; + } + } + return true; + } + }, + + methods: { + myHandleAdd() { + this.$refs.modalForm.action = "add"; + this.handleAdd(); + }, + myHandleEdit(record) { + this.$refs.modalForm.action = "edit"; + this.handleEdit(record); + }, + myHandleDetail(record) { + this.$refs.modalForm.action = "detail"; + this.handleDetail(record); + }, + handleApprove(record) { + this.$refs.modalForm.action = "approve"; + this.$refs.modalForm.edit(record); + this.$refs.modalForm.title = "审核"; + }, + searchReset() { + this.queryParam = { + type: this.queryParam.type, + subType: this.queryParam.subType + } + this.loadData(1); + }, + onDateChange: function (value, dateString) { + this.queryParam.beginTime=dateString[0]; + this.queryParam.endTime=dateString[1]; + }, + onDateOk(value) { + console.log(value); + } + } +} \ No newline at end of file diff --git a/jshERP-web/src/views/bill/mixins/BillModalMixin.js b/jshERP-web/src/views/bill/mixins/BillModalMixin.js new file mode 100644 index 000000000..c643b3d40 --- /dev/null +++ b/jshERP-web/src/views/bill/mixins/BillModalMixin.js @@ -0,0 +1,324 @@ +import { VALIDATE_NO_PASSED, validateFormAndTables } from '@/utils/JEditableTableUtil' +import {findBySelectSup,findBySelectCus,findBySelectRetail,getMaterialByBarCode,findStockByDepotAndBarCode,getAccount} from '@/api/api' +import { getAction,putAction } from '@/api/manage' +import { getMpListShort, getNowFormatDateTime } from "@/utils/util" +import Vue from 'vue' + +export const BillModalMixin = { + data() { + return { + action: '', + manyAccountBtnStatus: false, + supList: [], + cusList: [], + retailList: [], + depotList: [], + accountList: [], + accountIdList: [], + accountMoneyList: [], + spans: { + labelCol1: {span: 2}, + wrapperCol1: {span: 22}, + //1_5: 分为1.5列(相当于占了2/3) + labelCol1_5: { span: 3 }, + wrapperCol1_5: { span: 21 }, + labelCol2: {span: 4}, + wrapperCol2: {span: 20}, + labelCol3: {span: 6}, + wrapperCol3: {span: 18}, + labelCol6: {span: 12}, + wrapperCol6: {span: 12} + }, + }; + }, + created () { + this.initSupplier() + this.initCustomer() + this.initRetail() + this.initDepot() + this.initAccount() + }, + computed: { + readOnly: function() { + return this.action !== "add" && this.action !== "edit"; + } + }, + methods: { + addInit(amountNum) { + getAction('/sequence/buildNumber').then((res) => { + if (res && res.code === 200) { + this.form.setFieldsValue({'number':amountNum + res.data.defaultNumber}) + } + }) + this.$nextTick(() => { + this.form.setFieldsValue({'operTime':getNowFormatDateTime(), 'discount': 0, + 'discountMoney': 0, 'discountLastMoney': 0, 'otherMoney': 0, 'changeAmount': 0, 'debt': 0}) + }) + this.$nextTick(() => { + getAccount({}).then((res)=>{ + if(res && res.code === 200) { + for (const item of res.data.accountList) { + if(item.isDefault){ + this.form.setFieldsValue({'accountId': item.id}) + } + } + } + }) + }) + this.$nextTick(() => { + this.form.setFieldsValue({'payType': '现金'}) + }) + this.accountIdList = [] + this.accountMoneyList = [] + this.manyAccountBtnStatus = false + }, + initSupplier() { + let that = this; + findBySelectSup({}).then((res)=>{ + if(res) { + that.supList = res; + } + }); + }, + initCustomer() { + let that = this; + findBySelectCus({}).then((res)=>{ + if(res) { + that.cusList = res; + } + }); + }, + initRetail() { + let that = this; + findBySelectRetail({}).then((res)=>{ + if(res) { + that.retailList = res; + } + }); + }, + initDepot() { + let that = this; + getAction('/depot/findDepotByUserId?UBType=UserDepot&UBKeyId=').then((res) => { + if (res) { + for(let i=0; i{ + if(res && res.code === 200) { + let list = res.data.accountList + list.splice(0,0,{id: 0, name: '多账户'}) + that.accountList = list + } + }) + }, + handleManyAccount(){ + this.selectAccount(0) + }, + selectAccount(value){ + if(value === 0) { //多账户 + this.$refs.manyAccountModalForm.edit(this.accountIdList, this.accountMoneyList) + this.$refs.manyAccountModalForm.title = "多账户结算" + this.manyAccountBtnStatus = true + } else { + this.accountIdList = [] + this.accountMoneyList = [] + this.manyAccountBtnStatus = false + } + }, + //单元值改变一个字符就触发一次 + onValueChange(event) { + let that = this + const { type, row, column, value, target } = event + let param,operNumber,unitPrice,taxUnitPrice,allPrice,taxRate,taxMoney,taxLastMoney + switch(column.key) { + case "depotId": + if(row.barCode){ + that.getStockByDepotBarCode(row, target) + } + break; + case "barCode": + param = { + barCode: value, + mpList: getMpListShort(Vue.ls.get('materialPropertyList')) //扩展属性 + } + getMaterialByBarCode(param).then((res) => { + if (res && res.code === 200) { + target.setValues([{ + rowKey: row.id, + values: { + barCode: res.data.mBarCode, + name: res.data.name, + standard: res.data.standard, + model: res.data.model, + materialOther: res.data.materialOther, + unit: res.data.commodityUnit, + operNumber: 1, + unitPrice: res.data.purchaseDecimal, + taxUnitPrice: res.data.purchaseDecimal, + allPrice: res.data.purchaseDecimal, + taxRate: 0, + taxMoney: 0, + taxLastMoney: res.data.purchaseDecimal + } + }]); + that.getStockByDepotBarCode(row, target) + target.recalcAllStatisticsColumns() + that.autoChangePrice(target) + } + }); + break; + case "operNumber": + operNumber = value-0 + taxRate = row.taxRate-0 //税率 + unitPrice = row.unitPrice-0 //单价 + taxUnitPrice = row.taxUnitPrice-0 + allPrice = (unitPrice*operNumber).toFixed(2)-0 + taxMoney =((taxRate*0.01)*allPrice).toFixed(2)-0 + taxLastMoney = (allPrice + taxMoney).toFixed(2)-0 + target.setValues([{rowKey: row.id, values: {allPrice: allPrice, taxMoney: taxMoney, taxLastMoney: taxLastMoney}}]) + target.recalcAllStatisticsColumns() + that.autoChangePrice(target) + break; + case "unitPrice": + operNumber = row.operNumber-0 //数量 + unitPrice = value-0 //单价 + taxRate = row.taxRate-0 //税率 + taxUnitPrice = (unitPrice*(1+taxRate*0.01)).toFixed(2)-0 + allPrice = (unitPrice*operNumber).toFixed(2)-0 + taxMoney =((taxRate*0.01)*allPrice).toFixed(2)-0 + taxLastMoney = (allPrice + taxMoney).toFixed(2)-0 + target.setValues([{rowKey: row.id, values: {taxUnitPrice: taxUnitPrice, allPrice: allPrice, taxMoney: taxMoney, taxLastMoney: taxLastMoney}}]) + target.recalcAllStatisticsColumns() + that.autoChangePrice(target) + break; + case "allPrice": + operNumber = row.operNumber-0 //数量 + taxRate = row.taxRate-0 //税率 + allPrice = value-0 + unitPrice = (allPrice/operNumber).toFixed(2)-0 //单价 + taxUnitPrice =(unitPrice*(1+taxRate*0.01)).toFixed(2)-0 + taxMoney =((taxRate*0.01)*allPrice).toFixed(2)-0 + taxLastMoney = (allPrice + taxMoney).toFixed(2)-0 + target.setValues([{rowKey: row.id, values: {unitPrice: unitPrice, taxUnitPrice: taxUnitPrice, taxMoney: taxMoney, taxLastMoney: taxLastMoney}}]) + target.recalcAllStatisticsColumns() + that.autoChangePrice(target) + break; + case "taxRate": + operNumber = row.operNumber-0 //数量 + allPrice = row.allPrice-0 + unitPrice = row.unitPrice-0 + taxRate = value-0 //税率 + taxUnitPrice =(unitPrice*(1+taxRate*0.01)).toFixed(2)-0 + taxMoney =((taxRate*0.01)*allPrice).toFixed(2)-0 + taxLastMoney = (allPrice + taxMoney).toFixed(2)-0 + target.setValues([{rowKey: row.id, values: {taxUnitPrice: taxUnitPrice, taxMoney: taxMoney, taxLastMoney: taxLastMoney}}]) + target.recalcAllStatisticsColumns() + that.autoChangePrice(target) + break; + case "taxLastMoney": + operNumber = row.operNumber-0 //数量 + taxLastMoney = value-0 + taxRate = row.taxRate-0 //税率 + taxUnitPrice = (taxLastMoney/operNumber).toFixed(2)-0 + unitPrice = (taxUnitPrice/(1+taxRate*0.01)).toFixed(2)-0 + allPrice = (unitPrice*operNumber).toFixed(2)-0 + taxMoney =(taxLastMoney-allPrice).toFixed(2)-0 + target.setValues([{rowKey: row.id, values: {unitPrice: unitPrice, taxUnitPrice: taxUnitPrice, allPrice: allPrice, taxMoney: taxMoney}}]) + target.recalcAllStatisticsColumns() + that.autoChangePrice(target) + break; + } + }, + //删除一行或多行的时候触发 + onDeleted(ids, target) { + target.recalcAllStatisticsColumns() + this.autoChangePrice(target) + }, + //根据仓库和条码查询库存 + getStockByDepotBarCode(row, target){ + findStockByDepotAndBarCode({ depotId: row.depotId, barCode: row.barCode }).then((res) => { + if (res && res.code === 200) { + target.setValues([{rowKey: row.id, values: {stock: res.data.stock}}]) + target.recalcAllStatisticsColumns() + } + }) + }, + //改变优惠、本次付款、欠款的值 + autoChangePrice(target) { + let allTaxLastMoney = target.statisticsColumns.taxLastMoney + let discount = this.form.getFieldValue('discount')-0 + let otherMoney = this.form.getFieldValue('otherMoney')-0 + let discountMoney = (discount*0.01*allTaxLastMoney).toFixed(2)-0 + let discountLastMoney = (allTaxLastMoney-discountMoney).toFixed(2)-0 + let changeAmountNew = (discountLastMoney + otherMoney).toFixed(2)-0 + this.$nextTick(() => { + this.form.setFieldsValue({'discount':discount,'discountMoney':discountMoney,'discountLastMoney':discountLastMoney, + 'changeAmount':changeAmountNew,'debt':0}) + }); + }, + //改变优惠率 + onKeyUpDiscount(e) { + const value = e.target.value-0 + let discountMoney = this.form.getFieldValue('discountMoney')-0 + let discountLastMoney = this.form.getFieldValue('discountLastMoney')-0 + let otherMoney = this.form.getFieldValue('otherMoney')-0 + let allTaxLastMoney = (discountMoney + discountLastMoney).toFixed(2)-0 + let discountMoneyNew = (allTaxLastMoney*value*0.01).toFixed(2)-0 + let discountLastMoneyNew = (allTaxLastMoney - discountMoneyNew).toFixed(2)-0 + let changeAmountNew = (discountLastMoneyNew + otherMoney).toFixed(2)-0 + this.$nextTick(() => { + this.form.setFieldsValue({'discountMoney':discountMoneyNew,'discountLastMoney':discountLastMoneyNew, + 'changeAmount':changeAmountNew,'debt':0}) + }); + }, + //改变付款优惠 + onKeyUpDiscountMoney(e) { + const value = e.target.value-0 + let discount = this.form.getFieldValue('discount')-0 + let discountLastMoney = this.form.getFieldValue('discountLastMoney')-0 + let otherMoney = this.form.getFieldValue('otherMoney')-0 + if(discount !== 100) { + let allTaxLastMoney = (discountLastMoney/(1-discount/100)).toFixed(2)-0 + let discountNew = (value/allTaxLastMoney*100).toFixed(2)-0 + let discountLastMoneyNew = (allTaxLastMoney - value).toFixed(2)-0 + let changeAmountNew = (discountLastMoneyNew + otherMoney).toFixed(2)-0 + this.$nextTick(() => { + this.form.setFieldsValue({'discount':discountNew,'discountLastMoney':discountLastMoneyNew, + 'changeAmount':changeAmountNew,'debt':0}) + }); + } + }, + //其它费用 + onKeyUpOtherMoney(e) { + const value = e.target.value-0 + let discountLastMoney = this.form.getFieldValue('discountLastMoney')-0 + let changeAmountNew = (discountLastMoney + value).toFixed(2)-0 + this.$nextTick(() => { + this.form.setFieldsValue({'changeAmount':changeAmountNew, 'debt':0}) + }); + }, + //改变本次付款 + onKeyUpChangeAmount(e) { + const value = e.target.value-0 + let discountLastMoney = this.form.getFieldValue('discountLastMoney')-0 + let otherMoney = this.form.getFieldValue('otherMoney')-0 + let debtNew = (discountLastMoney + otherMoney - value).toFixed(2)-0 + this.$nextTick(() => { + this.form.setFieldsValue({'debt':debtNew}) + }); + } + } +} \ No newline at end of file diff --git a/jshERP-web/src/views/bill/modules/AllocationOutModal.vue b/jshERP-web/src/views/bill/modules/AllocationOutModal.vue new file mode 100644 index 000000000..b9ee4c8ed --- /dev/null +++ b/jshERP-web/src/views/bill/modules/AllocationOutModal.vue @@ -0,0 +1,173 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/modules/AssembleModal.vue b/jshERP-web/src/views/bill/modules/AssembleModal.vue new file mode 100644 index 000000000..d00966b82 --- /dev/null +++ b/jshERP-web/src/views/bill/modules/AssembleModal.vue @@ -0,0 +1,184 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/modules/DisassembleModal.vue b/jshERP-web/src/views/bill/modules/DisassembleModal.vue new file mode 100644 index 000000000..bd75183d5 --- /dev/null +++ b/jshERP-web/src/views/bill/modules/DisassembleModal.vue @@ -0,0 +1,183 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/modules/OtherInModal.vue b/jshERP-web/src/views/bill/modules/OtherInModal.vue new file mode 100644 index 000000000..8e95f68fb --- /dev/null +++ b/jshERP-web/src/views/bill/modules/OtherInModal.vue @@ -0,0 +1,180 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/modules/OtherOutModal.vue b/jshERP-web/src/views/bill/modules/OtherOutModal.vue new file mode 100644 index 000000000..7dcf7f582 --- /dev/null +++ b/jshERP-web/src/views/bill/modules/OtherOutModal.vue @@ -0,0 +1,180 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/modules/PurchaseBackModal.vue b/jshERP-web/src/views/bill/modules/PurchaseBackModal.vue new file mode 100644 index 000000000..008575e2c --- /dev/null +++ b/jshERP-web/src/views/bill/modules/PurchaseBackModal.vue @@ -0,0 +1,238 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/modules/PurchaseInModal.vue b/jshERP-web/src/views/bill/modules/PurchaseInModal.vue new file mode 100644 index 000000000..d215abea8 --- /dev/null +++ b/jshERP-web/src/views/bill/modules/PurchaseInModal.vue @@ -0,0 +1,260 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/modules/PurchaseOrderModal.vue b/jshERP-web/src/views/bill/modules/PurchaseOrderModal.vue new file mode 100644 index 000000000..78d55a482 --- /dev/null +++ b/jshERP-web/src/views/bill/modules/PurchaseOrderModal.vue @@ -0,0 +1,182 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/modules/RetailBackModal.vue b/jshERP-web/src/views/bill/modules/RetailBackModal.vue new file mode 100644 index 000000000..e705c1e32 --- /dev/null +++ b/jshERP-web/src/views/bill/modules/RetailBackModal.vue @@ -0,0 +1,230 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/modules/RetailOutModal.vue b/jshERP-web/src/views/bill/modules/RetailOutModal.vue new file mode 100644 index 000000000..8902d4a17 --- /dev/null +++ b/jshERP-web/src/views/bill/modules/RetailOutModal.vue @@ -0,0 +1,237 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/modules/SaleBackModal.vue b/jshERP-web/src/views/bill/modules/SaleBackModal.vue new file mode 100644 index 000000000..a5dda7305 --- /dev/null +++ b/jshERP-web/src/views/bill/modules/SaleBackModal.vue @@ -0,0 +1,238 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/modules/SaleOrderModal.vue b/jshERP-web/src/views/bill/modules/SaleOrderModal.vue new file mode 100644 index 000000000..b843e98ce --- /dev/null +++ b/jshERP-web/src/views/bill/modules/SaleOrderModal.vue @@ -0,0 +1,180 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/bill/modules/SaleOutModal.vue b/jshERP-web/src/views/bill/modules/SaleOutModal.vue new file mode 100644 index 000000000..8f5d617ca --- /dev/null +++ b/jshERP-web/src/views/bill/modules/SaleOutModal.vue @@ -0,0 +1,238 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/dashboard/Analysis.vue b/jshERP-web/src/views/dashboard/Analysis.vue new file mode 100644 index 000000000..2e85709b0 --- /dev/null +++ b/jshERP-web/src/views/dashboard/Analysis.vue @@ -0,0 +1,27 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/dashboard/IndexBdc.vue b/jshERP-web/src/views/dashboard/IndexBdc.vue new file mode 100644 index 000000000..cf7ca38bc --- /dev/null +++ b/jshERP-web/src/views/dashboard/IndexBdc.vue @@ -0,0 +1,519 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/dashboard/IndexChart.vue b/jshERP-web/src/views/dashboard/IndexChart.vue new file mode 100644 index 000000000..29f4c740e --- /dev/null +++ b/jshERP-web/src/views/dashboard/IndexChart.vue @@ -0,0 +1,167 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/dashboard/IndexTask.vue b/jshERP-web/src/views/dashboard/IndexTask.vue new file mode 100644 index 000000000..8e9d84bee --- /dev/null +++ b/jshERP-web/src/views/dashboard/IndexTask.vue @@ -0,0 +1,372 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/dashboard/Monitor.vue b/jshERP-web/src/views/dashboard/Monitor.vue new file mode 100644 index 000000000..144e237ec --- /dev/null +++ b/jshERP-web/src/views/dashboard/Monitor.vue @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/dashboard/Workplace.vue b/jshERP-web/src/views/dashboard/Workplace.vue new file mode 100644 index 000000000..d00310084 --- /dev/null +++ b/jshERP-web/src/views/dashboard/Workplace.vue @@ -0,0 +1,360 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/exception/403.vue b/jshERP-web/src/views/exception/403.vue new file mode 100644 index 000000000..e9fc39927 --- /dev/null +++ b/jshERP-web/src/views/exception/403.vue @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/exception/404.vue b/jshERP-web/src/views/exception/404.vue new file mode 100644 index 000000000..bc747b5ea --- /dev/null +++ b/jshERP-web/src/views/exception/404.vue @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/exception/500.vue b/jshERP-web/src/views/exception/500.vue new file mode 100644 index 000000000..a36cabebd --- /dev/null +++ b/jshERP-web/src/views/exception/500.vue @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/exception/ExceptionPage.vue b/jshERP-web/src/views/exception/ExceptionPage.vue new file mode 100644 index 000000000..0550d5efc --- /dev/null +++ b/jshERP-web/src/views/exception/ExceptionPage.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/exception/type.js b/jshERP-web/src/views/exception/type.js new file mode 100644 index 000000000..3fc7b1f85 --- /dev/null +++ b/jshERP-web/src/views/exception/type.js @@ -0,0 +1,19 @@ +const types = { + 403: { + img: 'https://gw.alipayobjects.com/zos/rmsportal/wZcnGqRDyhPOEYFcZDnb.svg', + title: '403', + desc: '抱歉,你无权访问该页面' + }, + 404: { + img: 'https://gw.alipayobjects.com/zos/rmsportal/KpnpchXsobRgLElEozzI.svg', + title: '404', + desc: '抱歉,你访问的页面不存在或仍在开发中' + }, + 500: { + img: 'https://gw.alipayobjects.com/zos/rmsportal/RVRUAYdCGeYNBWoKiIwB.svg', + title: '500', + desc: '抱歉,服务器出错了' + } +} + +export default types \ No newline at end of file diff --git a/jshERP-web/src/views/financial/AdvanceInList.vue b/jshERP-web/src/views/financial/AdvanceInList.vue new file mode 100644 index 000000000..029ed89ce --- /dev/null +++ b/jshERP-web/src/views/financial/AdvanceInList.vue @@ -0,0 +1,143 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/financial/GiroList.vue b/jshERP-web/src/views/financial/GiroList.vue new file mode 100644 index 000000000..304b0950c --- /dev/null +++ b/jshERP-web/src/views/financial/GiroList.vue @@ -0,0 +1,142 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/financial/ItemInList.vue b/jshERP-web/src/views/financial/ItemInList.vue new file mode 100644 index 000000000..b7715a270 --- /dev/null +++ b/jshERP-web/src/views/financial/ItemInList.vue @@ -0,0 +1,143 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/financial/ItemOutList.vue b/jshERP-web/src/views/financial/ItemOutList.vue new file mode 100644 index 000000000..38e4f5948 --- /dev/null +++ b/jshERP-web/src/views/financial/ItemOutList.vue @@ -0,0 +1,143 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/financial/MoneyInList.vue b/jshERP-web/src/views/financial/MoneyInList.vue new file mode 100644 index 000000000..5a55d823e --- /dev/null +++ b/jshERP-web/src/views/financial/MoneyInList.vue @@ -0,0 +1,143 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/financial/MoneyOutList.vue b/jshERP-web/src/views/financial/MoneyOutList.vue new file mode 100644 index 000000000..f233b5b78 --- /dev/null +++ b/jshERP-web/src/views/financial/MoneyOutList.vue @@ -0,0 +1,143 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/financial/mixins/FinancialListMixin.js b/jshERP-web/src/views/financial/mixins/FinancialListMixin.js new file mode 100644 index 000000000..426b121e1 --- /dev/null +++ b/jshERP-web/src/views/financial/mixins/FinancialListMixin.js @@ -0,0 +1,49 @@ +export const FinancialListMixin = { + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + }, + + isBatchDelEnabled: function () { + for (let i = 0; i < this.selectedRowKeys.length; i++) { + if (!this.selectionRows[i].actionsEnabled.delete) { + return false; + } + } + return true; + } + }, + + methods: { + myHandleAdd() { + this.$refs.modalForm.action = "add"; + this.handleAdd(); + }, + myHandleEdit(record) { + this.$refs.modalForm.action = "edit"; + this.handleEdit(record); + }, + myHandleDetail(record) { + this.$refs.modalForm.action = "detail"; + this.handleDetail(record); + }, + handleApprove(record) { + this.$refs.modalForm.action = "approve"; + this.$refs.modalForm.edit(record); + this.$refs.modalForm.title = "审核"; + }, + searchReset() { + this.queryParam = { + type: this.queryParam.type + } + this.loadData(1); + }, + onDateChange: function (value, dateString) { + this.queryParam.beginTime=dateString[0]; + this.queryParam.endTime=dateString[1]; + }, + onDateOk(value) { + console.log(value); + } + } +} \ No newline at end of file diff --git a/jshERP-web/src/views/financial/mixins/FinancialModalMixin.js b/jshERP-web/src/views/financial/mixins/FinancialModalMixin.js new file mode 100644 index 000000000..39feee4ce --- /dev/null +++ b/jshERP-web/src/views/financial/mixins/FinancialModalMixin.js @@ -0,0 +1,174 @@ +import { VALIDATE_NO_PASSED, validateFormAndTables } from '@/utils/JEditableTableUtil' +import {findBySelectSup,findBySelectCus,findBySelectRetail,findStockByDepotAndBarCode,getAccount,getPersonByType,findInOutItemByParam} from '@/api/api' +import { getAction,putAction } from '@/api/manage' +import { getMpListShort, getNowFormatDateTime } from "@/utils/util" +import Vue from 'vue' + +export const FinancialModalMixin = { + data() { + return { + action: '', + supList: [], + cusList: [], + retailList: [], + personList: [], + accountList: [], + spans: { + labelCol1: {span: 2}, + wrapperCol1: {span: 22}, + //1_5: 分为1.5列(相当于占了2/3) + labelCol1_5: { span: 3 }, + wrapperCol1_5: { span: 21 }, + labelCol2: {span: 4}, + wrapperCol2: {span: 20}, + labelCol3: {span: 6}, + wrapperCol3: {span: 18}, + labelCol6: {span: 12}, + wrapperCol6: {span: 12} + }, + }; + }, + created () { + this.initSupplier() + this.initCustomer() + this.initRetail() + this.initPerson() + }, + computed: { + readOnly: function() { + return this.action !== "add" && this.action !== "edit"; + } + }, + methods: { + addInit(amountNum) { + this.$nextTick(() => { + this.form.setFieldsValue({'billTime':getNowFormatDateTime()}) + }); + getAction('/sequence/buildNumber').then((res) => { + if (res && res.code === 200) { + this.form.setFieldsValue({'billNo':amountNum + res.data.defaultNumber}) + } + }) + }, + initSupplier() { + let that = this; + findBySelectSup({}).then((res)=>{ + if(res) { + that.supList = res; + } + }); + }, + initCustomer() { + let that = this; + findBySelectCus({}).then((res)=>{ + if(res) { + that.cusList = res; + } + }); + }, + initRetail() { + let that = this; + findBySelectRetail({}).then((res)=>{ + if(res) { + that.retailList = res; + } + }); + }, + initPerson() { + let that = this; + getPersonByType({type:'财务员'}).then((res)=>{ + if(res && res.code === 200) { + that.personList = res.data.personList; + } + }) + }, + initInOutItem(type) { + let that = this; + findInOutItemByParam({type:type}).then((res)=>{ + if(res) { + for(let i=0; i{ + if(res && res.code === 200) { + that.accountList = res.data.accountList; + } + }) + }, + //账户-用于明细 + initDetailAccount(){ + let that = this; + getAccount({}).then((res)=>{ + if(res && res.code === 200) { + let list = res.data.accountList; + for(let i=0; i { + this.form.setFieldsValue({'discount':0,'discountMoney':0,'discountLastMoney':allTaxLastMoney, + 'changeAmount':allTaxLastMoney,'debt':0}) + }); + break; + case "unitPrice": + operNumber = row.operNumber + target.setValues([{rowKey: row.id, values: {allPrice: value*operNumber}}]) + target.recalcAllStatisticsColumns() + break; + case "allPrice": + operNumber = row.operNumber + target.setValues([{rowKey: row.id, values: {unitPrice: value/operNumber}}]) + target.recalcAllStatisticsColumns() + break; + } + }, + //根据仓库和条码查询库存 + getStockByDepotBarCode(row, target){ + findStockByDepotAndBarCode({ depotId: row.depotId, barCode: row.barCode }).then((res) => { + if (res && res.code === 200) { + target.setValues([{rowKey: row.id, values: {stock: res.data.stock}}]) + target.recalcAllStatisticsColumns() + } + }) + } + } +} \ No newline at end of file diff --git a/jshERP-web/src/views/financial/modules/AdvanceInModal.vue b/jshERP-web/src/views/financial/modules/AdvanceInModal.vue new file mode 100644 index 000000000..9826925ec --- /dev/null +++ b/jshERP-web/src/views/financial/modules/AdvanceInModal.vue @@ -0,0 +1,180 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/financial/modules/GiroModal.vue b/jshERP-web/src/views/financial/modules/GiroModal.vue new file mode 100644 index 000000000..63e3fa3e4 --- /dev/null +++ b/jshERP-web/src/views/financial/modules/GiroModal.vue @@ -0,0 +1,182 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/financial/modules/ItemInModal.vue b/jshERP-web/src/views/financial/modules/ItemInModal.vue new file mode 100644 index 000000000..7df5e3ba0 --- /dev/null +++ b/jshERP-web/src/views/financial/modules/ItemInModal.vue @@ -0,0 +1,189 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/financial/modules/ItemOutModal.vue b/jshERP-web/src/views/financial/modules/ItemOutModal.vue new file mode 100644 index 000000000..a7269c424 --- /dev/null +++ b/jshERP-web/src/views/financial/modules/ItemOutModal.vue @@ -0,0 +1,189 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/financial/modules/MoneyInModal.vue b/jshERP-web/src/views/financial/modules/MoneyInModal.vue new file mode 100644 index 000000000..01fa0f333 --- /dev/null +++ b/jshERP-web/src/views/financial/modules/MoneyInModal.vue @@ -0,0 +1,180 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/financial/modules/MoneyOutModal.vue b/jshERP-web/src/views/financial/modules/MoneyOutModal.vue new file mode 100644 index 000000000..eb3c4d9f9 --- /dev/null +++ b/jshERP-web/src/views/financial/modules/MoneyOutModal.vue @@ -0,0 +1,180 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/form/BasicForm.vue b/jshERP-web/src/views/form/BasicForm.vue new file mode 100644 index 000000000..0e4bedc82 --- /dev/null +++ b/jshERP-web/src/views/form/BasicForm.vue @@ -0,0 +1,138 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/form/advancedForm/AdvancedForm.vue b/jshERP-web/src/views/form/advancedForm/AdvancedForm.vue new file mode 100644 index 000000000..ad75b9796 --- /dev/null +++ b/jshERP-web/src/views/form/advancedForm/AdvancedForm.vue @@ -0,0 +1,206 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/form/advancedForm/RepositoryForm.vue b/jshERP-web/src/views/form/advancedForm/RepositoryForm.vue new file mode 100644 index 000000000..0ad1fad16 --- /dev/null +++ b/jshERP-web/src/views/form/advancedForm/RepositoryForm.vue @@ -0,0 +1,119 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/form/advancedForm/TaskForm.vue b/jshERP-web/src/views/form/advancedForm/TaskForm.vue new file mode 100644 index 000000000..e1af2aebc --- /dev/null +++ b/jshERP-web/src/views/form/advancedForm/TaskForm.vue @@ -0,0 +1,107 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/form/stepForm/Step1.vue b/jshERP-web/src/views/form/stepForm/Step1.vue new file mode 100644 index 000000000..384602c41 --- /dev/null +++ b/jshERP-web/src/views/form/stepForm/Step1.vue @@ -0,0 +1,60 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/form/stepForm/Step2.vue b/jshERP-web/src/views/form/stepForm/Step2.vue new file mode 100644 index 000000000..5e02c4181 --- /dev/null +++ b/jshERP-web/src/views/form/stepForm/Step2.vue @@ -0,0 +1,82 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/form/stepForm/Step3.vue b/jshERP-web/src/views/form/stepForm/Step3.vue new file mode 100644 index 000000000..a9e739e1d --- /dev/null +++ b/jshERP-web/src/views/form/stepForm/Step3.vue @@ -0,0 +1,69 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/form/stepForm/StepForm.vue b/jshERP-web/src/views/form/stepForm/StepForm.vue new file mode 100644 index 000000000..623d6444f --- /dev/null +++ b/jshERP-web/src/views/form/stepForm/StepForm.vue @@ -0,0 +1,62 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/list/CardList.vue b/jshERP-web/src/views/list/CardList.vue new file mode 100644 index 000000000..7c5a588a9 --- /dev/null +++ b/jshERP-web/src/views/list/CardList.vue @@ -0,0 +1,110 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/list/PermissionList.vue b/jshERP-web/src/views/list/PermissionList.vue new file mode 100644 index 000000000..0eb7cc128 --- /dev/null +++ b/jshERP-web/src/views/list/PermissionList.vue @@ -0,0 +1,272 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/list/RoleList.vue b/jshERP-web/src/views/list/RoleList.vue new file mode 100644 index 000000000..77c29f933 --- /dev/null +++ b/jshERP-web/src/views/list/RoleList.vue @@ -0,0 +1,182 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/list/StandardList.vue b/jshERP-web/src/views/list/StandardList.vue new file mode 100644 index 000000000..4868ce3ae --- /dev/null +++ b/jshERP-web/src/views/list/StandardList.vue @@ -0,0 +1,164 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/list/TableInnerEditList.vue b/jshERP-web/src/views/list/TableInnerEditList.vue new file mode 100644 index 000000000..617453162 --- /dev/null +++ b/jshERP-web/src/views/list/TableInnerEditList.vue @@ -0,0 +1,270 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/list/TableList.vue b/jshERP-web/src/views/list/TableList.vue new file mode 100644 index 000000000..ac9e06498 --- /dev/null +++ b/jshERP-web/src/views/list/TableList.vue @@ -0,0 +1,337 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/list/UserList.vue b/jshERP-web/src/views/list/UserList.vue new file mode 100644 index 000000000..a3b95be8a --- /dev/null +++ b/jshERP-web/src/views/list/UserList.vue @@ -0,0 +1,264 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/list/modules/RoleModal.vue b/jshERP-web/src/views/list/modules/RoleModal.vue new file mode 100644 index 000000000..4f9f832dd --- /dev/null +++ b/jshERP-web/src/views/list/modules/RoleModal.vue @@ -0,0 +1,203 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/list/search/SearchLayout.vue b/jshERP-web/src/views/list/search/SearchLayout.vue new file mode 100644 index 000000000..7372018fe --- /dev/null +++ b/jshERP-web/src/views/list/search/SearchLayout.vue @@ -0,0 +1,78 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/material/MaterialCategoryList.vue b/jshERP-web/src/views/material/MaterialCategoryList.vue new file mode 100644 index 000000000..d26ac08e4 --- /dev/null +++ b/jshERP-web/src/views/material/MaterialCategoryList.vue @@ -0,0 +1,487 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/material/MaterialList.vue b/jshERP-web/src/views/material/MaterialList.vue new file mode 100644 index 000000000..1e445c252 --- /dev/null +++ b/jshERP-web/src/views/material/MaterialList.vue @@ -0,0 +1,235 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/material/MaterialPropertyList.vue b/jshERP-web/src/views/material/MaterialPropertyList.vue new file mode 100644 index 000000000..822b32d52 --- /dev/null +++ b/jshERP-web/src/views/material/MaterialPropertyList.vue @@ -0,0 +1,107 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/material/modules/MaterialCategoryModal.vue b/jshERP-web/src/views/material/modules/MaterialCategoryModal.vue new file mode 100644 index 000000000..b136de1c8 --- /dev/null +++ b/jshERP-web/src/views/material/modules/MaterialCategoryModal.vue @@ -0,0 +1,145 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/material/modules/MaterialModal.vue b/jshERP-web/src/views/material/modules/MaterialModal.vue new file mode 100644 index 000000000..26a2e28c3 --- /dev/null +++ b/jshERP-web/src/views/material/modules/MaterialModal.vue @@ -0,0 +1,490 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/material/modules/MaterialPropertyModal.vue b/jshERP-web/src/views/material/modules/MaterialPropertyModal.vue new file mode 100644 index 000000000..e67b5bd7c --- /dev/null +++ b/jshERP-web/src/views/material/modules/MaterialPropertyModal.vue @@ -0,0 +1,117 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/modules/message/SysMessageList.vue b/jshERP-web/src/views/modules/message/SysMessageList.vue new file mode 100644 index 000000000..091b95c7e --- /dev/null +++ b/jshERP-web/src/views/modules/message/SysMessageList.vue @@ -0,0 +1,238 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/modules/message/SysMessageTemplateList.vue b/jshERP-web/src/views/modules/message/SysMessageTemplateList.vue new file mode 100644 index 000000000..70335fc7e --- /dev/null +++ b/jshERP-web/src/views/modules/message/SysMessageTemplateList.vue @@ -0,0 +1,253 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/modules/message/modules/SysMessageModal.vue b/jshERP-web/src/views/modules/message/modules/SysMessageModal.vue new file mode 100644 index 000000000..fcfb40ca1 --- /dev/null +++ b/jshERP-web/src/views/modules/message/modules/SysMessageModal.vue @@ -0,0 +1,185 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/modules/message/modules/SysMessageTemplateModal.vue b/jshERP-web/src/views/modules/message/modules/SysMessageTemplateModal.vue new file mode 100644 index 000000000..cfc095352 --- /dev/null +++ b/jshERP-web/src/views/modules/message/modules/SysMessageTemplateModal.vue @@ -0,0 +1,223 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/modules/message/modules/SysMessageTestModal.vue b/jshERP-web/src/views/modules/message/modules/SysMessageTestModal.vue new file mode 100644 index 000000000..77cc36fd6 --- /dev/null +++ b/jshERP-web/src/views/modules/message/modules/SysMessageTestModal.vue @@ -0,0 +1,122 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/modules/monitor/DiskMonitoring.vue b/jshERP-web/src/views/modules/monitor/DiskMonitoring.vue new file mode 100644 index 000000000..717d1b239 --- /dev/null +++ b/jshERP-web/src/views/modules/monitor/DiskMonitoring.vue @@ -0,0 +1,49 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/modules/monitor/HttpTrace.vue b/jshERP-web/src/views/modules/monitor/HttpTrace.vue new file mode 100644 index 000000000..4c978ba19 --- /dev/null +++ b/jshERP-web/src/views/modules/monitor/HttpTrace.vue @@ -0,0 +1,148 @@ + + + + diff --git a/jshERP-web/src/views/modules/monitor/JvmInfo.vue b/jshERP-web/src/views/modules/monitor/JvmInfo.vue new file mode 100644 index 000000000..66e15cfd2 --- /dev/null +++ b/jshERP-web/src/views/modules/monitor/JvmInfo.vue @@ -0,0 +1,169 @@ + + + diff --git a/jshERP-web/src/views/modules/monitor/RedisInfo.vue b/jshERP-web/src/views/modules/monitor/RedisInfo.vue new file mode 100644 index 000000000..9eab35a80 --- /dev/null +++ b/jshERP-web/src/views/modules/monitor/RedisInfo.vue @@ -0,0 +1,189 @@ + + + diff --git a/jshERP-web/src/views/modules/monitor/RedisTerminal.vue b/jshERP-web/src/views/modules/monitor/RedisTerminal.vue new file mode 100644 index 000000000..e671afa15 --- /dev/null +++ b/jshERP-web/src/views/modules/monitor/RedisTerminal.vue @@ -0,0 +1,13 @@ + + + diff --git a/jshERP-web/src/views/modules/monitor/SystemInfo.vue b/jshERP-web/src/views/modules/monitor/SystemInfo.vue new file mode 100644 index 000000000..2d15f1114 --- /dev/null +++ b/jshERP-web/src/views/modules/monitor/SystemInfo.vue @@ -0,0 +1,137 @@ + + + diff --git a/jshERP-web/src/views/modules/monitor/TomcatInfo.vue b/jshERP-web/src/views/modules/monitor/TomcatInfo.vue new file mode 100644 index 000000000..5885be94c --- /dev/null +++ b/jshERP-web/src/views/modules/monitor/TomcatInfo.vue @@ -0,0 +1,149 @@ + + + diff --git a/jshERP-web/src/views/modules/online/cgform/OnlCgformCopyList.vue b/jshERP-web/src/views/modules/online/cgform/OnlCgformCopyList.vue new file mode 100644 index 000000000..44d776a47 --- /dev/null +++ b/jshERP-web/src/views/modules/online/cgform/OnlCgformCopyList.vue @@ -0,0 +1,391 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/modules/online/cgform/OnlCgformHeadList.vue b/jshERP-web/src/views/modules/online/cgform/OnlCgformHeadList.vue new file mode 100644 index 000000000..f64e86fd9 --- /dev/null +++ b/jshERP-web/src/views/modules/online/cgform/OnlCgformHeadList.vue @@ -0,0 +1,493 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/modules/online/cgform/auto/ButtonExpHandler.js b/jshERP-web/src/views/modules/online/cgform/auto/ButtonExpHandler.js new file mode 100644 index 000000000..3eaf6643c --- /dev/null +++ b/jshERP-web/src/views/modules/online/cgform/auto/ButtonExpHandler.js @@ -0,0 +1,41 @@ +/** + * online 自定义按钮表达式处理类 + */ +export default class ButtonExpHandler { + /** + * 构造器 + * @param express + */ + constructor(express,record) { + this._express = express; + this._record = record; + } + + get show() { + if(!this._express || this._express==''){ + return true; + } + let arr = this._express.split('#'); + //获取字段值 + let fieldValue = this._record[arr[0]]; + //获取表达式 + let exp = arr[1].toLowerCase(); + //判断表达式 + if(exp === 'eq'){ + return fieldValue == arr[2]; + }else if(exp === 'ne'){ + return !(fieldValue == arr[2]); + }else if(exp === 'empty'){ + if(arr[2]==='true' || arr[2]===true){ + return !fieldValue || fieldValue==''; + }else{ + return fieldValue && fieldValue.length>0 + } + }else if(exp === 'in'){ + let arr2 = arr[2].split(','); + return arr2.indexOf(String(fieldValue))>=0; + } + return false; + } + +} \ No newline at end of file diff --git a/jshERP-web/src/views/modules/online/cgform/auto/OnlCgformAutoList.vue b/jshERP-web/src/views/modules/online/cgform/auto/OnlCgformAutoList.vue new file mode 100644 index 000000000..615392118 --- /dev/null +++ b/jshERP-web/src/views/modules/online/cgform/auto/OnlCgformAutoList.vue @@ -0,0 +1,827 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/modules/online/cgform/auto/OnlCgformTreeList.vue b/jshERP-web/src/views/modules/online/cgform/auto/OnlCgformTreeList.vue new file mode 100644 index 000000000..86a533024 --- /dev/null +++ b/jshERP-web/src/views/modules/online/cgform/auto/OnlCgformTreeList.vue @@ -0,0 +1,696 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/modules/online/cgform/auto/erp/OnlCgformErpList.vue b/jshERP-web/src/views/modules/online/cgform/auto/erp/OnlCgformErpList.vue new file mode 100644 index 000000000..b96fd39c2 --- /dev/null +++ b/jshERP-web/src/views/modules/online/cgform/auto/erp/OnlCgformErpList.vue @@ -0,0 +1,111 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/modules/online/cgform/util/TableUtils.js b/jshERP-web/src/views/modules/online/cgform/util/TableUtils.js new file mode 100644 index 000000000..cccca0177 --- /dev/null +++ b/jshERP-web/src/views/modules/online/cgform/util/TableUtils.js @@ -0,0 +1,269 @@ +/** + * 同步列表,可以同步新增、修改、删除 + * @author sunjianlei + * */ +export async function syncAllTable(vm, table1) { + vm.$refs.editableTable.resetScrollTop() + let deleteIds = table1.$refs.editableTable.getDeleteIds() + let table1Value + await table1.$refs.editableTable.getValuesPromise(false).then((values) => { + table1Value = values + return vm.$refs.editableTable.getValuesPromise(false) + }).then((values) => { + + table1Value.forEach(value => { + let flag = false + values.forEach((thisValue) => { + if (value.id === thisValue.id) { + + // 判断是否修改了值 + let dbFieldName = thisValue['dbFieldName'] + let dbFieldTxt = thisValue['dbFieldTxt'] + + // return + + if (value.dbFieldName !== dbFieldName + || value.dbFieldTxt !== dbFieldTxt) { + + // 修改了 + vm.$refs.editableTable.setValues([{ + rowKey: thisValue.id, + values: { + dbFieldName: value.dbFieldName, + dbFieldTxt: value.dbFieldTxt + } + }]) + + } + flag = true + } else { + // id不匹配则有可能是新增也有可能是删除了的 + // 遍历传进来的 deleteIds 进行对比 + deleteIds.forEach(delId => { + // 对比成功,则删除该条数据 + if (delId === thisValue.id) { + vm.$refs.editableTable.removeRows(vm.$refs.editableTable.caseId + delId) + flag = true + } + }) + } + }) + // return + // 判断是否操作了该条数据,若没有操作则代表要执行新增操作 + if (!flag) { + let record = Object.assign({}, value) + vm.columns.forEach(column => { + if ( + column.dataIndex !== 'dbFieldName' && + column.dataIndex !== 'dbFieldTxt' + ) { + record[column.dataIndex] = column.defaultValue + } + }) + vm.$refs.editableTable.push(record) + } + }) + }) + +} + +/** + * 将数据分类并Set进dataSource + * @author sunjianlei + **/ +export function setDataSource(vm, queryData) { + let dataSource = [] + // 遍历查询出来的数据 + queryData.forEach(value => { + + let data = { id: value['id'] } + vm.columns.forEach(column => { + let key = column.key + if (key) { + data[key] = value[key] + + // 由于多选下拉框返回的是一个数组,所以需要改成 [1,2,3] 数组的形式,否则组件不识别 + // if (key === 'indexField') { + // data[key] = value[key].split(',') + // } + + } + }) + dataSource.push(data) + }) + vm.dataSource = dataSource +} + +/** 获取主表的初始化数据 */ +export function getMasterTableInitialData() { + return [ + { + dbFieldName: 'id', + dbFieldTxt: '主键', + dbLength: 36, + dbPointLength: 0, + dbDefaultVal: '', + dbType: 'string', + dbIsKey: '1', + dbIsNull: '0', + // table2 + isShowForm: '0', + isShowList: '0', + isReadOnly: '1', + fieldShowType: 'text', + fieldLength: '120', + queryMode: 'single', + orderNum: 1 + }, + { + dbFieldName: 'create_by', + dbFieldTxt: '创建人', + dbLength: 50, + dbPointLength: 0, + dbDefaultVal: '', + dbType: 'string', + dbIsKey: '0', + dbIsNull: '1', + // table2 + isShowForm: '0', + isShowList: '0', + fieldShowType: 'text', + fieldLength: '120', + queryMode: 'single', + orderNum: 2 + }, + { + dbFieldName: 'create_time', + dbFieldTxt: '创建日期', + dbLength: 20, + dbPointLength: 0, + dbDefaultVal: '', + dbType: 'Date', + dbIsKey: '0', + dbIsNull: '1', + // table2 + isShowForm: '0', + isShowList: '0', + fieldShowType: 'datetime', + fieldLength: '120', + queryMode: 'single', + orderNum: 3 + }, + { + dbFieldName: 'update_by', + dbFieldTxt: '更新人', + dbLength: 50, + dbPointLength: 0, + dbDefaultVal: '', + dbType: 'string', + dbIsKey: '0', + dbIsNull: '1', + // table2 + isShowForm: '0', + isShowList: '0', + fieldShowType: 'text', + fieldLength: '120', + queryMode: 'single', + orderNum: 4 + }, + { + dbFieldName: 'update_time', + dbFieldTxt: '更新日期', + dbLength: 20, + dbPointLength: 0, + dbDefaultVal: '', + dbType: 'Date', + dbIsKey: '0', + dbIsNull: '1', + // table2 + isShowForm: '0', + isShowList: '0', + fieldShowType: 'datetime', + fieldLength: '120', + queryMode: 'single', + orderNum: 5 + },{ + dbFieldName: 'sys_org_code', + dbFieldTxt: '所属部门', + dbLength: 64, + dbPointLength: 0, + dbDefaultVal: '', + dbType: 'string', + dbIsKey: '0', + dbIsNull: '1', + // table2 + isShowForm: '0', + isShowList: '0', + fieldShowType: 'text', + fieldLength: '120', + queryMode: 'single', + orderNum: 6 + } + // { + // dbFieldName: 'sys_org_code', + // dbFieldTxt: '所属部门', + // dbLength: 50, + // dbPointLength: 0, + // dbDefaultVal: '', + // dbType: 'string', + // dbIsKey: false, + // dbIsNull: true + // }, { + // dbFieldName: 'sys_company_code', + // dbFieldTxt: '所属公司', + // dbLength: 50, + // dbPointLength: 0, + // dbDefaultVal: '', + // dbType: 'string', + // dbIsKey: false, + // dbIsNull: true + // }, { + // dbFieldName: 'bpm_status', + // dbFieldTxt: '流程状态', + // dbLength: 32, + // dbPointLength: 0, + // dbDefaultVal: '', + // dbType: 'string', + // dbIsKey: false, + // dbIsNull: true + // } + ] +} +/** 获取树的初始化数据 */ +export function getTreeNeedFields() { + return [{ + dbFieldName: 'pid', + dbFieldTxt: '父级节点', + dbLength: 32, + dbPointLength: 0, + dbDefaultVal: '', + dbType: 'string', + dbIsKey: '0', + dbIsNull: '1', + // table2 + isShowForm: '1', + isShowList: '0', + fieldShowType: 'text', + fieldLength: '120', + queryMode: 'single', + orderNum: 7 + },{ + dbFieldName: 'has_child', + dbFieldTxt: '是否有子节点', + dbLength: 3, + dbPointLength: 0, + dbDefaultVal: '', + dbType: 'string', + dbIsKey: '0', + dbIsNull: '1', + // table2 + isShowForm: '0', + isShowList: '0', + fieldShowType: 'list', + fieldLength: '120', + queryMode: 'single', + orderNum: 8, + // table3 + dictField:"yn" + }] +} \ No newline at end of file diff --git a/jshERP-web/src/views/modules/online/cgreport/OnlCgreportHeadList.vue b/jshERP-web/src/views/modules/online/cgreport/OnlCgreportHeadList.vue new file mode 100644 index 000000000..2532f53c7 --- /dev/null +++ b/jshERP-web/src/views/modules/online/cgreport/OnlCgreportHeadList.vue @@ -0,0 +1,256 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/modules/online/cgreport/auto/OnlCgreportAutoList.vue b/jshERP-web/src/views/modules/online/cgreport/auto/OnlCgreportAutoList.vue new file mode 100644 index 000000000..6736263de --- /dev/null +++ b/jshERP-web/src/views/modules/online/cgreport/auto/OnlCgreportAutoList.vue @@ -0,0 +1,320 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/modules/oss/OSSFileList.vue b/jshERP-web/src/views/modules/oss/OSSFileList.vue new file mode 100644 index 000000000..ca5d34cfc --- /dev/null +++ b/jshERP-web/src/views/modules/oss/OSSFileList.vue @@ -0,0 +1,196 @@ + + + + + diff --git a/jshERP-web/src/views/plugin/car/Car.vue b/jshERP-web/src/views/plugin/car/Car.vue new file mode 100644 index 000000000..9d32c62af --- /dev/null +++ b/jshERP-web/src/views/plugin/car/Car.vue @@ -0,0 +1,110 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/plugin/car/car.html b/jshERP-web/src/views/plugin/car/car.html new file mode 100644 index 000000000..e25c6ce37 --- /dev/null +++ b/jshERP-web/src/views/plugin/car/car.html @@ -0,0 +1,36 @@ + + + + + + + + + + + +
    + + + diff --git a/jshERP-web/src/views/plugin/car/main.js b/jshERP-web/src/views/plugin/car/main.js new file mode 100644 index 000000000..133feeec4 --- /dev/null +++ b/jshERP-web/src/views/plugin/car/main.js @@ -0,0 +1,69 @@ +import Vue from 'vue' +import Car from './Car.vue' +import Storage from 'vue-ls' +import router from './router' +import store from './store' + +import { VueAxios } from "@/utils/request" + +import Antd from 'ant-design-vue' +import Viser from 'viser-vue' +import 'ant-design-vue/dist/antd.less'; + +import '@/permission' // permission control +import '@/utils/filter' // base filter +import Print from 'vue-print-nb-jeecg' +import preview from 'vue-photo-preview' +import 'vue-photo-preview/dist/skin.css' + +import { + ACCESS_TOKEN, + DEFAULT_COLOR, + DEFAULT_THEME, + DEFAULT_LAYOUT_MODE, + DEFAULT_COLOR_WEAK, + SIDEBAR_TYPE, + DEFAULT_FIXED_HEADER, + DEFAULT_FIXED_HEADER_HIDDEN, + DEFAULT_FIXED_SIDEMENU, + DEFAULT_CONTENT_WIDTH_TYPE, + DEFAULT_MULTI_PAGE +} from "@/store/mutation-types" +import config from '@/defaultSettings' + +import hasPermission from '@/utils/hasPermission' +import vueBus from '@/utils/vueBus'; +import JeecgComponents from '@/components/jeecg/index' +import '@/assets/less/JAreaLinkage.less' +import VueAreaLinkage from 'vue-area-linkage' + +Vue.config.productionTip = false +Vue.use(Storage, config.storageOptions) +Vue.use(Antd) +Vue.use(VueAxios, router) +Vue.use(Viser) +Vue.use(hasPermission) +Vue.use(Print) +Vue.use(preview) +Vue.use(vueBus); +Vue.use(JeecgComponents); +Vue.use(VueAreaLinkage); + +new Vue({ + router, + store, + mounted () { + store.commit('SET_SIDEBAR_TYPE', Vue.ls.get(SIDEBAR_TYPE, true)) + store.commit('TOGGLE_THEME', Vue.ls.get(DEFAULT_THEME, config.navTheme)) + store.commit('TOGGLE_LAYOUT_MODE', Vue.ls.get(DEFAULT_LAYOUT_MODE, config.layout)) + store.commit('TOGGLE_FIXED_HEADER', Vue.ls.get(DEFAULT_FIXED_HEADER, config.fixedHeader)) + store.commit('TOGGLE_FIXED_SIDERBAR', Vue.ls.get(DEFAULT_FIXED_SIDEMENU, config.fixSiderbar)) + store.commit('TOGGLE_CONTENT_WIDTH', Vue.ls.get(DEFAULT_CONTENT_WIDTH_TYPE, config.contentWidth)) + store.commit('TOGGLE_FIXED_HEADER_HIDDEN', Vue.ls.get(DEFAULT_FIXED_HEADER_HIDDEN, config.autoHideHeader)) + store.commit('TOGGLE_WEAK', Vue.ls.get(DEFAULT_COLOR_WEAK, config.colorWeak)) + store.commit('TOGGLE_COLOR', Vue.ls.get(DEFAULT_COLOR, config.primaryColor)) + store.commit('SET_TOKEN', Vue.ls.get(ACCESS_TOKEN)) + store.commit('SET_MULTI_PAGE',Vue.ls.get(DEFAULT_MULTI_PAGE,config.multipage)) + }, + render: h => h(Car) +}).$mount('#app') diff --git a/jshERP-web/src/views/plugin/car/page1.vue b/jshERP-web/src/views/plugin/car/page1.vue new file mode 100644 index 000000000..62581d3c4 --- /dev/null +++ b/jshERP-web/src/views/plugin/car/page1.vue @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/plugin/car/router.js b/jshERP-web/src/views/plugin/car/router.js new file mode 100644 index 000000000..2fe4ccbfe --- /dev/null +++ b/jshERP-web/src/views/plugin/car/router.js @@ -0,0 +1,17 @@ +import Vue from 'vue' +import Router from 'vue-router' +import Page from './page1.vue' + +Vue.use(Router) + +export default new Router({ + mode: 'history', + base: process.env.BASE_URL, + routes: [ + { + path: '/', + name: 'page', + component: Page + } + ] +}) diff --git a/jshERP-web/src/views/plugin/car/store.js b/jshERP-web/src/views/plugin/car/store.js new file mode 100644 index 000000000..3c7424edc --- /dev/null +++ b/jshERP-web/src/views/plugin/car/store.js @@ -0,0 +1,16 @@ +import Vue from 'vue' +import Vuex from 'vuex' + +Vue.use(Vuex) + +export default new Vuex.Store({ + state: { + + }, + mutations: { + + }, + actions: { + + } +}) diff --git a/jshERP-web/src/views/profile/advanced/Advanced.vue b/jshERP-web/src/views/profile/advanced/Advanced.vue new file mode 100644 index 000000000..af4484396 --- /dev/null +++ b/jshERP-web/src/views/profile/advanced/Advanced.vue @@ -0,0 +1,342 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/profile/basic/Index.vue b/jshERP-web/src/views/profile/basic/Index.vue new file mode 100644 index 000000000..39dbd26ef --- /dev/null +++ b/jshERP-web/src/views/profile/basic/Index.vue @@ -0,0 +1,255 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/report/AccountReport.vue b/jshERP-web/src/views/report/AccountReport.vue new file mode 100644 index 000000000..61de814b0 --- /dev/null +++ b/jshERP-web/src/views/report/AccountReport.vue @@ -0,0 +1,141 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/report/BuyInReport.vue b/jshERP-web/src/views/report/BuyInReport.vue new file mode 100644 index 000000000..6ceae0c4f --- /dev/null +++ b/jshERP-web/src/views/report/BuyInReport.vue @@ -0,0 +1,117 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/report/CustomerAccount.vue b/jshERP-web/src/views/report/CustomerAccount.vue new file mode 100644 index 000000000..ec8866d18 --- /dev/null +++ b/jshERP-web/src/views/report/CustomerAccount.vue @@ -0,0 +1,186 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/report/InDetail.vue b/jshERP-web/src/views/report/InDetail.vue new file mode 100644 index 000000000..25b492b6f --- /dev/null +++ b/jshERP-web/src/views/report/InDetail.vue @@ -0,0 +1,181 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/report/InMaterialCount.vue b/jshERP-web/src/views/report/InMaterialCount.vue new file mode 100644 index 000000000..bf9ce9ebe --- /dev/null +++ b/jshERP-web/src/views/report/InMaterialCount.vue @@ -0,0 +1,177 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/report/InOutStockReport.vue b/jshERP-web/src/views/report/InOutStockReport.vue new file mode 100644 index 000000000..1f843e53e --- /dev/null +++ b/jshERP-web/src/views/report/InOutStockReport.vue @@ -0,0 +1,178 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/report/OutDetail.vue b/jshERP-web/src/views/report/OutDetail.vue new file mode 100644 index 000000000..66544801a --- /dev/null +++ b/jshERP-web/src/views/report/OutDetail.vue @@ -0,0 +1,181 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/report/OutMaterialCount.vue b/jshERP-web/src/views/report/OutMaterialCount.vue new file mode 100644 index 000000000..695c7b81d --- /dev/null +++ b/jshERP-web/src/views/report/OutMaterialCount.vue @@ -0,0 +1,177 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/report/SaleOutReport.vue b/jshERP-web/src/views/report/SaleOutReport.vue new file mode 100644 index 000000000..2e0454177 --- /dev/null +++ b/jshERP-web/src/views/report/SaleOutReport.vue @@ -0,0 +1,120 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/report/StockWarningReport.vue b/jshERP-web/src/views/report/StockWarningReport.vue new file mode 100644 index 000000000..3592f94bc --- /dev/null +++ b/jshERP-web/src/views/report/StockWarningReport.vue @@ -0,0 +1,136 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/report/VendorAccount.vue b/jshERP-web/src/views/report/VendorAccount.vue new file mode 100644 index 000000000..79ba043bf --- /dev/null +++ b/jshERP-web/src/views/report/VendorAccount.vue @@ -0,0 +1,186 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/report/modules/AccountInOutList.vue b/jshERP-web/src/views/report/modules/AccountInOutList.vue new file mode 100644 index 000000000..145a83a33 --- /dev/null +++ b/jshERP-web/src/views/report/modules/AccountInOutList.vue @@ -0,0 +1,124 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/result/Error.vue b/jshERP-web/src/views/result/Error.vue new file mode 100644 index 000000000..634c4b6ee --- /dev/null +++ b/jshERP-web/src/views/result/Error.vue @@ -0,0 +1,45 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/result/Result.vue b/jshERP-web/src/views/result/Result.vue new file mode 100644 index 000000000..09278d9bd --- /dev/null +++ b/jshERP-web/src/views/result/Result.vue @@ -0,0 +1,91 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/result/Success.vue b/jshERP-web/src/views/result/Success.vue new file mode 100644 index 000000000..b5061e313 --- /dev/null +++ b/jshERP-web/src/views/result/Success.vue @@ -0,0 +1,92 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/AccountList.vue b/jshERP-web/src/views/system/AccountList.vue new file mode 100644 index 000000000..d0abf0e97 --- /dev/null +++ b/jshERP-web/src/views/system/AccountList.vue @@ -0,0 +1,154 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/AddressList.vue b/jshERP-web/src/views/system/AddressList.vue new file mode 100644 index 000000000..f6a1a4125 --- /dev/null +++ b/jshERP-web/src/views/system/AddressList.vue @@ -0,0 +1,31 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/CustomerList.vue b/jshERP-web/src/views/system/CustomerList.vue new file mode 100644 index 000000000..ba763ffa1 --- /dev/null +++ b/jshERP-web/src/views/system/CustomerList.vue @@ -0,0 +1,166 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/DataLogList.vue b/jshERP-web/src/views/system/DataLogList.vue new file mode 100644 index 000000000..98351e258 --- /dev/null +++ b/jshERP-web/src/views/system/DataLogList.vue @@ -0,0 +1,138 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/DepartList.vue b/jshERP-web/src/views/system/DepartList.vue new file mode 100644 index 000000000..95597b092 --- /dev/null +++ b/jshERP-web/src/views/system/DepartList.vue @@ -0,0 +1,657 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/DepartList2.vue b/jshERP-web/src/views/system/DepartList2.vue new file mode 100644 index 000000000..09939edef --- /dev/null +++ b/jshERP-web/src/views/system/DepartList2.vue @@ -0,0 +1,260 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/DepartUserList.vue b/jshERP-web/src/views/system/DepartUserList.vue new file mode 100644 index 000000000..96352f8e4 --- /dev/null +++ b/jshERP-web/src/views/system/DepartUserList.vue @@ -0,0 +1,221 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/DepotList.vue b/jshERP-web/src/views/system/DepotList.vue new file mode 100644 index 000000000..01a7fe6c2 --- /dev/null +++ b/jshERP-web/src/views/system/DepotList.vue @@ -0,0 +1,151 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/DictDeleteList.vue b/jshERP-web/src/views/system/DictDeleteList.vue new file mode 100644 index 000000000..d03348056 --- /dev/null +++ b/jshERP-web/src/views/system/DictDeleteList.vue @@ -0,0 +1,138 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/DictItemList.vue b/jshERP-web/src/views/system/DictItemList.vue new file mode 100644 index 000000000..dd2f6bca7 --- /dev/null +++ b/jshERP-web/src/views/system/DictItemList.vue @@ -0,0 +1,207 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/DictList.vue b/jshERP-web/src/views/system/DictList.vue new file mode 100644 index 000000000..30fc051db --- /dev/null +++ b/jshERP-web/src/views/system/DictList.vue @@ -0,0 +1,208 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/FunctionList.vue b/jshERP-web/src/views/system/FunctionList.vue new file mode 100644 index 000000000..f9463c6ac --- /dev/null +++ b/jshERP-web/src/views/system/FunctionList.vue @@ -0,0 +1,127 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/InOutItemList.vue b/jshERP-web/src/views/system/InOutItemList.vue new file mode 100644 index 000000000..9420fad42 --- /dev/null +++ b/jshERP-web/src/views/system/InOutItemList.vue @@ -0,0 +1,134 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/LogList.vue b/jshERP-web/src/views/system/LogList.vue new file mode 100644 index 000000000..8d051ba53 --- /dev/null +++ b/jshERP-web/src/views/system/LogList.vue @@ -0,0 +1,176 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/MemberList.vue b/jshERP-web/src/views/system/MemberList.vue new file mode 100644 index 000000000..89d38b657 --- /dev/null +++ b/jshERP-web/src/views/system/MemberList.vue @@ -0,0 +1,166 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/NewPermissionList.vue b/jshERP-web/src/views/system/NewPermissionList.vue new file mode 100644 index 000000000..ef6d49cb2 --- /dev/null +++ b/jshERP-web/src/views/system/NewPermissionList.vue @@ -0,0 +1,227 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/OrganizationList.vue b/jshERP-web/src/views/system/OrganizationList.vue new file mode 100644 index 000000000..01aac0f16 --- /dev/null +++ b/jshERP-web/src/views/system/OrganizationList.vue @@ -0,0 +1,517 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/PermissionDataRuleList.vue b/jshERP-web/src/views/system/PermissionDataRuleList.vue new file mode 100644 index 000000000..cd2dcf87d --- /dev/null +++ b/jshERP-web/src/views/system/PermissionDataRuleList.vue @@ -0,0 +1,188 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/PermissionList.vue b/jshERP-web/src/views/system/PermissionList.vue new file mode 100644 index 000000000..a7d95e329 --- /dev/null +++ b/jshERP-web/src/views/system/PermissionList.vue @@ -0,0 +1,196 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/PersonList.vue b/jshERP-web/src/views/system/PersonList.vue new file mode 100644 index 000000000..d85c72e6d --- /dev/null +++ b/jshERP-web/src/views/system/PersonList.vue @@ -0,0 +1,132 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/PluginList.vue b/jshERP-web/src/views/system/PluginList.vue new file mode 100644 index 000000000..3ab07f5a8 --- /dev/null +++ b/jshERP-web/src/views/system/PluginList.vue @@ -0,0 +1,235 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/QuartzJobList.vue b/jshERP-web/src/views/system/QuartzJobList.vue new file mode 100644 index 000000000..2dfc8cc87 --- /dev/null +++ b/jshERP-web/src/views/system/QuartzJobList.vue @@ -0,0 +1,263 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/RoleList.vue b/jshERP-web/src/views/system/RoleList.vue new file mode 100644 index 000000000..63e63b7b8 --- /dev/null +++ b/jshERP-web/src/views/system/RoleList.vue @@ -0,0 +1,152 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/RoleUserList.vue b/jshERP-web/src/views/system/RoleUserList.vue new file mode 100644 index 000000000..593652e19 --- /dev/null +++ b/jshERP-web/src/views/system/RoleUserList.vue @@ -0,0 +1,548 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/SerialNumberList.vue b/jshERP-web/src/views/system/SerialNumberList.vue new file mode 100644 index 000000000..e3ec81341 --- /dev/null +++ b/jshERP-web/src/views/system/SerialNumberList.vue @@ -0,0 +1,151 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/SysAnnouncementList.vue b/jshERP-web/src/views/system/SysAnnouncementList.vue new file mode 100644 index 000000000..274c4c66e --- /dev/null +++ b/jshERP-web/src/views/system/SysAnnouncementList.vue @@ -0,0 +1,291 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/SysCategoryList.vue b/jshERP-web/src/views/system/SysCategoryList.vue new file mode 100644 index 000000000..91afddaa8 --- /dev/null +++ b/jshERP-web/src/views/system/SysCategoryList.vue @@ -0,0 +1,302 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/SysCheckRuleList.vue b/jshERP-web/src/views/system/SysCheckRuleList.vue new file mode 100644 index 000000000..783eb7d29 --- /dev/null +++ b/jshERP-web/src/views/system/SysCheckRuleList.vue @@ -0,0 +1,178 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/SysDataSourceList.vue b/jshERP-web/src/views/system/SysDataSourceList.vue new file mode 100644 index 000000000..5fc631723 --- /dev/null +++ b/jshERP-web/src/views/system/SysDataSourceList.vue @@ -0,0 +1,188 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/SysFillRuleList.vue b/jshERP-web/src/views/system/SysFillRuleList.vue new file mode 100644 index 000000000..324eea093 --- /dev/null +++ b/jshERP-web/src/views/system/SysFillRuleList.vue @@ -0,0 +1,187 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/SysPositionList.vue b/jshERP-web/src/views/system/SysPositionList.vue new file mode 100644 index 000000000..2b6864fbe --- /dev/null +++ b/jshERP-web/src/views/system/SysPositionList.vue @@ -0,0 +1,178 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/SystemConfigList.vue b/jshERP-web/src/views/system/SystemConfigList.vue new file mode 100644 index 000000000..66a9ca2f2 --- /dev/null +++ b/jshERP-web/src/views/system/SystemConfigList.vue @@ -0,0 +1,133 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/UnitList.vue b/jshERP-web/src/views/system/UnitList.vue new file mode 100644 index 000000000..dc681d426 --- /dev/null +++ b/jshERP-web/src/views/system/UnitList.vue @@ -0,0 +1,116 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/UserAnnouncementList.vue b/jshERP-web/src/views/system/UserAnnouncementList.vue new file mode 100644 index 000000000..891880efb --- /dev/null +++ b/jshERP-web/src/views/system/UserAnnouncementList.vue @@ -0,0 +1,192 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/UserList.vue b/jshERP-web/src/views/system/UserList.vue new file mode 100644 index 000000000..2e2e14e4e --- /dev/null +++ b/jshERP-web/src/views/system/UserList.vue @@ -0,0 +1,222 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/VendorList.vue b/jshERP-web/src/views/system/VendorList.vue new file mode 100644 index 000000000..318c262ca --- /dev/null +++ b/jshERP-web/src/views/system/VendorList.vue @@ -0,0 +1,166 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/AccountModal.vue b/jshERP-web/src/views/system/modules/AccountModal.vue new file mode 100644 index 000000000..68952afe8 --- /dev/null +++ b/jshERP-web/src/views/system/modules/AccountModal.vue @@ -0,0 +1,138 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/AddressListLeft.vue b/jshERP-web/src/views/system/modules/AddressListLeft.vue new file mode 100644 index 000000000..028a41127 --- /dev/null +++ b/jshERP-web/src/views/system/modules/AddressListLeft.vue @@ -0,0 +1,99 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/AddressListRight.vue b/jshERP-web/src/views/system/modules/AddressListRight.vue new file mode 100644 index 000000000..cad98ebaf --- /dev/null +++ b/jshERP-web/src/views/system/modules/AddressListRight.vue @@ -0,0 +1,211 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/CustomerModal.vue b/jshERP-web/src/views/system/modules/CustomerModal.vue new file mode 100644 index 000000000..f0853d167 --- /dev/null +++ b/jshERP-web/src/views/system/modules/CustomerModal.vue @@ -0,0 +1,206 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/DataLogCompareModal.vue b/jshERP-web/src/views/system/modules/DataLogCompareModal.vue new file mode 100644 index 000000000..e02bb02c7 --- /dev/null +++ b/jshERP-web/src/views/system/modules/DataLogCompareModal.vue @@ -0,0 +1,163 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/DataLogModal.vue b/jshERP-web/src/views/system/modules/DataLogModal.vue new file mode 100644 index 000000000..c9f1e9c0b --- /dev/null +++ b/jshERP-web/src/views/system/modules/DataLogModal.vue @@ -0,0 +1,153 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/DepartAuthModal.vue b/jshERP-web/src/views/system/modules/DepartAuthModal.vue new file mode 100644 index 000000000..42b5f0f7c --- /dev/null +++ b/jshERP-web/src/views/system/modules/DepartAuthModal.vue @@ -0,0 +1,188 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/DepartDataruleModal.vue b/jshERP-web/src/views/system/modules/DepartDataruleModal.vue new file mode 100644 index 000000000..77298acd9 --- /dev/null +++ b/jshERP-web/src/views/system/modules/DepartDataruleModal.vue @@ -0,0 +1,116 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/DepartModal.vue b/jshERP-web/src/views/system/modules/DepartModal.vue new file mode 100644 index 000000000..b0b266238 --- /dev/null +++ b/jshERP-web/src/views/system/modules/DepartModal.vue @@ -0,0 +1,223 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/DepartWindow.vue b/jshERP-web/src/views/system/modules/DepartWindow.vue new file mode 100644 index 000000000..7dea2fa28 --- /dev/null +++ b/jshERP-web/src/views/system/modules/DepartWindow.vue @@ -0,0 +1,185 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/DepotModal.vue b/jshERP-web/src/views/system/modules/DepotModal.vue new file mode 100644 index 000000000..da8878723 --- /dev/null +++ b/jshERP-web/src/views/system/modules/DepotModal.vue @@ -0,0 +1,139 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/DeptBaseInfo.vue b/jshERP-web/src/views/system/modules/DeptBaseInfo.vue new file mode 100644 index 000000000..af1418f67 --- /dev/null +++ b/jshERP-web/src/views/system/modules/DeptBaseInfo.vue @@ -0,0 +1,129 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/DeptRoleAuthModal.vue b/jshERP-web/src/views/system/modules/DeptRoleAuthModal.vue new file mode 100644 index 000000000..09b90fec7 --- /dev/null +++ b/jshERP-web/src/views/system/modules/DeptRoleAuthModal.vue @@ -0,0 +1,213 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/DeptRoleDataruleModal.vue b/jshERP-web/src/views/system/modules/DeptRoleDataruleModal.vue new file mode 100644 index 000000000..f3a12115d --- /dev/null +++ b/jshERP-web/src/views/system/modules/DeptRoleDataruleModal.vue @@ -0,0 +1,122 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/DeptRoleInfo.vue b/jshERP-web/src/views/system/modules/DeptRoleInfo.vue new file mode 100644 index 000000000..faace5300 --- /dev/null +++ b/jshERP-web/src/views/system/modules/DeptRoleInfo.vue @@ -0,0 +1,191 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/DeptRoleUserModal.vue b/jshERP-web/src/views/system/modules/DeptRoleUserModal.vue new file mode 100644 index 000000000..943f57408 --- /dev/null +++ b/jshERP-web/src/views/system/modules/DeptRoleUserModal.vue @@ -0,0 +1,200 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/DeptUserInfo.vue b/jshERP-web/src/views/system/modules/DeptUserInfo.vue new file mode 100644 index 000000000..6868b5072 --- /dev/null +++ b/jshERP-web/src/views/system/modules/DeptUserInfo.vue @@ -0,0 +1,342 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/DictItemModal.vue b/jshERP-web/src/views/system/modules/DictItemModal.vue new file mode 100644 index 000000000..700523532 --- /dev/null +++ b/jshERP-web/src/views/system/modules/DictItemModal.vue @@ -0,0 +1,158 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/DictModal.vue b/jshERP-web/src/views/system/modules/DictModal.vue new file mode 100644 index 000000000..2de7e667e --- /dev/null +++ b/jshERP-web/src/views/system/modules/DictModal.vue @@ -0,0 +1,151 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/FunctionModal.vue b/jshERP-web/src/views/system/modules/FunctionModal.vue new file mode 100644 index 000000000..fa36c7eed --- /dev/null +++ b/jshERP-web/src/views/system/modules/FunctionModal.vue @@ -0,0 +1,174 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/InOutItemModal.vue b/jshERP-web/src/views/system/modules/InOutItemModal.vue new file mode 100644 index 000000000..8b1d17189 --- /dev/null +++ b/jshERP-web/src/views/system/modules/InOutItemModal.vue @@ -0,0 +1,134 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/MemberModal.vue b/jshERP-web/src/views/system/modules/MemberModal.vue new file mode 100644 index 000000000..16c5b9b7c --- /dev/null +++ b/jshERP-web/src/views/system/modules/MemberModal.vue @@ -0,0 +1,206 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/OrganizationModal.vue b/jshERP-web/src/views/system/modules/OrganizationModal.vue new file mode 100644 index 000000000..8b9906f51 --- /dev/null +++ b/jshERP-web/src/views/system/modules/OrganizationModal.vue @@ -0,0 +1,149 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/PasswordModal.vue b/jshERP-web/src/views/system/modules/PasswordModal.vue new file mode 100644 index 000000000..3a39afa98 --- /dev/null +++ b/jshERP-web/src/views/system/modules/PasswordModal.vue @@ -0,0 +1,142 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/PermissionDataRuleModal.vue b/jshERP-web/src/views/system/modules/PermissionDataRuleModal.vue new file mode 100644 index 000000000..cd7921fb1 --- /dev/null +++ b/jshERP-web/src/views/system/modules/PermissionDataRuleModal.vue @@ -0,0 +1,179 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/PermissionModal.vue b/jshERP-web/src/views/system/modules/PermissionModal.vue new file mode 100644 index 000000000..a6178d031 --- /dev/null +++ b/jshERP-web/src/views/system/modules/PermissionModal.vue @@ -0,0 +1,430 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/PersonModal.vue b/jshERP-web/src/views/system/modules/PersonModal.vue new file mode 100644 index 000000000..a9dfb87b2 --- /dev/null +++ b/jshERP-web/src/views/system/modules/PersonModal.vue @@ -0,0 +1,132 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/PluginModal.vue b/jshERP-web/src/views/system/modules/PluginModal.vue new file mode 100644 index 000000000..02892fa19 --- /dev/null +++ b/jshERP-web/src/views/system/modules/PluginModal.vue @@ -0,0 +1,114 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/QuartzJobModal.vue b/jshERP-web/src/views/system/modules/QuartzJobModal.vue new file mode 100644 index 000000000..8be017194 --- /dev/null +++ b/jshERP-web/src/views/system/modules/QuartzJobModal.vue @@ -0,0 +1,190 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/RoleDataruleModal.vue b/jshERP-web/src/views/system/modules/RoleDataruleModal.vue new file mode 100644 index 000000000..bb5b75b19 --- /dev/null +++ b/jshERP-web/src/views/system/modules/RoleDataruleModal.vue @@ -0,0 +1,120 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/RoleFunctionModal.vue b/jshERP-web/src/views/system/modules/RoleFunctionModal.vue new file mode 100644 index 000000000..68e5270e1 --- /dev/null +++ b/jshERP-web/src/views/system/modules/RoleFunctionModal.vue @@ -0,0 +1,209 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/RoleModal.vue b/jshERP-web/src/views/system/modules/RoleModal.vue new file mode 100644 index 000000000..236bf675c --- /dev/null +++ b/jshERP-web/src/views/system/modules/RoleModal.vue @@ -0,0 +1,141 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/RolePushBtnModal.vue b/jshERP-web/src/views/system/modules/RolePushBtnModal.vue new file mode 100644 index 000000000..9f0b3eb83 --- /dev/null +++ b/jshERP-web/src/views/system/modules/RolePushBtnModal.vue @@ -0,0 +1,141 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/SelectUserListModal.vue b/jshERP-web/src/views/system/modules/SelectUserListModal.vue new file mode 100644 index 000000000..a1e15c709 --- /dev/null +++ b/jshERP-web/src/views/system/modules/SelectUserListModal.vue @@ -0,0 +1,290 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/SelectUserModal.vue b/jshERP-web/src/views/system/modules/SelectUserModal.vue new file mode 100644 index 000000000..0dc51f9da --- /dev/null +++ b/jshERP-web/src/views/system/modules/SelectUserModal.vue @@ -0,0 +1,287 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/SerialNumberBatchModal.vue b/jshERP-web/src/views/system/modules/SerialNumberBatchModal.vue new file mode 100644 index 000000000..bd3339eb2 --- /dev/null +++ b/jshERP-web/src/views/system/modules/SerialNumberBatchModal.vue @@ -0,0 +1,130 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/SerialNumberModal.vue b/jshERP-web/src/views/system/modules/SerialNumberModal.vue new file mode 100644 index 000000000..af4aba25a --- /dev/null +++ b/jshERP-web/src/views/system/modules/SerialNumberModal.vue @@ -0,0 +1,147 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/SysAnnouncementModal.vue b/jshERP-web/src/views/system/modules/SysAnnouncementModal.vue new file mode 100644 index 000000000..44b3a89d7 --- /dev/null +++ b/jshERP-web/src/views/system/modules/SysAnnouncementModal.vue @@ -0,0 +1,332 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/SysCategoryModal.vue b/jshERP-web/src/views/system/modules/SysCategoryModal.vue new file mode 100644 index 000000000..88bac3b26 --- /dev/null +++ b/jshERP-web/src/views/system/modules/SysCategoryModal.vue @@ -0,0 +1,194 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/SysCheckRuleModal.vue b/jshERP-web/src/views/system/modules/SysCheckRuleModal.vue new file mode 100644 index 000000000..d906a738f --- /dev/null +++ b/jshERP-web/src/views/system/modules/SysCheckRuleModal.vue @@ -0,0 +1,379 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/SysCheckRuleTestModal.vue b/jshERP-web/src/views/system/modules/SysCheckRuleTestModal.vue new file mode 100644 index 000000000..89b769158 --- /dev/null +++ b/jshERP-web/src/views/system/modules/SysCheckRuleTestModal.vue @@ -0,0 +1,58 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/SysDataSourceModal.vue b/jshERP-web/src/views/system/modules/SysDataSourceModal.vue new file mode 100644 index 000000000..cbd9ebe12 --- /dev/null +++ b/jshERP-web/src/views/system/modules/SysDataSourceModal.vue @@ -0,0 +1,239 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/SysDepartRoleModal.vue b/jshERP-web/src/views/system/modules/SysDepartRoleModal.vue new file mode 100644 index 000000000..ac982f834 --- /dev/null +++ b/jshERP-web/src/views/system/modules/SysDepartRoleModal.vue @@ -0,0 +1,162 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/SysFillRuleModal.vue b/jshERP-web/src/views/system/modules/SysFillRuleModal.vue new file mode 100644 index 000000000..f1344f650 --- /dev/null +++ b/jshERP-web/src/views/system/modules/SysFillRuleModal.vue @@ -0,0 +1,158 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/SysPositionModal.vue b/jshERP-web/src/views/system/modules/SysPositionModal.vue new file mode 100644 index 000000000..fa9f8b474 --- /dev/null +++ b/jshERP-web/src/views/system/modules/SysPositionModal.vue @@ -0,0 +1,180 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/SysUserAgentModal.vue b/jshERP-web/src/views/system/modules/SysUserAgentModal.vue new file mode 100644 index 000000000..2c40ac436 --- /dev/null +++ b/jshERP-web/src/views/system/modules/SysUserAgentModal.vue @@ -0,0 +1,181 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/SystemConfigModal.vue b/jshERP-web/src/views/system/modules/SystemConfigModal.vue new file mode 100644 index 000000000..c002813bf --- /dev/null +++ b/jshERP-web/src/views/system/modules/SystemConfigModal.vue @@ -0,0 +1,175 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/UnitModal.vue b/jshERP-web/src/views/system/modules/UnitModal.vue new file mode 100644 index 000000000..335fec1cf --- /dev/null +++ b/jshERP-web/src/views/system/modules/UnitModal.vue @@ -0,0 +1,121 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/UserModal.vue b/jshERP-web/src/views/system/modules/UserModal.vue new file mode 100644 index 000000000..1bb970816 --- /dev/null +++ b/jshERP-web/src/views/system/modules/UserModal.vue @@ -0,0 +1,367 @@ + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/UserRecycleBinModal.vue b/jshERP-web/src/views/system/modules/UserRecycleBinModal.vue new file mode 100644 index 000000000..0e042207f --- /dev/null +++ b/jshERP-web/src/views/system/modules/UserRecycleBinModal.vue @@ -0,0 +1,193 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/UserRoleModal.vue b/jshERP-web/src/views/system/modules/UserRoleModal.vue new file mode 100644 index 000000000..b9f04de66 --- /dev/null +++ b/jshERP-web/src/views/system/modules/UserRoleModal.vue @@ -0,0 +1,200 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/VendorModal.vue b/jshERP-web/src/views/system/modules/VendorModal.vue new file mode 100644 index 000000000..7e272df8f --- /dev/null +++ b/jshERP-web/src/views/system/modules/VendorModal.vue @@ -0,0 +1,206 @@ + + + \ No newline at end of file diff --git a/jshERP-web/src/views/system/modules/icon/Icon.less b/jshERP-web/src/views/system/modules/icon/Icon.less new file mode 100644 index 000000000..5e3718741 --- /dev/null +++ b/jshERP-web/src/views/system/modules/icon/Icon.less @@ -0,0 +1,35 @@ +@active-color: #4a4a48; +ul { + max-height: 700px; + overflow-y: auto; + padding-left: .5rem; + i { + font-size: 1.5rem; + border: 1px solid #f1f1f1; + padding: .2rem; + margin: .3rem; + cursor: pointer; + &.active, &:hover { + border-radius: 2px; + border-color: @active-color; + background-color: @active-color; + color: #fff; + transition: all .3s; + } + } + li { + list-style: none; + float: left; + width: 5%; + text-align: center; + cursor: pointer; + color: #555; + transition: color .3s ease-in-out,background-color .3s ease-in-out; + position: relative; + margin: 3px 0; + border-radius: 4px; + background-color: #fff; + overflow: hidden; + padding: 10px 0 0; + } +} diff --git a/jshERP-web/src/views/system/modules/icon/Icons.vue b/jshERP-web/src/views/system/modules/icon/Icons.vue new file mode 100644 index 000000000..4b18ced5c --- /dev/null +++ b/jshERP-web/src/views/system/modules/icon/Icons.vue @@ -0,0 +1,123 @@ + + + diff --git a/jshERP-web/src/views/user/Login.vue b/jshERP-web/src/views/user/Login.vue new file mode 100644 index 000000000..9e92c2d8d --- /dev/null +++ b/jshERP-web/src/views/user/Login.vue @@ -0,0 +1,348 @@ + + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/user/Register.vue b/jshERP-web/src/views/user/Register.vue new file mode 100644 index 000000000..efa796bd4 --- /dev/null +++ b/jshERP-web/src/views/user/Register.vue @@ -0,0 +1,337 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/src/views/user/RegisterResult.vue b/jshERP-web/src/views/user/RegisterResult.vue new file mode 100644 index 000000000..389e140c1 --- /dev/null +++ b/jshERP-web/src/views/user/RegisterResult.vue @@ -0,0 +1,52 @@ + + + + + \ No newline at end of file diff --git a/jshERP-web/vue.config.js b/jshERP-web/vue.config.js new file mode 100644 index 000000000..6b0a10147 --- /dev/null +++ b/jshERP-web/vue.config.js @@ -0,0 +1,112 @@ +const path = require('path') +const CompressionPlugin = require('compression-webpack-plugin') + +function resolve (dir) { + return path.join(__dirname, dir) +} + +let objectProject = { + index: { + entry: 'src/main.js', // page 的入口 + template: 'public/index.html', // 模板来源 + filename: 'index.html', // 在 dist/index.html 的输出 + // 当使用 title 选项时,template 中的 title 标签需要是 <%= htmlWebpackPlugin.options.title %> + title: 'Index Page', + // 在这个页面中包含的块,默认情况下会包含,提取出来的通用 chunk 和 vendor chunk。 + chunks: ['chunk-vendors', 'chunk-common', 'index'] + }, + car: { + entry: 'src/views/plugin/car/main.js', + template: 'src/views/plugin/car/car.html', + filename: 'car.html', + title: 'Car Page', + chunks: ['chunk-vendors', 'chunk-common', 'car'] + } +} +let page = {} +let projectname = process.argv[3] // 获取执行哪个文件 +if (process.env.NODE_ENV === 'development') { + page = objectProject +} else { + page[projectname] = objectProject[projectname] +} +let publicPathStr, dirStr +if (projectname === undefined || projectname === 'index') { + publicPathStr = '/' + dirStr = 'dist' +} else { + publicPathStr = './' + dirStr = 'dist/plugin/' + projectname +} + +// vue.config.js +module.exports = { + outputDir: dirStr, // 标识是打包哪个文件 + filenameHashing: true, + pages: page, + /* + Vue-cli3: + Crashed when using Webpack `import()` #2463 + https://github.com/vuejs/vue-cli/issues/2463 + */ + // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。 + productionSourceMap: false, + // 静态文件的路径前缀 + publicPath: publicPathStr, + configureWebpack: config => { + // 生产环境取消 console.log + if (process.env.NODE_ENV === 'production') { + config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true + } + }, + chainWebpack: (config) => { + config.resolve.alias + .set('@$', resolve('src')) + .set('@api', resolve('src/api')) + .set('@assets', resolve('src/assets')) + .set('@comp', resolve('src/components')) + .set('@views', resolve('src/views')) + .set('@layout', resolve('src/layout')) + .set('@static', resolve('src/static')) + .set('@mobile', resolve('src/modules/mobile')) + // 生产环境,开启js\css压缩 + if (process.env.NODE_ENV === 'production') { + config.plugin('compressionPlugin').use(new CompressionPlugin({ + test: /\.(js|css|less)$/, // 匹配文件名 + threshold: 10240, // 对超过10k的数据压缩 + deleteOriginalAssets: false // 删除源文件 + })) + } + // 配置 webpack 识别 markdown 为普通的文件 + config.module + .rule('markdown') + .test(/\.md$/) + .use() + .loader('file-loader') + .end() + }, + css: { + loaderOptions: { + less: { + modifyVars: { + /* less 变量覆盖,用于自定义 ant design 主题 */ + 'primary-color': '#1890FF', + 'link-color': '#1890FF', + 'border-radius-base': '4px' + }, + javascriptEnabled: true + } + } + }, + devServer: { + port: 3000, + proxy: { + '/jshERP-boot': { + target: 'http://localhost:8888', // 请求本地 需要jshERP-boot后台项目 + ws: false, + changeOrigin: true + } + } + }, + lintOnSave: undefined +} diff --git a/jshERP-web/yarn b/jshERP-web/yarn new file mode 100644 index 000000000..e69de29bb diff --git a/jshERP-web/yarn.lock b/jshERP-web/yarn.lock new file mode 100644 index 000000000..2a6ccac60 --- /dev/null +++ b/jshERP-web/yarn.lock @@ -0,0 +1,11903 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ant-design/colors@^3.1.0": + version "3.2.2" + resolved "https://registry.npmjs.org/@ant-design/colors/-/colors-3.2.2.tgz#5ad43d619e911f3488ebac303d606e66a8423903" + integrity sha512-YKgNbG2dlzqMhA9NtI3/pbY16m3Yl/EeWBRa+lB1X1YaYxHrxNexiQYCLTWO/uDvAjLFMEDU+zR901waBtMtjQ== + dependencies: + tinycolor2 "^1.4.1" + +"@ant-design/icons-vue@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-2.0.0.tgz#0357f5010a404e9f34a87a4b41b2a08df691dbce" + integrity sha512-2c0QQE5hL4N48k5NkPG5sdpMl9YnvyNhf0U7YkdZYDlLnspoRU7vIA0UK9eHBs6OpFLcJB6o8eJrIl2ajBskPg== + dependencies: + "@ant-design/colors" "^3.1.0" + babel-runtime "^6.26.0" + +"@ant-design/icons@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@ant-design/icons/-/icons-2.1.1.tgz#7b9c08dffd4f5d41db667d9dbe5e0107d0bd9a4a" + integrity sha512-jCH+k2Vjlno4YWl6g535nHR09PwCEmTBKAG6VqF+rhkrSPRLfgpU2maagwbZPLjaHuU5Jd1DFQ2KJpQuI6uG8w== + +"@antv/adjust@~0.1.0": + version "0.1.1" + resolved "https://registry.npmjs.org/@antv/adjust/-/adjust-0.1.1.tgz#e263ab0e1a1941a648842fc086cf65a7e3b75e98" + integrity sha512-9FaMOyBlM4AgoRL0b5o0VhEKAYkexBNUrxV8XmpHU/9NBPJONBOB/NZUlQDqxtLItrt91tCfbAuMQmF529UX2Q== + dependencies: + "@antv/util" "~1.3.1" + +"@antv/attr@~0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@antv/attr/-/attr-0.1.2.tgz#2eeb122fcaaf851a2d8749abc7c60519d3f77e37" + integrity sha512-QXjP+T2I+pJQcwZx1oCA4tipG43vgeCeKcGGKahlcxb71OBAzjJZm1QbF4frKXcnOqRkxVXtCr70X9TRair3Ew== + dependencies: + "@antv/util" "~1.3.1" + +"@antv/component@~0.3.3": + version "0.3.8" + resolved "https://registry.npmjs.org/@antv/component/-/component-0.3.8.tgz#677ecd3b5026907d4cb70d9082951d7c3c2b5434" + integrity sha512-1WN3FzeRyJ1jraS/2og5gnm2ragnwtRMVQMiLolztWaUgC++F/B1CcSrPYfV1WvYrfuwbpX/QQxo3HL9aS+YJA== + dependencies: + "@antv/attr" "~0.1.2" + "@antv/g" "~3.3.5" + "@antv/util" "~1.3.1" + wolfy87-eventemitter "~5.1.0" + +"@antv/coord@~0.1.0": + version "0.1.0" + resolved "https://registry.npmjs.org/@antv/coord/-/coord-0.1.0.tgz#48a80ae36d07552f96657e7f8095227c63f0c0a9" + integrity sha512-W1R8h3Jfb3AfMBVfCreFPMVetgEYuwHBIGn0+d3EgYXe2ckOF8XWjkpGF1fZhOMHREMr+Gt27NGiQh8yBdLUgg== + dependencies: + "@antv/util" "~1.3.1" + +"@antv/data-set@^0.11.2": + version "0.11.4" + resolved "https://registry.npmjs.org/@antv/data-set/-/data-set-0.11.4.tgz#c3fbd255945c6ff9dd1c4cf20029d3f3e42869c8" + integrity sha512-rS0xMvclsv59wh2yDmCshC55/HvXBbwpEmoTr+ErSY4SKGKSTOwXjZ90W/fJMSfacMPOGDbG7R77kCP8cSTu5w== + dependencies: + "@antv/hierarchy" "^0.6.0" + "@antv/util" "^2.0.0" + d3-composite-projections "^1.2.0" + d3-dsv "^1.0.5" + d3-geo "~1.6.4" + d3-geo-projection "~2.1.2" + d3-hexjson "^1.0.1" + d3-hierarchy "^1.1.5" + d3-sankey "^0.9.1" + d3-voronoi "^1.1.2" + dagre "^0.8.2" + point-at-length "^1.0.2" + regression "^2.0.0" + simple-statistics "^6.1.0" + topojson-client "^3.0.0" + wolfy87-eventemitter "^5.1.0" + +"@antv/g2-brush@^0.0.2": + version "0.0.2" + resolved "https://registry.npmjs.org/@antv/g2-brush/-/g2-brush-0.0.2.tgz#0b65f3ebbf82690202913d0b6759ab2900faa841" + integrity sha512-7O9szwem19nmEgReXhFB8kVLRaz8J5MHvrzDSDY36YaBOaHSWRGHnvYt2KkkPqgWtHtLY1srssk4X/UmP5govA== + +"@antv/g2-plugin-slider@^2.1.0": + version "2.1.1" + resolved "https://registry.npmjs.org/@antv/g2-plugin-slider/-/g2-plugin-slider-2.1.1.tgz#c20c5f1cf085bea478f8ab1fc84837e45c46a065" + integrity sha512-nB678VEGG3FkrvkDDFADAKjLQIeXzITEYqey5oeOpbf0vT5jOa55lQDyJDZ79cK8PmU/Hz6VPeSb3CNQBA+/FQ== + +"@antv/g2@~3.5.3": + version "3.5.12" + resolved "https://registry.npmjs.org/@antv/g2/-/g2-3.5.12.tgz#65bc1bbb0c16f8e4c829877b06897dd99c7b9693" + integrity sha512-1FrsgynTFD//nSEBPjHl5SB0balIbuYcOypmHa09JyOg/k+iMAwUcCpGAMU0khEzLK1BxnByJOPdm7hAHGD5Dw== + dependencies: + "@antv/adjust" "~0.1.0" + "@antv/attr" "~0.1.2" + "@antv/component" "~0.3.3" + "@antv/coord" "~0.1.0" + "@antv/g" "~3.3.6" + "@antv/scale" "~0.1.1" + "@antv/util" "~1.3.1" + venn.js "~0.2.20" + wolfy87-eventemitter "~5.1.0" + +"@antv/g@~3.3.5", "@antv/g@~3.3.6": + version "3.3.6" + resolved "https://registry.npmjs.org/@antv/g/-/g-3.3.6.tgz#11fed9ddc9ed4e5a2aa244b7c8abb982a003f201" + integrity sha512-2GtyTz++s0BbN6s0ZL2/nrqGYCkd52pVoNH92YkrTdTOvpO6Z4DNoo6jGVgZdPX6Nzwli6yduC8MinVAhE8X6g== + dependencies: + "@antv/gl-matrix" "~2.7.1" + "@antv/util" "~1.3.1" + d3-ease "~1.0.3" + d3-interpolate "~1.1.5" + d3-timer "~1.0.6" + wolfy87-eventemitter "~5.1.0" + +"@antv/gl-matrix@^2.7.1", "@antv/gl-matrix@~2.7.1": + version "2.7.1" + resolved "https://registry.npmjs.org/@antv/gl-matrix/-/gl-matrix-2.7.1.tgz#acb8e37f7ab3df01345aba4372d7942be42eba14" + integrity sha512-oOWcVNlpELIKi9x+Mm1Vwbz8pXfkbJKykoCIOJ/dNK79hSIANbpXJ5d3Rra9/wZqK6MC961B7sybFhPlLraT3Q== + +"@antv/hierarchy@^0.6.0": + version "0.6.3" + resolved "https://registry.npmjs.org/@antv/hierarchy/-/hierarchy-0.6.3.tgz#5fa5da89e33431c6e769ee20d7a391cc81c4fe95" + integrity sha512-91YZUiZFXK8zp2nC2C+4FEc1LDIPZ5Q4YQbzMnKhH+7nei4QCfIdXPrPh0EKRws78CVt2hxR5gHD7zq6UlokAQ== + dependencies: + "@antv/util" "^2.0.7" + +"@antv/scale@~0.1.1": + version "0.1.4" + resolved "https://registry.npmjs.org/@antv/scale/-/scale-0.1.4.tgz#bcff21c20e818aa89bf6677ef12f79c0ee4efbdc" + integrity sha512-pZh9Mwvor2GFZdWAu085oWiZ9lnvordQm/CgrnjklwuNsFHl6eRD3xMIR8v54a4+PnYygibLVbN262z9tvtfFQ== + dependencies: + "@antv/util" "~1.3.1" + fecha "~2.3.3" + +"@antv/util@^2.0.0", "@antv/util@^2.0.7": + version "2.0.8" + resolved "https://registry.npmjs.org/@antv/util/-/util-2.0.8.tgz#52cb62e130e734fcdde3503bcd9263863f750e59" + integrity sha512-G9QRygQJ8UNGMi8L1dfMIa4SofbEO+jkXwvRY4ek/MLd04Q01UN0U28JeMFzw6FCKJdxiFu+2uwT/zjoFr3QoQ== + dependencies: + tslib "^1.10.0" + +"@antv/util@~1.3.1": + version "1.3.1" + resolved "https://registry.npmjs.org/@antv/util/-/util-1.3.1.tgz#30a34b201ff9126ec0d58c72c8166a9c3e644ccd" + integrity sha512-cbUta0hIJrKEaW3eKoGarz3Ita+9qUPF2YzTj8A6wds/nNiy20G26ztIWHU+5ThLc13B1n5Ik52LbaCaeg9enA== + dependencies: + "@antv/gl-matrix" "^2.7.1" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + dependencies: + "@babel/highlight" "^7.8.3" + +"@babel/core@^7.0.0": + version "7.8.7" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.8.7.tgz#b69017d221ccdeb203145ae9da269d72cf102f3b" + integrity sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.7" + "@babel/helpers" "^7.8.4" + "@babel/parser" "^7.8.7" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.8.6" + "@babel/types" "^7.8.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.8.6", "@babel/generator@^7.8.7": + version "7.8.7" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.8.7.tgz#870b3cf7984f5297998152af625c4f3e341400f7" + integrity sha512-DQwjiKJqH4C3qGiyQCAExJHoZssn49JTMJgZ8SANGgVFdkupcUhLOdkAeoC6kmHZCPfoDG5M0b6cFlSN5wW7Ew== + dependencies: + "@babel/types" "^7.8.7" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" + integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" + integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-call-delegate@^7.8.7": + version "7.8.7" + resolved "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.7.tgz#28a279c2e6c622a6233da548127f980751324cab" + integrity sha512-doAA5LAKhsFCR0LAFIf+r2RSMmC+m8f/oQ+URnUET/rWeEzC0yTRmAGyWkD4sSu3xwbS7MYQ2u+xlt1V5R56KQ== + dependencies: + "@babel/helper-hoist-variables" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.7" + +"@babel/helper-create-class-features-plugin@^7.8.3": + version "7.8.6" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.6.tgz#243a5b46e2f8f0f674dc1387631eb6b28b851de0" + integrity sha512-klTBDdsr+VFFqaDHm5rR69OpEQtO2Qv8ECxHS1mNhJJvaHArR6a1xTf5K/eZW7eZpJbhCx3NW1Yt/sKsLXLblg== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" + "@babel/helper-split-export-declaration" "^7.8.3" + +"@babel/helper-create-regexp-features-plugin@^7.8.3": + version "7.8.6" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.6.tgz#7fa040c97fb8aebe1247a5c645330c32d083066b" + integrity sha512-bPyujWfsHhV/ztUkwGHz/RPV1T1TDEsSZDsN42JPehndA+p1KKTh3npvTadux0ZhCrytx9tvjpWNowKby3tM6A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-regex" "^7.8.3" + regexpu-core "^4.6.0" + +"@babel/helper-define-map@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" + integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/types" "^7.8.3" + lodash "^4.17.13" + +"@babel/helper-explode-assignable-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" + integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== + dependencies: + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" + integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== + dependencies: + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-hoist-variables@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" + integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-member-expression-to-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" + integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" + integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-transforms@^7.8.3": + version "7.8.6" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.6.tgz#6a13b5eecadc35692047073a64e42977b97654a4" + integrity sha512-RDnGJSR5EFBJjG3deY0NiL0K9TO8SXxS9n/MPsbPK/s9LbQymuLNtlzvDiNS7IpecuL45cMeLVkA+HfmlrnkRg== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" + "@babel/helper-simple-access" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/template" "^7.8.6" + "@babel/types" "^7.8.6" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" + integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" + integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== + +"@babel/helper-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" + integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== + dependencies: + lodash "^4.17.13" + +"@babel/helper-remap-async-to-generator@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" + integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-wrap-function" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6": + version "7.8.6" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" + integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/traverse" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/helper-simple-access@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" + integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== + dependencies: + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-wrap-function@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" + integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helpers@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" + integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== + dependencies: + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.4" + "@babel/types" "^7.8.3" + +"@babel/highlight@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" + integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.7.0", "@babel/parser@^7.8.6", "@babel/parser@^7.8.7": + version "7.8.7" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.8.7.tgz#7b8facf95d25fef9534aad51c4ffecde1a61e26a" + integrity sha512-9JWls8WilDXFGxs0phaXAZgpxTZhSk/yOYH2hTHC0X1yC7Z78IJfvR1vJ+rmJKq3I35td2XzXzN6ZLYlna+r/A== + +"@babel/plugin-proposal-async-generator-functions@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" + integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@^7.0.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e" + integrity sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-proposal-decorators@^7.1.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz#2156860ab65c5abf068c3f67042184041066543e" + integrity sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-decorators" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" + integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-object-rest-spread@^7.3.4": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz#eb5ae366118ddca67bed583b53d7554cad9951bb" + integrity sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" + integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz#b646c3adea5f98800c9ab45105ac34d06cd4a47f" + integrity sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-async-generators@^7.2.0", "@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-decorators@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.8.3.tgz#8d2c15a9f1af624b0025f961682a9d53d3001bda" + integrity sha512-8Hg4dNNT9/LcA1zQlfwuKR8BUc/if7Q7NkTam9sGTcJphLwpf2g4S42uhspQrIrR+dpzE0dtTqBVFoHl8GtnnQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-dynamic-import@^7.0.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-json-strings@^7.2.0", "@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94" + integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-object-rest-spread@^7.2.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.2.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-transform-arrow-functions@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" + integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-async-to-generator@^7.3.4": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" + integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + +"@babel/plugin-transform-block-scoped-functions@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" + integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-block-scoping@^7.3.4": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" + integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + lodash "^4.17.13" + +"@babel/plugin-transform-classes@^7.3.4": + version "7.8.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.6.tgz#77534447a477cbe5995ae4aee3e39fbc8090c46d" + integrity sha512-k9r8qRay/R6v5aWZkrEclEhKO6mc1CCQr2dLsVHBmOQiMpN6I2bpjX3vgnldUWeEI1GHVNByULVxZ4BdP4Hmdg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-define-map" "^7.8.3" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" + "@babel/helper-split-export-declaration" "^7.8.3" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" + integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-destructuring@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz#20ddfbd9e4676906b1056ee60af88590cc7aaa0b" + integrity sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-dotall-regex@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" + integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-duplicate-keys@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" + integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-exponentiation-operator@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" + integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-for-of@^7.2.0": + version "7.8.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.6.tgz#a051bd1b402c61af97a27ff51b468321c7c2a085" + integrity sha512-M0pw4/1/KI5WAxPsdcUL/w2LJ7o89YHN3yLkzNjg7Yl15GlVGgzHyCU+FMeAxevHGsLVmUqbirlUIKTafPmzdw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-function-name@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" + integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-literals@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" + integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-modules-amd@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz#65606d44616b50225e76f5578f33c568a0b876a5" + integrity sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ== + dependencies: + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-commonjs@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz#df251706ec331bd058a34bdd72613915f82928a5" + integrity sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg== + dependencies: + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-simple-access" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-systemjs@^7.3.4": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz#d8bbf222c1dbe3661f440f2f00c16e9bb7d0d420" + integrity sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg== + dependencies: + "@babel/helper-hoist-variables" "^7.8.3" + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-umd@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz#592d578ce06c52f5b98b02f913d653ffe972661a" + integrity sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw== + dependencies: + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.3.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" + integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + +"@babel/plugin-transform-new-target@^7.0.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" + integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-object-super@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" + integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.2.0": + version "7.8.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.7.tgz#66fa2f1de4129b4e0447509223ac71bda4955395" + integrity sha512-brYWaEPTRimOctz2NDA3jnBbDi7SVN2T4wYuu0aqSzxC3nozFZngGaw29CJ9ZPweB7k+iFmZuoG3IVPIcXmD2g== + dependencies: + "@babel/helper-call-delegate" "^7.8.7" + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-regenerator@^7.3.4": + version "7.8.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" + integrity sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-runtime@^7.4.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz#c0153bc0a5375ebc1f1591cb7eea223adea9f169" + integrity sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" + integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-spread@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" + integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-sticky-regex@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" + integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-regex" "^7.8.3" + +"@babel/plugin-transform-template-literals@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" + integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-typeof-symbol@^7.2.0": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" + integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-unicode-regex@^7.2.0": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" + integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/polyfill@^7.2.5": + version "7.8.7" + resolved "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.8.7.tgz#151ec24c7135481336168c3bd8b8bf0cf91c032f" + integrity sha512-LeSfP9bNZH2UOZgcGcZ0PIHUt1ZuHub1L3CVmEyqLxCeDLm4C5Gi8jRH8ZX2PNpDhQCo0z6y/+DIs2JlliXW8w== + dependencies: + core-js "^2.6.5" + regenerator-runtime "^0.13.4" + +"@babel/preset-env@^7.0.0 < 7.4.0": + version "7.3.4" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz#887cf38b6d23c82f19b5135298bdb160062e33e1" + integrity sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.2.0" + "@babel/plugin-proposal-json-strings" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.3.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.2.0" + "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-transform-arrow-functions" "^7.2.0" + "@babel/plugin-transform-async-to-generator" "^7.3.4" + "@babel/plugin-transform-block-scoped-functions" "^7.2.0" + "@babel/plugin-transform-block-scoping" "^7.3.4" + "@babel/plugin-transform-classes" "^7.3.4" + "@babel/plugin-transform-computed-properties" "^7.2.0" + "@babel/plugin-transform-destructuring" "^7.2.0" + "@babel/plugin-transform-dotall-regex" "^7.2.0" + "@babel/plugin-transform-duplicate-keys" "^7.2.0" + "@babel/plugin-transform-exponentiation-operator" "^7.2.0" + "@babel/plugin-transform-for-of" "^7.2.0" + "@babel/plugin-transform-function-name" "^7.2.0" + "@babel/plugin-transform-literals" "^7.2.0" + "@babel/plugin-transform-modules-amd" "^7.2.0" + "@babel/plugin-transform-modules-commonjs" "^7.2.0" + "@babel/plugin-transform-modules-systemjs" "^7.3.4" + "@babel/plugin-transform-modules-umd" "^7.2.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.3.0" + "@babel/plugin-transform-new-target" "^7.0.0" + "@babel/plugin-transform-object-super" "^7.2.0" + "@babel/plugin-transform-parameters" "^7.2.0" + "@babel/plugin-transform-regenerator" "^7.3.4" + "@babel/plugin-transform-shorthand-properties" "^7.2.0" + "@babel/plugin-transform-spread" "^7.2.0" + "@babel/plugin-transform-sticky-regex" "^7.2.0" + "@babel/plugin-transform-template-literals" "^7.2.0" + "@babel/plugin-transform-typeof-symbol" "^7.2.0" + "@babel/plugin-transform-unicode-regex" "^7.2.0" + browserslist "^4.3.4" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.3.0" + +"@babel/runtime-corejs2@^7.2.0": + version "7.8.7" + resolved "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.8.7.tgz#5c6afcb33ef12fa1f8db6b915ff6b5ecaf6afb11" + integrity sha512-R8zbPiv25S0pGfMqAr55dRRxWB8vUeo3wicI4g9PFVBKmsy/9wmQUV1AaYW/kxRHUhx42TTh6F0+QO+4pwfYWg== + dependencies: + core-js "^2.6.5" + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.8.4": + version "7.8.7" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz#8fefce9802db54881ba59f90bb28719b4996324d" + integrity sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.8.3", "@babel/template@^7.8.6": + version "7.8.6" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/traverse@^7.7.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4", "@babel/traverse@^7.8.6": + version "7.8.6" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz#acfe0c64e1cd991b3e32eae813a6eb564954b5ff" + integrity sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.6" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.8.7": + version "7.8.7" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz#1fc9729e1acbb2337d5b6977a63979b4819f5d1d" + integrity sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@hapi/address@2.x.x": + version "2.1.4" + resolved "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" + integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== + +"@hapi/bourne@1.x.x": + version "1.3.2" + resolved "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" + integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== + +"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": + version "8.5.1" + resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" + integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== + +"@hapi/joi@^15.0.1": + version "15.1.1" + resolved "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" + integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== + dependencies: + "@hapi/address" "2.x.x" + "@hapi/bourne" "1.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/topo" "3.x.x" + +"@hapi/topo@3.x.x": + version "3.1.6" + resolved "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" + integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== + dependencies: + "@hapi/hoek" "^8.3.0" + +"@intervolga/optimize-cssnano-plugin@^1.0.5": + version "1.0.6" + resolved "https://registry.npmjs.org/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz#be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8" + integrity sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA== + dependencies: + cssnano "^4.0.0" + cssnano-preset-default "^4.0.0" + postcss "^7.0.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + +"@soda/friendly-errors-webpack-plugin@^1.7.1": + version "1.7.1" + resolved "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz#706f64bcb4a8b9642b48ae3ace444c70334d615d" + integrity sha512-cWKrGaFX+rfbMrAxVv56DzhPNqOJPZuNIS2HGMELtgGzb+vsMzyig9mml5gZ/hr2BGtSLV+dP2LUEuAL8aG2mQ== + dependencies: + chalk "^1.1.3" + error-stack-parser "^2.0.0" + string-width "^2.0.0" + +"@tinymce/tinymce-vue@^2.0.0": + version "2.1.0" + resolved "https://registry.npmjs.org/@tinymce/tinymce-vue/-/tinymce-vue-2.1.0.tgz#cac3e935b217a277424f2258f3235824aa3c17c0" + integrity sha512-lDIpeLbkaobS/f00wWaOhGJdiZLdtL0dEDYB4JvqgVeAAoaDFG2PvXXP/kN49xpHpUe8vOdt7xFaN48nrPmsbQ== + dependencies: + vue "^2.5.17" + +"@types/anymatch@*": + version "1.3.1" + resolved "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" + integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== + +"@types/codemirror@0.0.71": + version "0.0.71" + resolved "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.71.tgz#861f1bcb3100c0a064567c5400f2981cf4ae8ca7" + integrity sha512-b2oEEnno1LIGKMR7uBEsr40al1UijF1HEpRn0+Yf1xOLl24iQgB7DBpZVMM7y54G5wCNoclDrRO65E6KHPNO2w== + dependencies: + "@types/tern" "*" + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/d3-format@*": + version "1.3.1" + resolved "https://registry.npmjs.org/@types/d3-format/-/d3-format-1.3.1.tgz#35bf88264bd6bcda39251165bb827f67879c4384" + integrity sha512-KAWvReOKMDreaAwOjdfQMm0HjcUMlQG47GwqdVKgmm20vTd2pucj0a70c3gUSHrnsmo6H2AMrkBsZU2UhJLq8A== + +"@types/estree@*": + version "0.0.42" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.42.tgz#8d0c1f480339efedb3e46070e22dd63e0430dd11" + integrity sha512-K1DPVvnBCPxzD+G51/cxVIoc2X8uUVl1zpJeE6iKcgHMj4+tbat5Xu4TjV7v2QSDbIeAfLi2hIk+u2+s0MlpUQ== + +"@types/events@*": + version "3.0.0" + resolved "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/html-minifier-terser@^5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.0.0.tgz#7532440c138605ced1b555935c3115ddd20e8bef" + integrity sha512-q95SP4FdkmF0CwO0F2q0H6ZgudsApaY/yCtAQNRn1gduef5fGpyEphzy0YCq/N0UFvDSnLg5V8jFK/YGXlDiCw== + +"@types/jquery@^3.3.29": + version "3.3.33" + resolved "https://registry.npmjs.org/@types/jquery/-/jquery-3.3.33.tgz#61d9cbd4004ffcdf6cf7e34720a87a5625a7d8e9" + integrity sha512-U6IdXYGkfUI42SR79vB2Spj+h1Ly3J3UZjpd8mi943lh126TK7CB+HZOxGh2nM3IySor7wqVQdemD/xtydsBKA== + dependencies: + "@types/sizzle" "*" + +"@types/linkify-it@*": + version "2.1.0" + resolved "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-2.1.0.tgz#ea3dd64c4805597311790b61e872cbd1ed2cd806" + integrity sha512-Q7DYAOi9O/+cLLhdaSvKdaumWyHbm7HAk/bFwwyTuU0arR5yyCeW5GOoqt4tJTpDRxhpx9Q8kQL6vMpuw9hDSw== + +"@types/lodash@*": + version "4.14.149" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" + integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== + +"@types/markdown-it@0.0.7": + version "0.0.7" + resolved "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-0.0.7.tgz#75070485a3d8ad11e7deb8287f4430be15bf4d39" + integrity sha512-WyL6pa76ollQFQNEaLVa41ZUUvDvPY+qAUmlsphnrpL6I9p1m868b26FyeoOmo7X3/Ta/S9WKXcEYXUSHnxoVQ== + dependencies: + "@types/linkify-it" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "13.7.7" + resolved "https://registry.npmjs.org/@types/node/-/node-13.7.7.tgz#1628e6461ba8cc9b53196dfeaeec7b07fa6eea99" + integrity sha512-Uo4chgKbnPNlxQwoFmYIwctkQVkMMmsAoGGU4JKwLuvBefF0pCq4FybNSnfkfRCpC7ZW7kttcC/TrRtAJsvGtg== + +"@types/node@^8.0.53": + version "8.10.59" + resolved "https://registry.npmjs.org/@types/node/-/node-8.10.59.tgz#9e34261f30183f9777017a13d185dfac6b899e04" + integrity sha512-8RkBivJrDCyPpBXhVZcjh7cQxVBSmRk9QM7hOketZzp6Tg79c0N8kkpAIito9bnJ3HCVCHVYz+KHTEbfQNfeVQ== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/q@^1.5.1": + version "1.5.2" + resolved "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" + integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== + +"@types/sizzle@*": + version "2.3.2" + resolved "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" + integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + +"@types/tapable@*", "@types/tapable@^1.0.5": + version "1.0.5" + resolved "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.5.tgz#9adbc12950582aa65ead76bffdf39fe0c27a3c02" + integrity sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ== + +"@types/tern@*": + version "0.23.3" + resolved "https://registry.npmjs.org/@types/tern/-/tern-0.23.3.tgz#4b54538f04a88c9ff79de1f6f94f575a7f339460" + integrity sha512-imDtS4TAoTcXk0g7u4kkWqedB3E4qpjXzCpD2LU5M5NAXHzCDsypyvXSaG7mM8DKYkCRa7tFp4tS/lp/Wo7Q3w== + dependencies: + "@types/estree" "*" + +"@types/uglify-js@*": + version "3.9.0" + resolved "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.0.tgz#4490a140ca82aa855ad68093829e7fd6ae94ea87" + integrity sha512-3ZcoyPYHVOCcLpnfZwD47KFLr8W/mpUcgjpf1M4Q78TMJIw7KMAHSjiCLJp1z3ZrBR9pTLbe191O0TldFK5zcw== + dependencies: + source-map "^0.6.1" + +"@types/webpack-sources@*": + version "0.1.7" + resolved "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.7.tgz#0a330a9456113410c74a5d64180af0cbca007141" + integrity sha512-XyaHrJILjK1VHVC4aVlKsdNN5KBTwufMb43cQs+flGxtPAf/1Qwl8+Q0tp5BwEGaI8D6XT1L+9bSWXckgkjTLw== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.6.1" + +"@types/webpack@^4.41.8": + version "4.41.12" + resolved "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.12.tgz#0386ee2a2814368e2f2397abb036c0bf173ff6c3" + integrity sha512-BpCtM4NnBen6W+KEhrL9jKuZCXVtiH6+0b6cxdvNt2EwU949Al334PjQSl2BeAyvAX9mgoNNG21wvjP3xZJJ5w== + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "*" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" + +"@vue/babel-helper-vue-jsx-merge-props@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz#048fe579958da408fb7a8b2a3ec050b50a661040" + integrity sha512-6tyf5Cqm4m6v7buITuwS+jHzPlIPxbFzEhXR5JGZpbrvOcp1hiQKckd305/3C7C36wFekNTQSxAtgeM0j0yoUw== + +"@vue/babel-plugin-transform-vue-jsx@^1.1.2": + version "1.1.2" + resolved "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.1.2.tgz#c0a3e6efc022e75e4247b448a8fc6b86f03e91c0" + integrity sha512-YfdaoSMvD1nj7+DsrwfTvTnhDXI7bsuh+Y5qWwvQXlD24uLgnsoww3qbiZvWf/EoviZMrvqkqN4CBw0W3BWUTQ== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0" + html-tags "^2.0.0" + lodash.kebabcase "^4.1.1" + svg-tags "^1.0.0" + +"@vue/babel-preset-app@^3.12.1": + version "3.12.1" + resolved "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-3.12.1.tgz#24c477052f078f30fdb7735103b14dd1fa2cbfe1" + integrity sha512-Zjy5jQaikV1Pz+ri0YgXFS7q4/5wCxB5tRkDOEIt5+4105u0Feb/pvH20nVL6nx9GyXrECFfcm7Yxr/z++OaPQ== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-decorators" "^7.1.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.4.0" + "@babel/preset-env" "^7.0.0 < 7.4.0" + "@babel/runtime" "^7.0.0" + "@babel/runtime-corejs2" "^7.2.0" + "@vue/babel-preset-jsx" "^1.0.0" + babel-plugin-dynamic-import-node "^2.2.0" + babel-plugin-module-resolver "3.2.0" + core-js "^2.6.5" + +"@vue/babel-preset-jsx@^1.0.0": + version "1.1.2" + resolved "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.1.2.tgz#2e169eb4c204ea37ca66c2ea85a880bfc99d4f20" + integrity sha512-zDpVnFpeC9YXmvGIDSsKNdL7qCG2rA3gjywLYHPCKDT10erjxF4U+6ay9X6TW5fl4GsDlJp9bVfAVQAAVzxxvQ== + dependencies: + "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0" + "@vue/babel-plugin-transform-vue-jsx" "^1.1.2" + "@vue/babel-sugar-functional-vue" "^1.1.2" + "@vue/babel-sugar-inject-h" "^1.1.2" + "@vue/babel-sugar-v-model" "^1.1.2" + "@vue/babel-sugar-v-on" "^1.1.2" + +"@vue/babel-sugar-functional-vue@^1.1.2": + version "1.1.2" + resolved "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.1.2.tgz#f7e24fba09e6f1ee70104560a8808057555f1a9a" + integrity sha512-YhmdJQSVEFF5ETJXzrMpj0nkCXEa39TvVxJTuVjzvP2rgKhdMmQzlJuMv/HpadhZaRVMCCF3AEjjJcK5q/cYzQ== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-inject-h@^1.1.2": + version "1.1.2" + resolved "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.1.2.tgz#8a5276b6d8e2ed16ffc8078aad94236274e6edf0" + integrity sha512-VRSENdTvD5htpnVp7i7DNuChR5rVMcORdXjvv5HVvpdKHzDZAYiLSD+GhnhxLm3/dMuk8pSzV+k28ECkiN5m8w== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@vue/babel-sugar-v-model@^1.1.2": + version "1.1.2" + resolved "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.1.2.tgz#1ff6fd1b800223fc9cb1e84dceb5e52d737a8192" + integrity sha512-vLXPvNq8vDtt0u9LqFdpGM9W9IWDmCmCyJXuozlq4F4UYVleXJ2Fa+3JsnTZNJcG+pLjjfnEGHci2339Kj5sGg== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0" + "@vue/babel-plugin-transform-vue-jsx" "^1.1.2" + camelcase "^5.0.0" + html-tags "^2.0.0" + svg-tags "^1.0.0" + +"@vue/babel-sugar-v-on@^1.1.2": + version "1.1.2" + resolved "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.1.2.tgz#b2ef99b8f2fab09fbead25aad70ef42e1cf5b13b" + integrity sha512-T8ZCwC8Jp2uRtcZ88YwZtZXe7eQrJcfRq0uTFy6ShbwYJyz5qWskRFoVsdTi9o0WEhmQXxhQUewodOSCUPVmsQ== + dependencies: + "@babel/plugin-syntax-jsx" "^7.2.0" + "@vue/babel-plugin-transform-vue-jsx" "^1.1.2" + camelcase "^5.0.0" + +"@vue/cli-overlay@^3.12.1": + version "3.12.1" + resolved "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-3.12.1.tgz#bdfde8f7123561ab06e4e4c60b854cc5092f5ab1" + integrity sha512-Bym92EN+lj+cNRN2ozbYyH+V8DMXWGbCDUk+hiJ4EYDBZfBkZKvalk1/mOBFwyxiopnnbOEBAAhL/UuMQ1xARg== + +"@vue/cli-plugin-babel@^3.3.0": + version "3.12.1" + resolved "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-3.12.1.tgz#9a79159de8cd086b013fa6d78a39830b2e2ec706" + integrity sha512-Zetvz8PikLCGomeKOKu8pC9YQ7cfxs7pGpvEOzaxGdhMnebhjAYR6i6dOB57A6N5lhxQksXCtYTv26QgfiIpdg== + dependencies: + "@babel/core" "^7.0.0" + "@vue/babel-preset-app" "^3.12.1" + "@vue/cli-shared-utils" "^3.12.1" + babel-loader "^8.0.5" + webpack "^4.0.0" + +"@vue/cli-plugin-eslint@^3.3.0": + version "3.12.1" + resolved "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.12.1.tgz#302c463867f38e790bb996eafdf7159c782dc8cf" + integrity sha512-tVTZlEZsy3sQbO4LLWFK11yzlWwqVAqaM+IY+BeWHITBzEJKh2KmouG+x6x/reXiU3qROsMJ4Ej3Hs8buSMWyQ== + dependencies: + "@vue/cli-shared-utils" "^3.12.1" + babel-eslint "^10.0.1" + eslint-loader "^2.1.2" + globby "^9.2.0" + webpack "^4.0.0" + yorkie "^2.0.0" + optionalDependencies: + eslint "^4.19.1" + eslint-plugin-vue "^4.7.1" + +"@vue/cli-service@^3.3.0": + version "3.12.1" + resolved "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.12.1.tgz#13220b1c189254e7c003390df329086f9b6e77e6" + integrity sha512-PDxNrTGnSKzeV1ruFlsRIAO8JcPizwT0EJXq9GeyooU+p+sOkv7aKkCBJQVYNjZapD1NOGWx6CvAAC/wAW+gew== + dependencies: + "@intervolga/optimize-cssnano-plugin" "^1.0.5" + "@soda/friendly-errors-webpack-plugin" "^1.7.1" + "@vue/cli-overlay" "^3.12.1" + "@vue/cli-shared-utils" "^3.12.1" + "@vue/component-compiler-utils" "^3.0.0" + "@vue/preload-webpack-plugin" "^1.1.0" + "@vue/web-component-wrapper" "^1.2.0" + acorn "^6.1.1" + acorn-walk "^6.1.1" + address "^1.0.3" + autoprefixer "^9.5.1" + browserslist "^4.5.4" + cache-loader "^2.0.1" + case-sensitive-paths-webpack-plugin "^2.2.0" + chalk "^2.4.2" + cli-highlight "^2.1.0" + clipboardy "^2.0.0" + cliui "^5.0.0" + copy-webpack-plugin "^4.6.0" + css-loader "^1.0.1" + cssnano "^4.1.10" + current-script-polyfill "^1.0.0" + debug "^4.1.1" + default-gateway "^5.0.2" + dotenv "^7.0.0" + dotenv-expand "^5.1.0" + escape-string-regexp "^1.0.5" + file-loader "^3.0.1" + fs-extra "^7.0.1" + globby "^9.2.0" + hash-sum "^1.0.2" + html-webpack-plugin "^3.2.0" + launch-editor-middleware "^2.2.1" + lodash.defaultsdeep "^4.6.1" + lodash.mapvalues "^4.6.0" + lodash.transform "^4.6.0" + mini-css-extract-plugin "^0.8.0" + minimist "^1.2.0" + ora "^3.4.0" + portfinder "^1.0.20" + postcss-loader "^3.0.0" + read-pkg "^5.0.0" + semver "^6.0.0" + slash "^2.0.0" + source-map-url "^0.4.0" + ssri "^6.0.1" + string.prototype.padend "^3.0.0" + terser-webpack-plugin "^1.2.3" + thread-loader "^2.1.2" + url-loader "^1.1.2" + vue-loader "^15.7.0" + webpack "^4.0.0" + webpack-bundle-analyzer "^3.3.0" + webpack-chain "^4.11.0" + webpack-dev-server "^3.4.1" + webpack-merge "^4.2.1" + +"@vue/cli-shared-utils@^3.12.1": + version "3.12.1" + resolved "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.12.1.tgz#bcf076287ddadeebbb97c6a748dfe9ff50ec8df0" + integrity sha512-jFblzRFjutGwu5utOKdVlPlsbA1lBUNNQlAThzNqej+JtTKJjnvjlhjKX0Gq0oOny5FjKWhoyfQ74p9h1qE6JQ== + dependencies: + "@hapi/joi" "^15.0.1" + chalk "^2.4.1" + execa "^1.0.0" + launch-editor "^2.2.1" + lru-cache "^5.1.1" + node-ipc "^9.1.1" + open "^6.3.0" + ora "^3.4.0" + request "^2.87.0" + request-promise-native "^1.0.7" + semver "^6.0.0" + string.prototype.padstart "^3.0.0" + +"@vue/component-compiler-utils@^3.0.0", "@vue/component-compiler-utils@^3.1.0": + version "3.1.1" + resolved "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.1.1.tgz#d4ef8f80292674044ad6211e336a302e4d2a6575" + integrity sha512-+lN3nsfJJDGMNz7fCpcoYIORrXo0K3OTsdr8jCM7FuqdI4+70TY6gxY6viJ2Xi1clqyPg7LpeOWwjF31vSMmUw== + dependencies: + consolidate "^0.15.1" + hash-sum "^1.0.2" + lru-cache "^4.1.2" + merge-source-map "^1.1.0" + postcss "^7.0.14" + postcss-selector-parser "^6.0.2" + prettier "^1.18.2" + source-map "~0.6.1" + vue-template-es2015-compiler "^1.9.0" + +"@vue/eslint-config-standard@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@vue/eslint-config-standard/-/eslint-config-standard-4.0.0.tgz#6be447ee674e3b0f733c584098fd9a22e6d76fcd" + integrity sha512-bQghq1cw1BuMRHNhr3tRpAJx1tpGy0QtajQX873kLtA9YVuOIoXR7nAWnTN09bBHnSUh2N288vMsqPi2fI4Hzg== + dependencies: + eslint-config-standard "^12.0.0" + eslint-plugin-import "^2.14.0" + eslint-plugin-node "^8.0.0" + eslint-plugin-promise "^4.0.1" + eslint-plugin-standard "^4.0.0" + +"@vue/preload-webpack-plugin@^1.1.0": + version "1.1.1" + resolved "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.1.tgz#18723530d304f443021da2292d6ec9502826104a" + integrity sha512-8VCoJeeH8tCkzhkpfOkt+abALQkS11OIHhte5MBzYaKMTqK0A3ZAKEUVAffsOklhEv7t0yrQt696Opnu9oAx+w== + +"@vue/web-component-wrapper@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz#bb0e46f1585a7e289b4ee6067dcc5a6ae62f1dd1" + integrity sha512-Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw== + +"@webassemblyjs/ast@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" + integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== + dependencies: + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + +"@webassemblyjs/floating-point-hex-parser@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" + integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== + +"@webassemblyjs/helper-api-error@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" + integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== + +"@webassemblyjs/helper-buffer@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" + integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== + +"@webassemblyjs/helper-code-frame@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" + integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== + dependencies: + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/helper-fsm@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" + integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== + +"@webassemblyjs/helper-module-context@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" + integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== + dependencies: + "@webassemblyjs/ast" "1.8.5" + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" + integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== + +"@webassemblyjs/helper-wasm-section@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" + integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + +"@webassemblyjs/ieee754@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" + integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" + integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" + integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== + +"@webassemblyjs/wasm-edit@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" + integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/helper-wasm-section" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-opt" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/wasm-gen@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" + integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wasm-opt@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" + integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + +"@webassemblyjs/wasm-parser@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" + integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wast-parser@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" + integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/floating-point-hex-parser" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-code-frame" "1.8.5" + "@webassemblyjs/helper-fsm" "1.8.5" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.8.5": + version "1.8.5" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" + integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abs-svg-path@~0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf" + integrity sha1-32Acjo0roQ1KdtYl4japo5wnI78= + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-dynamic-import@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + integrity sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ= + dependencies: + acorn "^4.0.3" + +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= + dependencies: + acorn "^3.0.4" + +acorn-jsx@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + +acorn-walk@^6.1.1: + version "6.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= + +acorn@^4.0.3: + version "4.0.13" + resolved "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= + +acorn@^5.0.0, acorn@^5.5.0: + version "5.7.3" + resolved "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + +acorn@^6.0.2, acorn@^6.0.7, acorn@^6.1.1, acorn@^6.2.1: + version "6.4.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" + integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== + +add-dom-event-listener@^1.0.2: + version "1.1.0" + resolved "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz#6a92db3a0dd0abc254e095c0f1dc14acbbaae310" + integrity sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw== + dependencies: + object-assign "4.x" + +address@^1.0.3: + version "1.1.2" + resolved "https://registry.npmjs.org/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + +adjust-sourcemap-loader@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.2.0.tgz#e33fde95e50db9f2a802e3647e311d2fc5000c69" + integrity sha512-958oaHHVEXMvsY7v7cC5gEkNIcoaAVIhZ4mBReYVZJOTP9IgKmzLjIOhTtzpLMu+qriXvLsVjJ155EeInp45IQ== + dependencies: + assert "^1.3.0" + camelcase "^1.2.1" + loader-utils "^1.1.0" + lodash.assign "^4.0.1" + lodash.defaults "^3.1.2" + object-path "^0.9.2" + regex-parser "^2.2.9" + +aggregate-error@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.4.1" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== + +ajv@^5.0.0, ajv@^5.2.3, ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5, ajv@^6.9.1: + version "6.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" + integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^6.12.0: + version "6.12.2" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" + integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +alphanum-sort@^1.0.0, alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +ant-design-vue@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/ant-design-vue/-/ant-design-vue-1.5.2.tgz#0943f17d7908de16e633da7ab7133fb856eedd2c" + integrity sha512-DmlOl+ld4hSQdEG1c2wAV+v9/Bl2aG+wBEnd1GJYV0LeOXaSrBGiIkZrmUrTrUL92yBdFO+OF25aFNb0UFMZOA== + dependencies: + "@ant-design/icons" "^2.1.1" + "@ant-design/icons-vue" "^2.0.0" + add-dom-event-listener "^1.0.2" + array-tree-filter "^2.1.0" + async-validator "^3.0.3" + babel-helper-vue-jsx-merge-props "^2.0.3" + babel-runtime "6.x" + classnames "^2.2.5" + component-classes "^1.2.6" + dom-align "^1.10.4" + dom-closest "^0.2.0" + dom-scroll-into-view "^2.0.0" + enquire.js "^2.1.6" + intersperse "^1.0.0" + is-mobile "^2.2.1" + is-negative-zero "^2.0.0" + ismobilejs "^1.0.0" + json2mq "^0.2.0" + lodash "^4.17.5" + moment "^2.21.0" + mutationobserver-shim "^0.3.2" + node-emoji "^1.10.0" + omit.js "^1.0.0" + raf "^3.4.0" + resize-observer-polyfill "^1.5.1" + shallow-equal "^1.0.0" + shallowequal "^1.0.2" + vue-ref "^2.0.0" + warning "^4.0.0" + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +arch@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" + integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg== + +area-data@^5.0.6: + version "5.0.6" + resolved "https://registry.npmjs.org/area-data/-/area-data-5.0.6.tgz#c381c3f88ff9e1050accd07549d206fce2a28d13" + integrity sha512-QxLoA+823xXKyhw5S3750I9TToki0OS42HU9ol3rCOsCXfkjtl8RtQ/eoj0cK0Levn4//oEM05FmMumfw/HIlg== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-includes@^3.0.3: + version "3.1.1" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" + +array-tree-filter@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190" + integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw== + +array-union@^1.0.1, array-union@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +array.prototype.flat@^1.2.1: + version "1.2.3" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1, assert@^1.3.0: + version "1.5.0" + resolved "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async-validator@^3.0.3: + version "3.2.3" + resolved "https://registry.npmjs.org/async-validator/-/async-validator-3.2.3.tgz#b38b72f9c08c1d28548df13bb260b6908448ca49" + integrity sha512-yMJ4i3x5qEGVgEMowZiBkx+rjDrsXf64BWdHENCtHLgyPiEE+2r8jvqMF1cghCgdGo4sWVLJ7MDwPQgGSPDCcw== + +async@^2.1.2, async@^2.4.1, async@^2.6.2: + version "2.6.3" + resolved "https://registry.npmjs.org/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer-loader@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/autoprefixer-loader/-/autoprefixer-loader-3.2.0.tgz#39a7b6646a8269865073d958c97f486152c2c84a" + integrity sha1-Oae2ZGqCaYZQc9lYyX9IYVLCyEo= + dependencies: + autoprefixer "^6.0.2" + loader-utils "^0.2.11" + postcss "^5.0.4" + postcss-safe-parser "^1.0.1" + +autoprefixer@^6.0.2, autoprefixer@^6.3.1: + version "6.7.7" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ= + dependencies: + browserslist "^1.7.6" + caniuse-db "^1.0.30000634" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.16" + postcss-value-parser "^3.2.3" + +autoprefixer@^9.5.1: + version "9.7.4" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz#f8bf3e06707d047f0641d87aee8cfb174b2a5378" + integrity sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g== + dependencies: + browserslist "^4.8.3" + caniuse-lite "^1.0.30001020" + chalk "^2.4.2" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.26" + postcss-value-parser "^4.0.2" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.9.1" + resolved "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" + integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== + +axios@^0.18.0: + version "0.18.1" + resolved "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3" + integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g== + dependencies: + follow-redirects "1.5.10" + is-buffer "^2.0.2" + +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.26.0: + version "6.26.3" + resolved "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-eslint@^10.0.1: + version "10.1.0" + resolved "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-vue-jsx-merge-props@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz#22aebd3b33902328e513293a8e4992b384f9f1b6" + integrity sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg== + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-loader@^7.1.2: + version "7.1.5" + resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68" + integrity sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw== + dependencies: + find-cache-dir "^1.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + +babel-loader@^8.0.5: + version "8.0.6" + resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" + integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== + dependencies: + find-cache-dir "^2.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + pify "^4.0.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-dynamic-import-node@^2.2.0, babel-plugin-dynamic-import-node@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" + integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-module-resolver@3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7" + integrity sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA== + dependencies: + find-babel-config "^1.1.0" + glob "^7.1.2" + pkg-up "^2.0.0" + reselect "^3.0.1" + resolve "^1.4.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= + +babel-plugin-transform-async-to-generator@^6.22.0: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.23.0: + version "6.26.0" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.23.0: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.2" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.23.0: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.23.0: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.23.0: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.22.0: + version "6.26.0" + resolved "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-runtime@^6.23.0: + version "6.23.0" + resolved "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" + integrity sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-env@^1.6.0: + version "1.7.0" + resolved "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" + integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^3.2.6" + invariant "^2.2.2" + semver "^5.3.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@6.x, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bfj@^6.1.1: + version "6.1.2" + resolved "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" + integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw== + dependencies: + bluebird "^3.5.5" + check-types "^8.0.3" + hoopy "^0.1.4" + tryer "^1.0.1" + +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bluebird@^3.1.1, bluebird@^3.5.1, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: + version "1.7.7" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= + dependencies: + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" + +browserslist@^3.2.6: + version "3.2.8" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== + dependencies: + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" + +browserslist@^4.0.0, browserslist@^4.3.4, browserslist@^4.5.4, browserslist@^4.8.3: + version "4.9.1" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.9.1.tgz#01ffb9ca31a1aef7678128fc6a2253316aa7287c" + integrity sha512-Q0DnKq20End3raFulq6Vfp1ecB9fh8yUNV55s8sekaDDeqBaCtWlRHCUdaWyUeSSBJM7IbM6HcsyaeYqgeDhnw== + dependencies: + caniuse-lite "^1.0.30001030" + electron-to-chromium "^1.3.363" + node-releases "^1.1.50" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^10.0.4: + version "10.0.4" + resolved "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" + integrity sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA== + dependencies: + bluebird "^3.5.1" + chownr "^1.0.1" + glob "^7.1.2" + graceful-fs "^4.1.11" + lru-cache "^4.1.1" + mississippi "^2.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.2" + ssri "^5.2.4" + unique-filename "^1.1.0" + y18n "^4.0.0" + +cacache@^12.0.2: + version "12.0.3" + resolved "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^13.0.1: + version "13.0.1" + resolved "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" + integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== + dependencies: + chownr "^1.1.2" + figgy-pudding "^3.5.1" + fs-minipass "^2.0.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + minipass "^3.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + p-map "^3.0.0" + promise-inflight "^1.0.1" + rimraf "^2.7.1" + ssri "^7.0.0" + unique-filename "^1.1.1" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cache-loader@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/cache-loader/-/cache-loader-2.0.1.tgz#5758f41a62d7c23941e3c3c7016e6faeb03acb07" + integrity sha512-V99T3FOynmGx26Zom+JrVBytLBsmUCzVG2/4NnUKgvXN4bEV42R1ERl1IyiH/cvFIDA1Ytq2lPZ9tXDSahcQpQ== + dependencies: + loader-utils "^1.1.0" + mkdirp "^0.5.1" + neo-async "^2.6.0" + normalize-path "^3.0.0" + schema-utils "^1.0.0" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= + dependencies: + callsites "^0.2.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camel-case@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547" + integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q== + dependencies: + pascal-case "^3.1.1" + tslib "^1.10.0" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^1.0.2, camelcase@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-api@^1.5.2: + version "1.6.1" + resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" + integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw= + dependencies: + browserslist "^1.3.6" + caniuse-db "^1.0.30000529" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30001032" + resolved "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001032.tgz#e22cb42d00005d2f98be82217c86d0acd6031132" + integrity sha512-thSkUHbrj3Qt4J6kt7j1IUTUFJaMPWAGhPRe9vIO5QIUSyHHPaJRabhfKRWvDs8MveleUERUhwYqK6paWqcyAw== + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001030: + version "1.0.30001032" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001032.tgz#b8d224914e2cd7f507085583d4e38144c652bce4" + integrity sha512-8joOm7BwcpEN4BfVHtfh0hBXSAPVYk+eUIcNntGtMkUWy/6AKRCDZINCLe3kB1vHhT2vBxBF85Hh9VlPXi/qjA== + +case-sensitive-paths-webpack-plugin@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" + integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +charenc@~0.0.1: + version "0.0.2" + resolved "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + +check-types@^8.0.3: + version "8.0.3" + resolved "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" + integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== + +chokidar@^2.0.2, chokidar@^2.1.2, chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.0.1, chownr@^1.1.1, chownr@^1.1.2: + version "1.1.4" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== + +clap@^1.0.9: + version "1.2.3" + resolved "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" + integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA== + dependencies: + chalk "^1.1.3" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +classnames@^2.2.5: + version "2.2.6" + resolved "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + +clean-css@4.2.x, clean-css@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-highlight@^2.1.0: + version "2.1.4" + resolved "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.4.tgz#098cb642cf17f42adc1c1145e07f960ec4d7522b" + integrity sha512-s7Zofobm20qriqDoU9sXptQx0t2R9PEgac92mENNm7xaEe1hn71IIMsXMK+6encA6WRCWWxIGQbipr3q998tlQ== + dependencies: + chalk "^3.0.0" + highlight.js "^9.6.0" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^5.1.1" + yargs "^15.0.0" + +cli-spinners@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" + integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ== + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +clipboard@^2.0.4: + version "2.0.6" + resolved "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376" + integrity sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg== + dependencies: + good-listener "^1.2.2" + select "^1.1.2" + tiny-emitter "^2.0.0" + +clipboardy@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clipboardy/-/clipboardy-2.2.0.tgz#681e2af495924bcaeed159db3287ef5a5f4d2ee1" + integrity sha512-9ry9nC3VFULNmoEIqvuRwCIQ9M7wjnm4O+yvk7xkmhR+7FAUWaeX751oeYJbORg0h0zmqW1EVDoZK8f7yapwbg== + dependencies: + arch "^2.1.1" + execa "^1.0.0" + is-wsl "^2.1.1" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +clone@^2.1.1, clone@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +coa@~1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" + integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0= + dependencies: + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +codemirror@^5.46.0, codemirror@^5.48.4: + version "5.52.0" + resolved "https://registry.npmjs.org/codemirror/-/codemirror-5.52.0.tgz#4dbd6aef7f0e63db826b9a23922f0c03ac75c0a7" + integrity sha512-K2UB6zjscrfME03HeRe/IuOmCeqNpw7PLKGHThYpLbZEuKf+ZoujJPhxZN4hHJS1O7QyzEsV7JJZGxuQWVaFCg== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.3.0, color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE= + dependencies: + color-name "^1.0.0" + +color-string@^1.5.2: + version "1.5.3" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" + integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^0.11.0: + version "0.11.4" + resolved "https://registry.npmjs.org/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q= + dependencies: + clone "^1.0.2" + color-convert "^1.3.0" + color-string "^0.3.0" + +color@^3.0.0: + version "3.1.2" + resolved "https://registry.npmjs.org/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" + integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + +colormin@^1.0.5: + version "1.1.2" + resolved "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM= + dependencies: + color "^0.11.0" + css-color-names "0.0.4" + has "^1.0.1" + +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@2, commander@^2.18.0, commander@^2.20.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@2.17.x: + version "2.17.1" + resolved "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== + +commander@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@~2.19.0: + version "2.19.0" + resolved "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-classes@^1.2.6: + version "1.2.6" + resolved "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz#c642394c3618a4d8b0b8919efccbbd930e5cd691" + integrity sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE= + dependencies: + component-indexof "0.0.3" + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +component-indexof@0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/component-indexof/-/component-indexof-0.0.3.tgz#11d091312239eb8f32c8f25ae9cb002ffe8d3c24" + integrity sha1-EdCRMSI5648yyPJa6csAL/6NPCQ= + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression-webpack-plugin@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-3.1.0.tgz#9f510172a7b5fae5aad3b670652e8bd7997aeeca" + integrity sha512-iqTHj3rADN4yHwXMBrQa/xrncex/uEQy8QHlaTKxGchT/hC0SdlJlmL/5eRqffmWq2ep0/Romw6Ld39JjTR/ug== + dependencies: + cacache "^13.0.1" + find-cache-dir "^3.0.0" + neo-async "^2.5.0" + schema-utils "^2.6.1" + serialize-javascript "^2.1.2" + webpack-sources "^1.0.1" + +compression@^1.7.3, compression@^1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0, concat-stream@^1.6.0: + version "1.6.2" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-history-api-fallback@^1.3.0, connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +consolidate@^0.14.0: + version "0.14.5" + resolved "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz#5a25047bc76f73072667c8cb52c989888f494c63" + integrity sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM= + dependencies: + bluebird "^3.1.1" + +consolidate@^0.15.1: + version "0.15.1" + resolved "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" + integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== + dependencies: + bluebird "^3.1.1" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +contour_plot@^0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/contour_plot/-/contour_plot-0.0.1.tgz#475870f032b8e338412aa5fc507880f0bf495c77" + integrity sha1-R1hw8DK44zhBKqX8UHiA8L9JXHc= + +convert-source-map@^0.3.3: + version "0.3.5" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" + integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= + +convert-source-map@^1.5.1, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-webpack-plugin@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz#e7f40dd8a68477d405dd1b7a854aae324b158bae" + integrity sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA== + dependencies: + cacache "^10.0.4" + find-cache-dir "^1.0.0" + globby "^7.1.1" + is-glob "^4.0.0" + loader-utils "^1.1.0" + minimatch "^3.0.4" + p-limit "^1.0.0" + serialize-javascript "^1.4.0" + +core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5: + version "2.6.11" + resolved "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + +core-js@^3.6.4: + version "3.6.4" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647" + integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: + version "2.2.2" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892" + integrity sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A== + dependencies: + is-directory "^0.3.1" + js-yaml "^3.4.3" + minimist "^1.2.0" + object-assign "^4.1.0" + os-homedir "^1.0.1" + parse-json "^2.2.0" + require-from-string "^1.1.0" + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-env@^5.0.5: + version "5.2.1" + resolved "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz#b2c76c1ca7add66dc874d11798466094f551b34d" + integrity sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ== + dependencies: + cross-spawn "^6.0.5" + +cross-spawn@^5.0.1, cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypt@~0.0.1: + version "0.0.2" + resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-loader@^0.28.7: + version "0.28.11" + resolved "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" + integrity sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg== + dependencies: + babel-code-frame "^6.26.0" + css-selector-tokenizer "^0.7.0" + cssnano "^3.10.0" + icss-utils "^2.1.0" + loader-utils "^1.0.2" + lodash.camelcase "^4.3.0" + object-assign "^4.1.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.2.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" + postcss-value-parser "^3.3.0" + source-list-map "^2.0.0" + +css-loader@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz#6885bb5233b35ec47b006057da01cc640b6b79fe" + integrity sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw== + dependencies: + babel-code-frame "^6.26.0" + css-selector-tokenizer "^0.7.0" + icss-utils "^2.1.0" + loader-utils "^1.0.2" + lodash "^4.17.11" + postcss "^6.0.23" + postcss-modules-extract-imports "^1.2.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" + postcss-value-parser "^3.3.0" + source-list-map "^2.0.0" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-selector-tokenizer@^0.7.0: + version "0.7.2" + resolved "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz#11e5e27c9a48d90284f22d45061c303d7a25ad87" + integrity sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw== + dependencies: + cssesc "^3.0.0" + fastparse "^1.1.2" + regexpu-core "^4.6.0" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-what@2.1: + version "2.1.3" + resolved "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +css-what@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1" + integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw== + +css@^2.0.0: + version "2.2.4" + resolved "https://registry.npmjs.org/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.0, cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^3.10.0: + version "3.10.0" + resolved "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg= + dependencies: + autoprefixer "^6.3.1" + decamelize "^1.1.2" + defined "^1.0.0" + has "^1.0.1" + object-assign "^4.0.1" + postcss "^5.0.14" + postcss-calc "^5.2.0" + postcss-colormin "^2.1.8" + postcss-convert-values "^2.3.4" + postcss-discard-comments "^2.0.4" + postcss-discard-duplicates "^2.0.1" + postcss-discard-empty "^2.0.1" + postcss-discard-overridden "^0.1.1" + postcss-discard-unused "^2.2.1" + postcss-filter-plugins "^2.0.0" + postcss-merge-idents "^2.1.5" + postcss-merge-longhand "^2.0.1" + postcss-merge-rules "^2.0.3" + postcss-minify-font-values "^1.0.2" + postcss-minify-gradients "^1.0.1" + postcss-minify-params "^1.0.4" + postcss-minify-selectors "^2.0.4" + postcss-normalize-charset "^1.1.0" + postcss-normalize-url "^3.0.7" + postcss-ordered-values "^2.1.0" + postcss-reduce-idents "^2.2.2" + postcss-reduce-initial "^1.0.0" + postcss-reduce-transforms "^1.0.3" + postcss-svgo "^2.1.1" + postcss-unique-selectors "^2.0.2" + postcss-value-parser "^3.2.3" + postcss-zindex "^2.0.1" + +cssnano@^4.0.0, cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz#e5f81ab3a56b8eefb7f0092ce7279329f454de3d" + integrity sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg== + dependencies: + css-tree "1.0.0-alpha.37" + +csso@~2.3.1: + version "2.3.2" + resolved "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U= + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + +current-script-polyfill@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz#f31cf7e4f3e218b0726e738ca92a02d3488ef615" + integrity sha1-8xz35PPiGLBybnOMqSoC00iO9hU= + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +d3-array@1: + version "1.2.4" + resolved "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" + integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== + +d3-collection@1: + version "1.0.7" + resolved "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" + integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== + +d3-color@1: + version "1.4.0" + resolved "https://registry.npmjs.org/d3-color/-/d3-color-1.4.0.tgz#89c45a995ed773b13314f06460df26d60ba0ecaf" + integrity sha512-TzNPeJy2+iEepfiL92LAAB7fvnp/dV2YwANPVHdDWmYMm23qIJBYww3qT8I8C1wXrmrg4UWs7BKc2tKIgyjzHg== + +d3-composite-projections@^1.2.0: + version "1.3.2" + resolved "https://registry.npmjs.org/d3-composite-projections/-/d3-composite-projections-1.3.2.tgz#383f6a6096f38ed1fb379ae1983f25d3267377c7" + integrity sha512-dao+Dd/EEYBX+FqNYwe/4putAsMXWewSgDj5sETRFsj1z4X/CVI6ctmZhqvpa/MVYCFHoWV9Issu+20OU5VmbA== + dependencies: + d3-geo "^1.11.9" + d3-path "^1.0.9" + +d3-dispatch@1: + version "1.0.6" + resolved "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz#00d37bcee4dd8cd97729dd893a0ac29caaba5d58" + integrity sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA== + +d3-dsv@^1.0.5: + version "1.2.0" + resolved "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz#9d5f75c3a5f8abd611f74d3f5847b0d4338b885c" + integrity sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g== + dependencies: + commander "2" + iconv-lite "0.4" + rw "1" + +d3-ease@1, d3-ease@~1.0.3: + version "1.0.6" + resolved "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.6.tgz#ebdb6da22dfac0a22222f2d4da06f66c416a0ec0" + integrity sha512-SZ/lVU7LRXafqp7XtIcBdxnWl8yyLpgOmzAk0mWBI9gXNzLDx5ybZgnRbH9dN/yY5tzVBqCQ9avltSnqVwessQ== + +d3-format@^1.3.0: + version "1.4.3" + resolved "https://registry.npmjs.org/d3-format/-/d3-format-1.4.3.tgz#4e8eb4dff3fdcb891a8489ec6e698601c41b96f1" + integrity sha512-mm/nE2Y9HgGyjP+rKIekeITVgBtX97o1nrvHCWX8F/yBYyevUTvu9vb5pUnKwrcSw7o7GuwMOWjS9gFDs4O+uQ== + +d3-geo-projection@~2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-2.1.2.tgz#7df8e1e9d046d631c6509f7e531357d4adc24aa3" + integrity sha1-ffjh6dBG1jHGUJ9+UxNX1K3CSqM= + dependencies: + commander "2" + d3-array "1" + d3-geo "^1.1.0" + +d3-geo@^1.1.0: + version "1.11.9" + resolved "https://registry.npmjs.org/d3-geo/-/d3-geo-1.11.9.tgz#77eaed14ba62fc2c0aef55cd2943849c866f7ae6" + integrity sha512-9edcH6J3s/Aa3KJITWqFJbyB/8q3mMlA9Fi7z6yy+FAYMnRaxmC7jBhUnsINxVWD14GmqX3DK8uk7nV6/Ekt4A== + dependencies: + d3-array "1" + +d3-geo@^1.11.9: + version "1.12.0" + resolved "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.0.tgz#58ddbdf4d9db5f199db69d1b7c93dca6454a6f24" + integrity sha512-NalZVW+6/SpbKcnl+BCO67m8gX+nGeJdo6oGL9H6BRUGUL1e+AtPcP4vE4TwCQ/gl8y5KE7QvBzrLn+HsKIl+w== + dependencies: + d3-array "1" + +d3-geo@~1.6.4: + version "1.6.4" + resolved "https://registry.npmjs.org/d3-geo/-/d3-geo-1.6.4.tgz#f20e1e461cb1845f5a8be55ab6f876542a7e3199" + integrity sha1-8g4eRhyxhF9ai+Vatvh2VCp+MZk= + dependencies: + d3-array "1" + +d3-hexjson@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/d3-hexjson/-/d3-hexjson-1.1.0.tgz#c7ec58afb7c46674f5e2dab63d55a42f90abee07" + integrity sha512-fHXGMnA1iYBg0Kw5jqSm9kZDRyw4Mq74AzJzUM/FiCDy9a47xM5qj2+ofTaZbeku9tHsRtoujolHiqmD3s3EHA== + dependencies: + d3-array "1" + +d3-hierarchy@^1.1.5: + version "1.1.9" + resolved "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz#2f6bee24caaea43f8dc37545fa01628559647a83" + integrity sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ== + +d3-interpolate@1: + version "1.4.0" + resolved "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987" + integrity sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA== + dependencies: + d3-color "1" + +d3-interpolate@~1.1.5: + version "1.1.6" + resolved "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz#2cf395ae2381804df08aa1bf766b7f97b5f68fb6" + integrity sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A== + dependencies: + d3-color "1" + +d3-path@1, d3-path@^1.0.9: + version "1.0.9" + resolved "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" + integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== + +d3-sankey@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.9.1.tgz#b850145a3284111636ddec90dfda8c64919bee4e" + integrity sha512-nnRkDaUMjBdeuGg+kWGdA+tjG1AVTnJ+Ykw7ff7CZHVI17Hm5sy8n0UXykVffn13aNHwK5wPOdOt1gS1ZEaF+A== + dependencies: + d3-array "1" + d3-collection "1" + d3-shape "^1.2.0" + +d3-selection@^1.0.2, d3-selection@^1.1.0: + version "1.4.1" + resolved "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.1.tgz#98eedbbe085fbda5bafa2f9e3f3a2f4d7d622a98" + integrity sha512-BTIbRjv/m5rcVTfBs4AMBLKs4x8XaaLkwm28KWu9S2vKNqXkXt2AH2Qf0sdPZHjFxcWg/YL53zcqAz+3g4/7PA== + +d3-shape@^1.2.0: + version "1.3.7" + resolved "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7" + integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw== + dependencies: + d3-path "1" + +d3-timer@1, d3-timer@~1.0.6: + version "1.0.10" + resolved "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz#dfe76b8a91748831b13b6d9c793ffbd508dd9de5" + integrity sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw== + +d3-transition@^1.0.1: + version "1.3.2" + resolved "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz#a98ef2151be8d8600543434c1ca80140ae23b398" + integrity sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA== + dependencies: + d3-color "1" + d3-dispatch "1" + d3-ease "1" + d3-interpolate "1" + d3-selection "^1.1.0" + d3-timer "1" + +d3-voronoi@^1.1.2: + version "1.1.4" + resolved "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz#dd3c78d7653d2bb359284ae478645d95944c8297" + integrity sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg== + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dagre@^0.8.2: + version "0.8.5" + resolved "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz#ba30b0055dac12b6c1fcc247817442777d06afee" + integrity sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw== + dependencies: + graphlib "^2.1.8" + lodash "^4.17.15" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +dayjs@^1.8.0: + version "1.8.21" + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.8.21.tgz#98299185b72b9b679f31c7ed987b63923c961552" + integrity sha512-1kbWK0hziklUHkGgiKr7xm59KwAg/K3Tp7H/8X+f58DnNCwY3pKYjOCJpIlVs125FRBukGVZdKZojC073D0IeQ== + +de-indent@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: + version "3.2.6" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-equal@^1.0.1, deep-equal@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deepmerge@^1.5.2: + version "1.5.2" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" + integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +default-gateway@^5.0.2: + version "5.0.5" + resolved "https://registry.npmjs.org/default-gateway/-/default-gateway-5.0.5.tgz#4fd6bd5d2855d39b34cc5a59505486e9aafc9b10" + integrity sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA== + dependencies: + execa "^3.3.0" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +defined@^1.0.0, defined@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + +del@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegate@^3.1.2: + version "3.2.0" + resolved "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + dependencies: + repeating "^2.0.0" + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^2.0.0, dir-glob@^2.2.2: + version "2.2.2" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== + dependencies: + path-type "^3.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-align@^1.10.4: + version "1.11.1" + resolved "https://registry.npmjs.org/dom-align/-/dom-align-1.11.1.tgz#7592be99a660a36cdedc1d6eeb22b8109d758cae" + integrity sha512-hN42DmUgtweBx0iBjDLO4WtKOMcK8yBmPx/fgdsgQadLuzPu/8co3oLdK5yMmeM/vnUd3yDyV6qV8/NzxBexQg== + +dom-closest@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/dom-closest/-/dom-closest-0.2.0.tgz#ebd9f91d1bf22e8d6f477876bbcd3ec90216c0cf" + integrity sha1-69n5HRvyLo1vR3h2u80+yQIWwM8= + dependencies: + dom-matches ">=1.0.1" + +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-matches@>=1.0.1: + version "2.0.0" + resolved "https://registry.npmjs.org/dom-matches/-/dom-matches-2.0.0.tgz#d2728b416a87533980eb089b848d253cf23a758c" + integrity sha1-0nKLQWqHUzmA6wibhI0lPPI6dYw= + +dom-scroll-into-view@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz#0decc8522801fd8d3f1c6ba355a74d382c5f989b" + integrity sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w== + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" + integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-case@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa" + integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA== + dependencies: + no-case "^3.0.3" + tslib "^1.10.0" + +dot-prop@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== + dependencies: + is-obj "^2.0.0" + +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" + integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== + +dotignore@~0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" + integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== + dependencies: + minimatch "^3.0.4" + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +easy-stack@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.0.tgz#12c91b3085a37f0baa336e9486eac4bf94e3e788" + integrity sha1-EskbMIWjfwuqM26UhurEv5Tj54g= + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +ejs@^2.6.1: + version "2.7.4" + resolved "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" + integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== + +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.363, electron-to-chromium@^1.3.47: + version "1.3.370" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.370.tgz#420fba483d30ba3f7965b30ecf850fdb5f08a0bc" + integrity sha512-399cXDE9C7qoVF2CUgCA/MLflfvxbo1F0kB/pkB94426freL/JgZ0HNaloomsOfnE+VC/qgTFZqzmivSdaNfPQ== + +elliptic@^6.0.0: + version "6.5.2" + resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^3.4.0: + version "3.4.1" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" + integrity sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24= + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.7" + +enhanced-resolve@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" + integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +enquire.js@^2.1.6: + version "2.1.6" + resolved "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz#3e8780c9b8b835084c3f60e166dbc3c2a3c89814" + integrity sha1-PoeAybi4NQhMP2DhZtvDwqPImBQ= + +entities@^1.1.1, entities@~1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" + integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== + +errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.0: + version "2.0.6" + resolved "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" + integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== + dependencies: + stackframe "^1.1.1" + +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: + version "1.17.4" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" + integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14: + version "0.10.53" + resolved "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA= + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE= + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +es6-weak-map@^2.0.1: + version "2.0.3" + resolved "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM= + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-config-standard@^12.0.0: + version "12.0.0" + resolved "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz#638b4c65db0bd5a41319f96bba1f15ddad2107d9" + integrity sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ== + +eslint-import-resolver-node@^0.3.2: + version "0.3.3" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404" + integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-loader@^2.1.2: + version "2.2.1" + resolved "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337" + integrity sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg== + dependencies: + loader-fs-cache "^1.0.0" + loader-utils "^1.0.2" + object-assign "^4.0.1" + object-hash "^1.1.4" + rimraf "^2.6.1" + +eslint-module-utils@^2.4.1: + version "2.5.2" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz#7878f7504824e1b857dd2505b59a8e5eda26a708" + integrity sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-es@^1.3.1: + version "1.4.1" + resolved "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz#12acae0f4953e76ba444bfd1b2271081ac620998" + integrity sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA== + dependencies: + eslint-utils "^1.4.2" + regexpp "^2.0.1" + +eslint-plugin-import@^2.14.0: + version "2.20.1" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz#802423196dcb11d9ce8435a5fc02a6d3b46939b3" + integrity sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw== + dependencies: + array-includes "^3.0.3" + array.prototype.flat "^1.2.1" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.4.1" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.0" + read-pkg-up "^2.0.0" + resolve "^1.12.0" + +eslint-plugin-node@^8.0.0: + version "8.0.1" + resolved "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz#55ae3560022863d141fa7a11799532340a685964" + integrity sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w== + dependencies: + eslint-plugin-es "^1.3.1" + eslint-utils "^1.3.1" + ignore "^5.0.2" + minimatch "^3.0.4" + resolve "^1.8.1" + semver "^5.5.0" + +eslint-plugin-promise@^4.0.1: + version "4.2.1" + resolved "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" + integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== + +eslint-plugin-standard@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz#ff0519f7ffaff114f76d1bd7c3996eef0f6e20b4" + integrity sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ== + +eslint-plugin-vue@^4.7.1: + version "4.7.1" + resolved "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz#c829b9fc62582c1897b5a0b94afd44ecca511e63" + integrity sha512-esETKhVMI7Vdli70Wt4bvAwnZBJeM0pxVX9Yb0wWKxdCJc2EADalVYK/q2FzMw8oKN0wPMdqVCKS8kmR89recA== + dependencies: + vue-eslint-parser "^2.0.3" + +eslint-plugin-vue@^5.1.0: + version "5.2.3" + resolved "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-5.2.3.tgz#3ee7597d823b5478804b2feba9863b1b74273961" + integrity sha512-mGwMqbbJf0+VvpGR5Lllq0PMxvTdrZ/ZPjmhkacrCHbubJeJOt+T6E3HUzAifa2Mxi7RSdJfC9HFpOeSYVMMIw== + dependencies: + vue-eslint-parser "^5.0.0" + +eslint-scope@^3.7.1: + version "3.7.3" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" + integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^4.0.0, eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.1, eslint-utils@^1.4.2: + version "1.4.3" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + +eslint@^4.19.1: + version "4.19.1" + resolved "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" + integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== + dependencies: + ajv "^5.3.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^3.1.0" + doctrine "^2.1.0" + eslint-scope "^3.7.1" + eslint-visitor-keys "^1.0.0" + espree "^3.5.4" + esquery "^1.0.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.0.1" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^3.0.6" + is-resolvable "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + regexpp "^1.0.1" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" + strip-json-comments "~2.0.1" + table "4.0.2" + text-table "~0.2.0" + +eslint@^5.16.0: + version "5.16.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" + integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.9.1" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^4.0.3" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^5.0.1" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^6.2.2" + js-yaml "^3.13.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.11" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^5.5.1" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^5.2.3" + text-table "^0.2.0" + +espree@^3.5.2, espree@^3.5.4: + version "3.5.4" + resolved "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" + integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== + dependencies: + acorn "^5.5.0" + acorn-jsx "^3.0.0" + +espree@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f" + integrity sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w== + dependencies: + acorn "^6.0.2" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + +espree@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" + integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== + dependencies: + acorn "^6.0.7" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + +esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.0, esquery@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz#c5c0b66f383e7656404f86b31334d72524eddb48" + integrity sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q== + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +"eve@git://github.com/adobe-webplatform/eve.git#eef80ed": + version "0.4.1" + resolved "git://github.com/adobe-webplatform/eve.git#eef80ed8d188423c2272746fb8ae5cc8dad84cb1" + +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= + dependencies: + d "1" + es5-ext "~0.10.14" + +event-pubsub@4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e" + integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ== + +eventemitter3@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" + integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== + +events@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== + +eventsource@0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + integrity sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI= + dependencies: + original ">=0.0.5" + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^3.3.0: + version "3.4.0" + resolved "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +express@^4.16.2, express@^4.16.3, express@^4.17.1: + version "4.17.1" + resolved "https://registry.npmjs.org/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^2.0.4: + version "2.2.0" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extract-text-webpack-plugin@^3.0.1: + version "3.0.2" + resolved "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7" + integrity sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ== + dependencies: + async "^2.4.1" + loader-utils "^1.1.0" + schema-utils "^0.3.0" + webpack-sources "^1.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= + +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + +fast-glob@^2.2.6: + version "2.2.7" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastparse@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.0, faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + +fecha@~2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd" + integrity sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg== + +figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +file-loader@^1.1.4: + version "1.1.11" + resolved "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" + integrity sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg== + dependencies: + loader-utils "^1.0.2" + schema-utils "^0.4.5" + +file-loader@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa" + integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw== + dependencies: + loader-utils "^1.0.2" + schema-utils "^1.0.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filesize@^3.6.1: + version "3.6.1" + resolved "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-babel-config@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" + integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA== + dependencies: + json5 "^0.5.1" + path-exists "^3.0.0" + +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + +find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.0.0: + version "3.3.1" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat-cache@^1.2.1: + version "1.3.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" + integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== + dependencies: + circular-json "^0.3.1" + graceful-fs "^4.1.2" + rimraf "~2.6.2" + write "^0.2.1" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" + integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== + +flatten@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +fmin@0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/fmin/-/fmin-0.0.2.tgz#59bbb40d43ffdc1c94cd00a568c41f95f1973017" + integrity sha1-Wbu0DUP/3ByUzQClaMQflfGXMBc= + dependencies: + contour_plot "^0.0.1" + json2module "^0.0.3" + rollup "^0.25.8" + tape "^4.5.1" + uglify-js "^2.6.2" + +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + +follow-redirects@^1.0.0: + version "1.10.0" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.10.0.tgz#01f5263aee921c6a54fb91667f08f4155ce169eb" + integrity sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ== + dependencies: + debug "^3.0.0" + +for-each@~0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.11" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3" + integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +function-bind@^1.1.1, function-bind@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.6: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.0.1, globals@^11.1.0, globals@^11.7.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globby@^9.2.0: + version "9.2.0" + resolved "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" + integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^1.0.2" + dir-glob "^2.2.2" + fast-glob "^2.2.6" + glob "^7.1.3" + ignore "^4.0.3" + pify "^4.0.1" + slash "^2.0.0" + +good-listener@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= + dependencies: + delegate "^3.1.2" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.2: + version "4.2.3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + +graphlib@^2.1.8: + version "2.1.8" + resolved "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz#5761d414737870084c92ec7b5dbcb0592c9d35da" + integrity sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A== + dependencies: + lodash "^4.17.15" + +gzip-size@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + +handle-thing@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" + integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.3" + resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.1, has@^1.0.3, has@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash-sum@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" + integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.2.x, he@^1.1.0, he@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +highlight.js@^9.12.0, highlight.js@^9.6.0: + version "9.18.1" + resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.1.tgz#ed21aa001fe6252bb10a3d76d47573c6539fe13c" + integrity sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg== + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hoopy@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" + integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + +html-entities@^1.2.0, html-entities@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" + integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= + +html-minifier-terser@^5.0.1: + version "5.0.4" + resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.0.4.tgz#e8cc02748acb983bd7912ea9660bd31c0702ec32" + integrity sha512-fHwmKQ+GzhlqdxEtwrqLT7MSuheiA+rif5/dZgbz3GjoMXJzcRzy1L9NXoiiyxrnap+q5guSiv8Tz5lrh9g42g== + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + +html-minifier@^3.2.3: + version "3.5.21" + resolved "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" + integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== + dependencies: + camel-case "3.0.x" + clean-css "4.2.x" + commander "2.17.x" + he "1.2.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.4.x" + +html-tags@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" + integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos= + +html-webpack-plugin@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" + integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= + dependencies: + html-minifier "^3.2.3" + loader-utils "^0.2.16" + lodash "^4.17.3" + pretty-error "^2.0.2" + tapable "^1.0.0" + toposort "^1.0.0" + util.promisify "1.0.0" + +html-webpack-plugin@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.2.0.tgz#ea46f15b620d4c1c8c73ea399395c81208e9f823" + integrity sha512-zL7LYTuq/fcJX6vV6tmmvFR508Bd9e6kvVGbS76YAjZ2CPVRzsjkvDYs/SshPevpolSdTWgaDV39D6k6oQoVFw== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + "@types/tapable" "^1.0.5" + "@types/webpack" "^4.41.8" + html-minifier-terser "^5.0.1" + loader-utils "^1.2.3" + lodash "^4.17.15" + pretty-error "^2.1.1" + tapable "^1.1.3" + util.promisify "1.0.0" + +htmlparser2@^3.3.0: + version "3.10.1" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +"http-parser-js@>=0.4.0 <0.4.11": + version "0.4.10" + resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" + integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= + +http-proxy-middleware@0.19.1, http-proxy-middleware@^0.19.1: + version "0.19.1" + resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.0" + resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" + integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= + +icss-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" + integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI= + dependencies: + postcss "^6.0.1" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore@^3.3.3, ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +ignore@^4.0.3, ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.0.2: + version "5.1.4" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" + integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== + +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0: + version "3.2.1" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ== + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inquirer@^3.0.6: + version "3.3.0" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +inquirer@^6.2.2: + version "6.5.2" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +internal-ip@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" + integrity sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w= + dependencies: + meow "^3.3.0" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +interpret@^1.0.0: + version "1.2.0" + resolved "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + +intersperse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/intersperse/-/intersperse-1.0.0.tgz#f2561fb1cfef9f5277cc3347a22886b4351a5181" + integrity sha1-8lYfsc/vn1J3zDNHoiiGtDUaUYE= + +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5, is-buffer@~1.1.1: + version "1.1.6" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@^2.0.2: + version "2.0.4" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" + integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-mobile@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/is-mobile/-/is-mobile-2.2.1.tgz#10f2320012c410cc285feecb13406bd586f1b2f8" + integrity sha512-6zELsfVFr326eq2CI53yvqq6YBanOxKBybwDT+MbMS2laBnK6Ez8m5XHSuTQQbnKRfpDzCod1CMWW5q3wZYMvA== + +is-negative-zero@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" + integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-regex@^1.0.4, is-regex@^1.0.5, is-regex@~1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + dependencies: + has "^1.0.3" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + +is-svg@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk= + dependencies: + html-comment-regex "^1.1.0" + +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" + integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isarray@~0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +ismobilejs@^1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/ismobilejs/-/ismobilejs-1.0.3.tgz#69ec3faccd17dfeeadd471e70955d1e192a46eb6" + integrity sha512-6rTcdWK7PHIWPYlCPdTbU9eE9yzdnIQSpiH+8Ln5OqugpEszQK5KHlsjZrDae26fEhki9rPvQmsjI1q4CLuKIA== + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +javascript-stringify@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" + integrity sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM= + +jquery@^3.3.1: + version "3.4.1" + resolved "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2" + integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw== + +js-base64@^2.1.9: + version "2.5.2" + resolved "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz#313b6274dda718f714d00b3330bbae6e38e90209" + integrity sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ== + +js-cookie@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" + integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== + +js-levenshtein@^1.1.3: + version "1.1.6" + resolved "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + +js-message@1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz#2300d24b1af08e89dd095bc1a4c9c9cfcb892d15" + integrity sha1-IwDSSxrwjondCVvBpMnJz8uJLRU= + +js-queue@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/js-queue/-/js-queue-2.0.0.tgz#362213cf860f468f0125fc6c96abc1742531f948" + integrity sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug= + dependencies: + easy-stack "^1.0.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.4.3, js-yaml@^3.9.1: + version "3.13.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@~3.7.0: + version "3.7.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A= + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-loader@^0.5.4: + version "0.5.7" + resolved "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json2module@^0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/json2module/-/json2module-0.0.3.tgz#00fb5f4a9b7adfc3f0647c29cb17bcd1979be9b2" + integrity sha1-APtfSpt638PwZHwpyxe80Zeb6bI= + dependencies: + rw "^1.3.2" + +json2mq@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a" + integrity sha1-tje9O6nqvhIsg+lyBIOusQ0skEo= + dependencies: + string-convert "^0.2.0" + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^0.5.0, json5@^0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" + integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== + dependencies: + minimist "^1.2.0" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +killable@^1.0.0, killable@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +launch-editor-middleware@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz#e14b07e6c7154b0a4b86a0fd345784e45804c157" + integrity sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg== + dependencies: + launch-editor "^2.2.1" + +launch-editor@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz#871b5a3ee39d6680fcc26d37930b6eeda89db0ca" + integrity sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw== + dependencies: + chalk "^2.3.0" + shell-quote "^1.6.1" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +less-loader@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz#2c1352c5b09a4f84101490274fd51674de41363e" + integrity sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg== + dependencies: + clone "^2.1.1" + loader-utils "^1.1.0" + pify "^3.0.0" + +less@^3.9.0: + version "3.11.1" + resolved "https://registry.npmjs.org/less/-/less-3.11.1.tgz#c6bf08e39e02404fe6b307a3dfffafdc55bd36e2" + integrity sha512-tlWX341RECuTOvoDIvtFqXsKj072hm3+9ymRBe76/mD6O5ZZecnlAOVDlWAleF2+aohFrxNidXhv2773f6kY7g== + dependencies: + clone "^2.1.2" + tslib "^1.10.0" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + mime "^1.4.1" + mkdirp "^0.5.0" + promise "^7.1.1" + request "^2.83.0" + source-map "~0.6.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +linkify-it@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" + integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw== + dependencies: + uc.micro "^1.0.1" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-fs-cache@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz#54cedf6b727e1779fd8f01205f05f6e88706f086" + integrity sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw== + dependencies: + find-cache-dir "^0.1.1" + mkdirp "0.5.1" + +loader-runner@^2.3.0, loader-runner@^2.3.1, loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^0.2.11, loader-utils@^0.2.16: + version "0.2.17" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: + version "1.4.0" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + integrity sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4= + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY= + +lodash._bindcallback@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= + +lodash._createassigner@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" + integrity sha1-g4pbri/aymOsIt7o4Z+k5taXCxE= + dependencies: + lodash._bindcallback "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash.restparam "^3.0.0" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= + +lodash.assign@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" + integrity sha1-POnwI0tLIiPilrj6CsH+6OvKZPo= + dependencies: + lodash._baseassign "^3.0.0" + lodash._createassigner "^3.0.0" + lodash.keys "^3.0.0" + +lodash.assign@^4.0.1: + version "4.2.0" + resolved "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + +lodash.defaults@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c" + integrity sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw= + dependencies: + lodash.assign "^3.0.0" + lodash.restparam "^3.0.0" + +lodash.defaults@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + +lodash.defaultsdeep@^4.6.1: + version "4.6.1" + resolved "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" + integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== + +lodash.find@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" + integrity sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E= + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= + +lodash.kebabcase@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.mapvalues@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" + integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.pick@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= + +lodash.toarray@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" + integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= + +lodash.transform@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz#12306422f63324aed8483d3f38332b5f670547a0" + integrity sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0: + version "4.17.15" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +loglevel@^1.4.1, loglevel@^1.6.6: + version "1.6.7" + resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.6.7.tgz#b3e034233188c68b889f5b862415306f565e2c56" + integrity sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A== + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= + +lower-case@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" + integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== + dependencies: + tslib "^1.10.0" + +lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2: + version "4.1.5" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +markdown-it@^9.0.0: + version "9.1.0" + resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-9.1.0.tgz#df9601c168568704d554b1fff9af0c5b561168d9" + integrity sha512-xHKG4C8iPriyfu/jc2hsCC045fKrMQ0VexX2F1FGYiRxDxqMB2aAhF8WauJ3fltn2kb90moGBkiiEdooGIg55w== + dependencies: + argparse "^1.0.7" + entities "~1.1.1" + linkify-it "^2.0.0" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +math-expression-evaluator@^1.2.14: + version "1.2.22" + resolved "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.22.tgz#c14dcb3d8b4d150e5dcea9c68c8dad80309b0d5e" + integrity sha512-L0j0tFVZBQQLeEjmWOvDLoRciIY8gQGWahvkztXUal8jH8R5Rlqo9GCvgqvXcy9LQhEWdQCVvzqAbxgYNt4blQ== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +md5@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" + integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk= + dependencies: + charenc "~0.0.1" + crypt "~0.0.1" + is-buffer "~1.1.1" + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= + dependencies: + mimic-fn "^1.0.0" + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-source-map@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== + dependencies: + source-map "^0.6.1" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.2.3: + version "1.3.0" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" + integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": + version "1.43.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.26" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== + dependencies: + mime-db "1.43.0" + +mime@1.6.0, mime@^1.4.1, mime@^1.5.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.0.3, mime@^2.4.4: + version "2.4.4" + resolved "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.0.0, mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mini-css-extract-plugin@^0.8.0: + version "0.8.2" + resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz#a875e169beb27c88af77dd962771c9eedc3da161" + integrity sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz#3dcb6bb4a546e32969c7ad710f2c79a86abba93a" + integrity sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" + integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w== + dependencies: + yallist "^4.0.0" + +mississippi@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" + integrity sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^2.0.1" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +moment@^2.21.0: + version "2.24.0" + resolved "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" + integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +mutationobserver-shim@^0.3.2: + version "0.3.3" + resolved "https://registry.npmjs.org/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz#65869630bc89d7bf8c9cd9cb82188cd955aacd2b" + integrity sha512-gciOLNN8Vsf7YzcqRjKzlAJ6y7e+B86u7i3KXes0xfxx/nfLmozlW1Vn+Sc9x3tPIePFgc1AeIFhtRgkqTjzDQ== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.12.1: + version "2.14.0" + resolved "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: + version "2.6.1" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + +no-case@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" + integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw== + dependencies: + lower-case "^2.0.1" + tslib "^1.10.0" + +node-emoji@^1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" + integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== + dependencies: + lodash.toarray "^4.4.0" + +node-forge@0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" + integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== + +node-ipc@^9.1.1: + version "9.1.1" + resolved "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.1.tgz#4e245ed6938e65100e595ebc5dc34b16e8dd5d69" + integrity sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w== + dependencies: + event-pubsub "4.3.0" + js-message "1.0.5" + js-queue "2.0.0" + +node-libs-browser@^2.0.0, node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-releases@^1.1.50: + version "1.1.50" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.50.tgz#803c40d2c45db172d0410e4efec83aa8c6ad0592" + integrity sha512-lgAmPv9eYZ0bGwUYAKlr8MG6K4CvWliWqnkcT2P8mMAgVrH3lqfBPorFlxiG1pHQnqmavJZ9vbMXUTNyMLbrgQ== + dependencies: + semver "^6.3.0" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k= + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@1.9.1, normalize-url@^1.4.0: + version "1.9.1" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + integrity sha1-y480xTIT2JVyP8urkH6UIq28r7E= + +nth-check@^1.0.2, nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@4.x, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-hash@^1.1.4: + version "1.3.1" + resolved "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" + integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== + +object-inspect@^1.7.0, object-inspect@~1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-is@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" + integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-path@^0.9.2: + version "0.9.2" + resolved "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz#0fd9a74fc5fad1ae3968b586bda5c632bd6c05a5" + integrity sha1-D9mnT8X60a45aLWGvaXGMr1sBaU= + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +omit.js@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/omit.js/-/omit.js-1.0.2.tgz#91a14f0eba84066dfa015bf30e474c47f30bc858" + integrity sha512-/QPc6G2NS+8d4L/cQhbk6Yit1WTB6Us2g84A7A/1+w9d/eRGHyEqC5kkQtHVoHZ5NFWGG7tUGgrhVZwgZanKrQ== + dependencies: + babel-runtime "^6.23.0" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + +open@^6.3.0: + version "6.4.0" + resolved "https://registry.npmjs.org/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" + integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== + dependencies: + is-wsl "^1.1.0" + +opener@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" + integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== + +opn@^5.1.0, opn@^5.5.0: + version "5.5.0" + resolved "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optionator@^0.8.2: + version "0.8.3" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +ora@^3.4.0: + version "3.4.0" + resolved "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" + integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== + dependencies: + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-spinners "^2.0.0" + log-symbols "^2.2.0" + strip-ansi "^5.2.0" + wcwidth "^1.0.1" + +original@>=0.0.5, original@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0, os-homedir@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= + dependencies: + lcid "^1.0.0" + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^1.0.0, p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.2.2" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@2.1.x: + version "2.1.1" + resolved "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= + dependencies: + no-case "^2.2.0" + +param-case@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238" + integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA== + dependencies: + dot-case "^3.0.3" + tslib "^1.10.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0: + version "5.1.5" + resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" + integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + lines-and-columns "^1.1.6" + +parse-svg-path@~0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb" + integrity sha1-en7A0esG+lMlx9PgCbhZoJtdSes= + +parse5-htmlparser2-tree-adapter@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz#e8c743d4e92194d5293ecde2b08be31e67461cbc" + integrity sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw== + dependencies: + parse5 "^5.1.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f" + integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA== + dependencies: + no-case "^3.0.3" + tslib "^1.10.0" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +photoswipe@^4.1.2: + version "4.1.3" + resolved "https://registry.npmjs.org/photoswipe/-/photoswipe-4.1.3.tgz#59f49494eeb9ddab5888d03392926a19bc197550" + integrity sha512-89Z43IRUyw7ycTolo+AaiDn3W1EEIfox54hERmm9bI12IB9cvRfHSHez3XhAyU8XW2EAFrC+2sKMhh7SJwn0bA== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= + dependencies: + find-up "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + +plantuml-encoder@^1.2.5: + version "1.4.0" + resolved "https://registry.npmjs.org/plantuml-encoder/-/plantuml-encoder-1.4.0.tgz#7899302cf785de956bf1a167e15420feee5975f7" + integrity sha512-sxMwpDw/ySY1WB2CE3+IdMuEcWibJ72DDOsXLkSmEaSzwEUaYBT6DWgOfBiHGCux4q433X6+OEFWjlVqp7gL6g== + +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== + +point-at-length@^1.0.2: + version "1.1.0" + resolved "https://registry.npmjs.org/point-at-length/-/point-at-length-1.1.0.tgz#0ad72ebd0980d7f5a1ab12296c055f9eb6b30e57" + integrity sha1-CtcuvQmA1/WhqxIpbAVfnrazDlc= + dependencies: + abs-svg-path "~0.1.1" + isarray "~0.0.1" + parse-svg-path "~0.1.1" + +portfinder@^1.0.20, portfinder@^1.0.25, portfinder@^1.0.9: + version "1.0.25" + resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" + integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.1" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-calc@^5.2.0: + version "5.3.1" + resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14= + dependencies: + postcss "^5.0.2" + postcss-message-helpers "^2.0.0" + reduce-css-calc "^1.2.6" + +postcss-calc@^7.0.1: + version "7.0.2" + resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz#504efcd008ca0273120568b0792b16cdcde8aac1" + integrity sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-colormin@^2.1.8: + version "2.2.2" + resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks= + dependencies: + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^2.3.4: + version "2.6.1" + resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0= + dependencies: + postcss "^5.0.11" + postcss-value-parser "^3.1.2" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-discard-comments@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0= + dependencies: + postcss "^5.0.14" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^2.0.1: + version "2.1.0" + resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + integrity sha1-uavye4isGIFYpesSq8riAmO5GTI= + dependencies: + postcss "^5.0.4" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^2.0.1: + version "2.1.0" + resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU= + dependencies: + postcss "^5.0.14" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + integrity sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg= + dependencies: + postcss "^5.0.16" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-discard-unused@^2.2.1: + version "2.2.3" + resolved "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM= + dependencies: + postcss "^5.0.14" + uniqs "^2.0.0" + +postcss-filter-plugins@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" + integrity sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ== + dependencies: + postcss "^5.0.4" + +postcss-load-config@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" + integrity sha1-U56a/J3chiASHr+djDZz4M5Q0oo= + dependencies: + cosmiconfig "^2.1.0" + object-assign "^4.1.0" + postcss-load-options "^1.2.0" + postcss-load-plugins "^2.3.0" + +postcss-load-config@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" + integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-load-options@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" + integrity sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw= + dependencies: + cosmiconfig "^2.1.0" + object-assign "^4.1.0" + +postcss-load-plugins@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" + integrity sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI= + dependencies: + cosmiconfig "^2.1.1" + object-assign "^4.1.0" + +postcss-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-merge-idents@^2.1.5: + version "2.1.7" + resolved "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + integrity sha1-TFUwMTwI4dWzu/PSu8dH4njuonA= + dependencies: + has "^1.0.1" + postcss "^5.0.10" + postcss-value-parser "^3.1.1" + +postcss-merge-longhand@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + integrity sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg= + dependencies: + postcss "^5.0.4" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^2.0.3: + version "2.1.2" + resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + integrity sha1-0d9d+qexrMO+VT8OnhDofGG19yE= + dependencies: + browserslist "^1.5.2" + caniuse-api "^1.5.2" + postcss "^5.0.4" + postcss-selector-parser "^2.2.2" + vendors "^1.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-message-helpers@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + integrity sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4= + +postcss-minify-font-values@^1.0.2: + version "1.0.5" + resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + integrity sha1-S1jttWZB66fIR0qzUmyv17vey2k= + dependencies: + object-assign "^4.0.1" + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^1.0.1: + version "1.0.5" + resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + integrity sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE= + dependencies: + postcss "^5.0.12" + postcss-value-parser "^3.3.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^1.0.4: + version "1.2.2" + resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + integrity sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM= + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.2" + postcss-value-parser "^3.0.2" + uniqs "^2.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^2.0.4: + version "2.1.1" + resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + integrity sha1-ssapjAByz5G5MtGkllCBFDEXNb8= + dependencies: + alphanum-sort "^1.0.2" + has "^1.0.1" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^1.2.0: + version "1.2.1" + resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" + integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw== + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-normalize-charset@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + integrity sha1-757nEhLX/nWceO0WL2HtYrXLk/E= + dependencies: + postcss "^5.0.5" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^3.0.7: + version "3.0.8" + resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + integrity sha1-EI90s/L82viRov+j6kWSJ5/HgiI= + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^1.4.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^2.1.0: + version "2.2.3" + resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + integrity sha1-7sbCpntsQSqNsgQud/6NpD+VwR0= + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.1" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-reduce-idents@^2.2.2: + version "2.4.0" + resolved "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + integrity sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM= + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-reduce-initial@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + integrity sha1-aPgGlfBF0IJjqHmtJA343WT2ROo= + dependencies: + postcss "^5.0.4" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + integrity sha1-/3b02CEkN7McKYpC0uFEQCV3GuE= + dependencies: + has "^1.0.1" + postcss "^5.0.8" + postcss-value-parser "^3.0.1" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-safe-parser@^1.0.1: + version "1.0.7" + resolved "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-1.0.7.tgz#43bd0c8c84d5f7d8474de825c699e4dabcac72a8" + integrity sha1-Q70MjITV99hHTeglxpnk2ryscqg= + dependencies: + postcss "^5.0.18" + +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: + version "2.2.3" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A= + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^2.1.1: + version "2.1.6" + resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + integrity sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0= + dependencies: + is-svg "^2.0.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + svgo "^0.7.0" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + integrity sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0= + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0, postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.1" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.2: + version "4.0.3" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz#651ff4593aa9eda8d5d0d66593a2417aeaeb325d" + integrity sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg== + +postcss-zindex@^2.0.1: + version "2.2.0" + resolved "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + integrity sha1-0hCd3AVbka9n/EyzsCWUZjnSryI= + dependencies: + has "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.18, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: + version "5.2.18" + resolved "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^6.0.1, postcss@^6.0.23, postcss@^6.0.8: + version "6.0.23" + resolved "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.27: + version "7.0.27" + resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9" + integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prettier@^1.18.2, prettier@^1.7.0: + version "1.19.1" + resolved "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + +pretty-error@^2.0.2, pretty-error@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= + dependencies: + renderkid "^2.0.1" + utila "~0.4" + +private@^0.1.6, private@^0.1.8: + version "0.1.8" + resolved "https://registry.npmjs.org/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.7.0" + resolved "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" + integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0, pump@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + +raf@^3.4.0: + version "3.4.1" + resolved "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.0.3, range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +"raphael@https://github.com/nhn/raphael.git#2.2.0-c": + version "2.2.0-c" + resolved "https://github.com/nhn/raphael.git#78a6ed3ec269f33b6457b0ec66f8c3d1f2ed70e0" + dependencies: + eve "git://github.com/adobe-webplatform/eve.git#eef80ed" + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.1.1: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +reduce-css-calc@^1.2.6: + version "1.3.0" + resolved "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY= + dependencies: + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" + +reduce-function-call@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz#60350f7fb252c0a67eb10fd4694d16909971300f" + integrity sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ== + dependencies: + balanced-match "^1.0.0" + +regenerate-unicode-properties@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" + integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.2.1, regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.4: + version "0.13.4" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.4.tgz#e96bf612a3362d12bb69f7e8f74ffeab25c7ac91" + integrity sha512-plpwicqEzfEyTQohIKktWigcLzmNStMGwbOUbykx51/29Z3JOGYldaaNGK7ngNXV+UcoqvIMmloZ48Sr74sd+g== + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regenerator-transform@^0.14.2: + version "0.14.2" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.2.tgz#949d9d87468ff88d5a7e4734ebb994a892de1ff2" + integrity sha512-V4+lGplCM/ikqi5/mkkpJ06e9Bujq1NFmNLvsCs56zg3ZbzrnUzAtizZ24TXxtRX/W2jcdScwQCnbL0CICTFkQ== + dependencies: + "@babel/runtime" "^7.8.4" + private "^0.1.8" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regex-parser@^2.2.9: + version "2.2.10" + resolved "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz#9e66a8f73d89a107616e63b39d4deddfee912b37" + integrity sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA== + +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexpp@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" + integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.1.0" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + +regjsgen@^0.5.0: + version "0.5.1" + resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + dependencies: + jsesc "~0.5.0" + +regjsparser@^0.6.0: + version "0.6.3" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.3.tgz#74192c5805d35e9f5ebe3c1fb5b40d40a8a38460" + integrity sha512-8uZvYbnfAtEm9Ab8NTb3hdLwL4g/LQzEYP7Xs27T96abJCCE2d6r3cPZPQEsLKy0vRSGVNG+/zVGtLr86HQduA== + dependencies: + jsesc "~0.5.0" + +regression@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/regression/-/regression-2.0.1.tgz#8d29c3e8224a10850c35e337e85a8b2fac3b0c87" + integrity sha1-jSnD6CJKEIUMNeM36FqLL6w7DIc= + +relateurl@0.2.x, relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.1: + version "2.0.3" + resolved "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" + integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== + dependencies: + css-select "^1.1.0" + dom-converter "^0.2" + htmlparser2 "^3.3.0" + strip-ansi "^3.0.0" + utila "^0.4.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.5.2, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +request-promise-core@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" + integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== + dependencies: + lodash "^4.17.15" + +request-promise-native@^1.0.7: + version "1.0.8" + resolved "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" + integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== + dependencies: + request-promise-core "1.1.3" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.83.0, request@^2.87.0: + version "2.88.2" + resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + integrity sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +require-uncached@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +reselect@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" + integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc= + +resize-observer-polyfill@^1.5.0, resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-url-loader@^2.1.1: + version "2.3.2" + resolved "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-2.3.2.tgz#83bb9ebc392b66c563795eef22f078970357a26e" + integrity sha512-sc/UVgiADdoTc+4cGPB7cUCnlEkzlxD1NXHw4oa9qA0fp30H8mAQ2ePJBP9MQ029DUuhEPouhNdvzT37pBCV0g== + dependencies: + adjust-sourcemap-loader "^1.1.0" + camelcase "^4.1.0" + convert-source-map "^1.5.1" + loader-utils "^1.1.0" + lodash.defaults "^4.0.0" + rework "^1.0.1" + rework-visit "^1.0.0" + source-map "^0.5.7" + urix "^0.1.0" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.8.1, resolve@~1.15.1: + version "1.15.1" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +resumer@~0.0.0: + version "0.0.0" + resolved "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" + integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= + dependencies: + through "~2.3.4" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +rework-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" + integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo= + +rework@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" + integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc= + dependencies: + convert-source-map "^0.3.3" + css "^2.0.0" + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= + dependencies: + align-text "^0.1.1" + +rimraf@2.6.3, rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: + version "2.7.1" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rollup@^0.25.8: + version "0.25.8" + resolved "https://registry.npmjs.org/rollup/-/rollup-0.25.8.tgz#bf6ce83b87510d163446eeaa577ed6a6fc5835e0" + integrity sha1-v2zoO4dRDRY0Ru6qV37WpvxYNeA= + dependencies: + chalk "^1.1.1" + minimist "^1.2.0" + source-map-support "^0.3.2" + +run-async@^2.2.0: + version "2.4.0" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" + integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== + dependencies: + is-promise "^2.1.0" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rw@1, rw@^1.3.2: + version "1.3.3" + resolved "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= + +rxjs@^6.4.0: + version "6.5.4" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" + integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@~1.2.1, sax@~1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +schema-utils@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" + integrity sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8= + dependencies: + ajv "^5.0.0" + +schema-utils@^0.4.5: + version "0.4.7" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" + integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.6.1: + version "2.6.6" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz#299fe6bd4a3365dc23d99fd446caff8f1d6c330c" + integrity sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA== + dependencies: + ajv "^6.12.0" + ajv-keywords "^3.4.1" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +select@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= + +selfsigned@^1.10.7, selfsigned@^1.9.1: + version "1.10.7" + resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" + integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== + dependencies: + node-forge "0.9.0" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.npmjs.org/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^1.4.0: + version "1.9.1" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" + integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== + +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-equal@^1.0.0: + version "1.2.1" + resolved "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da" + integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA== + +shallowequal@^1.0.2: + version "1.1.0" + resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.6.1: + version "1.7.2" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +simple-statistics@^6.1.0: + version "6.1.1" + resolved "https://registry.npmjs.org/simple-statistics/-/simple-statistics-6.1.1.tgz#e3a0799ffc49914d6f421c5a4ac585f6a13e2bad" + integrity sha512-zGwn0DDRa9Zel4H4n2pjTFIyGoAGpnpjrGIctreCxj5XWrcx9v7Xy7270FkC967WMmcvuc8ZU7m0ZG+hGN7gAA== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== + dependencies: + is-fullwidth-code-point "^2.0.0" + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.5.tgz#1bb7c0f7222c40f42adf14f4442cbd1269771a83" + integrity sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM= + dependencies: + debug "^2.6.6" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.8" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.19: + version "0.3.19" + resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" + integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.0.1" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +sortablejs@^1.10.1: + version "1.10.2" + resolved "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.2.tgz#6e40364d913f98b85a14f6678f92b5c1221f5290" + integrity sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A== + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: + version "0.5.3" + resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.3.2: + version "0.3.3" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.3.3.tgz#34900977d5ba3f07c7757ee72e73bb1a9b53754f" + integrity sha1-NJAJd9W6PwfHdX7nLnO7GptTdU8= + dependencies: + source-map "0.1.32" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-support@~0.5.12: + version "0.5.16" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@0.1.32: + version "0.1.32" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz#c8b6c167797ba4740a8ea33252162ff08591b266" + integrity sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY= + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.0, spdy@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz#6f12ed1c5db7ea4f24ebb8b89ba58c87c08257f2" + integrity sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +"squire-rte@github:seonim-ryu/Squire#fd40b4e3020845825701e9689f190bab3f4775d4": + version "1.9.0" + resolved "https://codeload.github.com/seonim-ryu/Squire/tar.gz/fd40b4e3020845825701e9689f190bab3f4775d4" + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^5.2.4: + version "5.3.0" + resolved "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" + integrity sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ== + dependencies: + safe-buffer "^5.1.1" + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +ssri@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz#92c241bf6de82365b5c7fb4bd76e975522e1294d" + integrity sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g== + dependencies: + figgy-pudding "^3.5.1" + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stackframe@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.1.1.tgz#ffef0a3318b1b60c3b58564989aca5660729ec71" + integrity sha512-0PlYhdKh6AfFxRyK/v+6/k+/mMfyiEBbTM5L94D0ZytQnJ166wuwoTYLHFWGbs2dpA8Rgq763KGWmN1EQEYHRQ== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-convert@^0.2.0: + version "0.2.1" + resolved "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" + integrity sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c= + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.padend@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3" + integrity sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +string.prototype.padstart@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.0.tgz#b47c087540d0710be5a49375751a0a627bd4ff90" + integrity sha512-envqZvUp2JItI+OeQ5UAh1ihbAV5G/2bixTojvlIa090GGqF+NQRxbWb2nv9fTGrZABv6+pE6jXoAZhhS2k4Hw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +string.prototype.trim@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz#141233dff32c82bfad80684d7e5f0869ee0fb782" + integrity sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + +string.prototype.trimleft@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" + integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" + integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +style-loader@^0.19.0: + version "0.19.1" + resolved "https://registry.npmjs.org/style-loader/-/style-loader-0.19.1.tgz#591ffc80bcefe268b77c5d9ebc0505d772619f85" + integrity sha512-IRE+ijgojrygQi3rsqT0U4dd+UcPCqcVvauZpCnQrGAlEe+FUIyrK93bUDScamesjP08JlQNsFJU+KmPedP5Og== + dependencies: + loader-utils "^1.0.2" + schema-utils "^0.3.0" + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +supports-color@^4.2.1: + version "4.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= + dependencies: + has-flag "^2.0.0" + +supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= + +svgo@^0.7.0: + version "0.7.2" + resolved "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + integrity sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U= + dependencies: + coa "~1.0.1" + colors "~1.1.2" + csso "~2.3.1" + js-yaml "~3.7.0" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" + +svgo@^1.0.0: + version "1.3.2" + resolved "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +table@4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== + dependencies: + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.npmjs.org/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +tapable@^0.2.7: + version "0.2.9" + resolved "https://registry.npmjs.org/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" + integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A== + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tape@^4.5.1: + version "4.13.2" + resolved "https://registry.npmjs.org/tape/-/tape-4.13.2.tgz#eb419b9d9bc004025b1a81a5b63093e07f425629" + integrity sha512-waWwC/OqYVE9TS6r1IynlP2sEdk4Lfo6jazlgkuNkPTHIbuG2BTABIaKdlQWwPeB6Oo4ksZ1j33Yt0NTOAlYMQ== + dependencies: + deep-equal "~1.1.1" + defined "~1.0.0" + dotignore "~0.1.2" + for-each "~0.3.3" + function-bind "~1.1.1" + glob "~7.1.6" + has "~1.0.3" + inherits "~2.0.4" + is-regex "~1.0.5" + minimist "~1.2.0" + object-inspect "~1.7.0" + resolve "~1.15.1" + resumer "~0.0.0" + string.prototype.trim "~1.2.1" + through "~2.3.8" + +terser-webpack-plugin@^1.2.3, terser-webpack-plugin@^1.4.3: + version "1.4.3" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" + integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^2.1.2" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2, terser@^4.6.3: + version "4.6.6" + resolved "https://registry.npmjs.org/terser/-/terser-4.6.6.tgz#da2382e6cafbdf86205e82fb9a115bd664d54863" + integrity sha512-4lYPyeNmstjIIESr/ysHg2vUPRGf2tzF9z2yYwnowXVuVzLEamPN1Gfrz7f8I9uEPuHcbFlW4PLIAsJoxXyJ1g== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +text-table@^0.2.0, text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.0" + resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" + integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk= + dependencies: + any-promise "^1.0.0" + +thread-loader@^2.1.2: + version "2.1.3" + resolved "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.3.tgz#cbd2c139fc2b2de6e9d28f62286ab770c1acbdda" + integrity sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg== + dependencies: + loader-runner "^2.3.1" + loader-utils "^1.1.0" + neo-async "^2.6.0" + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6, through@~2.3.4, through@~2.3.8: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +time-stamp@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/time-stamp/-/time-stamp-2.2.0.tgz#917e0a66905688790ec7bbbde04046259af83f57" + integrity sha512-zxke8goJQpBeEgD82CXABeMh0LSJcj7CXEd0OHOg45HgcofF7pxNwZm9+RknpxpDhwN4gFpySkApKfFYfRQnUA== + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tiny-emitter@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" + integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== + +tinycolor2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" + integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= + +tinymce@^5.1.4: + version "5.2.0" + resolved "https://registry.npmjs.org/tinymce/-/tinymce-5.2.0.tgz#e838640f61c8a936317bc27a5d2e16c297df3418" + integrity sha512-Q7KAu9sLB6TBhKFdb2LHPGy770zkSEjpN1VRqZ6pxNuVQ0mbGWgMocHDvM9XL9yJaOhFrJP6s9XM7zG2gapGpA== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-mark@^1.1.9: + version "1.1.9" + resolved "https://registry.npmjs.org/to-mark/-/to-mark-1.1.9.tgz#2cfbc8e765c430ddcb46a218be079b4ca2773d5b" + integrity sha512-qHVnIhvwJbIIqOjuJgH2JlOmV/wPSSAY0QOQ47xQb9VPCzhV0Nd23+bBD4K/mzDGJA5lckZMfkgLScYvqKnPpg== + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +topojson-client@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz#22e8b1ed08a2b922feeb4af6f53b6ef09a467b99" + integrity sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw== + dependencies: + commander "2" + +toposort@^1.0.0: + version "1.0.7" + resolved "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" + integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= + +tough-cookie@^2.3.3, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +tryer@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" + integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== + +tslib@^1.10.0, tslib@^1.9.0: + version "1.11.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" + integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tui-chart@^3.7.0: + version "3.10.1" + resolved "https://registry.npmjs.org/tui-chart/-/tui-chart-3.10.1.tgz#8f0abfacf8662ed4d1b1d358441e8b702ee77480" + integrity sha512-dorZbIXDBWEhXRgK5NOwPEa2Kf+nFGVsQdHTe0fHgSsh3DfuOMiArKTD+KK6Hkz6/zMd+bB+nhdsx2KIzxBsqw== + dependencies: + core-js "^3.6.4" + raphael "https://github.com/nhn/raphael.git#2.2.0-c" + tui-code-snippet "^2.3.1" + +tui-code-snippet@^1.5.0: + version "1.5.2" + resolved "https://registry.npmjs.org/tui-code-snippet/-/tui-code-snippet-1.5.2.tgz#f4b8f0f1ac996b0b5b621f77c9507af19a0de238" + integrity sha512-6UqTlQaaC1KLcmC0HAoq5dtl1G4Fib+R+NC7pmaV7kiIlZ7JqKhUmnOoGRcreAyzd81UTK/vCvhrw9QJskpCFQ== + +tui-code-snippet@^2.2.0, tui-code-snippet@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/tui-code-snippet/-/tui-code-snippet-2.3.1.tgz#d11d9838c90a2e14decb10deba595758731c66de" + integrity sha512-HopmhYTLLHAF0aUnGN+ICQzX0j6T2dXhLeW+oupH58MktsWes19vW5BbUgFjONsq2gDT8+B1lOKdRliRAqnKXg== + +tui-color-picker@^2.2.1: + version "2.2.6" + resolved "https://registry.npmjs.org/tui-color-picker/-/tui-color-picker-2.2.6.tgz#bab54e47380e550bb3ac8ae974021b3cc2518aa9" + integrity sha512-+GBTUFGOkDaFiyYt/4IJTKA68Oj7fC9lU+RHs56luyFHYSO3gWuvsZntxAvFFeCGiZFFhu9XQQaZ0rVS5TUOmA== + dependencies: + tui-code-snippet "^2.2.0" + +tui-editor@^1.4.10: + version "1.4.10" + resolved "https://registry.npmjs.org/tui-editor/-/tui-editor-1.4.10.tgz#c69ac15842f819274857f184300d24f0a5ed6717" + integrity sha512-fET8etzvxTm0cFa7C8cbDFkPZ8R9s/oWVRr4i7Z1QKk4YkmY/hDjrdtWPXuIOy4/IzCWQHnv4TmnyVZmAbuG5Q== + dependencies: + "@types/codemirror" "0.0.71" + "@types/jquery" "^3.3.29" + "@types/markdown-it" "0.0.7" + codemirror "^5.48.4" + highlight.js "^9.12.0" + jquery "^3.3.1" + markdown-it "^9.0.0" + plantuml-encoder "^1.2.5" + resize-observer-polyfill "^1.5.0" + squire-rte "github:seonim-ryu/Squire#fd40b4e3020845825701e9689f190bab3f4775d4" + to-mark "^1.1.9" + tui-chart "^3.7.0" + tui-code-snippet "^1.5.0" + tui-color-picker "^2.2.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.npmjs.org/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" + integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + +uglify-js@3.4.x: + version "3.4.10" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" + integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== + dependencies: + commander "~2.19.0" + source-map "~0.6.1" + +uglify-js@^2.6.2, uglify-js@^2.8.29: + version "2.8.29" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= + +uglifyjs-webpack-plugin@^0.4.6: + version "0.4.6" + resolved "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" + integrity sha1-uVH0q7a9YX5m9j64kUmOORdj4wk= + dependencies: + source-map "^0.5.6" + uglify-js "^2.8.29" + webpack-sources "^1.0.1" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.0, unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-loader@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8" + integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg== + dependencies: + loader-utils "^1.1.0" + mime "^2.0.3" + schema-utils "^1.0.0" + +url-parse@^1.1.8, url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.npmjs.org/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.npmjs.org/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.npmjs.org/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utila@^0.4.0, utila@~0.4: + version "0.4.0" + resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.0.1, uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +venn.js@~0.2.20: + version "0.2.20" + resolved "https://registry.npmjs.org/venn.js/-/venn.js-0.2.20.tgz#3f0e50cc75cba1f58692a8a32f67bd7aaf1aa6fa" + integrity sha512-bb5SYq/wamY9fvcuErb9a0FJkgIFHJjkLZWonQ+DoKKuDX3WPH2B4ouI1ce4K2iejBklQy6r1ly8nOGIyOCO6w== + dependencies: + d3-selection "^1.0.2" + d3-transition "^1.0.1" + fmin "0.0.2" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +viser-vue@^2.4.4: + version "2.4.8" + resolved "https://registry.npmjs.org/viser-vue/-/viser-vue-2.4.8.tgz#3fdb058445cba59c1ccee9cc9c2024bec29926d4" + integrity sha512-ERAREN+6k/ywrwT+swcMo4CDIAq6dBjnB0+lhmsSfaip06BGHSBfNKg6yl7/4GJ9Nk2kioUw3llNhEboJuIKmQ== + dependencies: + "@types/node" "*" + viser "^2.0.0" + vue "^2.5.3" + +viser@^2.0.0: + version "2.4.9" + resolved "https://registry.npmjs.org/viser/-/viser-2.4.9.tgz#57f4c70f5702fb80e38843f29025cea575cbc60a" + integrity sha512-DKsqtMa3TZYQHEZ7jp4kpNp1Iqomda7d+3IkkIjIdKQvfL8OeksXfy/ECZUY1hTrGoOe7cq85+6PMS+MPn4mgQ== + dependencies: + "@antv/g2" "~3.5.3" + "@antv/g2-brush" "^0.0.2" + "@antv/g2-plugin-slider" "^2.1.0" + "@types/d3-format" "*" + "@types/lodash" "*" + "@types/node" "^8.0.53" + d3-format "^1.3.0" + lodash "^4.17.4" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +vue-area-linkage@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/vue-area-linkage/-/vue-area-linkage-5.1.0.tgz#369962b109907b058aedcf9f7deacb9e65afea03" + integrity sha512-86WD4O6PD9e2koWZ81Zlfcyey17U1+3B3fpWoyIZlBIe2V6qfvrg9BTozWdTpdF4CmKBiz138LBRTKhawl/UWw== + dependencies: + lodash.find "^4.6.0" + +vue-cropper@^0.4.8: + version "0.4.9" + resolved "https://registry.npmjs.org/vue-cropper/-/vue-cropper-0.4.9.tgz#fe650f32516ecf29014bbd4a9079191c8dc5a5ae" + integrity sha512-Uf1i/sCh+ZqSM9hb2YTGRENzJFH+mvDuv8N2brGLjK7UBuF7XDP7zbis8g/dcqZiMojAcBDtObFCn4ERFbRMxQ== + +vue-eslint-parser@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz#c268c96c6d94cfe3d938a5f7593959b0ca3360d1" + integrity sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw== + dependencies: + debug "^3.1.0" + eslint-scope "^3.7.1" + eslint-visitor-keys "^1.0.0" + espree "^3.5.2" + esquery "^1.0.0" + lodash "^4.17.4" + +vue-eslint-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz#00f4e4da94ec974b821a26ff0ed0f7a78402b8a1" + integrity sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g== + dependencies: + debug "^4.1.0" + eslint-scope "^4.0.0" + eslint-visitor-keys "^1.0.0" + espree "^4.1.0" + esquery "^1.0.1" + lodash "^4.17.11" + +vue-hot-reload-api@^2.2.0, vue-hot-reload-api@^2.3.0: + version "2.3.4" + resolved "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" + integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== + +vue-i18n@^8.7.0: + version "8.15.4" + resolved "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.15.4.tgz#1bfba2b6a6cb6de7b44f0f0aa89ad775fc902bc2" + integrity sha512-brhbJRB/gyWlroAhQZU0TNTQzNonbkHmzH4HlJzs7c+DsVIhB5OlRHg3zAl+85kkT8mpxzvBE6Bm1slqnRRmsg== + +vue-loader@^13.0.5: + version "13.7.3" + resolved "https://registry.npmjs.org/vue-loader/-/vue-loader-13.7.3.tgz#e07440f78230a639d00ada4da7b96d0e9d62037f" + integrity sha512-ACCwbfeC6HjY2pnDii+Zer+MZ6sdOtwvLmDXRK/BoD3WNR551V22R6KEagwHoTRJ0ZlIhpCBkptpCU6+Ri/05w== + dependencies: + consolidate "^0.14.0" + hash-sum "^1.0.2" + loader-utils "^1.1.0" + lru-cache "^4.1.1" + postcss "^6.0.8" + postcss-load-config "^1.1.0" + postcss-selector-parser "^2.0.0" + prettier "^1.7.0" + resolve "^1.4.0" + source-map "^0.6.1" + vue-hot-reload-api "^2.2.0" + vue-style-loader "^3.0.0" + vue-template-es2015-compiler "^1.6.0" + +vue-loader@^15.7.0: + version "15.9.0" + resolved "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.0.tgz#5d4b0378a4606188fc83e587ed23c94bc3a10998" + integrity sha512-FeDHvTSpwyLeF7LIV1PYkvqUQgTJ8UmOxhSlCyRSxaXCKk+M6NF4tDQsLsPPNeDPyR7TfRQ8MLg6v+8PsDV9xQ== + dependencies: + "@vue/component-compiler-utils" "^3.1.0" + hash-sum "^1.0.2" + loader-utils "^1.1.0" + vue-hot-reload-api "^2.3.0" + vue-style-loader "^4.1.0" + +vue-ls@^3.2.0: + version "3.2.1" + resolved "https://registry.npmjs.org/vue-ls/-/vue-ls-3.2.1.tgz#25d1c75b3a51c17018129de607b44bb120a3385a" + integrity sha512-JoZDpSu0qV5AM50vspEzOut2lcm8R0tr5WG99jMHh14qFXkUes3ZdmDMG/p8iSQVQpg0pd/svGwM9Nd7OI2oaw== + +vue-photo-preview@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/vue-photo-preview/-/vue-photo-preview-1.1.3.tgz#8ee62923e865d3cbaf010b07b0cc841892633028" + integrity sha512-L9JTQh62rYqLHNCdpy7zQdqVisks9dvkmUpM8+7kIKG7l+KkbRLzKWK7lCjCKc6OQT42o6/ngK6B13niXunS9Q== + dependencies: + autoprefixer-loader "^3.2.0" + babel-core "^6.26.0" + babel-loader "^7.1.2" + babel-preset-env "^1.6.0" + cross-env "^5.0.5" + css-loader "^0.28.7" + extract-text-webpack-plugin "^3.0.1" + file-loader "^1.1.4" + photoswipe "^4.1.2" + resolve-url-loader "^2.1.1" + style-loader "^0.19.0" + vue "^2.4.4" + vue-loader "^13.0.5" + vue-template-compiler "^2.4.4" + webpack "^3.6.0" + webpack-dev-server "^2.9.1" + +vue-print-nb-jeecg@^1.0.9: + version "1.0.9" + resolved "https://registry.npmjs.org/vue-print-nb-jeecg/-/vue-print-nb-jeecg-1.0.9.tgz#9c071d7527748ac4059b01d0071fb902fcff97e1" + integrity sha512-dWLbThjeq/hBo50wcKoHrJAxLEZcqiwoIFEjZQEvntVQs76PdDrWvpkC8F8tGZ5G9GXs9ihrddkXpaIltHJ1dQ== + dependencies: + babel-plugin-transform-runtime "^6.23.0" + +vue-ref@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/vue-ref/-/vue-ref-2.0.0.tgz#483084d732abed11da796778a8266a3af0ea1a9c" + integrity sha512-uKNKpFOVeWNqS2mrBZqnpLyXJo5Q+vnkex6JvpENvhXHFNBW/SJTP8vJywLuVT3DpxwXcF9N0dyIiZ4/NpTexQ== + +vue-router@^3.0.1: + version "3.1.6" + resolved "https://registry.npmjs.org/vue-router/-/vue-router-3.1.6.tgz#45f5a3a3843e31702c061dd829393554e4328f89" + integrity sha512-GYhn2ynaZlysZMkFE5oCHRUTqE8BWs/a9YbKpNLi0i7xD6KG1EzDqpHQmv1F5gXjr8kL5iIVS8EOtRaVUEXTqA== + +vue-splitpane@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/vue-splitpane/-/vue-splitpane-1.0.6.tgz#c4667bfdd8e10ced5d23d09fe8a129585c2c04c0" + integrity sha512-6sneVSEeF1VsCD025HP93nRxwzYhv3rotCeYi2Ah1FmGxwtfqbCZEIzaHGberdGNCpMlEzGD/1OIE1kK5QukLA== + +vue-style-loader@^3.0.0: + version "3.1.2" + resolved "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-3.1.2.tgz#6b66ad34998fc9520c2f1e4d5fa4091641c1597a" + integrity sha512-ICtVdK/p+qXWpdSs2alWtsXt9YnDoYjQe0w5616j9+/EhjoxZkbun34uWgsMFnC1MhrMMwaWiImz3K2jK1Yp2Q== + dependencies: + hash-sum "^1.0.2" + loader-utils "^1.0.2" + +vue-style-loader@^4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8" + integrity sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ== + dependencies: + hash-sum "^1.0.2" + loader-utils "^1.0.2" + +vue-template-compiler@^2.4.4, vue-template-compiler@^2.6.10: + version "2.6.11" + resolved "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz#c04704ef8f498b153130018993e56309d4698080" + integrity sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA== + dependencies: + de-indent "^1.0.2" + he "^1.1.0" + +vue-template-es2015-compiler@^1.6.0, vue-template-es2015-compiler@^1.9.0: + version "1.9.1" + resolved "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" + integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== + +vue@^2.4.4, vue@^2.5.17, vue@^2.5.3, vue@^2.6.10: + version "2.6.11" + resolved "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5" + integrity sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ== + +vuedraggable@^2.20.0: + version "2.23.2" + resolved "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.23.2.tgz#0d95d7fdf4f02f56755a26b3c9dca5c7ca9cfa72" + integrity sha512-PgHCjUpxEAEZJq36ys49HfQmXglattf/7ofOzUrW2/rRdG7tu6fK84ir14t1jYv4kdXewTEa2ieKEAhhEMdwkQ== + dependencies: + sortablejs "^1.10.1" + +vuex@^3.1.0: + version "3.1.2" + resolved "https://registry.npmjs.org/vuex/-/vuex-3.1.2.tgz#a2863f4005aa73f2587e55c3fadf3f01f69c7d4d" + integrity sha512-ha3jNLJqNhhrAemDXcmMJMKf1Zu4sybMPr9KxJIuOpVcsDQlTBYLLladav2U+g1AvdYDG5Gs0xBTb0M5pXXYFQ== + +warning@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +watchpack@^1.4.0, watchpack@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webpack-bundle-analyzer@^3.3.0: + version "3.6.0" + resolved "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.6.0.tgz#39b3a8f829ca044682bc6f9e011c95deb554aefd" + integrity sha512-orUfvVYEfBMDXgEKAKVvab5iQ2wXneIEorGNsyuOyVYpjYrI7CUOhhXNDd3huMwQ3vNNWWlGP+hzflMFYNzi2g== + dependencies: + acorn "^6.0.7" + acorn-walk "^6.1.1" + bfj "^6.1.1" + chalk "^2.4.1" + commander "^2.18.0" + ejs "^2.6.1" + express "^4.16.3" + filesize "^3.6.1" + gzip-size "^5.0.0" + lodash "^4.17.15" + mkdirp "^0.5.1" + opener "^1.5.1" + ws "^6.0.0" + +webpack-chain@^4.11.0: + version "4.12.1" + resolved "https://registry.npmjs.org/webpack-chain/-/webpack-chain-4.12.1.tgz#6c8439bbb2ab550952d60e1ea9319141906c02a6" + integrity sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ== + dependencies: + deepmerge "^1.5.2" + javascript-stringify "^1.6.0" + +webpack-dev-middleware@1.12.2: + version "1.12.2" + resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" + integrity sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A== + dependencies: + memory-fs "~0.4.1" + mime "^1.5.0" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + time-stamp "^2.0.0" + +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^2.9.1: + version "2.11.5" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.5.tgz#416fbdea0e04eebe44a626e791d5a2eb37fe8c48" + integrity sha512-7TdOKKt7G3sWEhPKV0zP+nD0c4V9YKUJ3wDdBwQsZNo58oZIRoVIu66pg7PYkBW8A74msP9C2kLwmxGHndz/pw== + dependencies: + ansi-html "0.0.7" + array-includes "^3.0.3" + bonjour "^3.5.0" + chokidar "^2.1.2" + compression "^1.7.3" + connect-history-api-fallback "^1.3.0" + debug "^3.1.0" + del "^3.0.0" + express "^4.16.2" + html-entities "^1.2.0" + http-proxy-middleware "^0.19.1" + import-local "^1.0.0" + internal-ip "1.2.0" + ip "^1.1.5" + killable "^1.0.0" + loglevel "^1.4.1" + opn "^5.1.0" + portfinder "^1.0.9" + selfsigned "^1.9.1" + serve-index "^1.9.1" + sockjs "0.3.19" + sockjs-client "1.1.5" + spdy "^4.0.0" + strip-ansi "^3.0.0" + supports-color "^5.1.0" + webpack-dev-middleware "1.12.2" + yargs "6.6.0" + +webpack-dev-server@^3.4.1: + version "3.10.3" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.10.3.tgz#f35945036813e57ef582c2420ef7b470e14d3af0" + integrity sha512-e4nWev8YzEVNdOMcNzNeCN947sWJNd43E5XvsJzbAL08kGc2frm1tQ32hTJslRS+H65LCb/AaUCYU7fjHCpDeQ== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.2.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.6" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.25" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.19" + sockjs-client "1.4.0" + spdy "^4.0.1" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "12.0.5" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-merge@^4.2.1: + version "4.2.2" + resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== + dependencies: + lodash "^4.17.15" + +webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^3.6.0: + version "3.12.0" + resolved "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz#3f9e34360370602fcf639e97939db486f4ec0d74" + integrity sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ== + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + async "^2.1.2" + enhanced-resolve "^3.4.0" + escope "^3.6.0" + interpret "^1.0.0" + json-loader "^0.5.4" + json5 "^0.5.1" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^4.2.1" + tapable "^0.2.7" + uglifyjs-webpack-plugin "^0.4.6" + watchpack "^1.4.0" + webpack-sources "^1.0.1" + yargs "^8.0.2" + +webpack@^4.0.0: + version "4.42.0" + resolved "https://registry.npmjs.org/webpack/-/webpack-4.42.0.tgz#b901635dd6179391d90740a63c93f76f39883eb8" + integrity sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/wasm-edit" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + acorn "^6.2.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.1" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.6.0" + webpack-sources "^1.4.1" + +websocket-driver@>=0.5.1: + version "0.7.3" + resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" + integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== + dependencies: + http-parser-js ">=0.4.0 <0.4.11" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== + +whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE= + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= + +wolfy87-eventemitter@^5.1.0: + version "5.2.9" + resolved "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.2.9.tgz#e879f770b30fbb6512a8afbb330c388591099c2a" + integrity sha512-P+6vtWyuDw+MB01X7UeF8TaHBvbCovf4HPEMF/SV7BdDc1SMTiBy13SRD71lQh4ExFTG1d/WNzDGDCyOKSMblw== + +wolfy87-eventemitter@~5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.1.0.tgz#35c1ac0dd1ac0c15e35d981508fc22084a13a011" + integrity sha1-NcGsDdGsDBXjXZgVCPwiCEoToBE= + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write@1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= + dependencies: + mkdirp "^0.5.1" + +ws@^6.0.0, ws@^6.2.1: + version "6.2.1" + resolved "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^16.1.0: + version "16.1.0" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz#73747d53ae187e7b8dbe333f95714c76ea00ecf1" + integrity sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^4.2.0: + version "4.2.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" + integrity sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw= + dependencies: + camelcase "^3.0.0" + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= + dependencies: + camelcase "^4.1.0" + +yargs@12.0.5: + version "12.0.5" + resolved "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" + +yargs@6.6.0: + version "6.6.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" + integrity sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg= + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^4.2.0" + +yargs@^15.0.0: + version "15.1.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-15.1.0.tgz#e111381f5830e863a89550bd4b136bb6a5f37219" + integrity sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^16.1.0" + +yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" + +yorkie@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9" + integrity sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw== + dependencies: + execa "^0.8.0" + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0"