Showing preview only (8,399K chars total). Download the full file or copy to clipboard to get everything.
Repository: newbee-ltd/newbee-mall
Branch: master
Commit: a069069b0702
Files: 329
Total size: 7.9 MB
Directory structure:
gitextract_szhq2hcl/
├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── docs/
│ ├── API.md
│ ├── DEVELOPMENT.md
│ └── FAQ.md
├── pom.xml
└── src/
└── main/
├── java/
│ └── ltd/
│ └── newbee/
│ └── mall/
│ ├── NewBeeMallApplication.java
│ ├── common/
│ │ ├── Constants.java
│ │ ├── IndexConfigTypeEnum.java
│ │ ├── NewBeeMallCategoryLevelEnum.java
│ │ ├── NewBeeMallException.java
│ │ ├── NewBeeMallOrderStatusEnum.java
│ │ ├── PayStatusEnum.java
│ │ ├── PayTypeEnum.java
│ │ └── ServiceResultEnum.java
│ ├── config/
│ │ └── NeeBeeMallWebMvcConfigurer.java
│ ├── controller/
│ │ ├── admin/
│ │ │ ├── AdminController.java
│ │ │ ├── NewBeeMallCarouselController.java
│ │ │ ├── NewBeeMallGoodsCategoryController.java
│ │ │ ├── NewBeeMallGoodsController.java
│ │ │ ├── NewBeeMallGoodsIndexConfigController.java
│ │ │ ├── NewBeeMallOrderController.java
│ │ │ └── NewBeeMallUserController.java
│ │ ├── common/
│ │ │ ├── CommonController.java
│ │ │ ├── ErrorPageController.java
│ │ │ ├── NewBeeMallExceptionHandler.java
│ │ │ └── UploadController.java
│ │ ├── mall/
│ │ │ ├── GoodsController.java
│ │ │ ├── IndexController.java
│ │ │ ├── OrderController.java
│ │ │ ├── PersonalController.java
│ │ │ └── ShoppingCartController.java
│ │ └── vo/
│ │ ├── NewBeeMallGoodsDetailVO.java
│ │ ├── NewBeeMallIndexCarouselVO.java
│ │ ├── NewBeeMallIndexCategoryVO.java
│ │ ├── NewBeeMallIndexConfigGoodsVO.java
│ │ ├── NewBeeMallOrderDetailVO.java
│ │ ├── NewBeeMallOrderItemVO.java
│ │ ├── NewBeeMallOrderListVO.java
│ │ ├── NewBeeMallSearchGoodsVO.java
│ │ ├── NewBeeMallShoppingCartItemVO.java
│ │ ├── NewBeeMallUserVO.java
│ │ ├── SearchPageCategoryVO.java
│ │ ├── SecondLevelCategoryVO.java
│ │ └── ThirdLevelCategoryVO.java
│ ├── dao/
│ │ ├── AdminUserMapper.java
│ │ ├── CarouselMapper.java
│ │ ├── GoodsCategoryMapper.java
│ │ ├── IndexConfigMapper.java
│ │ ├── MallUserMapper.java
│ │ ├── NewBeeMallGoodsMapper.java
│ │ ├── NewBeeMallOrderItemMapper.java
│ │ ├── NewBeeMallOrderMapper.java
│ │ └── NewBeeMallShoppingCartItemMapper.java
│ ├── entity/
│ │ ├── AdminUser.java
│ │ ├── Carousel.java
│ │ ├── GoodsCategory.java
│ │ ├── IndexConfig.java
│ │ ├── MallUser.java
│ │ ├── NewBeeMallGoods.java
│ │ ├── NewBeeMallOrder.java
│ │ ├── NewBeeMallOrderItem.java
│ │ ├── NewBeeMallShoppingCartItem.java
│ │ └── StockNumDTO.java
│ ├── interceptor/
│ │ ├── AdminLoginInterceptor.java
│ │ ├── NewBeeMallCartNumberInterceptor.java
│ │ └── NewBeeMallLoginInterceptor.java
│ ├── service/
│ │ ├── AdminUserService.java
│ │ ├── NewBeeMallCarouselService.java
│ │ ├── NewBeeMallCategoryService.java
│ │ ├── NewBeeMallGoodsService.java
│ │ ├── NewBeeMallIndexConfigService.java
│ │ ├── NewBeeMallOrderService.java
│ │ ├── NewBeeMallShoppingCartService.java
│ │ ├── NewBeeMallUserService.java
│ │ └── impl/
│ │ ├── AdminUserServiceImpl.java
│ │ ├── NewBeeMallCarouselServiceImpl.java
│ │ ├── NewBeeMallCategoryServiceImpl.java
│ │ ├── NewBeeMallGoodsServiceImpl.java
│ │ ├── NewBeeMallIndexConfigServiceImpl.java
│ │ ├── NewBeeMallOrderServiceImpl.java
│ │ ├── NewBeeMallShoppingCartServiceImpl.java
│ │ └── NewBeeMallUserServiceImpl.java
│ └── util/
│ ├── BeanUtil.java
│ ├── JsonUtil.java
│ ├── MD5Util.java
│ ├── NewBeeMallUtils.java
│ ├── NumberUtil.java
│ ├── PageQueryUtil.java
│ ├── PageResult.java
│ ├── PatternUtil.java
│ ├── Result.java
│ ├── ResultGenerator.java
│ └── SystemUtil.java
└── resources/
├── application.properties
├── mapper/
│ ├── AdminUserMapper.xml
│ ├── CarouselMapper.xml
│ ├── GoodsCategoryMapper.xml
│ ├── IndexConfigMapper.xml
│ ├── MallUserMapper.xml
│ ├── NewBeeMallGoodsMapper.xml
│ ├── NewBeeMallOrderItemMapper.xml
│ ├── NewBeeMallOrderMapper.xml
│ └── NewBeeMallShoppingCartItemMapper.xml
├── newbee_mall_schema.sql
├── static/
│ ├── admin/
│ │ ├── dist/
│ │ │ ├── css/
│ │ │ │ ├── adminlte.css
│ │ │ │ └── main.css
│ │ │ ├── fonts/
│ │ │ │ └── FontAwesome.otf
│ │ │ └── js/
│ │ │ ├── adminlte.js
│ │ │ ├── demo.js
│ │ │ ├── newbee_mall_carousel.js
│ │ │ ├── newbee_mall_category.js
│ │ │ ├── newbee_mall_goods.js
│ │ │ ├── newbee_mall_goods_edit.js
│ │ │ ├── newbee_mall_index_config.js
│ │ │ ├── newbee_mall_order.js
│ │ │ ├── newbee_mall_user.js
│ │ │ ├── plugins/
│ │ │ │ ├── bootstrap/
│ │ │ │ │ ├── css/
│ │ │ │ │ │ ├── bootstrap-grid.css
│ │ │ │ │ │ ├── bootstrap-reboot.css
│ │ │ │ │ │ └── bootstrap.css
│ │ │ │ │ └── js/
│ │ │ │ │ ├── bootstrap.bundle.js
│ │ │ │ │ └── bootstrap.js
│ │ │ │ ├── chart.js
│ │ │ │ ├── chart.js2
│ │ │ │ ├── chartjs2/
│ │ │ │ │ ├── Chart.bundle.js
│ │ │ │ │ ├── Chart.js
│ │ │ │ │ └── docs/
│ │ │ │ │ ├── axes/
│ │ │ │ │ │ ├── cartesian/
│ │ │ │ │ │ │ ├── category.html
│ │ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ │ ├── linear.html
│ │ │ │ │ │ │ ├── logarithmic.html
│ │ │ │ │ │ │ └── time.html
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ ├── labelling.html
│ │ │ │ │ │ ├── radial/
│ │ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ │ └── linear.html
│ │ │ │ │ │ └── styling.html
│ │ │ │ │ ├── charts/
│ │ │ │ │ │ ├── area.html
│ │ │ │ │ │ ├── bar.html
│ │ │ │ │ │ ├── bubble.html
│ │ │ │ │ │ ├── doughnut.html
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ ├── line.html
│ │ │ │ │ │ ├── mixed.html
│ │ │ │ │ │ ├── polar.html
│ │ │ │ │ │ ├── radar.html
│ │ │ │ │ │ └── scatter.html
│ │ │ │ │ ├── configuration/
│ │ │ │ │ │ ├── animations.html
│ │ │ │ │ │ ├── elements.html
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ ├── layout.html
│ │ │ │ │ │ ├── legend.html
│ │ │ │ │ │ ├── title.html
│ │ │ │ │ │ └── tooltip.html
│ │ │ │ │ ├── developers/
│ │ │ │ │ │ ├── api.html
│ │ │ │ │ │ ├── axes.html
│ │ │ │ │ │ ├── charts.html
│ │ │ │ │ │ ├── contributing.html
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ ├── plugins.html
│ │ │ │ │ │ └── updates.html
│ │ │ │ │ ├── general/
│ │ │ │ │ │ ├── colors.html
│ │ │ │ │ │ ├── device-pixel-ratio.md
│ │ │ │ │ │ ├── fonts.html
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ ├── interactions/
│ │ │ │ │ │ │ ├── events.html
│ │ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ │ └── modes.html
│ │ │ │ │ │ ├── options.html
│ │ │ │ │ │ └── responsive.html
│ │ │ │ │ ├── getting-started/
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ ├── installation.html
│ │ │ │ │ │ ├── integration.html
│ │ │ │ │ │ └── usage.html
│ │ │ │ │ ├── gitbook/
│ │ │ │ │ │ ├── fonts/
│ │ │ │ │ │ │ └── fontawesome/
│ │ │ │ │ │ │ └── FontAwesome.otf
│ │ │ │ │ │ ├── gitbook-plugin-anchorjs/
│ │ │ │ │ │ │ └── anchor-style.js
│ │ │ │ │ │ ├── gitbook-plugin-chartjs/
│ │ │ │ │ │ │ ├── Chart.bundle.js
│ │ │ │ │ │ │ ├── Chart.js
│ │ │ │ │ │ │ ├── chartjs-plugin-deferred.js
│ │ │ │ │ │ │ └── style.css
│ │ │ │ │ │ ├── gitbook-plugin-fontsettings/
│ │ │ │ │ │ │ ├── fontsettings.js
│ │ │ │ │ │ │ └── website.css
│ │ │ │ │ │ ├── gitbook-plugin-ga/
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ ├── gitbook-plugin-highlight/
│ │ │ │ │ │ │ ├── ebook.css
│ │ │ │ │ │ │ └── website.css
│ │ │ │ │ │ ├── gitbook-plugin-search-plus/
│ │ │ │ │ │ │ ├── search.css
│ │ │ │ │ │ │ └── search.js
│ │ │ │ │ │ ├── gitbook-plugin-sharing/
│ │ │ │ │ │ │ └── buttons.js
│ │ │ │ │ │ ├── gitbook.js
│ │ │ │ │ │ ├── style.css
│ │ │ │ │ │ └── theme.js
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── notes/
│ │ │ │ │ │ ├── comparison.html
│ │ │ │ │ │ ├── extensions.html
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ └── license.html
│ │ │ │ │ ├── search_plus_index.json
│ │ │ │ │ └── style.css
│ │ │ │ ├── font-awesome/
│ │ │ │ │ ├── css/
│ │ │ │ │ │ └── font-awesome.css
│ │ │ │ │ └── fonts/
│ │ │ │ │ └── FontAwesome.otf
│ │ │ │ ├── jquery/
│ │ │ │ │ ├── core.js
│ │ │ │ │ ├── jquery.js
│ │ │ │ │ └── jquery.slim.js
│ │ │ │ ├── login-bg-particles.js
│ │ │ │ ├── particles.js
│ │ │ │ └── popper/
│ │ │ │ ├── esm/
│ │ │ │ │ ├── popper-utils.js
│ │ │ │ │ └── popper.js
│ │ │ │ ├── popper-utils.js
│ │ │ │ ├── popper.js
│ │ │ │ └── umd/
│ │ │ │ ├── popper-utils.js
│ │ │ │ └── popper.js
│ │ │ ├── profile.js
│ │ │ ├── public.js
│ │ │ └── test.js
│ │ └── plugins/
│ │ ├── ajaxupload/
│ │ │ └── ajaxupload.js
│ │ ├── bootstrap/
│ │ │ ├── css/
│ │ │ │ ├── bootstrap-grid.css
│ │ │ │ ├── bootstrap-reboot.css
│ │ │ │ └── bootstrap.css
│ │ │ └── js/
│ │ │ ├── bootstrap.bundle.js
│ │ │ └── bootstrap.js
│ │ ├── jqgrid-5.7.0/
│ │ │ ├── grid.locale-cn.js
│ │ │ ├── ui.jqgrid-bootstrap-ui.css
│ │ │ ├── ui.jqgrid-bootstrap.css
│ │ │ ├── ui.jqgrid-bootstrap4.css
│ │ │ └── ui.jqgrid.css
│ │ ├── jquery/
│ │ │ ├── core.js
│ │ │ ├── jquery.js
│ │ │ └── jquery.slim.js
│ │ ├── select2/
│ │ │ ├── i18n/
│ │ │ │ ├── az.js
│ │ │ │ ├── bg.js
│ │ │ │ ├── ca.js
│ │ │ │ ├── cs.js
│ │ │ │ ├── da.js
│ │ │ │ ├── de.js
│ │ │ │ ├── en.js
│ │ │ │ ├── es.js
│ │ │ │ ├── et.js
│ │ │ │ ├── eu.js
│ │ │ │ ├── fa.js
│ │ │ │ ├── fi.js
│ │ │ │ ├── fr.js
│ │ │ │ ├── gl.js
│ │ │ │ ├── he.js
│ │ │ │ ├── hi.js
│ │ │ │ ├── hr.js
│ │ │ │ ├── hu.js
│ │ │ │ ├── id.js
│ │ │ │ ├── is.js
│ │ │ │ ├── it.js
│ │ │ │ ├── ko.js
│ │ │ │ ├── lt.js
│ │ │ │ ├── lv.js
│ │ │ │ ├── mk.js
│ │ │ │ ├── nb.js
│ │ │ │ ├── nl.js
│ │ │ │ ├── pl.js
│ │ │ │ ├── pt-BR.js
│ │ │ │ ├── pt.js
│ │ │ │ ├── ro.js
│ │ │ │ ├── ru.js
│ │ │ │ ├── sk.js
│ │ │ │ ├── sr.js
│ │ │ │ ├── sv.js
│ │ │ │ ├── th.js
│ │ │ │ ├── tr.js
│ │ │ │ ├── uk.js
│ │ │ │ ├── vi.js
│ │ │ │ ├── zh-CN.js
│ │ │ │ └── zh-TW.js
│ │ │ ├── select2.css
│ │ │ ├── select2.full.js
│ │ │ └── select2.js
│ │ └── wangeditor-5.1.23/
│ │ ├── index.js
│ │ └── style.css
│ └── mall/
│ ├── css/
│ │ ├── bootstrap-modal.css
│ │ ├── common.css
│ │ └── iconfont.css
│ ├── js/
│ │ ├── bootstrap3.js
│ │ ├── detail.js
│ │ ├── index.js
│ │ ├── jquery-1.8.0.js
│ │ └── search.js
│ └── styles/
│ ├── addresses.css
│ ├── cart.css
│ ├── detail.css
│ ├── header.css
│ ├── index.css
│ ├── login.css
│ ├── my-orders.css
│ ├── order-detail.css
│ ├── order-settle.css
│ ├── pay-select.css
│ ├── pay.css
│ ├── personal.css
│ └── search.css
└── templates/
├── admin/
│ ├── footer.html
│ ├── header.html
│ ├── index.html
│ ├── login.html
│ ├── newbee_mall_carousel.html
│ ├── newbee_mall_category.html
│ ├── newbee_mall_goods.html
│ ├── newbee_mall_goods_edit.html
│ ├── newbee_mall_index_config.html
│ ├── newbee_mall_order.html
│ ├── newbee_mall_user.html
│ ├── profile.html
│ └── sidebar.html
├── error/
│ ├── error.html
│ ├── error_400.html
│ ├── error_404.html
│ └── error_5xx.html
└── mall/
├── alipay.html
├── cart.html
├── detail.html
├── footer.html
├── header.html
├── index.html
├── login.html
├── my-orders.html
├── order-detail.html
├── order-settle.html
├── pay-select.html
├── personal-sidebar.html
├── personal.html
├── register.html
├── search.html
└── wxpay.html
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
*.js linguist-language=java
*.css linguist-language=java
================================================
FILE: .gitignore
================================================
/target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
================================================
FILE: README.md
================================================



[](https://github.com/newbee-ltd/newbee-mall/blob/master/LICENSE)
newbee-mall 项目是一套电商系统,包括 newbee-mall 商城系统及 newbee-mall-admin 商城后台管理系统,基于 Spring Boot 及相关技术栈开发。 前台商城系统包含首页门户、商品分类、新品上线、首页轮播、商品推荐、商品搜索、商品展示、购物车、订单结算、订单流程、个人订单管理、会员中心、帮助中心等模块。 后台管理系统包含数据面板、轮播图管理、商品管理、订单管理、会员管理、分类管理、设置等模块。
当前分支的 Spring Boot 版本为 2.7.5,想要学习和使用其它版本可以直接点击下方的分支名称跳转至对应的仓库分支中。
| 分支名称 | Spring Boot Version |
| ------------------------------------------------------------ | ------------------- |
| [spring-boot-2.3.7](https://github.com/newbee-ltd/newbee-mall/tree/spring-boot-2.3.7) | 2.3.7-RELEASE |
| [spring-boot-2.6.x](https://github.com/newbee-ltd/newbee-mall/tree/spring-boot-2.6.x) | 2.6.3 |
| [main](https://github.com/newbee-ltd/newbee-mall) | 2.7.5 |
| [spring-boot-3.x](https://github.com/newbee-ltd/newbee-mall/tree/spring-boot-3.x) | 3.1.0 |
新蜂商城线上预览地址:[http://mall.newbee.ltd](http://mall.newbee.ltd?from=github),账号可自行注册。
**坚持不易,如果觉得项目还不错的话可以给项目一个 Star 吧,也是对我自 2019 年开始一直更新这个项目的一种鼓励啦,谢谢各位的支持。**

- newbee-mall 对新手开发者十分友好,无需复杂的操作步骤,**仅需 2 秒就可以启动这个完整的商城项目;**
- newbee-mall **也是一个企业级别的 Spring Boot 大型项目,对于各个阶段的 Java 开发者都是极佳的选择;**
- 你可以把它作为 Spring Boot 技术栈的综合实践项目,**newbee-mall 足够符合要求,且代码开源、功能完备、流程完整、页面交互美观;**
- 技术栈新颖且知识点丰富,学习后可以提升大家对于知识的理解和掌握,**可以进一步提升你的市场竞争力;**
- 对于部分求职中的 Java 开发者,**你也可以将该项目放入求职简历中以丰富你的工作履历;**
- **newbee-mall 还有一些不完善的地方,鄙人才疏学浅,望见谅;**
- **有任何问题都可以反馈给我,我会尽量完善该项目。**

## newbee-mall (新蜂商城)系列项目概览

| 项目名称 | 仓库地址 | 备注 |
| :------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| newbee-mall | [newbee-mall in GitHub](https://github.com/newbee-ltd/newbee-mall)<br>[newbee-mall in Gitee](https://gitee.com/newbee-ltd/newbee-mall) | 初始版本、Spring Boot、Thymeleaf、MyBatis、MySQL |
| newbee-mall-plus | [newbee-mall-plus in GitHub](https://github.com/newbee-ltd/newbee-mall-plus)<br/>[newbee-mall-plus in Gitee](https://gitee.com/newbee-ltd/newbee-mall-plus) | 升级版本、优惠券、秒杀、支付、Spring Boot、Thymeleaf、MyBatis、MySQL、Redis |
| newbee-mall-cloud | [newbee-mall-cloud in GitHub](https://github.com/newbee-ltd/newbee-mall-cloud)<br/>[newbee-mall-cloud in Gitee](https://gitee.com/newbee-ltd/newbee-mall-cloud) | 微服务版本、分布式事务、Spring Cloud Alibaba、Nacos、Sentinel、OpenFeign、Seata |
| newbee-mall-api | [newbee-mall-api in GitHub](https://github.com/newbee-ltd/newbee-mall-api)<br/>[newbee-mall-api in Gitee](https://gitee.com/newbee-ltd/newbee-mall-api) | 前后端分离、Spring Boot、MyBatis、Swagger、MySQL |
| newbee-mall-api-go | [newbee-mall-api-go in GitHub](https://github.com/newbee-ltd/newbee-mall-api-go)<br/>[newbee-mall-api-go in Gitee](https://gitee.com/newbee-ltd/newbee-mall-api-go) | 前后端分离、Go、Gin、MySQL |
| newbee-mall-vue-app | [newbee-mall-vue-app in GitHub](https://github.com/newbee-ltd/newbee-mall-vue-app)<br/>[newbee-mall-vue-app in Gitee](https://gitee.com/newbee-ltd/newbee-mall-vue-app) | 前后端分离、Vue2、Vant |
| newbee-mall-vue3-app | [newbee-mall-vue3-app in GitHub](https://github.com/newbee-ltd/newbee-mall-vue3-app)<br/>[newbee-mall-vue3-app in Gitee](https://gitee.com/newbee-ltd/newbee-mall-vue3-app) | 前后端分离、Vue3、Vue-Router4、Vuex4、Vant3 |
| vue3-admin | [vue3-admin in GitHub](https://github.com/newbee-ltd/vue3-admin)<br/>[vue3-admin in Gitee](https://gitee.com/newbee-ltd/vue3-admin) | 前后端分离、Vue3、Element-Plus、Vue-Router4、Vite |
> 更多 Spring Boot 实战项目可以关注十三的另一个代码仓库 [spring-boot-projects](https://github.com/ZHENFENG13/spring-boot-projects),该仓库中主要是 Spring Boot 的入门学习教程以及一些常用的 Spring Boot 实战项目教程,包括 Spring Boot 使用的各种示例代码,同时也包括一些实战项目的项目源码和效果展示,实战项目包括基本的 web 开发以及目前大家普遍使用的前后端分离实践项目等,后续会根据大家的反馈继续增加一些实战项目源码,摆脱各种 hello world 入门案例的束缚,真正的掌握 Spring Boot 开发。
关注公众号:**程序员十三**,回复"勾搭"进群交流。

## 项目演示
- [视频1:商城项目总览](https://edu.csdn.net/course/play/26258/326466)
- [视频2:商城系统介绍](https://edu.csdn.net/course/play/26258/326467)
- [视频3:商城后台管理系统介绍](https://edu.csdn.net/course/play/26258/328801)
## 开发及部署文档
- [**Spring Boot 大型线上商城项目实战教程**](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [项目须知和课程约定](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [2021年12月小册全新优化升级](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [技术选型之 Spring Boot](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [前期准备工作及基础环境搭建](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [Spring Boot 项目初体验--项目搭建及启动](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [Spring Boot 之 Web 开发讲解](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [Thymeleaf 模板引擎技术介绍及整合](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [Thymeleaf 语法详解及编码实践](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [Spring Boot 实践之数据库操作](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [Spring Boot 实践之整合 Mybatis 操作数据库](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [项目初体验:启动和使用新蜂商城](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城功能模块和流程设计详解](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [前端页面设计及技术选型](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [页面布局制作及跳转逻辑实现](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [Spring Boot 实现验证码功能](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城后台管理系统登录功能实现](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [登陆拦截器设置并完善身份验证](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [通用分页功能设计与开发实践](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [jqGrid 插件整合制作分页效果](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [Spring Boot 实践之文件上传处理-1](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [Spring Boot 实践之文件上传处理-2](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城轮播图管理模块开发](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城分类管理模块开发-1](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城分类管理模块开发-2](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城商品类目三级联动功能实现](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [富文本编辑器 wangEditor 介绍及整合详解](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城商品编辑页面制作](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城商品添加功能实现](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城商品管理模块功能实现](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城首页制作-1](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城首页制作-2](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城首页模块配置及功能完善](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城会员的注册/登录功能实现](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城搜索商品功能实现](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城购物车功能实现](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城订单确认页和订单生成功能实践](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城个人订单列表和订单详情页制作](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城订单流程功能完善](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [课程总结及展望](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [Spring Boot中的事务处理](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [新蜂商城错误页面制作](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
- [常见问题汇总讲解](https://juejin.cn/book/6844733814074245133?suid=1996368849416216&source=android)
## 联系作者
> 大家有任何问题或者建议都可以在 [issues](https://github.com/newbee-ltd/newbee-mall/issues) 中反馈给我,我会慢慢完善这个项目。
- 我的邮箱:2449207463@qq.com
- QQ技术交流群:791509631 784785001
> newbee-mall 在 GitHub 和国内的码云都创建了代码仓库,如果有人访问 GitHub 比较慢的话,建议在 Gitee 上查看该项目,两个仓库会保持同步更新。
- [newbee-mall in GitHub](https://github.com/newbee-ltd/newbee-mall)
- [newbee-mall in Gitee](https://gitee.com/newbee-ltd/newbee-mall)

## 软件著作权
>本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!

## 页面展示
以下为商城项目的部分页面,由于篇幅所限,无法一一列举,重要节点及重要功能的页面都已整理在下方。
### 商城页面预览
- 商城首页 1

- 商城首页 2

- 商品搜索

- 购物车

- 订单结算

- 订单列表

- 支付页面

### 后台管理页面
- 登录页

- 轮播图管理

- 新品上线

- 分类管理

- 商品管理

- 商品编辑

- 订单管理


## 感谢
- [spring-projects](https://github.com/spring-projects/spring-boot)
- [thymeleaf](https://github.com/thymeleaf/thymeleaf)
- [mybatis](https://github.com/mybatis/mybatis-3)
- [ColorlibHQ](https://github.com/ColorlibHQ/AdminLTE)
- [tonytomov](https://github.com/tonytomov/jqGrid)
- [sweetalert2](https://github.com/sweetalert2/sweetalert2)
- [skytotwo](https://github.com/skytotwo/Alipay-WeChat-HTML)
- [hutool](https://github.com/dromara/hutool)
- [wangeditor-team](https://github.com/wangeditor-team/wangEditor)
- [VincentGarreau](https://github.com/VincentGarreau/particles.js)
- [Vue](https://github.com/vuejs/vue)
- [Vant](https://github.com/youzan/vant)
================================================
FILE: docs/API.md
================================================
# newbee-mall API 接口文档
## 文档说明
本文档描述了 newbee-mall 商城系统的主要 API 接口,包括前台商城接口和后台管理接口。
**基础信息**
- 基础URL: http://localhost:28089
- 编码格式: UTF-8
- 响应格式: JSON / HTML (Thymeleaf 模板)
- Session 管理: 基于 Cookie 的 Session 机制
---
## 目录
- [前台商城接口](#前台商城接口)
- [首页相关](#首页相关)
- [商品相关](#商品相关)
- [购物车相关](#购物车相关)
- [订单相关](#订单相关)
- [用户相关](#用户相关)
- [后台管理接口](#后台管理接口)
- [管理员登录](#管理员登录)
- [轮播图管理](#轮播图管理)
- [商品管理](#商品管理)
- [分类管理](#分类管理)
- [订单管理](#订单管理)
- [会员管理](#会员管理)
- [公共接口](#公共接口)
---
## 前台商城接口
### 首页相关
#### 1. 获取商城首页
**接口地址**: `GET /` 或 `GET /index` 或 `GET /index.html`
**接口描述**: 获取商城首页数据,包括轮播图、分类、热销商品、新品、推荐商品
**请求参数**: 无
**响应数据**:
```html
返回 Thymeleaf 模板渲染的 HTML 页面
```
**页面数据**:
- `categories`: 商品分类列表
- `carousels`: 轮播图列表(最多5个)
- `hotGoodses`: 热销商品列表(最多5个)
- `newGoodses`: 新品列表(最多5个)
- `recommendGoodses`: 推荐商品列表(最多10个)
---
### 商品相关
#### 2. 商品搜索
**接口地址**: `GET /search`
**接口描述**: 搜索商品列表
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| keyword | String | 否 | 搜索关键词 |
| goodsCategoryId | Long | 否 | 商品分类ID |
| orderBy | String | 否 | 排序方式(new:新品, price:价格) |
| page | Integer | 否 | 页码,默认1 |
**响应数据**:
```html
返回商品列表页面
```
#### 3. 商品详情
**接口地址**: `GET /goods/detail/{goodsId}`
**接口描述**: 获取商品详细信息
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| goodsId | Long | 是 | 商品ID(路径参数) |
**响应数据**:
```html
返回商品详情页面
```
---
### 购物车相关
#### 4. 查看购物车
**接口地址**: `GET /shop-cart`
**接口描述**: 查看当前用户的购物车
**请求参数**: 无(需要登录)
**响应数据**:
```html
返回购物车页面
```
#### 5. 添加商品到购物车
**接口地址**: `POST /shop-cart`
**接口描述**: 将商品添加到购物车
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| goodsId | Long | 是 | 商品ID |
| goodsCount | Integer | 是 | 商品数量 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "success",
"data": null
}
```
#### 6. 更新购物车商品数量
**接口地址**: `PUT /shop-cart`
**接口描述**: 更新购物车中商品的数量
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| cartItemId | Long | 是 | 购物车项ID |
| goodsCount | Integer | 是 | 新的商品数量 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "success"
}
```
#### 7. 删除购物车商品
**接口地址**: `DELETE /shop-cart/{cartItemId}`
**接口描述**: 从购物车中删除商品
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| cartItemId | Long | 是 | 购物车项ID(路径参数) |
**响应数据**:
```json
{
"resultCode": 200,
"message": "success"
}
```
---
### 订单相关
#### 8. 订单结算页面
**接口地址**: `GET /shop-cart/settle`
**接口描述**: 获取订单结算页面
**请求参数**: 无(需要登录)
**响应数据**:
```html
返回订单结算页面
```
#### 9. 生成订单
**接口地址**: `POST /saveOrder`
**接口描述**: 提交订单
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| addressId | Long | 是 | 收货地址ID |
| cartItemIds | String | 是 | 购物车项ID列表(逗号分隔) |
**响应数据**:
```json
{
"resultCode": 200,
"message": "success",
"data": "订单号"
}
```
#### 10. 我的订单列表
**接口地址**: `GET /orders`
**接口描述**: 查看当前用户的订单列表
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| page | Integer | 否 | 页码,默认1 |
| status | String | 否 | 订单状态 |
**响应数据**:
```html
返回订单列表页面
```
#### 11. 订单详情
**接口地址**: `GET /orders/{orderNo}`
**接口描述**: 查看订单详细信息
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| orderNo | String | 是 | 订单号(路径参数) |
**响应数据**:
```html
返回订单详情页面
```
#### 12. 取消订单
**接口地址**: `PUT /orders/{orderNo}/cancel`
**接口描述**: 取消订单
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| orderNo | String | 是 | 订单号(路径参数) |
**响应数据**:
```json
{
"resultCode": 200,
"message": "success"
}
```
#### 13. 确认收货
**接口地址**: `PUT /orders/{orderNo}/finish`
**接口描述**: 确认收货
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| orderNo | String | 是 | 订单号(路径参数) |
**响应数据**:
```json
{
"resultCode": 200,
"message": "success"
}
```
---
### 用户相关
#### 14. 用户注册
**接口地址**: `POST /register`
**接口描述**: 用户注册
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| loginName | String | 是 | 登录名 |
| password | String | 是 | 密码 |
| verifyCode | String | 是 | 验证码 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "注册成功"
}
```
#### 15. 用户登录
**接口地址**: `POST /login`
**接口描述**: 用户登录
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| loginName | String | 是 | 登录名 |
| password | String | 是 | 密码 |
| verifyCode | String | 是 | 验证码 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "登录成功"
}
```
#### 16. 用户登出
**接口地址**: `POST /logout`
**接口描述**: 用户退出登录
**请求参数**: 无
**响应数据**:
```html
跳转到登录页面
```
#### 17. 个人信息
**接口地址**: `GET /personal`
**接口描述**: 查看个人信息
**请求参数**: 无(需要登录)
**响应数据**:
```html
返回个人中心页面
```
#### 18. 修改个人信息
**接口地址**: `POST /personal/updateInfo`
**接口描述**: 修改个人信息
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| nickName | String | 是 | 昵称 |
| introduceSign | String | 否 | 个性签名 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "修改成功"
}
```
---
## 后台管理接口
### 管理员登录
#### 19. 管理员登录页面
**接口地址**: `GET /admin/login`
**接口描述**: 获取管理员登录页面
**请求参数**: 无
**响应数据**:
```html
返回管理员登录页面
```
#### 20. 管理员登录
**接口地址**: `POST /admin/login`
**接口描述**: 管理员登录验证
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| userName | String | 是 | 用户名 |
| password | String | 是 | 密码 |
| verifyCode | String | 是 | 验证码 |
**响应数据**:
```html
登录成功:跳转到管理后台首页
登录失败:返回登录页面并显示错误信息
```
#### 21. 管理员登出
**接口地址**: `GET /admin/logout`
**接口描述**: 管理员退出登录
**请求参数**: 无
**响应数据**:
```html
跳转到登录页面
```
#### 22. 管理员个人资料
**接口地址**: `GET /admin/profile`
**接口描述**: 查看管理员个人资料
**请求参数**: 无(需要登录)
**响应数据**:
```html
返回个人资料页面
```
#### 23. 修改管理员密码
**接口地址**: `POST /admin/profile/password`
**接口描述**: 修改管理员密码
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| originalPassword | String | 是 | 原密码 |
| newPassword | String | 是 | 新密码 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "修改成功"
}
```
---
### 轮播图管理
#### 24. 轮播图列表
**接口地址**: `GET /admin/carousels`
**接口描述**: 获取轮播图列表(分页)
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| page | Integer | 否 | 页码,默认1 |
| limit | Integer | 否 | 每页数量,默认10 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "success",
"data": {
"totalCount": 100,
"currPage": 1,
"list": [...]
}
}
```
#### 25. 添加轮播图
**接口地址**: `POST /admin/carousels/save`
**接口描述**: 添加新的轮播图
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| carouselUrl | String | 是 | 图片URL |
| redirectUrl | String | 是 | 跳转URL |
| carouselRank | Integer | 是 | 排序值 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "保存成功"
}
```
#### 26. 修改轮播图
**接口地址**: `POST /admin/carousels/update`
**接口描述**: 修改轮播图信息
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| carouselId | Integer | 是 | 轮播图ID |
| carouselUrl | String | 是 | 图片URL |
| redirectUrl | String | 是 | 跳转URL |
| carouselRank | Integer | 是 | 排序值 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "修改成功"
}
```
#### 27. 删除轮播图
**接口地址**: `POST /admin/carousels/delete`
**接口描述**: 删除轮播图
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| ids | Integer[] | 是 | 轮播图ID数组 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "删除成功"
}
```
---
### 商品管理
#### 28. 商品列表
**接口地址**: `GET /admin/goods/list`
**接口描述**: 获取商品列表(分页)
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| page | Integer | 否 | 页码,默认1 |
| limit | Integer | 否 | 每页数量,默认10 |
| goodsName | String | 否 | 商品名称(模糊查询) |
| goodsSellStatus | Integer | 否 | 上架状态 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "success",
"data": {
"totalCount": 100,
"currPage": 1,
"list": [...]
}
}
```
#### 29. 添加商品
**接口地址**: `POST /admin/goods/save`
**接口描述**: 添加新商品
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| goodsName | String | 是 | 商品名称 |
| goodsIntro | String | 是 | 商品简介 |
| goodsCategoryId | Long | 是 | 分类ID |
| goodsCoverImg | String | 是 | 封面图 |
| originalPrice | Integer | 是 | 原价 |
| sellingPrice | Integer | 是 | 售价 |
| stockNum | Integer | 是 | 库存 |
| tag | String | 否 | 标签 |
| goodsSellStatus | Byte | 是 | 上架状态 |
| goodsDetailContent | String | 是 | 商品详情(富文本) |
**响应数据**:
```json
{
"resultCode": 200,
"message": "保存成功"
}
```
#### 30. 修改商品
**接口地址**: `POST /admin/goods/update`
**接口描述**: 修改商品信息
**请求参数**: 同添加商品,需额外传递 `goodsId`
**响应数据**:
```json
{
"resultCode": 200,
"message": "修改成功"
}
```
#### 31. 上架/下架商品
**接口地址**: `POST /admin/goods/status/{sellStatus}`
**接口描述**: 批量修改商品上架状态
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| sellStatus | Integer | 是 | 状态值(路径参数,0下架,1上架) |
| ids | Long[] | 是 | 商品ID数组 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "修改成功"
}
```
---
### 分类管理
#### 32. 分类列表
**接口地址**: `GET /admin/categories/list`
**接口描述**: 获取分类列表(分页)
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| page | Integer | 否 | 页码,默认1 |
| limit | Integer | 否 | 每页数量,默认10 |
| categoryLevel | Integer | 否 | 分类级别(1/2/3) |
| parentId | Long | 否 | 父分类ID |
**响应数据**:
```json
{
"resultCode": 200,
"message": "success",
"data": {
"totalCount": 100,
"currPage": 1,
"list": [...]
}
}
```
#### 33. 添加分类
**接口地址**: `POST /admin/categories/save`
**接口描述**: 添加商品分类
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| categoryLevel | Byte | 是 | 分类级别 |
| categoryName | String | 是 | 分类名称 |
| parentId | Long | 是 | 父分类ID |
| categoryRank | Integer | 是 | 排序值 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "保存成功"
}
```
#### 34. 获取分类详情
**接口地址**: `GET /admin/categories/info/{id}`
**接口描述**: 获取分类详细信息
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| id | Long | 是 | 分类ID(路径参数) |
**响应数据**:
```json
{
"resultCode": 200,
"message": "success",
"data": {...}
}
```
---
### 订单管理
#### 35. 订单列表
**接口地址**: `GET /admin/orders/list`
**接口描述**: 获取订单列表(分页)
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| page | Integer | 否 | 页码,默认1 |
| limit | Integer | 否 | 每页数量,默认10 |
| orderNo | String | 否 | 订单号 |
| orderStatus | Integer | 否 | 订单状态 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "success",
"data": {
"totalCount": 100,
"currPage": 1,
"list": [...]
}
}
```
#### 36. 订单详情
**接口地址**: `GET /admin/orders/detail/{orderId}`
**接口描述**: 查看订单详细信息
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| orderId | Long | 是 | 订单ID(路径参数) |
**响应数据**:
```json
{
"resultCode": 200,
"message": "success",
"data": {...}
}
```
#### 37. 配货
**接口地址**: `POST /admin/orders/checkDone`
**接口描述**: 订单配货
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| ids | Long[] | 是 | 订单ID数组 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "配货成功"
}
```
#### 38. 出库
**接口地址**: `POST /admin/orders/checkOut`
**接口描述**: 订单出库
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| ids | Long[] | 是 | 订单ID数组 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "出库成功"
}
```
#### 39. 关闭订单
**接口地址**: `POST /admin/orders/close`
**接口描述**: 关闭订单
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| ids | Long[] | 是 | 订单ID数组 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "关闭成功"
}
```
---
### 会员管理
#### 40. 会员列表
**接口地址**: `GET /admin/users/list`
**接口描述**: 获取会员列表(分页)
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| page | Integer | 否 | 页码,默认1 |
| limit | Integer | 否 | 每页数量,默认10 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "success",
"data": {
"totalCount": 100,
"currPage": 1,
"list": [...]
}
}
```
#### 41. 禁用会员
**接口地址**: `POST /admin/users/lock/{lockStatus}`
**接口描述**: 批量禁用/解禁会员
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| lockStatus | Integer | 是 | 状态值(路径参数,0正常,1锁定) |
| ids | Long[] | 是 | 用户ID数组 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "修改成功"
}
```
---
## 公共接口
#### 42. 获取验证码
**接口地址**: `GET /common/kaptcha`
**接口描述**: 生成验证码图片
**请求参数**: 无
**响应数据**:
```
图片流(image/jpeg)
```
#### 43. 文件上传
**接口地址**: `POST /admin/upload/file`
**接口描述**: 上传文件(图片)
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| file | MultipartFile | 是 | 文件对象 |
**响应数据**:
```json
{
"resultCode": 200,
"message": "上传成功",
"data": "文件访问路径"
}
```
---
## 状态码说明
### 通用状态码
| 状态码 | 说明 |
|--------|------|
| 200 | 成功 |
| 500 | 服务器内部错误 |
### 业务状态码
| 状态码 | 说明 |
|--------|------|
| SUCCESS | 成功 |
| ERROR | 失败 |
| DB_ERROR | 数据库异常 |
| PARAMS_ERROR | 参数异常 |
| NOT_LOGIN_ERROR | 未登录 |
| DATA_NOT_EXIST | 数据不存在 |
| GOODS_SAVE_ERROR | 商品保存失败 |
| GOODS_UPDATE_ERROR | 商品更新失败 |
| ORDER_NOT_EXIST_ERROR | 订单不存在 |
| NULL_ADDRESS_ERROR | 地址为空 |
| LOGIN_ERROR | 登录失败 |
| NOT_SALE_GOODS | 商品已下架 |
---
## 数据模型
### 商品对象 (Goods)
```json
{
"goodsId": 1,
"goodsName": "商品名称",
"goodsIntro": "商品简介",
"goodsCategoryId": 100,
"goodsCoverImg": "/upload/xxx.jpg",
"goodsDetailContent": "商品详情HTML",
"originalPrice": 100,
"sellingPrice": 80,
"stockNum": 999,
"tag": "热销",
"goodsSellStatus": 0,
"createTime": "2023-01-01 12:00:00",
"updateTime": "2023-01-01 12:00:00"
}
```
### 订单对象 (Order)
```json
{
"orderId": 1,
"orderNo": "202301010001",
"userId": 1,
"totalPrice": 100,
"payStatus": 1,
"payType": 1,
"payTime": "2023-01-01 12:00:00",
"orderStatus": 1,
"extraInfo": "",
"isDeleted": 0,
"createTime": "2023-01-01 12:00:00",
"updateTime": "2023-01-01 12:00:00"
}
```
### 用户对象 (User)
```json
{
"userId": 1,
"nickName": "用户昵称",
"loginName": "登录名",
"passwordMd5": "MD5加密密码",
"introduceSign": "个性签名",
"isDeleted": 0,
"lockedFlag": 0,
"createTime": "2023-01-01 12:00:00"
}
```
---
## 注意事项
1. **认证机制**: 所有需要登录的接口都需要携带有效的 Session Cookie
2. **参数校验**: 所有接口都会进行参数校验,参数不合法会返回相应错误信息
3. **跨域访问**: 如果前后端分离部署,需要配置 CORS
4. **文件上传**: 支持的文件格式为 jpg、png、jpeg、gif,大小限制请查看配置
5. **分页参数**: 默认每页10条,最大不超过100条
---
**文档版本**: v1.0.0
**最后更新**: 2025-10-23
**维护者**: newbee-mall 开发团队
================================================
FILE: docs/DEVELOPMENT.md
================================================
# newbee-mall 开发指南
## 目录
- [项目介绍](#项目介绍)
- [技术栈](#技术栈)
- [项目结构](#项目结构)
- [开发环境搭建](#开发环境搭建)
- [快速开始](#快速开始)
- [开发规范](#开发规范)
- [核心功能实现](#核心功能实现)
- [常用开发任务](#常用开发任务)
- [测试指南](#测试指南)
- [部署指南](#部署指南)
---
## 项目介绍
newbee-mall 是一个基于 Spring Boot 的电商系统,包含前台商城和后台管理两个部分。
**项目特点**:
- 代码结构清晰,易于理解和学习
- 功能完善,包含电商系统的核心功能
- 技术栈主流,适合学习和实践
- 开箱即用,2秒即可启动
**主要功能模块**:
**前台商城**:
- 首页展示(轮播图、分类、商品推荐)
- 商品搜索与展示
- 购物车管理
- 订单流程(下单、支付、查看)
- 用户中心(个人信息、订单管理)
**后台管理**:
- 管理员登录与权限控制
- 轮播图管理
- 商品分类管理
- 商品管理
- 订单管理
- 会员管理
---
## 技术栈
### 后端技术
| 技术 | 版本 | 说明 |
|------|------|------|
| Spring Boot | 2.6.3 | 核心框架 |
| Spring MVC | - | MVC 框架 |
| MyBatis | 2.2.2 | ORM 框架 |
| Thymeleaf | - | 模板引擎 |
| MySQL | 5.7+ | 数据库 |
| Hutool | 5.7.22 | Java 工具库 |
| Maven | 3.x | 项目构建工具 |
### 前端技术
| 技术 | 说明 |
|------|------|
| Thymeleaf | 服务端模板引擎 |
| jQuery | JavaScript 库 |
| Bootstrap | UI 框架 |
| AdminLTE | 后台管理模板 |
| jqGrid | 数据表格插件 |
| wangEditor | 富文本编辑器 |
| SweetAlert | 弹窗组件 |
---
## 项目结构
```
newbee-mall/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── ltd/newbee/mall/
│ │ │ ├── common/ # 公共常量和枚举
│ │ │ │ ├── Constants.java
│ │ │ │ ├── ServiceResultEnum.java
│ │ │ │ └── ...
│ │ │ ├── config/ # 配置类
│ │ │ │ └── WebMvcConfig.java
│ │ │ ├── controller/ # 控制器层
│ │ │ │ ├── admin/ # 后台管理控制器
│ │ │ │ ├── mall/ # 前台商城控制器
│ │ │ │ ├── common/ # 公共控制器
│ │ │ │ └── vo/ # 视图对象
│ │ │ ├── dao/ # 数据访问层
│ │ │ │ ├── AdminUserMapper.java
│ │ │ │ ├── NewBeeMallGoodsMapper.java
│ │ │ │ └── ...
│ │ │ ├── entity/ # 实体类
│ │ │ │ ├── AdminUser.java
│ │ │ │ ├── NewBeeMallGoods.java
│ │ │ │ └── ...
│ │ │ ├── interceptor/ # 拦截器
│ │ │ │ ├── AdminLoginInterceptor.java
│ │ │ │ └── NewBeeMallLoginInterceptor.java
│ │ │ ├── service/ # 服务层接口
│ │ │ │ ├── AdminUserService.java
│ │ │ │ └── ...
│ │ │ │ └── impl/ # 服务层实现
│ │ │ │ ├── AdminUserServiceImpl.java
│ │ │ │ └── ...
│ │ │ ├── util/ # 工具类
│ │ │ │ ├── MD5Util.java
│ │ │ │ ├── Result.java
│ │ │ │ └── ...
│ │ │ └── NewBeeMallApplication.java # 启动类
│ │ └── resources/
│ │ ├── mapper/ # MyBatis XML 映射文件
│ │ │ ├── AdminUserMapper.xml
│ │ │ └── ...
│ │ ├── static/ # 静态资源
│ │ │ ├── admin/ # 后台静态资源
│ │ │ └── mall/ # 前台静态资源
│ │ ├── templates/ # Thymeleaf 模板
│ │ │ ├── admin/ # 后台页面
│ │ │ └── mall/ # 前台页面
│ │ └── application.properties # 配置文件
│ └── test/ # 测试代码
├── docs/ # 项目文档
├── pom.xml # Maven 配置
└── README.md # 项目说明
```
---
## 开发环境搭建
### 1. 安装必要软件
#### 1.1 安装 JDK
下载并安装 JDK 1.8 或以上版本,配置环境变量。
验证安装:
```bash
java -version
```
#### 1.2 安装 Maven
下载并安装 Maven 3.x,配置环境变量。
验证安装:
```bash
mvn -version
```
推荐配置阿里云镜像(修改 `settings.xml`):
```xml
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Aliyun Maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
```
#### 1.3 安装 MySQL
下载并安装 MySQL 5.7 或以上版本。
创建数据库:
```sql
CREATE DATABASE newbee_mall_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
#### 1.4 安装 IDE
推荐使用 IntelliJ IDEA 或 Eclipse。
### 2. 克隆项目
```bash
git clone https://github.com/newbee-ltd/newbee-mall.git
cd newbee-mall
```
### 3. 导入数据库
执行项目中的 SQL 脚本(通常在 `sql` 或 `database` 目录):
```bash
mysql -u root -p newbee_mall_db < newbee_mall_schema.sql
mysql -u root -p newbee_mall_db < newbee_mall_data.sql
```
### 4. 配置项目
修改 `src/main/resources/application.properties`:
```properties
# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/newbee_mall_db?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&useSSL=false&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=你的密码
# 服务器端口
server.port=28089
```
---
## 快速开始
### 方式一: IDEA 启动
1. 用 IDEA 打开项目
2. 等待 Maven 依赖下载完成
3. 找到 `NewBeeMallApplication.java`
4. 右键选择 `Run 'NewBeeMallApplication'`
### 方式二: Maven 启动
```bash
mvn clean install
mvn spring-boot:run
```
### 方式三: 命令行启动
```bash
mvn clean package
cd target
java -jar newbee-mall-1.0.0-SNAPSHOT.jar
```
### 访问项目
- 前台商城: http://localhost:28089
- 后台管理: http://localhost:28089/admin/login
---
## 开发规范
### 1. 代码规范
#### 1.1 命名规范
- **类名**: 使用大驼峰命名法(PascalCase)
```java
public class NewBeeMallGoods { }
```
- **方法名**: 使用小驼峰命名法(camelCase)
```java
public void saveGoods() { }
```
- **常量**: 使用全大写,单词间用下划线分隔
```java
public static final int MAX_GOODS_COUNT = 100;
```
- **包名**: 全小写,使用点分隔
```java
package ltd.newbee.mall.service;
```
#### 1.2 注释规范
- 类和接口必须添加注释
- 公共方法必须添加注释
- 复杂逻辑必须添加行内注释
```java
/**
* 商品服务接口
*
* @author 13
*/
public interface NewBeeMallGoodsService {
/**
* 保存商品
*
* @param goods 商品对象
* @return 保存结果
*/
Boolean saveGoods(NewBeeMallGoods goods);
}
```
#### 1.3 代码格式
- 使用4个空格缩进(不使用 Tab)
- 左大括号不换行
- if/for/while 等语句必须使用大括号
- 一行代码不超过120个字符
### 2. 分层规范
#### 2.1 Controller 层
- 只负责请求接收和响应
- 不包含业务逻辑
- 调用 Service 层完成业务处理
- 进行参数校验
```java
@Controller
public class GoodsController {
@Resource
private NewBeeMallGoodsService goodsService;
@GetMapping("/goods/detail/{goodsId}")
public String goodsDetail(@PathVariable Long goodsId, HttpServletRequest request) {
// 参数校验
if (goodsId < 1) {
return "error/error_5xx";
}
// 调用 Service
NewBeeMallGoodsDetailVO goodsDetail = goodsService.getGoodsDetail(goodsId);
// 设置返回数据
request.setAttribute("goodsDetail", goodsDetail);
return "mall/detail";
}
}
```
#### 2.2 Service 层
- 包含业务逻辑
- 事务控制在此层
- 调用 DAO 层操作数据库
```java
@Service
public class NewBeeMallGoodsServiceImpl implements NewBeeMallGoodsService {
@Resource
private NewBeeMallGoodsMapper goodsMapper;
@Override
@Transactional
public Boolean saveGoods(NewBeeMallGoods goods) {
// 业务逻辑处理
if (goods == null) {
return false;
}
// 调用 DAO
return goodsMapper.insertSelective(goods) > 0;
}
}
```
#### 2.3 DAO 层
- 只负责数据库操作
- 不包含业务逻辑
- 使用 MyBatis 接口和 XML 映射
```java
public interface NewBeeMallGoodsMapper {
int insertSelective(NewBeeMallGoods record);
NewBeeMallGoods selectByPrimaryKey(Long goodsId);
int updateByPrimaryKeySelective(NewBeeMallGoods record);
}
```
### 3. 异常处理
- 使用统一的异常处理机制
- 自定义业务异常
```java
public class NewBeeMallException extends RuntimeException {
public NewBeeMallException(String message) {
super(message);
}
public static void fail(String message) {
throw new NewBeeMallException(message);
}
}
```
### 4. 返回结果规范
- 使用统一的返回对象 `Result`
- 使用枚举定义返回码和消息
```java
Result result = Result.success();
Result result = Result.error("操作失败");
```
---
## 核心功能实现
### 1. 用户登录功能
#### 1.1 前台用户登录
**流程**:
1. 用户输入用户名、密码、验证码
2. Controller 接收参数并校验
3. Service 验证用户名和密码(MD5)
4. 登录成功后将用户信息存入 Session
5. 返回登录结果
**代码示例**:
```java
@PostMapping("/login")
@ResponseBody
public Result login(@RequestParam("loginName") String loginName,
@RequestParam("password") String password,
HttpSession session) {
// 参数校验
if (StringUtils.isEmpty(loginName) || StringUtils.isEmpty(password)) {
return Result.error("参数不能为空");
}
// 调用 Service 验证
String loginResult = newBeeMallUserService.login(loginName, password, session);
if (ServiceResultEnum.SUCCESS.getResult().equals(loginResult)) {
return Result.success();
}
return Result.error(loginResult);
}
```
#### 1.2 登录拦截器
**作用**: 拦截需要登录才能访问的请求
```java
@Component
public class NewBeeMallLoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
Object user = session.getAttribute("mallUser");
if (user == null) {
response.sendRedirect("/login");
return false;
}
return true;
}
}
```
**配置拦截器**:
```java
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Resource
private NewBeeMallLoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/personal/**")
.addPathPatterns("/shop-cart/**")
.addPathPatterns("/orders/**")
.excludePathPatterns("/login")
.excludePathPatterns("/register");
}
}
```
### 2. 购物车功能
#### 2.1 添加商品到购物车
```java
@PostMapping("/shop-cart")
@ResponseBody
public Result saveShoppingCartItem(@RequestBody NewBeeMallShoppingCartItem shoppingCartItem,
HttpSession session) {
// 获取当前登录用户
NewBeeMallUserVO user = (NewBeeMallUserVO) session.getAttribute("mallUser");
shoppingCartItem.setUserId(user.getUserId());
// 调用 Service 保存
String saveResult = newBeeMallShoppingCartService.saveNewBeeMallCartItem(shoppingCartItem);
if (ServiceResultEnum.SUCCESS.getResult().equals(saveResult)) {
return Result.success();
}
return Result.error(saveResult);
}
```
#### 2.2 购物车列表查询
```java
@GetMapping("/shop-cart")
public String cartListPage(HttpServletRequest request, HttpSession session) {
NewBeeMallUserVO user = (NewBeeMallUserVO) session.getAttribute("mallUser");
// 查询购物车列表
List<NewBeeMallShoppingCartItemVO> myShoppingCartItems =
newBeeMallShoppingCartService.getMyShoppingCartItems(user.getUserId());
request.setAttribute("cartItems", myShoppingCartItems);
return "mall/cart";
}
```
### 3. 订单功能
#### 3.1 生成订单
```java
@PostMapping("/saveOrder")
@ResponseBody
@Transactional
public Result saveOrder(@RequestParam Long addressId,
@RequestParam String cartItemIds,
HttpSession session) {
// 获取当前用户
NewBeeMallUserVO user = (NewBeeMallUserVO) session.getAttribute("mallUser");
// 购物车项 ID 转换
List<Long> itemIdList = Arrays.stream(cartItemIds.split(","))
.map(Long::parseLong)
.collect(Collectors.toList());
// 生成订单
String saveOrderResult = newBeeMallOrderService.saveOrder(user.getUserId(), addressId, itemIdList);
if (ServiceResultEnum.SUCCESS.getResult().equals(saveOrderResult)) {
return Result.success();
}
return Result.error(saveOrderResult);
}
```
#### 3.2 订单状态流转
订单状态定义:
- 0: 待支付
- 1: 已支付
- 2: 配货中
- 3: 出库成功
- 4: 交易成功
- -1: 手动关闭
- -2: 超时关闭
- -3: 商家关闭
### 4. 文件上传功能
```java
@PostMapping("/admin/upload/file")
@ResponseBody
public Result upload(@RequestParam("file") MultipartFile file) {
// 文件名校验
String fileName = file.getOriginalFilename();
String suffixName = fileName.substring(fileName.lastIndexOf("."));
// 生成新文件名
String newFileName = UUID.randomUUID().toString() + suffixName;
// 保存文件
File destFile = new File(uploadPath + newFileName);
file.transferTo(destFile);
// 返回文件访问路径
return Result.success(newFileName);
}
```
### 5. 分页功能
```java
@GetMapping("/admin/goods/list")
@ResponseBody
public Result list(@RequestParam Map<String, Object> params) {
PageQueryUtil pageUtil = new PageQueryUtil(params);
// 查询分页数据
PageResult pageResult = newBeeMallGoodsService.getNewBeeMallGoodsPage(pageUtil);
return Result.success(pageResult);
}
```
---
## 常用开发任务
### 1. 添加新的页面
#### 1.1 创建 Controller
```java
@Controller
@RequestMapping("/demo")
public class DemoController {
@GetMapping("/index")
public String index() {
return "mall/demo/index";
}
}
```
#### 1.2 创建模板文件
在 `src/main/resources/templates/mall/demo/` 目录下创建 `index.html`
#### 1.3 添加静态资源
在 `src/main/resources/static/mall/` 目录下添加 CSS、JS 文件
### 2. 添加新的 API 接口
#### 2.1 创建实体类
```java
public class Demo {
private Long id;
private String name;
// getter/setter
}
```
#### 2.2 创建 Mapper 接口
```java
public interface DemoMapper {
List<Demo> selectList();
int insert(Demo demo);
}
```
#### 2.3 创建 Mapper XML
```xml
<mapper namespace="ltd.newbee.mall.dao.DemoMapper">
<select id="selectList" resultType="ltd.newbee.mall.entity.Demo">
SELECT * FROM tb_demo
</select>
</mapper>
```
#### 2.4 创建 Service
```java
public interface DemoService {
List<Demo> getList();
}
@Service
public class DemoServiceImpl implements DemoService {
@Resource
private DemoMapper demoMapper;
@Override
public List<Demo> getList() {
return demoMapper.selectList();
}
}
```
#### 2.5 创建 Controller
```java
@RestController
@RequestMapping("/api/demo")
public class DemoController {
@Resource
private DemoService demoService;
@GetMapping("/list")
public Result list() {
return Result.success(demoService.getList());
}
}
```
### 3. 添加定时任务
```java
@Component
@EnableScheduling
public class ScheduledTask {
@Scheduled(cron = "0 0 2 * * ?")
public void task() {
// 定时任务逻辑
}
}
```
### 4. 添加拦截器
```java
@Component
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// 前置处理
return true;
}
}
```
---
## 测试指南
### 1. 单元测试
```java
@SpringBootTest
public class GoodsServiceTest {
@Resource
private NewBeeMallGoodsService goodsService;
@Test
public void testGetGoodsDetail() {
NewBeeMallGoodsDetailVO goodsDetail = goodsService.getGoodsDetail(1L);
assertNotNull(goodsDetail);
}
}
```
### 2. 接口测试
使用 Postman 或其他工具测试 API 接口。
### 3. 功能测试
手动测试各个功能模块是否正常运行。
---
## 部署指南
### 1. 打包项目
```bash
mvn clean package -DskipTests
```
### 2. 服务器环境准备
- 安装 JDK 1.8+
- 安装 MySQL 5.7+
- 导入数据库
### 3. 上传并运行
```bash
# 上传 jar 包
scp target/newbee-mall-1.0.0-SNAPSHOT.jar user@server:/app/
# SSH 登录服务器
ssh user@server
# 运行项目
nohup java -jar /app/newbee-mall-1.0.0-SNAPSHOT.jar --spring.profiles.active=prod > /app/logs/app.log 2>&1 &
```
### 4. 配置 Nginx 反向代理
```nginx
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:28089;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
```
### 5. 配置 HTTPS
使用 Let's Encrypt 获取免费 SSL 证书。
---
## 常见问题
详见 [FAQ 文档](./FAQ.md)
---
## 参考资料
- [Spring Boot 官方文档](https://spring.io/projects/spring-boot)
- [MyBatis 官方文档](https://mybatis.org/mybatis-3/)
- [Thymeleaf 官方文档](https://www.thymeleaf.org/)
---
**文档版本**: v1.0.0
**最后更新**: 2025-10-23
**维护者**: newbee-mall 开发团队
================================================
FILE: docs/FAQ.md
================================================
# newbee-mall 常见问题 FAQ
## 目录
- [环境配置相关](#环境配置相关)
- [项目启动相关](#项目启动相关)
- [功能使用相关](#功能使用相关)
- [开发调试相关](#开发调试相关)
- [部署运维相关](#部署运维相关)
---
## 环境配置相关
### Q1: 项目需要什么样的开发环境?
**A:** newbee-mall 项目的基本环境要求如下:
- JDK 1.8 或以上版本
- Maven 3.x
- MySQL 5.7 或以上版本
- IDE:推荐使用 IntelliJ IDEA 或 Eclipse
### Q2: 如何配置数据库连接?
**A:** 数据库配置位于 `src/main/resources/application.properties` 文件中:
```properties
spring.datasource.url=jdbc:mysql://localhost:3306/newbee_mall_db
spring.datasource.username=root
spring.datasource.password=123456
```
请根据实际情况修改数据库地址、用户名和密码。
### Q3: 数据库脚本在哪里?
**A:** 数据库初始化脚本通常位于项目的 `sql` 或 `database` 目录中。首次运行前需要先执行 SQL 脚本创建数据库和表结构。
### Q4: Maven 依赖下载失败怎么办?
**A:** 可以尝试以下方法:
1. 检查网络连接
2. 更换 Maven 镜像源(推荐使用阿里云镜像)
3. 清理本地仓库缓存:`mvn clean`
4. 重新下载依赖:`mvn dependency:resolve`
---
## 项目启动相关
### Q5: 如何启动项目?
**A:** 有以下几种方式:
1. **IDEA 启动**:直接运行 `NewBeeMallApplication` 主类
2. **Maven 启动**:执行 `mvn spring-boot:run`
3. **命令行启动**:先打包 `mvn clean package`,然后运行 `java -jar target/newbee-mall-1.0.0-SNAPSHOT.jar`
### Q6: 项目默认端口是多少?
**A:** 默认端口是 **28089**,可在 `application.properties` 中修改:
```properties
server.port=28089
```
### Q7: 启动后如何访问?
**A:**
- **前台商城**:http://localhost:28089
- **后台管理**:http://localhost:28089/admin/login
- 默认管理员账号需要查看数据库或初始化脚本
### Q8: 启动时报错 "端口被占用" 怎么办?
**A:** 可以:
1. 修改 `application.properties` 中的端口号
2. 或者关闭占用该端口的程序
3. Windows: `netstat -ano | findstr 28089` 查找进程并关闭
4. Linux/Mac: `lsof -i:28089` 查找进程并关闭
### Q9: 启动时报错 "数据库连接失败"?
**A:** 请检查:
1. MySQL 服务是否已启动
2. 数据库名、用户名、密码是否正确
3. 数据库是否已创建并执行了初始化脚本
4. 防火墙是否阻止了数据库连接
---
## 功能使用相关
### Q10: 如何注册用户?
**A:** 在商城首页点击注册按钮,填写用户名、密码等信息即可注册。
### Q11: 管理员默认账号是什么?
**A:** 默认管理员账号信息需要查看数据库初始化脚本中的 `tb_newbee_mall_admin_user` 表。通常为:
- 用户名:admin
- 密码:123456(MD5加密后存储)
### Q12: 如何添加商品?
**A:**
1. 登录后台管理系统
2. 进入"商品管理"模块
3. 点击"添加商品"按钮
4. 填写商品信息(名称、价格、库存、分类等)
5. 上传商品图片
6. 保存商品
### Q13: 购物车数据存储在哪里?
**A:** 购物车数据存储在数据库的 `tb_newbee_mall_shopping_cart_item` 表中,与用户ID关联。
### Q14: 订单状态有哪些?
**A:** 订单状态包括:
- 待支付
- 已支付
- 配货中
- 出库成功
- 交易成功
- 订单关闭
具体状态值定义在 `OrderStatusEnum` 枚举类中。
### Q15: 如何处理订单?
**A:** 在后台管理系统的"订单管理"模块中:
1. 查看订单列表
2. 点击订单详情查看订单信息
3. 根据订单状态进行相应操作(配货、出库、关闭等)
---
## 开发调试相关
### Q16: 如何开启热部署?
**A:** 已配置 Thymeleaf 模板缓存为 false:
```properties
spring.thymeleaf.cache=false
```
对于 Java 代码修改,建议安装 spring-boot-devtools 依赖。
### Q17: 日志文件在哪里?
**A:** 项目使用 Spring Boot 默认的日志配置,日志输出到控制台。如需输出到文件,可在 `application.properties` 中配置:
```properties
logging.file.path=logs
logging.level.ltd.newbee.mall=DEBUG
```
### Q18: 如何调试 MyBatis SQL?
**A:** 在 `application.properties` 中添加:
```properties
logging.level.ltd.newbee.mall.dao=DEBUG
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
```
### Q19: 前端静态资源在哪里?
**A:** 静态资源位于:
- CSS/JS:`src/main/resources/static/`
- Thymeleaf 模板:`src/main/resources/templates/`
### Q20: 如何自定义错误页面?
**A:** 在 `src/main/resources/templates/error/` 目录下创建对应的错误页面,如 `404.html`、`500.html`。
---
## 部署运维相关
### Q21: 如何打包部署?
**A:**
1. 执行 `mvn clean package` 打包
2. 在 `target` 目录下生成 jar 包
3. 上传到服务器
4. 执行 `java -jar newbee-mall-1.0.0-SNAPSHOT.jar` 运行
### Q22: 如何配置生产环境数据库?
**A:** 建议使用 Spring Profile 配置:
1. 创建 `application-prod.properties`
2. 配置生产环境数据库信息
3. 启动时指定 profile:`java -jar app.jar --spring.profiles.active=prod`
### Q23: 如何后台运行服务?
**A:** Linux 环境下:
```bash
nohup java -jar newbee-mall-1.0.0-SNAPSHOT.jar > output.log 2>&1 &
```
### Q24: 上传文件大小限制如何配置?
**A:** 在 `application.properties` 中添加:
```properties
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=100MB
```
### Q25: Session 超时时间如何设置?
**A:** 在 `application.properties` 中配置:
```properties
server.servlet.session.timeout=30m
```
### Q26: 如何配置反向代理(Nginx)?
**A:** Nginx 配置示例:
```nginx
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:28089;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
---
## 性能优化相关
### Q27: 如何优化数据库查询性能?
**A:**
1. 为常用查询字段添加索引
2. 使用分页查询避免一次性加载大量数据
3. 合理使用缓存(如 Redis)
4. 优化 SQL 语句,避免 N+1 查询
### Q28: 如何添加缓存?
**A:** 可以集成 Redis:
1. 添加 spring-boot-starter-data-redis 依赖
2. 配置 Redis 连接信息
3. 使用 @Cacheable 注解标注需要缓存的方法
### Q29: 如何监控应用状态?
**A:** 可以集成 Spring Boot Actuator:
1. 添加 spring-boot-starter-actuator 依赖
2. 配置端点访问权限
3. 访问 `/actuator/health` 查看健康状态
---
## 安全相关
### Q30: 密码是如何加密的?
**A:** 项目使用 MD5 加密存储密码,相关代码在 `MD5Util` 工具类中。建议生产环境使用更安全的加密方式如 BCrypt。
### Q31: 如何防止 SQL 注入?
**A:** 项目使用 MyBatis 的参数绑定(PreparedStatement),可以有效防止 SQL 注入。
### Q32: Session 安全如何保障?
**A:**
1. 设置合理的 Session 超时时间
2. 使用 HTTPS 传输
3. 关键操作添加二次验证
4. 登录拦截器验证用户身份
---
## 常见错误排查
### Q33: 验证码显示不出来?
**A:**
1. 检查 hutool-captcha 依赖是否正确引入
2. 检查浏览器是否禁用了图片加载
3. 查看控制台是否有报错信息
### Q34: 文件上传失败?
**A:**
1. 检查上传文件大小是否超过限制
2. 检查上传目录是否存在且有写权限
3. 查看日志获取详细错误信息
### Q35: 分页查询数据不准确?
**A:**
1. 检查分页参数是否正确传递
2. 检查 SQL 中的 LIMIT 和 OFFSET 是否正确
3. 验证总数查询是否与分页查询条件一致
---
## 更多帮助
如果以上 FAQ 没有解决您的问题,可以通过以下方式获取帮助:
- **GitHub Issues**: https://github.com/newbee-ltd/newbee-mall/issues
- **QQ 交流群**: 796794009、719099151
- **邮箱**: 2449207463@qq.com
- **掘金小册**: https://juejin.cn/book/6844733814074245133
---
**最后更新时间**: 2025-10-23
================================================
FILE: pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!-- @author 13
@qq交流群 796794009
@email 2449207463@qq.com
@link https://github.com/newbee-ltd -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<groupId>ltd.newbee.mall</groupId>
<artifactId>newbee-mall</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>newbee-mall</name>
<description>newbee-mall是一套电商系统,包括基础版本(Spring Boot+Thymeleaf)、前后端分离版本(Spring Boot+Vue 3+Element-Plus+Vue-Router 4+Vuex 4+Vant 3) 、秒杀版本、Go语言版本、微服务版本(Spring Cloud Alibaba+Nacos+Sentinel+Seata+Spring Cloud Gateway+OpenFeign)。 前台商城系统包含首页门户、商品分类、新品上线、首页轮播、商品推荐、商品搜索、商品展示、购物车、订单结算、订单流程、个人订单管理、会员中心、帮助中心等模块。 后台管理系统包含数据面板、轮播图管理、商品管理、订单管理、会员管理、分类管理、设置等模块。</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<mybatis.start.version>2.2.2</mybatis.start.version>
<hutool-captcha.version>5.8.7</hutool-captcha.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-core</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.start.version}</version>
</dependency>
<!-- 验证码 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-captcha</artifactId>
<version>${hutool-captcha.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- @author 13
@qq交流群 796794009
@email 2449207463@qq.com
@link https://github.com/newbee-ltd
-->
</project>
================================================
FILE: src/main/java/ltd/newbee/mall/NewBeeMallApplication.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author 13
* @qq交流群 796794009
* @email 2449207463@qq.com
* @link https://github.com/newbee-ltd
*/
@MapperScan("ltd.newbee.mall.dao")
@SpringBootApplication
public class NewBeeMallApplication {
public static void main(String[] args) {
SpringApplication.run(NewBeeMallApplication.class, args);
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/common/Constants.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.common;
/**
* @author 13
* @qq交流群 796794009
* @email 2449207463@qq.com
* @link https://github.com/newbee-ltd
* @apiNote 常量配置
*/
public class Constants {
//public final static String FILE_UPLOAD_DIC = "/opt/image/upload/";//上传文件的默认url前缀,根据部署设置自行修改
public final static String FILE_UPLOAD_DIC = "D:\\upload\\";//上传文件的默认url前缀,根据部署设置自行修改
public final static int INDEX_CAROUSEL_NUMBER = 5;//首页轮播图数量(可根据自身需求修改)
public final static int INDEX_CATEGORY_NUMBER = 10;//首页一级分类的最大数量
public final static int SEARCH_CATEGORY_NUMBER = 8;//搜索页一级分类的最大数量
public final static int INDEX_GOODS_HOT_NUMBER = 4;//首页热卖商品数量
public final static int INDEX_GOODS_NEW_NUMBER = 5;//首页新品数量
public final static int INDEX_GOODS_RECOMMOND_NUMBER = 10;//首页推荐商品数量
public final static int SHOPPING_CART_ITEM_TOTAL_NUMBER = 13;//购物车中商品的最大数量(可根据自身需求修改)
public final static int SHOPPING_CART_ITEM_LIMIT_NUMBER = 5;//购物车中单个商品的最大购买数量(可根据自身需求修改)
public final static String MALL_VERIFY_CODE_KEY = "mallVerifyCode";//验证码key
public final static String MALL_USER_SESSION_KEY = "newBeeMallUser";//session中user的key
public final static int GOODS_SEARCH_PAGE_LIMIT = 10;//搜索分页的默认条数(每页10条)
public final static int ORDER_SEARCH_PAGE_LIMIT = 3;//我的订单列表分页的默认条数(每页3条)
public final static int SELL_STATUS_UP = 0;//商品上架状态
public final static int SELL_STATUS_DOWN = 1;//商品下架状态
}
================================================
FILE: src/main/java/ltd/newbee/mall/common/IndexConfigTypeEnum.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.common;
/**
* @author 13
* @qq交流群 796794009
* @email 2449207463@qq.com
* @link https://github.com/newbee-ltd
* @apiNote 首页配置项 1-搜索框热搜 2-搜索下拉框热搜 3-(首页)热销商品 4-(首页)新品上线 5-(首页)为你推荐
*/
public enum IndexConfigTypeEnum {
DEFAULT(0, "DEFAULT"),
INDEX_SEARCH_HOTS(1, "INDEX_SEARCH_HOTS"),
INDEX_SEARCH_DOWN_HOTS(2, "INDEX_SEARCH_DOWN_HOTS"),
INDEX_GOODS_HOT(3, "INDEX_GOODS_HOTS"),
INDEX_GOODS_NEW(4, "INDEX_GOODS_NEW"),
INDEX_GOODS_RECOMMOND(5, "INDEX_GOODS_RECOMMOND");
private int type;
private String name;
IndexConfigTypeEnum(int type, String name) {
this.type = type;
this.name = name;
}
public static IndexConfigTypeEnum getIndexConfigTypeEnumByType(int type) {
for (IndexConfigTypeEnum indexConfigTypeEnum : IndexConfigTypeEnum.values()) {
if (indexConfigTypeEnum.getType() == type) {
return indexConfigTypeEnum;
}
}
return DEFAULT;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/common/NewBeeMallCategoryLevelEnum.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.common;
/**
* @author 13
* @qq交流群 796794009
* @email 2449207463@qq.com
* @link https://github.com/newbee-ltd
* @apiNote 分类级别
*/
public enum NewBeeMallCategoryLevelEnum {
DEFAULT(0, "ERROR"),
LEVEL_ONE(1, "一级分类"),
LEVEL_TWO(2, "二级分类"),
LEVEL_THREE(3, "三级分类");
private int level;
private String name;
NewBeeMallCategoryLevelEnum(int level, String name) {
this.level = level;
this.name = name;
}
public static NewBeeMallCategoryLevelEnum getNewBeeMallOrderStatusEnumByLevel(int level) {
for (NewBeeMallCategoryLevelEnum newBeeMallCategoryLevelEnum : NewBeeMallCategoryLevelEnum.values()) {
if (newBeeMallCategoryLevelEnum.getLevel() == level) {
return newBeeMallCategoryLevelEnum;
}
}
return DEFAULT;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/common/NewBeeMallException.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.common;
public class NewBeeMallException extends RuntimeException {
public NewBeeMallException() {
}
public NewBeeMallException(String message) {
super(message);
}
/**
* 丢出一个异常
*
* @param message
*/
public static void fail(String message) {
throw new NewBeeMallException(message);
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/common/NewBeeMallOrderStatusEnum.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.common;
/**
* @author 13
* @qq交流群 796794009
* @email 2449207463@qq.com
* @link https://github.com/newbee-ltd
* @apiNote 订单状态:0.待支付 1.已支付 2.配货完成 3:出库成功 4.交易成功 -1.手动关闭 -2.超时关闭 -3.商家关闭
*/
public enum NewBeeMallOrderStatusEnum {
DEFAULT(-9, "ERROR"),
ORDER_PRE_PAY(0, "待支付"),
ORDER_PAID(1, "已支付"),
ORDER_PACKAGED(2, "配货完成"),
ORDER_EXPRESS(3, "出库成功"),
ORDER_SUCCESS(4, "交易成功"),
ORDER_CLOSED_BY_MALLUSER(-1, "手动关闭"),
ORDER_CLOSED_BY_EXPIRED(-2, "超时关闭"),
ORDER_CLOSED_BY_JUDGE(-3, "商家关闭");
private int orderStatus;
private String name;
NewBeeMallOrderStatusEnum(int orderStatus, String name) {
this.orderStatus = orderStatus;
this.name = name;
}
public static NewBeeMallOrderStatusEnum getNewBeeMallOrderStatusEnumByStatus(int orderStatus) {
for (NewBeeMallOrderStatusEnum newBeeMallOrderStatusEnum : NewBeeMallOrderStatusEnum.values()) {
if (newBeeMallOrderStatusEnum.getOrderStatus() == orderStatus) {
return newBeeMallOrderStatusEnum;
}
}
return DEFAULT;
}
public int getOrderStatus() {
return orderStatus;
}
public void setOrderStatus(int orderStatus) {
this.orderStatus = orderStatus;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/common/PayStatusEnum.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.common;
/**
* @author 13
* @qq交流群 796794009
* @email 2449207463@qq.com
* @link https://github.com/newbee-ltd
* @apiNote 订单状态:0.支付中 1.支付成功 -1.支付失败
*/
public enum PayStatusEnum {
DEFAULT(-1, "支付失败"),
PAY_ING(0, "支付中"),
PAY_SUCCESS(1, "支付成功");
private int payStatus;
private String name;
PayStatusEnum(int payStatus, String name) {
this.payStatus = payStatus;
this.name = name;
}
public static PayStatusEnum getPayStatusEnumByStatus(int payStatus) {
for (PayStatusEnum payStatusEnum : PayStatusEnum.values()) {
if (payStatusEnum.getPayStatus() == payStatus) {
return payStatusEnum;
}
}
return DEFAULT;
}
public int getPayStatus() {
return payStatus;
}
public void setPayStatus(int payStatus) {
this.payStatus = payStatus;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/common/PayTypeEnum.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.common;
/**
* @author 13
* @qq交流群 796794009
* @email 2449207463@qq.com
* @link https://github.com/newbee-ltd
* @apiNote 订单状态:0.无 1.支付宝 2.微信支付
*/
public enum PayTypeEnum {
DEFAULT(-1, "ERROR"),
NOT_PAY(0, "无"),
ALI_PAY(1, "支付宝"),
WEIXIN_PAY(2, "微信支付");
private int payType;
private String name;
PayTypeEnum(int payType, String name) {
this.payType = payType;
this.name = name;
}
public static PayTypeEnum getPayTypeEnumByType(int payType) {
for (PayTypeEnum payTypeEnum : PayTypeEnum.values()) {
if (payTypeEnum.getPayType() == payType) {
return payTypeEnum;
}
}
return DEFAULT;
}
public int getPayType() {
return payType;
}
public void setPayType(int payType) {
this.payType = payType;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/common/ServiceResultEnum.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.common;
/**
* @author 13
* @qq交流群 796794009
* @email 2449207463@qq.com
* @link https://github.com/newbee-ltd
*/
public enum ServiceResultEnum {
ERROR("error"),
SUCCESS("success"),
DATA_NOT_EXIST("未查询到记录!"),
SAME_CATEGORY_EXIST("已存在同级同名的分类!"),
SAME_LOGIN_NAME_EXIST("用户名已存在!"),
LOGIN_NAME_NULL("请输入登录名!"),
LOGIN_PASSWORD_NULL("请输入密码!"),
LOGIN_VERIFY_CODE_NULL("请输入验证码!"),
LOGIN_VERIFY_CODE_ERROR("验证码错误!"),
SAME_INDEX_CONFIG_EXIST("已存在相同的首页配置项!"),
GOODS_CATEGORY_ERROR("分类数据异常!"),
SAME_GOODS_EXIST("已存在相同的商品信息!"),
GOODS_NOT_EXIST("商品不存在!"),
GOODS_PUT_DOWN("商品已下架!"),
SHOPPING_CART_ITEM_LIMIT_NUMBER_ERROR("超出单个商品的最大购买数量!"),
SHOPPING_CART_ITEM_TOTAL_NUMBER_ERROR("超出购物车最大容量!"),
LOGIN_ERROR("登录失败!"),
LOGIN_USER_LOCKED("用户已被禁止登录!"),
ORDER_NOT_EXIST_ERROR("订单不存在!"),
ORDER_ITEM_NOT_EXIST_ERROR("订单项不存在!"),
NULL_ADDRESS_ERROR("地址不能为空!"),
ORDER_PRICE_ERROR("订单价格异常!"),
ORDER_GENERATE_ERROR("生成订单异常!"),
SHOPPING_ITEM_ERROR("购物车数据异常!"),
SHOPPING_ITEM_COUNT_ERROR("库存不足!"),
ORDER_STATUS_ERROR("订单状态异常!"),
CLOSE_ORDER_ERROR("关闭订单失败!"),
OPERATE_ERROR("操作失败!"),
NO_PERMISSION_ERROR("无权限!"),
DB_ERROR("database error");
private String result;
ServiceResultEnum(String result) {
this.result = result;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/config/NeeBeeMallWebMvcConfigurer.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.config;
import ltd.newbee.mall.common.Constants;
import ltd.newbee.mall.interceptor.AdminLoginInterceptor;
import ltd.newbee.mall.interceptor.NewBeeMallCartNumberInterceptor;
import ltd.newbee.mall.interceptor.NewBeeMallLoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class NeeBeeMallWebMvcConfigurer implements WebMvcConfigurer {
@Autowired
private AdminLoginInterceptor adminLoginInterceptor;
@Autowired
private NewBeeMallLoginInterceptor newBeeMallLoginInterceptor;
@Autowired
private NewBeeMallCartNumberInterceptor newBeeMallCartNumberInterceptor;
public void addInterceptors(InterceptorRegistry registry) {
// 添加一个拦截器,拦截以/admin为前缀的url路径(后台登陆拦截)
registry.addInterceptor(adminLoginInterceptor)
.addPathPatterns("/admin/**")
.excludePathPatterns("/admin/login")
.excludePathPatterns("/admin/dist/**")
.excludePathPatterns("/admin/plugins/**");
// 购物车中的数量统一处理
registry.addInterceptor(newBeeMallCartNumberInterceptor)
.excludePathPatterns("/admin/**")
.excludePathPatterns("/register")
.excludePathPatterns("/login")
.excludePathPatterns("/logout");
// 商城页面登陆拦截
registry.addInterceptor(newBeeMallLoginInterceptor)
.excludePathPatterns("/admin/**")
.excludePathPatterns("/register")
.excludePathPatterns("/login")
.excludePathPatterns("/logout")
.addPathPatterns("/goods/detail/**")
.addPathPatterns("/shop-cart")
.addPathPatterns("/shop-cart/**")
.addPathPatterns("/saveOrder")
.addPathPatterns("/orders")
.addPathPatterns("/orders/**")
.addPathPatterns("/personal")
.addPathPatterns("/personal/updateInfo")
.addPathPatterns("/selectPayType")
.addPathPatterns("/payPage");
}
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/upload/**").addResourceLocations("file:" + Constants.FILE_UPLOAD_DIC);
registry.addResourceHandler("/goods-img/**").addResourceLocations("file:" + Constants.FILE_UPLOAD_DIC);
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/admin/AdminController.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.admin;
import cn.hutool.captcha.ShearCaptcha;
import ltd.newbee.mall.common.ServiceResultEnum;
import ltd.newbee.mall.entity.AdminUser;
import ltd.newbee.mall.service.AdminUserService;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
* @author 13
* @qq交流群 796794009
* @email 2449207463@qq.com
* @link https://github.com/newbee-ltd
*/
@Controller
@RequestMapping("/admin")
public class AdminController {
@Resource
private AdminUserService adminUserService;
@GetMapping({"/login"})
public String login() {
return "admin/login";
}
@GetMapping({"/test"})
public String test() {
return "admin/test";
}
@GetMapping({"", "/", "/index", "/index.html"})
public String index(HttpServletRequest request) {
request.setAttribute("path", "index");
return "admin/index";
}
@PostMapping(value = "/login")
public String login(@RequestParam("userName") String userName,
@RequestParam("password") String password,
@RequestParam("verifyCode") String verifyCode,
HttpSession session) {
if (!StringUtils.hasText(verifyCode)) {
session.setAttribute("errorMsg", "验证码不能为空");
return "admin/login";
}
if (!StringUtils.hasText(userName) || !StringUtils.hasText(password)) {
session.setAttribute("errorMsg", "用户名或密码不能为空");
return "admin/login";
}
ShearCaptcha shearCaptcha = (ShearCaptcha) session.getAttribute("verifyCode");
if (shearCaptcha == null || !shearCaptcha.verify(verifyCode)) {
session.setAttribute("errorMsg", "验证码错误");
return "admin/login";
}
AdminUser adminUser = adminUserService.login(userName, password);
if (adminUser != null) {
session.setAttribute("loginUser", adminUser.getNickName());
session.setAttribute("loginUserId", adminUser.getAdminUserId());
//session过期时间设置为7200秒 即两小时
//session.setMaxInactiveInterval(60 * 60 * 2);
return "redirect:/admin/index";
} else {
session.setAttribute("errorMsg", "登录失败");
return "admin/login";
}
}
@GetMapping("/profile")
public String profile(HttpServletRequest request) {
Integer loginUserId = (int) request.getSession().getAttribute("loginUserId");
AdminUser adminUser = adminUserService.getUserDetailById(loginUserId);
if (adminUser == null) {
return "admin/login";
}
request.setAttribute("path", "profile");
request.setAttribute("loginUserName", adminUser.getLoginUserName());
request.setAttribute("nickName", adminUser.getNickName());
return "admin/profile";
}
@PostMapping("/profile/password")
@ResponseBody
public String passwordUpdate(HttpServletRequest request, @RequestParam("originalPassword") String originalPassword,
@RequestParam("newPassword") String newPassword) {
if (!StringUtils.hasText(originalPassword) || !StringUtils.hasText(newPassword)) {
return "参数不能为空";
}
Integer loginUserId = (int) request.getSession().getAttribute("loginUserId");
if (adminUserService.updatePassword(loginUserId, originalPassword, newPassword)) {
//修改成功后清空session中的数据,前端控制跳转至登录页
request.getSession().removeAttribute("loginUserId");
request.getSession().removeAttribute("loginUser");
request.getSession().removeAttribute("errorMsg");
return ServiceResultEnum.SUCCESS.getResult();
} else {
return "修改失败";
}
}
@PostMapping("/profile/name")
@ResponseBody
public String nameUpdate(HttpServletRequest request, @RequestParam("loginUserName") String loginUserName,
@RequestParam("nickName") String nickName) {
if (!StringUtils.hasText(loginUserName) || !StringUtils.hasText(nickName)) {
return "参数不能为空";
}
Integer loginUserId = (int) request.getSession().getAttribute("loginUserId");
if (adminUserService.updateName(loginUserId, loginUserName, nickName)) {
return ServiceResultEnum.SUCCESS.getResult();
} else {
return "修改失败";
}
}
@GetMapping("/logout")
public String logout(HttpServletRequest request) {
request.getSession().removeAttribute("loginUserId");
request.getSession().removeAttribute("loginUser");
request.getSession().removeAttribute("errorMsg");
return "admin/login";
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallCarouselController.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.admin;
import ltd.newbee.mall.common.ServiceResultEnum;
import ltd.newbee.mall.entity.Carousel;
import ltd.newbee.mall.service.NewBeeMallCarouselService;
import ltd.newbee.mall.util.PageQueryUtil;
import ltd.newbee.mall.util.Result;
import ltd.newbee.mall.util.ResultGenerator;
import org.springframework.stereotype.Controller;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
import java.util.Objects;
/**
* @author 13
* @qq交流群 796794009
* @email 2449207463@qq.com
* @link https://github.com/newbee-ltd
*/
@Controller
@RequestMapping("/admin")
public class NewBeeMallCarouselController {
@Resource
NewBeeMallCarouselService newBeeMallCarouselService;
@GetMapping("/carousels")
public String carouselPage(HttpServletRequest request) {
request.setAttribute("path", "newbee_mall_carousel");
return "admin/newbee_mall_carousel";
}
/**
* 列表
*/
@RequestMapping(value = "/carousels/list", method = RequestMethod.GET)
@ResponseBody
public Result list(@RequestParam Map<String, Object> params) {
if (ObjectUtils.isEmpty(params.get("page")) || ObjectUtils.isEmpty(params.get("limit"))) {
return ResultGenerator.genFailResult("参数异常!");
}
PageQueryUtil pageUtil = new PageQueryUtil(params);
return ResultGenerator.genSuccessResult(newBeeMallCarouselService.getCarouselPage(pageUtil));
}
/**
* 添加
*/
@RequestMapping(value = "/carousels/save", method = RequestMethod.POST)
@ResponseBody
public Result save(@RequestBody Carousel carousel) {
if (!StringUtils.hasText(carousel.getCarouselUrl())
|| Objects.isNull(carousel.getCarouselRank())) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallCarouselService.saveCarousel(carousel);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 修改
*/
@RequestMapping(value = "/carousels/update", method = RequestMethod.POST)
@ResponseBody
public Result update(@RequestBody Carousel carousel) {
if (Objects.isNull(carousel.getCarouselId())
|| !StringUtils.hasText(carousel.getCarouselUrl())
|| Objects.isNull(carousel.getCarouselRank())) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallCarouselService.updateCarousel(carousel);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 详情
*/
@GetMapping("/carousels/info/{id}")
@ResponseBody
public Result info(@PathVariable("id") Integer id) {
Carousel carousel = newBeeMallCarouselService.getCarouselById(id);
if (carousel == null) {
return ResultGenerator.genFailResult(ServiceResultEnum.DATA_NOT_EXIST.getResult());
}
return ResultGenerator.genSuccessResult(carousel);
}
/**
* 删除
*/
@RequestMapping(value = "/carousels/delete", method = RequestMethod.POST)
@ResponseBody
public Result delete(@RequestBody Integer[] ids) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
if (newBeeMallCarouselService.deleteBatch(ids)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult("删除失败");
}
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallGoodsCategoryController.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.admin;
import ltd.newbee.mall.common.NewBeeMallCategoryLevelEnum;
import ltd.newbee.mall.common.NewBeeMallException;
import ltd.newbee.mall.common.ServiceResultEnum;
import ltd.newbee.mall.entity.GoodsCategory;
import ltd.newbee.mall.service.NewBeeMallCategoryService;
import ltd.newbee.mall.util.PageQueryUtil;
import ltd.newbee.mall.util.Result;
import ltd.newbee.mall.util.ResultGenerator;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
/**
* @author 13
* @qq交流群 796794009
* @email 2449207463@qq.com
* @link https://github.com/newbee-ltd
*/
@Controller
@RequestMapping("/admin")
public class NewBeeMallGoodsCategoryController {
@Resource
private NewBeeMallCategoryService newBeeMallCategoryService;
@GetMapping("/categories")
public String categoriesPage(HttpServletRequest request, @RequestParam("categoryLevel") Byte categoryLevel, @RequestParam("parentId") Long parentId, @RequestParam("backParentId") Long backParentId) {
if (categoryLevel == null || categoryLevel < 1 || categoryLevel > 3) {
NewBeeMallException.fail("参数异常");
}
request.setAttribute("path", "newbee_mall_category");
request.setAttribute("parentId", parentId);
request.setAttribute("backParentId", backParentId);
request.setAttribute("categoryLevel", categoryLevel);
return "admin/newbee_mall_category";
}
/**
* 列表
*/
@RequestMapping(value = "/categories/list", method = RequestMethod.GET)
@ResponseBody
public Result list(@RequestParam Map<String, Object> params) {
if (ObjectUtils.isEmpty(params.get("page")) || ObjectUtils.isEmpty(params.get("limit")) || ObjectUtils.isEmpty(params.get("categoryLevel")) || ObjectUtils.isEmpty(params.get("parentId"))) {
return ResultGenerator.genFailResult("参数异常!");
}
PageQueryUtil pageUtil = new PageQueryUtil(params);
return ResultGenerator.genSuccessResult(newBeeMallCategoryService.getCategorisPage(pageUtil));
}
/**
* 列表
*/
@RequestMapping(value = "/categories/listForSelect", method = RequestMethod.GET)
@ResponseBody
public Result listForSelect(@RequestParam("categoryId") Long categoryId) {
if (categoryId == null || categoryId < 1) {
return ResultGenerator.genFailResult("缺少参数!");
}
GoodsCategory category = newBeeMallCategoryService.getGoodsCategoryById(categoryId);
//既不是一级分类也不是二级分类则为不返回数据
if (category == null || category.getCategoryLevel() == NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel()) {
return ResultGenerator.genFailResult("参数异常!");
}
Map categoryResult = new HashMap(4);
if (category.getCategoryLevel() == NewBeeMallCategoryLevelEnum.LEVEL_ONE.getLevel()) {
//如果是一级分类则返回当前一级分类下的所有二级分类,以及二级分类列表中第一条数据下的所有三级分类列表
//查询一级分类列表中第一个实体的所有二级分类
List<GoodsCategory> secondLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(categoryId), NewBeeMallCategoryLevelEnum.LEVEL_TWO.getLevel());
if (!CollectionUtils.isEmpty(secondLevelCategories)) {
//查询二级分类列表中第一个实体的所有三级分类
List<GoodsCategory> thirdLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(secondLevelCategories.get(0).getCategoryId()), NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel());
categoryResult.put("secondLevelCategories", secondLevelCategories);
categoryResult.put("thirdLevelCategories", thirdLevelCategories);
}
}
if (category.getCategoryLevel() == NewBeeMallCategoryLevelEnum.LEVEL_TWO.getLevel()) {
//如果是二级分类则返回当前分类下的所有三级分类列表
List<GoodsCategory> thirdLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(categoryId), NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel());
categoryResult.put("thirdLevelCategories", thirdLevelCategories);
}
return ResultGenerator.genSuccessResult(categoryResult);
}
/**
* 添加
*/
@RequestMapping(value = "/categories/save", method = RequestMethod.POST)
@ResponseBody
public Result save(@RequestBody GoodsCategory goodsCategory) {
if (Objects.isNull(goodsCategory.getCategoryLevel())
|| !StringUtils.hasText(goodsCategory.getCategoryName())
|| Objects.isNull(goodsCategory.getParentId())
|| Objects.isNull(goodsCategory.getCategoryRank())) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallCategoryService.saveCategory(goodsCategory);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 修改
*/
@RequestMapping(value = "/categories/update", method = RequestMethod.POST)
@ResponseBody
public Result update(@RequestBody GoodsCategory goodsCategory) {
if (Objects.isNull(goodsCategory.getCategoryId())
|| Objects.isNull(goodsCategory.getCategoryLevel())
|| !StringUtils.hasText(goodsCategory.getCategoryName())
|| Objects.isNull(goodsCategory.getParentId())
|| Objects.isNull(goodsCategory.getCategoryRank())) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallCategoryService.updateGoodsCategory(goodsCategory);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 详情
*/
@GetMapping("/categories/info/{id}")
@ResponseBody
public Result info(@PathVariable("id") Long id) {
GoodsCategory goodsCategory = newBeeMallCategoryService.getGoodsCategoryById(id);
if (goodsCategory == null) {
return ResultGenerator.genFailResult("未查询到数据");
}
return ResultGenerator.genSuccessResult(goodsCategory);
}
/**
* 分类删除
*/
@RequestMapping(value = "/categories/delete", method = RequestMethod.POST)
@ResponseBody
public Result delete(@RequestBody Integer[] ids) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
if (newBeeMallCategoryService.deleteBatch(ids)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult("删除失败");
}
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallGoodsController.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.admin;
import ltd.newbee.mall.common.Constants;
import ltd.newbee.mall.common.NewBeeMallCategoryLevelEnum;
import ltd.newbee.mall.common.NewBeeMallException;
import ltd.newbee.mall.common.ServiceResultEnum;
import ltd.newbee.mall.entity.GoodsCategory;
import ltd.newbee.mall.entity.NewBeeMallGoods;
import ltd.newbee.mall.service.NewBeeMallCategoryService;
import ltd.newbee.mall.service.NewBeeMallGoodsService;
import ltd.newbee.mall.util.PageQueryUtil;
import ltd.newbee.mall.util.Result;
import ltd.newbee.mall.util.ResultGenerator;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* @author 13
* @qq交流群 796794009
* @email 2449207463@qq.com
* @link https://github.com/newbee-ltd
*/
@Controller
@RequestMapping("/admin")
public class NewBeeMallGoodsController {
@Resource
private NewBeeMallGoodsService newBeeMallGoodsService;
@Resource
private NewBeeMallCategoryService newBeeMallCategoryService;
@GetMapping("/goods")
public String goodsPage(HttpServletRequest request) {
request.setAttribute("path", "newbee_mall_goods");
return "admin/newbee_mall_goods";
}
@GetMapping("/goods/edit")
public String edit(HttpServletRequest request) {
request.setAttribute("path", "edit");
//查询所有的一级分类
List<GoodsCategory> firstLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(0L), NewBeeMallCategoryLevelEnum.LEVEL_ONE.getLevel());
if (!CollectionUtils.isEmpty(firstLevelCategories)) {
//查询一级分类列表中第一个实体的所有二级分类
List<GoodsCategory> secondLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(firstLevelCategories.get(0).getCategoryId()), NewBeeMallCategoryLevelEnum.LEVEL_TWO.getLevel());
if (!CollectionUtils.isEmpty(secondLevelCategories)) {
//查询二级分类列表中第一个实体的所有三级分类
List<GoodsCategory> thirdLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(secondLevelCategories.get(0).getCategoryId()), NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel());
request.setAttribute("firstLevelCategories", firstLevelCategories);
request.setAttribute("secondLevelCategories", secondLevelCategories);
request.setAttribute("thirdLevelCategories", thirdLevelCategories);
request.setAttribute("path", "goods-edit");
return "admin/newbee_mall_goods_edit";
}
}
NewBeeMallException.fail("分类数据不完善");
return null;
}
@GetMapping("/goods/edit/{goodsId}")
public String edit(HttpServletRequest request, @PathVariable("goodsId") Long goodsId) {
request.setAttribute("path", "edit");
NewBeeMallGoods newBeeMallGoods = newBeeMallGoodsService.getNewBeeMallGoodsById(goodsId);
if (newBeeMallGoods.getGoodsCategoryId() > 0) {
if (newBeeMallGoods.getGoodsCategoryId() != null || newBeeMallGoods.getGoodsCategoryId() > 0) {
//有分类字段则查询相关分类数据返回给前端以供分类的三级联动显示
GoodsCategory currentGoodsCategory = newBeeMallCategoryService.getGoodsCategoryById(newBeeMallGoods.getGoodsCategoryId());
//商品表中存储的分类id字段为三级分类的id,不为三级分类则是错误数据
if (currentGoodsCategory != null && currentGoodsCategory.getCategoryLevel() == NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel()) {
//查询所有的一级分类
List<GoodsCategory> firstLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(0L), NewBeeMallCategoryLevelEnum.LEVEL_ONE.getLevel());
//根据parentId查询当前parentId下所有的三级分类
List<GoodsCategory> thirdLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(currentGoodsCategory.getParentId()), NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel());
//查询当前三级分类的父级二级分类
GoodsCategory secondCategory = newBeeMallCategoryService.getGoodsCategoryById(currentGoodsCategory.getParentId());
if (secondCategory != null) {
//根据parentId查询当前parentId下所有的二级分类
List<GoodsCategory> secondLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(secondCategory.getParentId()), NewBeeMallCategoryLevelEnum.LEVEL_TWO.getLevel());
//查询当前二级分类的父级一级分类
GoodsCategory firstCategory = newBeeMallCategoryService.getGoodsCategoryById(secondCategory.getParentId());
if (firstCategory != null) {
//所有分类数据都得到之后放到request对象中供前端读取
request.setAttribute("firstLevelCategories", firstLevelCategories);
request.setAttribute("secondLevelCategories", secondLevelCategories);
request.setAttribute("thirdLevelCategories", thirdLevelCategories);
request.setAttribute("firstLevelCategoryId", firstCategory.getCategoryId());
request.setAttribute("secondLevelCategoryId", secondCategory.getCategoryId());
request.setAttribute("thirdLevelCategoryId", currentGoodsCategory.getCategoryId());
}
}
}
}
}
if (newBeeMallGoods.getGoodsCategoryId() == 0) {
//查询所有的一级分类
List<GoodsCategory> firstLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(0L), NewBeeMallCategoryLevelEnum.LEVEL_ONE.getLevel());
if (!CollectionUtils.isEmpty(firstLevelCategories)) {
//查询一级分类列表中第一个实体的所有二级分类
List<GoodsCategory> secondLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(firstLevelCategories.get(0).getCategoryId()), NewBeeMallCategoryLevelEnum.LEVEL_TWO.getLevel());
if (!CollectionUtils.isEmpty(secondLevelCategories)) {
//查询二级分类列表中第一个实体的所有三级分类
List<GoodsCategory> thirdLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(secondLevelCategories.get(0).getCategoryId()), NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel());
request.setAttribute("firstLevelCategories", firstLevelCategories);
request.setAttribute("secondLevelCategories", secondLevelCategories);
request.setAttribute("thirdLevelCategories", thirdLevelCategories);
}
}
}
request.setAttribute("goods", newBeeMallGoods);
request.setAttribute("path", "goods-edit");
return "admin/newbee_mall_goods_edit";
}
/**
* 列表
*/
@RequestMapping(value = "/goods/list", method = RequestMethod.GET)
@ResponseBody
public Result list(@RequestParam Map<String, Object> params) {
if (ObjectUtils.isEmpty(params.get("page")) || ObjectUtils.isEmpty(params.get("limit"))) {
return ResultGenerator.genFailResult("参数异常!");
}
PageQueryUtil pageUtil = new PageQueryUtil(params);
return ResultGenerator.genSuccessResult(newBeeMallGoodsService.getNewBeeMallGoodsPage(pageUtil));
}
/**
* 添加
*/
@RequestMapping(value = "/goods/save", method = RequestMethod.POST)
@ResponseBody
public Result save(@RequestBody NewBeeMallGoods newBeeMallGoods) {
if (!StringUtils.hasText(newBeeMallGoods.getGoodsName())
|| !StringUtils.hasText(newBeeMallGoods.getGoodsIntro())
|| !StringUtils.hasText(newBeeMallGoods.getTag())
|| Objects.isNull(newBeeMallGoods.getOriginalPrice())
|| Objects.isNull(newBeeMallGoods.getGoodsCategoryId())
|| Objects.isNull(newBeeMallGoods.getSellingPrice())
|| Objects.isNull(newBeeMallGoods.getStockNum())
|| Objects.isNull(newBeeMallGoods.getGoodsSellStatus())
|| !StringUtils.hasText(newBeeMallGoods.getGoodsCoverImg())
|| !StringUtils.hasText(newBeeMallGoods.getGoodsDetailContent())) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallGoodsService.saveNewBeeMallGoods(newBeeMallGoods);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 修改
*/
@RequestMapping(value = "/goods/update", method = RequestMethod.POST)
@ResponseBody
public Result update(@RequestBody NewBeeMallGoods newBeeMallGoods) {
if (Objects.isNull(newBeeMallGoods.getGoodsId())
|| !StringUtils.hasText(newBeeMallGoods.getGoodsName())
|| !StringUtils.hasText(newBeeMallGoods.getGoodsIntro())
|| !StringUtils.hasText(newBeeMallGoods.getTag())
|| Objects.isNull(newBeeMallGoods.getOriginalPrice())
|| Objects.isNull(newBeeMallGoods.getSellingPrice())
|| Objects.isNull(newBeeMallGoods.getGoodsCategoryId())
|| Objects.isNull(newBeeMallGoods.getStockNum())
|| Objects.isNull(newBeeMallGoods.getGoodsSellStatus())
|| !StringUtils.hasText(newBeeMallGoods.getGoodsCoverImg())
|| !StringUtils.hasText(newBeeMallGoods.getGoodsDetailContent())) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallGoodsService.updateNewBeeMallGoods(newBeeMallGoods);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 详情
*/
@GetMapping("/goods/info/{id}")
@ResponseBody
public Result info(@PathVariable("id") Long id) {
NewBeeMallGoods goods = newBeeMallGoodsService.getNewBeeMallGoodsById(id);
return ResultGenerator.genSuccessResult(goods);
}
/**
* 批量修改销售状态
*/
@RequestMapping(value = "/goods/status/{sellStatus}", method = RequestMethod.PUT)
@ResponseBody
public Result delete(@RequestBody Long[] ids, @PathVariable("sellStatus") int sellStatus) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
if (sellStatus != Constants.SELL_STATUS_UP && sellStatus != Constants.SELL_STATUS_DOWN) {
return ResultGenerator.genFailResult("状态异常!");
}
if (newBeeMallGoodsService.batchUpdateSellStatus(ids, sellStatus)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult("修改失败");
}
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallGoodsIndexConfigController.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.admin;
import ltd.newbee.mall.common.IndexConfigTypeEnum;
import ltd.newbee.mall.common.NewBeeMallException;
import ltd.newbee.mall.common.ServiceResultEnum;
import ltd.newbee.mall.entity.IndexConfig;
import ltd.newbee.mall.service.NewBeeMallIndexConfigService;
import ltd.newbee.mall.util.PageQueryUtil;
import ltd.newbee.mall.util.Result;
import ltd.newbee.mall.util.ResultGenerator;
import org.springframework.stereotype.Controller;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
import java.util.Objects;
/**
* @author 13
* @qq交流群 796794009
* @email 2449207463@qq.com
* @link https://github.com/newbee-ltd
*/
@Controller
@RequestMapping("/admin")
public class NewBeeMallGoodsIndexConfigController {
@Resource
private NewBeeMallIndexConfigService newBeeMallIndexConfigService;
@GetMapping("/indexConfigs")
public String indexConfigsPage(HttpServletRequest request, @RequestParam("configType") int configType) {
IndexConfigTypeEnum indexConfigTypeEnum = IndexConfigTypeEnum.getIndexConfigTypeEnumByType(configType);
if (indexConfigTypeEnum.equals(IndexConfigTypeEnum.DEFAULT)) {
NewBeeMallException.fail("参数异常");
}
request.setAttribute("path", indexConfigTypeEnum.getName());
request.setAttribute("configType", configType);
return "admin/newbee_mall_index_config";
}
/**
* 列表
*/
@RequestMapping(value = "/indexConfigs/list", method = RequestMethod.GET)
@ResponseBody
public Result list(@RequestParam Map<String, Object> params) {
if (ObjectUtils.isEmpty(params.get("page")) || ObjectUtils.isEmpty(params.get("limit"))) {
return ResultGenerator.genFailResult("参数异常!");
}
PageQueryUtil pageUtil = new PageQueryUtil(params);
return ResultGenerator.genSuccessResult(newBeeMallIndexConfigService.getConfigsPage(pageUtil));
}
/**
* 添加
*/
@RequestMapping(value = "/indexConfigs/save", method = RequestMethod.POST)
@ResponseBody
public Result save(@RequestBody IndexConfig indexConfig) {
if (Objects.isNull(indexConfig.getConfigType())
|| !StringUtils.hasText(indexConfig.getConfigName())
|| Objects.isNull(indexConfig.getConfigRank())) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallIndexConfigService.saveIndexConfig(indexConfig);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 修改
*/
@RequestMapping(value = "/indexConfigs/update", method = RequestMethod.POST)
@ResponseBody
public Result update(@RequestBody IndexConfig indexConfig) {
if (Objects.isNull(indexConfig.getConfigType())
|| Objects.isNull(indexConfig.getConfigId())
|| !StringUtils.hasText(indexConfig.getConfigName())
|| Objects.isNull(indexConfig.getConfigRank())) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallIndexConfigService.updateIndexConfig(indexConfig);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 详情
*/
@GetMapping("/indexConfigs/info/{id}")
@ResponseBody
public Result info(@PathVariable("id") Long id) {
IndexConfig config = newBeeMallIndexConfigService.getIndexConfigById(id);
if (config == null) {
return ResultGenerator.genFailResult("未查询到数据");
}
return ResultGenerator.genSuccessResult(config);
}
/**
* 删除
*/
@RequestMapping(value = "/indexConfigs/delete", method = RequestMethod.POST)
@ResponseBody
public Result delete(@RequestBody Long[] ids) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
if (newBeeMallIndexConfigService.deleteBatch(ids)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult("删除失败");
}
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallOrderController.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.admin;
import ltd.newbee.mall.common.ServiceResultEnum;
import ltd.newbee.mall.controller.vo.NewBeeMallOrderItemVO;
import ltd.newbee.mall.entity.NewBeeMallOrder;
import ltd.newbee.mall.service.NewBeeMallOrderService;
import ltd.newbee.mall.util.PageQueryUtil;
import ltd.newbee.mall.util.Result;
import ltd.newbee.mall.util.ResultGenerator;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* @author 13
* @qq交流群 796794009
* @email 2449207463@qq.com
* @link https://github.com/newbee-ltd
*/
@Controller
@RequestMapping("/admin")
public class NewBeeMallOrderController {
@Resource
private NewBeeMallOrderService newBeeMallOrderService;
@GetMapping("/orders")
public String ordersPage(HttpServletRequest request) {
request.setAttribute("path", "orders");
return "admin/newbee_mall_order";
}
/**
* 列表
*/
@RequestMapping(value = "/orders/list", method = RequestMethod.GET)
@ResponseBody
public Result list(@RequestParam Map<String, Object> params) {
if (ObjectUtils.isEmpty(params.get("page")) || ObjectUtils.isEmpty(params.get("limit"))) {
return ResultGenerator.genFailResult("参数异常!");
}
PageQueryUtil pageUtil = new PageQueryUtil(params);
return ResultGenerator.genSuccessResult(newBeeMallOrderService.getNewBeeMallOrdersPage(pageUtil));
}
/**
* 修改
*/
@RequestMapping(value = "/orders/update", method = RequestMethod.POST)
@ResponseBody
public Result update(@RequestBody NewBeeMallOrder newBeeMallOrder) {
if (Objects.isNull(newBeeMallOrder.getTotalPrice())
|| Objects.isNull(newBeeMallOrder.getOrderId())
|| newBeeMallOrder.getOrderId() < 1
|| newBeeMallOrder.getTotalPrice() < 1
|| !StringUtils.hasText(newBeeMallOrder.getUserAddress())) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallOrderService.updateOrderInfo(newBeeMallOrder);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 详情
*/
@GetMapping("/order-items/{id}")
@ResponseBody
public Result info(@PathVariable("id") Long id) {
List<NewBeeMallOrderItemVO> orderItems = newBeeMallOrderService.getOrderItems(id);
if (!CollectionUtils.isEmpty(orderItems)) {
return ResultGenerator.genSuccessResult(orderItems);
}
return ResultGenerator.genFailResult(ServiceResultEnum.DATA_NOT_EXIST.getResult());
}
/**
* 配货
*/
@RequestMapping(value = "/orders/checkDone", method = RequestMethod.POST)
@ResponseBody
public Result checkDone(@RequestBody Long[] ids) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallOrderService.checkDone(ids);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 出库
*/
@RequestMapping(value = "/orders/checkOut", method = RequestMethod.POST)
@ResponseBody
public Result checkOut(@RequestBody Long[] ids) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallOrderService.checkOut(ids);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 关闭订单
*/
@RequestMapping(value = "/orders/close", method = RequestMethod.POST)
@ResponseBody
public Result closeOrder(@RequestBody Long[] ids) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallOrderService.closeOrder(ids);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallUserController.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.admin;
import ltd.newbee.mall.service.NewBeeMallUserService;
import ltd.newbee.mall.util.PageQueryUtil;
import ltd.newbee.mall.util.Result;
import ltd.newbee.mall.util.ResultGenerator;
import org.springframework.stereotype.Controller;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
/**
* @author 13
* @qq交流群 796794009
* @email 2449207463@qq.com
* @link https://github.com/newbee-ltd
*/
@Controller
@RequestMapping("/admin")
public class NewBeeMallUserController {
@Resource
private NewBeeMallUserService newBeeMallUserService;
@GetMapping("/users")
public String usersPage(HttpServletRequest request) {
request.setAttribute("path", "users");
return "admin/newbee_mall_user";
}
/**
* 列表
*/
@RequestMapping(value = "/users/list", method = RequestMethod.GET)
@ResponseBody
public Result list(@RequestParam Map<String, Object> params) {
if (ObjectUtils.isEmpty(params.get("page")) || ObjectUtils.isEmpty(params.get("limit"))) {
return ResultGenerator.genFailResult("参数异常!");
}
PageQueryUtil pageUtil = new PageQueryUtil(params);
return ResultGenerator.genSuccessResult(newBeeMallUserService.getNewBeeMallUsersPage(pageUtil));
}
/**
* 用户禁用与解除禁用(0-未锁定 1-已锁定)
*/
@RequestMapping(value = "/users/lock/{lockStatus}", method = RequestMethod.POST)
@ResponseBody
public Result delete(@RequestBody Integer[] ids, @PathVariable int lockStatus) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
if (lockStatus != 0 && lockStatus != 1) {
return ResultGenerator.genFailResult("操作非法!");
}
if (newBeeMallUserService.lockUsers(ids, lockStatus)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult("禁用失败");
}
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/common/CommonController.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.common;
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.ShearCaptcha;
import ltd.newbee.mall.common.Constants;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author 13
* @qq交流群 796794009
* @email 2449207463@qq.com
* @link https://github.com/newbee-ltd
*/
@Controller
public class CommonController {
@GetMapping("/common/kaptcha")
public void defaultKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
httpServletResponse.setHeader("Cache-Control", "no-store");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
httpServletResponse.setContentType("image/png");
ShearCaptcha shearCaptcha= CaptchaUtil.createShearCaptcha(150, 30, 4, 2);
// 验证码存入session
httpServletRequest.getSession().setAttribute("verifyCode", shearCaptcha);
// 输出图片流
shearCaptcha.write(httpServletResponse.getOutputStream());
}
@GetMapping("/common/mall/kaptcha")
public void mallKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
httpServletResponse.setHeader("Cache-Control", "no-store");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
httpServletResponse.setContentType("image/png");
ShearCaptcha shearCaptcha= CaptchaUtil.createShearCaptcha(110, 40, 4, 2);
// 验证码存入session
httpServletRequest.getSession().setAttribute(Constants.MALL_VERIFY_CODE_KEY, shearCaptcha);
// 输出图片流
shearCaptcha.write(httpServletResponse.getOutputStream());
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/common/ErrorPageController.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.common;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.web.servlet.error.ErrorViewResolver;
import org.springframework.boot.web.servlet.error.ErrorAttributes;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
@Controller
public class ErrorPageController implements ErrorViewResolver {
private static ErrorPageController errorPageController;
@Autowired
private ErrorAttributes errorAttributes;
public ErrorPageController(ErrorAttributes errorAttributes) {
this.errorAttributes = errorAttributes;
}
public ErrorPageController() {
if (errorPageController == null) {
errorPageController = new ErrorPageController(errorAttributes);
}
}
@Override
public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) {
if (HttpStatus.BAD_REQUEST == status) {
return new ModelAndView("error/error_400");
} else if (HttpStatus.NOT_FOUND == status) {
return new ModelAndView("error/error_404");
} else {
return new ModelAndView("error/error_5xx");
}
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/common/NewBeeMallExceptionHandler.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.common;
import ltd.newbee.mall.common.NewBeeMallException;
import ltd.newbee.mall.util.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
/**
* newbee-mall全局异常处理
*/
@RestControllerAdvice
public class NewBeeMallExceptionHandler {
@ExceptionHandler(Exception.class)
public Object handleException(Exception e, HttpServletRequest req) {
Result result = new Result();
result.setResultCode(500);
//区分是否为自定义异常
if (e instanceof NewBeeMallException) {
result.setMessage(e.getMessage());
} else {
e.printStackTrace();
result.setMessage("未知异常");
}
//检查请求是否为ajax, 如果是 ajax 请求则返回 Result json串, 如果不是 ajax 请求则返回 error 视图
String contentTypeHeader = req.getHeader("Content-Type");
String acceptHeader = req.getHeader("Accept");
String xRequestedWith = req.getHeader("X-Requested-With");
if ((contentTypeHeader != null && contentTypeHeader.contains("application/json"))
|| (acceptHeader != null && acceptHeader.contains("application/json"))
|| "XMLHttpRequest".equalsIgnoreCase(xRequestedWith)) {
return result;
} else {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", e.getMessage());
modelAndView.addObject("url", req.getRequestURL());
modelAndView.addObject("stackTrace", e.getStackTrace());
modelAndView.addObject("author", "十三");
modelAndView.addObject("ltd", "新蜂商城");
modelAndView.setViewName("error/error");
return modelAndView;
}
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/common/UploadController.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.common;
import ltd.newbee.mall.common.Constants;
import ltd.newbee.mall.util.NewBeeMallUtils;
import ltd.newbee.mall.util.Result;
import ltd.newbee.mall.util.ResultGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
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.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.support.StandardServletMultipartResolver;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author 13
* @qq交流群 796794009
* @email 2449207463@qq.com
* @link https://github.com/newbee-ltd
*/
@Controller
@RequestMapping("/admin")
public class UploadController {
@Autowired
private StandardServletMultipartResolver standardServletMultipartResolver;
@PostMapping({"/upload/file"})
@ResponseBody
public Result upload(HttpServletRequest httpServletRequest, @RequestParam("file") MultipartFile file) throws URISyntaxException, IOException {
String fileName = file.getOriginalFilename();
BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
if (bufferedImage == null) {
return ResultGenerator.genFailResult("请上传图片类型的文件");
}
String suffixName = fileName.substring(fileName.lastIndexOf("."));
//生成文件名称通用方法
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
Random r = new Random();
StringBuilder tempName = new StringBuilder();
tempName.append(sdf.format(new Date())).append(r.nextInt(100)).append(suffixName);
String newFileName = tempName.toString();
File fileDirectory = new File(Constants.FILE_UPLOAD_DIC);
//创建文件
File destFile = new File(Constants.FILE_UPLOAD_DIC + newFileName);
try {
if (!fileDirectory.exists()) {
if (!fileDirectory.mkdir()) {
throw new IOException("文件夹创建失败,路径为:" + fileDirectory);
}
}
file.transferTo(destFile);
Result resultSuccess = ResultGenerator.genSuccessResult();
resultSuccess.setData(NewBeeMallUtils.getHost(new URI(httpServletRequest.getRequestURL() + "")) + "/upload/" + newFileName);
return resultSuccess;
} catch (IOException e) {
e.printStackTrace();
return ResultGenerator.genFailResult("文件上传失败");
}
}
@PostMapping({"/upload/files"})
@ResponseBody
public Result uploadV2(HttpServletRequest httpServletRequest) throws URISyntaxException, IOException {
List<MultipartFile> multipartFiles = new ArrayList<>(8);
if (standardServletMultipartResolver.isMultipart(httpServletRequest)) {
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) httpServletRequest;
Iterator<String> iter = multiRequest.getFileNames();
int total = 0;
while (iter.hasNext()) {
if (total > 5) {
return ResultGenerator.genFailResult("最多上传5张图片");
}
total += 1;
MultipartFile file = multiRequest.getFile(iter.next());
BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
// 只处理图片类型的文件
if (bufferedImage != null) {
multipartFiles.add(file);
}
}
}
if (CollectionUtils.isEmpty(multipartFiles)) {
return ResultGenerator.genFailResult("请选择图片类型的文件上传");
}
if (multipartFiles != null && multipartFiles.size() > 5) {
return ResultGenerator.genFailResult("最多上传5张图片");
}
List<String> fileNames = new ArrayList(multipartFiles.size());
for (int i = 0; i < multipartFiles.size(); i++) {
String fileName = multipartFiles.get(i).getOriginalFilename();
String suffixName = fileName.substring(fileName.lastIndexOf("."));
//生成文件名称通用方法
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
Random r = new Random();
StringBuilder tempName = new StringBuilder();
tempName.append(sdf.format(new Date())).append(r.nextInt(100)).append(suffixName);
String newFileName = tempName.toString();
File fileDirectory = new File(Constants.FILE_UPLOAD_DIC);
//创建文件
File destFile = new File(Constants.FILE_UPLOAD_DIC + newFileName);
try {
if (!fileDirectory.exists()) {
if (!fileDirectory.mkdir()) {
throw new IOException("文件夹创建失败,路径为:" + fileDirectory);
}
}
multipartFiles.get(i).transferTo(destFile);
fileNames.add(NewBeeMallUtils.getHost(new URI(httpServletRequest.getRequestURL() + "")) + "/upload/" + newFileName);
} catch (IOException e) {
e.printStackTrace();
return ResultGenerator.genFailResult("文件上传失败");
}
}
Result resultSuccess = ResultGenerator.genSuccessResult();
resultSuccess.setData(fileNames);
return resultSuccess;
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/mall/GoodsController.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.mall;
import ltd.newbee.mall.common.Constants;
import ltd.newbee.mall.common.NewBeeMallException;
import ltd.newbee.mall.common.ServiceResultEnum;
import ltd.newbee.mall.controller.vo.NewBeeMallGoodsDetailVO;
import ltd.newbee.mall.controller.vo.SearchPageCategoryVO;
import ltd.newbee.mall.entity.NewBeeMallGoods;
import ltd.newbee.mall.service.NewBeeMallCategoryService;
import ltd.newbee.mall.service.NewBeeMallGoodsService;
import ltd.newbee.mall.util.BeanUtil;
import ltd.newbee.mall.util.PageQueryUtil;
import org.springframework.stereotype.Controller;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
@Controller
public class GoodsController {
@Resource
private NewBeeMallGoodsService newBeeMallGoodsService;
@Resource
private NewBeeMallCategoryService newBeeMallCategoryService;
@GetMapping({"/search", "/search.html"})
public String searchPage(@RequestParam Map<String, Object> params, HttpServletRequest request) {
if (ObjectUtils.isEmpty(params.get("page"))) {
params.put("page", 1);
}
params.put("limit", Constants.GOODS_SEARCH_PAGE_LIMIT);
//封装分类数据
if (params.containsKey("goodsCategoryId") && StringUtils.hasText(params.get("goodsCategoryId") + "")) {
Long categoryId = Long.valueOf(params.get("goodsCategoryId") + "");
SearchPageCategoryVO searchPageCategoryVO = newBeeMallCategoryService.getCategoriesForSearch(categoryId);
if (searchPageCategoryVO != null) {
request.setAttribute("goodsCategoryId", categoryId);
request.setAttribute("searchPageCategoryVO", searchPageCategoryVO);
}
}
//封装参数供前端回显
if (params.containsKey("orderBy") && StringUtils.hasText(params.get("orderBy") + "")) {
request.setAttribute("orderBy", params.get("orderBy") + "");
}
String keyword = "";
//对keyword做过滤 去掉空格
if (params.containsKey("keyword") && StringUtils.hasText((params.get("keyword") + "").trim())) {
keyword = params.get("keyword") + "";
}
request.setAttribute("keyword", keyword);
params.put("keyword", keyword);
//搜索上架状态下的商品
params.put("goodsSellStatus", Constants.SELL_STATUS_UP);
//封装商品数据
PageQueryUtil pageUtil = new PageQueryUtil(params);
request.setAttribute("pageResult", newBeeMallGoodsService.searchNewBeeMallGoods(pageUtil));
return "mall/search";
}
@GetMapping("/goods/detail/{goodsId}")
public String detailPage(@PathVariable("goodsId") Long goodsId, HttpServletRequest request) {
if (goodsId < 1) {
NewBeeMallException.fail("参数异常");
}
NewBeeMallGoods goods = newBeeMallGoodsService.getNewBeeMallGoodsById(goodsId);
if (Constants.SELL_STATUS_UP != goods.getGoodsSellStatus()) {
NewBeeMallException.fail(ServiceResultEnum.GOODS_PUT_DOWN.getResult());
}
NewBeeMallGoodsDetailVO goodsDetailVO = new NewBeeMallGoodsDetailVO();
BeanUtil.copyProperties(goods, goodsDetailVO);
goodsDetailVO.setGoodsCarouselList(goods.getGoodsCarousel().split(","));
request.setAttribute("goodsDetail", goodsDetailVO);
return "mall/detail";
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/mall/IndexController.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.mall;
import ltd.newbee.mall.common.Constants;
import ltd.newbee.mall.common.IndexConfigTypeEnum;
import ltd.newbee.mall.common.NewBeeMallException;
import ltd.newbee.mall.controller.vo.NewBeeMallIndexCarouselVO;
import ltd.newbee.mall.controller.vo.NewBeeMallIndexCategoryVO;
import ltd.newbee.mall.controller.vo.NewBeeMallIndexConfigGoodsVO;
import ltd.newbee.mall.service.NewBeeMallCarouselService;
import ltd.newbee.mall.service.NewBeeMallCategoryService;
import ltd.newbee.mall.service.NewBeeMallIndexConfigService;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.GetMapping;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@Controller
public class IndexController {
@Resource
private NewBeeMallCarouselService newBeeMallCarouselService;
@Resource
private NewBeeMallIndexConfigService newBeeMallIndexConfigService;
@Resource
private NewBeeMallCategoryService newBeeMallCategoryService;
@GetMapping({"/index", "/", "/index.html"})
public String indexPage(HttpServletRequest request) {
List<NewBeeMallIndexCategoryVO> categories = newBeeMallCategoryService.getCategoriesForIndex();
if (CollectionUtils.isEmpty(categories)) {
NewBeeMallException.fail("分类数据不完善");
}
List<NewBeeMallIndexCarouselVO> carousels = newBeeMallCarouselService.getCarouselsForIndex(Constants.INDEX_CAROUSEL_NUMBER);
List<NewBeeMallIndexConfigGoodsVO> hotGoodses = newBeeMallIndexConfigService.getConfigGoodsesForIndex(IndexConfigTypeEnum.INDEX_GOODS_HOT.getType(), Constants.INDEX_GOODS_HOT_NUMBER);
List<NewBeeMallIndexConfigGoodsVO> newGoodses = newBeeMallIndexConfigService.getConfigGoodsesForIndex(IndexConfigTypeEnum.INDEX_GOODS_NEW.getType(), Constants.INDEX_GOODS_NEW_NUMBER);
List<NewBeeMallIndexConfigGoodsVO> recommendGoodses = newBeeMallIndexConfigService.getConfigGoodsesForIndex(IndexConfigTypeEnum.INDEX_GOODS_RECOMMOND.getType(), Constants.INDEX_GOODS_RECOMMOND_NUMBER);
request.setAttribute("categories", categories);//分类数据
request.setAttribute("carousels", carousels);//轮播图
request.setAttribute("hotGoodses", hotGoodses);//热销商品
request.setAttribute("newGoodses", newGoodses);//新品
request.setAttribute("recommendGoodses", recommendGoodses);//推荐商品
return "mall/index";
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/mall/OrderController.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.mall;
import ltd.newbee.mall.common.Constants;
import ltd.newbee.mall.common.NewBeeMallException;
import ltd.newbee.mall.common.NewBeeMallOrderStatusEnum;
import ltd.newbee.mall.common.ServiceResultEnum;
import ltd.newbee.mall.controller.vo.NewBeeMallOrderDetailVO;
import ltd.newbee.mall.controller.vo.NewBeeMallShoppingCartItemVO;
import ltd.newbee.mall.controller.vo.NewBeeMallUserVO;
import ltd.newbee.mall.entity.NewBeeMallOrder;
import ltd.newbee.mall.service.NewBeeMallOrderService;
import ltd.newbee.mall.service.NewBeeMallShoppingCartService;
import ltd.newbee.mall.util.PageQueryUtil;
import ltd.newbee.mall.util.Result;
import ltd.newbee.mall.util.ResultGenerator;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;
@Controller
public class OrderController {
@Resource
private NewBeeMallShoppingCartService newBeeMallShoppingCartService;
@Resource
private NewBeeMallOrderService newBeeMallOrderService;
@GetMapping("/orders/{orderNo}")
public String orderDetailPage(HttpServletRequest request, @PathVariable("orderNo") String orderNo, HttpSession httpSession) {
NewBeeMallUserVO user = (NewBeeMallUserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
NewBeeMallOrderDetailVO orderDetailVO = newBeeMallOrderService.getOrderDetailByOrderNo(orderNo, user.getUserId());
request.setAttribute("orderDetailVO", orderDetailVO);
return "mall/order-detail";
}
@GetMapping("/orders")
public String orderListPage(@RequestParam Map<String, Object> params, HttpServletRequest request, HttpSession httpSession) {
NewBeeMallUserVO user = (NewBeeMallUserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
params.put("userId", user.getUserId());
if (ObjectUtils.isEmpty(params.get("page"))) {
params.put("page", 1);
}
params.put("limit", Constants.ORDER_SEARCH_PAGE_LIMIT);
//封装我的订单数据
PageQueryUtil pageUtil = new PageQueryUtil(params);
request.setAttribute("orderPageResult", newBeeMallOrderService.getMyOrders(pageUtil));
request.setAttribute("path", "orders");
return "mall/my-orders";
}
@GetMapping("/saveOrder")
public String saveOrder(HttpSession httpSession) {
NewBeeMallUserVO user = (NewBeeMallUserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
List<NewBeeMallShoppingCartItemVO> myShoppingCartItems = newBeeMallShoppingCartService.getMyShoppingCartItems(user.getUserId());
if (!StringUtils.hasText(user.getAddress().trim())) {
//无收货地址
NewBeeMallException.fail(ServiceResultEnum.NULL_ADDRESS_ERROR.getResult());
}
if (CollectionUtils.isEmpty(myShoppingCartItems)) {
//购物车中无数据则跳转至错误页
NewBeeMallException.fail(ServiceResultEnum.SHOPPING_ITEM_ERROR.getResult());
}
//保存订单并返回订单号
String saveOrderResult = newBeeMallOrderService.saveOrder(user, myShoppingCartItems);
//跳转到订单详情页
return "redirect:/orders/" + saveOrderResult;
}
@PutMapping("/orders/{orderNo}/cancel")
@ResponseBody
public Result cancelOrder(@PathVariable("orderNo") String orderNo, HttpSession httpSession) {
NewBeeMallUserVO user = (NewBeeMallUserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
String cancelOrderResult = newBeeMallOrderService.cancelOrder(orderNo, user.getUserId());
if (ServiceResultEnum.SUCCESS.getResult().equals(cancelOrderResult)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(cancelOrderResult);
}
}
@PutMapping("/orders/{orderNo}/finish")
@ResponseBody
public Result finishOrder(@PathVariable("orderNo") String orderNo, HttpSession httpSession) {
NewBeeMallUserVO user = (NewBeeMallUserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
String finishOrderResult = newBeeMallOrderService.finishOrder(orderNo, user.getUserId());
if (ServiceResultEnum.SUCCESS.getResult().equals(finishOrderResult)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(finishOrderResult);
}
}
@GetMapping("/selectPayType")
public String selectPayType(HttpServletRequest request, @RequestParam("orderNo") String orderNo, HttpSession httpSession) {
NewBeeMallUserVO user = (NewBeeMallUserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
NewBeeMallOrder newBeeMallOrder = newBeeMallOrderService.getNewBeeMallOrderByOrderNo(orderNo);
//判断订单userId
if (!user.getUserId().equals(newBeeMallOrder.getUserId())) {
NewBeeMallException.fail(ServiceResultEnum.NO_PERMISSION_ERROR.getResult());
}
//判断订单状态
if (newBeeMallOrder.getOrderStatus().intValue() != NewBeeMallOrderStatusEnum.ORDER_PRE_PAY.getOrderStatus()) {
NewBeeMallException.fail(ServiceResultEnum.ORDER_STATUS_ERROR.getResult());
}
request.setAttribute("orderNo", orderNo);
request.setAttribute("totalPrice", newBeeMallOrder.getTotalPrice());
return "mall/pay-select";
}
@GetMapping("/payPage")
public String payOrder(HttpServletRequest request, @RequestParam("orderNo") String orderNo, HttpSession httpSession, @RequestParam("payType") int payType) {
NewBeeMallUserVO user = (NewBeeMallUserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
NewBeeMallOrder newBeeMallOrder = newBeeMallOrderService.getNewBeeMallOrderByOrderNo(orderNo);
//判断订单userId
if (!user.getUserId().equals(newBeeMallOrder.getUserId())) {
NewBeeMallException.fail(ServiceResultEnum.NO_PERMISSION_ERROR.getResult());
}
//判断订单状态
if (newBeeMallOrder.getOrderStatus().intValue() != NewBeeMallOrderStatusEnum.ORDER_PRE_PAY.getOrderStatus()) {
NewBeeMallException.fail(ServiceResultEnum.ORDER_STATUS_ERROR.getResult());
}
request.setAttribute("orderNo", orderNo);
request.setAttribute("totalPrice", newBeeMallOrder.getTotalPrice());
if (payType == 1) {
return "mall/alipay";
} else {
return "mall/wxpay";
}
}
@GetMapping("/paySuccess")
@ResponseBody
public Result paySuccess(@RequestParam("orderNo") String orderNo, @RequestParam("payType") int payType) {
String payResult = newBeeMallOrderService.paySuccess(orderNo, payType);
if (ServiceResultEnum.SUCCESS.getResult().equals(payResult)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(payResult);
}
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/mall/PersonalController.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.mall;
import cn.hutool.captcha.ShearCaptcha;
import ltd.newbee.mall.common.Constants;
import ltd.newbee.mall.common.ServiceResultEnum;
import ltd.newbee.mall.controller.vo.NewBeeMallUserVO;
import ltd.newbee.mall.entity.MallUser;
import ltd.newbee.mall.service.NewBeeMallUserService;
import ltd.newbee.mall.util.MD5Util;
import ltd.newbee.mall.util.Result;
import ltd.newbee.mall.util.ResultGenerator;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@Controller
public class PersonalController {
@Resource
private NewBeeMallUserService newBeeMallUserService;
@GetMapping("/personal")
public String personalPage(HttpServletRequest request,
HttpSession httpSession) {
request.setAttribute("path", "personal");
return "mall/personal";
}
@GetMapping("/logout")
public String logout(HttpSession httpSession) {
httpSession.removeAttribute(Constants.MALL_USER_SESSION_KEY);
return "mall/login";
}
@GetMapping({"/login", "login.html"})
public String loginPage() {
return "mall/login";
}
@GetMapping({"/register", "register.html"})
public String registerPage() {
return "mall/register";
}
@GetMapping("/personal/addresses")
public String addressesPage() {
return "mall/addresses";
}
@PostMapping("/login")
@ResponseBody
public Result login(@RequestParam("loginName") String loginName,
@RequestParam("verifyCode") String verifyCode,
@RequestParam("password") String password,
HttpSession httpSession) {
if (!StringUtils.hasText(loginName)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_NAME_NULL.getResult());
}
if (!StringUtils.hasText(password)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_PASSWORD_NULL.getResult());
}
if (!StringUtils.hasText(verifyCode)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_VERIFY_CODE_NULL.getResult());
}
ShearCaptcha shearCaptcha = (ShearCaptcha) httpSession.getAttribute(Constants.MALL_VERIFY_CODE_KEY);
if (shearCaptcha == null || !shearCaptcha.verify(verifyCode)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_VERIFY_CODE_ERROR.getResult());
}
String loginResult = newBeeMallUserService.login(loginName, MD5Util.MD5Encode(password, "UTF-8"), httpSession);
//登录成功
if (ServiceResultEnum.SUCCESS.getResult().equals(loginResult)) {
//删除session中的verifyCode
httpSession.removeAttribute(Constants.MALL_VERIFY_CODE_KEY);
return ResultGenerator.genSuccessResult();
}
//登录失败
return ResultGenerator.genFailResult(loginResult);
}
@PostMapping("/register")
@ResponseBody
public Result register(@RequestParam("loginName") String loginName,
@RequestParam("verifyCode") String verifyCode,
@RequestParam("password") String password,
HttpSession httpSession) {
if (!StringUtils.hasText(loginName)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_NAME_NULL.getResult());
}
if (!StringUtils.hasText(password)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_PASSWORD_NULL.getResult());
}
if (!StringUtils.hasText(verifyCode)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_VERIFY_CODE_NULL.getResult());
}
ShearCaptcha shearCaptcha = (ShearCaptcha) httpSession.getAttribute(Constants.MALL_VERIFY_CODE_KEY);
if (shearCaptcha == null || !shearCaptcha.verify(verifyCode)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_VERIFY_CODE_ERROR.getResult());
}
String registerResult = newBeeMallUserService.register(loginName, password);
//注册成功
if (ServiceResultEnum.SUCCESS.getResult().equals(registerResult)) {
//删除session中的verifyCode
httpSession.removeAttribute(Constants.MALL_VERIFY_CODE_KEY);
return ResultGenerator.genSuccessResult();
}
//注册失败
return ResultGenerator.genFailResult(registerResult);
}
@PostMapping("/personal/updateInfo")
@ResponseBody
public Result updateInfo(@RequestBody MallUser mallUser, HttpSession httpSession) {
NewBeeMallUserVO mallUserTemp = newBeeMallUserService.updateUserInfo(mallUser, httpSession);
if (mallUserTemp == null) {
Result result = ResultGenerator.genFailResult("修改失败");
return result;
} else {
//返回成功
Result result = ResultGenerator.genSuccessResult();
return result;
}
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/mall/ShoppingCartController.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.mall;
import ltd.newbee.mall.common.Constants;
import ltd.newbee.mall.common.NewBeeMallException;
import ltd.newbee.mall.common.ServiceResultEnum;
import ltd.newbee.mall.controller.vo.NewBeeMallShoppingCartItemVO;
import ltd.newbee.mall.controller.vo.NewBeeMallUserVO;
import ltd.newbee.mall.entity.NewBeeMallShoppingCartItem;
import ltd.newbee.mall.service.NewBeeMallShoppingCartService;
import ltd.newbee.mall.util.Result;
import ltd.newbee.mall.util.ResultGenerator;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;
@Controller
public class ShoppingCartController {
@Resource
private NewBeeMallShoppingCartService newBeeMallShoppingCartService;
@GetMapping("/shop-cart")
public String cartListPage(HttpServletRequest request,
HttpSession httpSession) {
NewBeeMallUserVO user = (NewBeeMallUserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
int itemsTotal = 0;
int priceTotal = 0;
List<NewBeeMallShoppingCartItemVO> myShoppingCartItems = newBeeMallShoppingCartService.getMyShoppingCartItems(user.getUserId());
if (!CollectionUtils.isEmpty(myShoppingCartItems)) {
//购物项总数
itemsTotal = myShoppingCartItems.stream().mapToInt(NewBeeMallShoppingCartItemVO::getGoodsCount).sum();
if (itemsTotal < 1) {
NewBeeMallException.fail("购物项不能为空");
}
//总价
for (NewBeeMallShoppingCartItemVO newBeeMallShoppingCartItemVO : myShoppingCartItems) {
priceTotal += newBeeMallShoppingCartItemVO.getGoodsCount() * newBeeMallShoppingCartItemVO.getSellingPrice();
}
if (priceTotal < 1) {
NewBeeMallException.fail("购物项价格异常");
}
}
request.setAttribute("itemsTotal", itemsTotal);
request.setAttribute("priceTotal", priceTotal);
request.setAttribute("myShoppingCartItems", myShoppingCartItems);
return "mall/cart";
}
@PostMapping("/shop-cart")
@ResponseBody
public Result saveNewBeeMallShoppingCartItem(@RequestBody NewBeeMallShoppingCartItem newBeeMallShoppingCartItem,
HttpSession httpSession) {
NewBeeMallUserVO user = (NewBeeMallUserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
newBeeMallShoppingCartItem.setUserId(user.getUserId());
String saveResult = newBeeMallShoppingCartService.saveNewBeeMallCartItem(newBeeMallShoppingCartItem);
//添加成功
if (ServiceResultEnum.SUCCESS.getResult().equals(saveResult)) {
return ResultGenerator.genSuccessResult();
}
//添加失败
return ResultGenerator.genFailResult(saveResult);
}
@PutMapping("/shop-cart")
@ResponseBody
public Result updateNewBeeMallShoppingCartItem(@RequestBody NewBeeMallShoppingCartItem newBeeMallShoppingCartItem,
HttpSession httpSession) {
NewBeeMallUserVO user = (NewBeeMallUserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
newBeeMallShoppingCartItem.setUserId(user.getUserId());
String updateResult = newBeeMallShoppingCartService.updateNewBeeMallCartItem(newBeeMallShoppingCartItem);
//修改成功
if (ServiceResultEnum.SUCCESS.getResult().equals(updateResult)) {
return ResultGenerator.genSuccessResult();
}
//修改失败
return ResultGenerator.genFailResult(updateResult);
}
@DeleteMapping("/shop-cart/{newBeeMallShoppingCartItemId}")
@ResponseBody
public Result updateNewBeeMallShoppingCartItem(@PathVariable("newBeeMallShoppingCartItemId") Long newBeeMallShoppingCartItemId,
HttpSession httpSession) {
NewBeeMallUserVO user = (NewBeeMallUserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
Boolean deleteResult = newBeeMallShoppingCartService.deleteById(newBeeMallShoppingCartItemId,user.getUserId());
//删除成功
if (deleteResult) {
return ResultGenerator.genSuccessResult();
}
//删除失败
return ResultGenerator.genFailResult(ServiceResultEnum.OPERATE_ERROR.getResult());
}
@GetMapping("/shop-cart/settle")
public String settlePage(HttpServletRequest request,
HttpSession httpSession) {
int priceTotal = 0;
NewBeeMallUserVO user = (NewBeeMallUserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
List<NewBeeMallShoppingCartItemVO> myShoppingCartItems = newBeeMallShoppingCartService.getMyShoppingCartItems(user.getUserId());
if (CollectionUtils.isEmpty(myShoppingCartItems)) {
//无数据则不跳转至结算页
return "/shop-cart";
} else {
//总价
for (NewBeeMallShoppingCartItemVO newBeeMallShoppingCartItemVO : myShoppingCartItems) {
priceTotal += newBeeMallShoppingCartItemVO.getGoodsCount() * newBeeMallShoppingCartItemVO.getSellingPrice();
}
if (priceTotal < 1) {
NewBeeMallException.fail("购物项价格异常");
}
}
request.setAttribute("priceTotal", priceTotal);
request.setAttribute("myShoppingCartItems", myShoppingCartItems);
return "mall/order-settle";
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallGoodsDetailVO.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.vo;
import java.io.Serializable;
import java.util.List;
/**
* 商品详情页VO
*/
public class NewBeeMallGoodsDetailVO implements Serializable {
private Long goodsId;
private String goodsName;
private String goodsIntro;
private String goodsCoverImg;
private String[] goodsCarouselList;
private Integer sellingPrice;
private Integer originalPrice;
private String goodsDetailContent;
public Long getGoodsId() {
return goodsId;
}
public void setGoodsId(Long goodsId) {
this.goodsId = goodsId;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public String getGoodsIntro() {
return goodsIntro;
}
public void setGoodsIntro(String goodsIntro) {
this.goodsIntro = goodsIntro;
}
public String getGoodsCoverImg() {
return goodsCoverImg;
}
public void setGoodsCoverImg(String goodsCoverImg) {
this.goodsCoverImg = goodsCoverImg;
}
public Integer getSellingPrice() {
return sellingPrice;
}
public void setSellingPrice(Integer sellingPrice) {
this.sellingPrice = sellingPrice;
}
public Integer getOriginalPrice() {
return originalPrice;
}
public void setOriginalPrice(Integer originalPrice) {
this.originalPrice = originalPrice;
}
public String getGoodsDetailContent() {
return goodsDetailContent;
}
public void setGoodsDetailContent(String goodsDetailContent) {
this.goodsDetailContent = goodsDetailContent;
}
public String[] getGoodsCarouselList() {
return goodsCarouselList;
}
public void setGoodsCarouselList(String[] goodsCarouselList) {
this.goodsCarouselList = goodsCarouselList;
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallIndexCarouselVO.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.vo;
import java.io.Serializable;
/**
* 首页轮播图VO
*/
public class NewBeeMallIndexCarouselVO implements Serializable {
private String carouselUrl;
private String redirectUrl;
public String getCarouselUrl() {
return carouselUrl;
}
public void setCarouselUrl(String carouselUrl) {
this.carouselUrl = carouselUrl;
}
public String getRedirectUrl() {
return redirectUrl;
}
public void setRedirectUrl(String redirectUrl) {
this.redirectUrl = redirectUrl;
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallIndexCategoryVO.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.vo;
import java.io.Serializable;
import java.util.List;
/**
* 首页分类数据VO
*/
public class NewBeeMallIndexCategoryVO implements Serializable {
private Long categoryId;
private Byte categoryLevel;
private String categoryName;
private List<SecondLevelCategoryVO> secondLevelCategoryVOS;
public Long getCategoryId() {
return categoryId;
}
public void setCategoryId(Long categoryId) {
this.categoryId = categoryId;
}
public Byte getCategoryLevel() {
return categoryLevel;
}
public void setCategoryLevel(Byte categoryLevel) {
this.categoryLevel = categoryLevel;
}
public String getCategoryName() {
return categoryName;
}
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
public List<SecondLevelCategoryVO> getSecondLevelCategoryVOS() {
return secondLevelCategoryVOS;
}
public void setSecondLevelCategoryVOS(List<SecondLevelCategoryVO> secondLevelCategoryVOS) {
this.secondLevelCategoryVOS = secondLevelCategoryVOS;
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallIndexConfigGoodsVO.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.vo;
import java.io.Serializable;
/**
* 首页配置商品VO
*/
public class NewBeeMallIndexConfigGoodsVO implements Serializable {
private Long goodsId;
private String goodsName;
private String goodsIntro;
private String goodsCoverImg;
private Integer sellingPrice;
private String tag;
public Long getGoodsId() {
return goodsId;
}
public void setGoodsId(Long goodsId) {
this.goodsId = goodsId;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public String getGoodsIntro() {
return goodsIntro;
}
public void setGoodsIntro(String goodsIntro) {
this.goodsIntro = goodsIntro;
}
public String getGoodsCoverImg() {
return goodsCoverImg;
}
public void setGoodsCoverImg(String goodsCoverImg) {
this.goodsCoverImg = goodsCoverImg;
}
public Integer getSellingPrice() {
return sellingPrice;
}
public void setSellingPrice(Integer sellingPrice) {
this.sellingPrice = sellingPrice;
}
public String getTag() {
return tag;
}
public void setTag(String tag) {
this.tag = tag;
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallOrderDetailVO.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.vo;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 订单详情页页面VO
*/
public class NewBeeMallOrderDetailVO implements Serializable {
private String orderNo;
private Integer totalPrice;
private Byte payStatus;
private String payStatusString;
private Byte payType;
private String payTypeString;
private Date payTime;
private Byte orderStatus;
private String orderStatusString;
private String userAddress;
private Date createTime;
private List<NewBeeMallOrderItemVO> newBeeMallOrderItemVOS;
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public Integer getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(Integer totalPrice) {
this.totalPrice = totalPrice;
}
public Byte getPayStatus() {
return payStatus;
}
public void setPayStatus(Byte payStatus) {
this.payStatus = payStatus;
}
public Byte getPayType() {
return payType;
}
public void setPayType(Byte payType) {
this.payType = payType;
}
public Date getPayTime() {
return payTime;
}
public void setPayTime(Date payTime) {
this.payTime = payTime;
}
public Byte getOrderStatus() {
return orderStatus;
}
public void setOrderStatus(Byte orderStatus) {
this.orderStatus = orderStatus;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getPayStatusString() {
return payStatusString;
}
public void setPayStatusString(String payStatusString) {
this.payStatusString = payStatusString;
}
public String getPayTypeString() {
return payTypeString;
}
public void setPayTypeString(String payTypeString) {
this.payTypeString = payTypeString;
}
public String getOrderStatusString() {
return orderStatusString;
}
public void setOrderStatusString(String orderStatusString) {
this.orderStatusString = orderStatusString;
}
public List<NewBeeMallOrderItemVO> getNewBeeMallOrderItemVOS() {
return newBeeMallOrderItemVOS;
}
public void setNewBeeMallOrderItemVOS(List<NewBeeMallOrderItemVO> newBeeMallOrderItemVOS) {
this.newBeeMallOrderItemVOS = newBeeMallOrderItemVOS;
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallOrderItemVO.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.vo;
import java.io.Serializable;
/**
* 订单详情页页面订单项VO
*/
public class NewBeeMallOrderItemVO implements Serializable {
private Long goodsId;
private Integer goodsCount;
private String goodsName;
private String goodsCoverImg;
private Integer sellingPrice;
public Long getGoodsId() {
return goodsId;
}
public void setGoodsId(Long goodsId) {
this.goodsId = goodsId;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public String getGoodsCoverImg() {
return goodsCoverImg;
}
public void setGoodsCoverImg(String goodsCoverImg) {
this.goodsCoverImg = goodsCoverImg;
}
public Integer getSellingPrice() {
return sellingPrice;
}
public void setSellingPrice(Integer sellingPrice) {
this.sellingPrice = sellingPrice;
}
public Integer getGoodsCount() {
return goodsCount;
}
public void setGoodsCount(Integer goodsCount) {
this.goodsCount = goodsCount;
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallOrderListVO.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.vo;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 订单列表页面VO
*/
public class NewBeeMallOrderListVO implements Serializable {
private Long orderId;
private String orderNo;
private Integer totalPrice;
private Byte payType;
private Byte orderStatus;
private String orderStatusString;
private String userAddress;
private Date createTime;
private List<NewBeeMallOrderItemVO> newBeeMallOrderItemVOS;
public Long getOrderId() {
return orderId;
}
public void setOrderId(Long orderId) {
this.orderId = orderId;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public Integer getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(Integer totalPrice) {
this.totalPrice = totalPrice;
}
public Byte getPayType() {
return payType;
}
public void setPayType(Byte payType) {
this.payType = payType;
}
public Byte getOrderStatus() {
return orderStatus;
}
public void setOrderStatus(Byte orderStatus) {
this.orderStatus = orderStatus;
}
public String getOrderStatusString() {
return orderStatusString;
}
public void setOrderStatusString(String orderStatusString) {
this.orderStatusString = orderStatusString;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public List<NewBeeMallOrderItemVO> getNewBeeMallOrderItemVOS() {
return newBeeMallOrderItemVOS;
}
public void setNewBeeMallOrderItemVOS(List<NewBeeMallOrderItemVO> newBeeMallOrderItemVOS) {
this.newBeeMallOrderItemVOS = newBeeMallOrderItemVOS;
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallSearchGoodsVO.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.vo;
import java.io.Serializable;
/**
* 搜索列表页商品VO
*/
public class NewBeeMallSearchGoodsVO implements Serializable {
private Long goodsId;
private String goodsName;
private String goodsIntro;
private String goodsCoverImg;
private Integer sellingPrice;
public Long getGoodsId() {
return goodsId;
}
public void setGoodsId(Long goodsId) {
this.goodsId = goodsId;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public String getGoodsIntro() {
return goodsIntro;
}
public void setGoodsIntro(String goodsIntro) {
this.goodsIntro = goodsIntro;
}
public String getGoodsCoverImg() {
return goodsCoverImg;
}
public void setGoodsCoverImg(String goodsCoverImg) {
this.goodsCoverImg = goodsCoverImg;
}
public Integer getSellingPrice() {
return sellingPrice;
}
public void setSellingPrice(Integer sellingPrice) {
this.sellingPrice = sellingPrice;
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallShoppingCartItemVO.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.vo;
import java.io.Serializable;
/**
* 购物车页面购物项VO
*/
public class NewBeeMallShoppingCartItemVO implements Serializable {
private Long cartItemId;
private Long goodsId;
private Integer goodsCount;
private String goodsName;
private String goodsCoverImg;
private Integer sellingPrice;
public Long getGoodsId() {
return goodsId;
}
public void setGoodsId(Long goodsId) {
this.goodsId = goodsId;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public String getGoodsCoverImg() {
return goodsCoverImg;
}
public void setGoodsCoverImg(String goodsCoverImg) {
this.goodsCoverImg = goodsCoverImg;
}
public Integer getSellingPrice() {
return sellingPrice;
}
public void setSellingPrice(Integer sellingPrice) {
this.sellingPrice = sellingPrice;
}
public Long getCartItemId() {
return cartItemId;
}
public void setCartItemId(Long cartItemId) {
this.cartItemId = cartItemId;
}
public Integer getGoodsCount() {
return goodsCount;
}
public void setGoodsCount(Integer goodsCount) {
this.goodsCount = goodsCount;
}
}
================================================
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallUserVO.java
================================================
/**
* 严肃声明:
* 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!
* 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!
* 可正常分享和学习源码,不得用于违法犯罪活动,违者必究!
* Copyright (c) 2019-2020 十三 all rights reserved.
* 版权所有,侵权必究!
*/
package ltd.newbee.mall.controller.vo;
import java.io.Serializable;
public class NewBeeMallUserVO implements Serializable {
private Long userId;
private String nickName;
private String loginName;
private String introduceSign;
private String address;
private int shopCartItemCount;
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
gitextract_szhq2hcl/
├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── docs/
│ ├── API.md
│ ├── DEVELOPMENT.md
│ └── FAQ.md
├── pom.xml
└── src/
└── main/
├── java/
│ └── ltd/
│ └── newbee/
│ └── mall/
│ ├── NewBeeMallApplication.java
│ ├── common/
│ │ ├── Constants.java
│ │ ├── IndexConfigTypeEnum.java
│ │ ├── NewBeeMallCategoryLevelEnum.java
│ │ ├── NewBeeMallException.java
│ │ ├── NewBeeMallOrderStatusEnum.java
│ │ ├── PayStatusEnum.java
│ │ ├── PayTypeEnum.java
│ │ └── ServiceResultEnum.java
│ ├── config/
│ │ └── NeeBeeMallWebMvcConfigurer.java
│ ├── controller/
│ │ ├── admin/
│ │ │ ├── AdminController.java
│ │ │ ├── NewBeeMallCarouselController.java
│ │ │ ├── NewBeeMallGoodsCategoryController.java
│ │ │ ├── NewBeeMallGoodsController.java
│ │ │ ├── NewBeeMallGoodsIndexConfigController.java
│ │ │ ├── NewBeeMallOrderController.java
│ │ │ └── NewBeeMallUserController.java
│ │ ├── common/
│ │ │ ├── CommonController.java
│ │ │ ├── ErrorPageController.java
│ │ │ ├── NewBeeMallExceptionHandler.java
│ │ │ └── UploadController.java
│ │ ├── mall/
│ │ │ ├── GoodsController.java
│ │ │ ├── IndexController.java
│ │ │ ├── OrderController.java
│ │ │ ├── PersonalController.java
│ │ │ └── ShoppingCartController.java
│ │ └── vo/
│ │ ├── NewBeeMallGoodsDetailVO.java
│ │ ├── NewBeeMallIndexCarouselVO.java
│ │ ├── NewBeeMallIndexCategoryVO.java
│ │ ├── NewBeeMallIndexConfigGoodsVO.java
│ │ ├── NewBeeMallOrderDetailVO.java
│ │ ├── NewBeeMallOrderItemVO.java
│ │ ├── NewBeeMallOrderListVO.java
│ │ ├── NewBeeMallSearchGoodsVO.java
│ │ ├── NewBeeMallShoppingCartItemVO.java
│ │ ├── NewBeeMallUserVO.java
│ │ ├── SearchPageCategoryVO.java
│ │ ├── SecondLevelCategoryVO.java
│ │ └── ThirdLevelCategoryVO.java
│ ├── dao/
│ │ ├── AdminUserMapper.java
│ │ ├── CarouselMapper.java
│ │ ├── GoodsCategoryMapper.java
│ │ ├── IndexConfigMapper.java
│ │ ├── MallUserMapper.java
│ │ ├── NewBeeMallGoodsMapper.java
│ │ ├── NewBeeMallOrderItemMapper.java
│ │ ├── NewBeeMallOrderMapper.java
│ │ └── NewBeeMallShoppingCartItemMapper.java
│ ├── entity/
│ │ ├── AdminUser.java
│ │ ├── Carousel.java
│ │ ├── GoodsCategory.java
│ │ ├── IndexConfig.java
│ │ ├── MallUser.java
│ │ ├── NewBeeMallGoods.java
│ │ ├── NewBeeMallOrder.java
│ │ ├── NewBeeMallOrderItem.java
│ │ ├── NewBeeMallShoppingCartItem.java
│ │ └── StockNumDTO.java
│ ├── interceptor/
│ │ ├── AdminLoginInterceptor.java
│ │ ├── NewBeeMallCartNumberInterceptor.java
│ │ └── NewBeeMallLoginInterceptor.java
│ ├── service/
│ │ ├── AdminUserService.java
│ │ ├── NewBeeMallCarouselService.java
│ │ ├── NewBeeMallCategoryService.java
│ │ ├── NewBeeMallGoodsService.java
│ │ ├── NewBeeMallIndexConfigService.java
│ │ ├── NewBeeMallOrderService.java
│ │ ├── NewBeeMallShoppingCartService.java
│ │ ├── NewBeeMallUserService.java
│ │ └── impl/
│ │ ├── AdminUserServiceImpl.java
│ │ ├── NewBeeMallCarouselServiceImpl.java
│ │ ├── NewBeeMallCategoryServiceImpl.java
│ │ ├── NewBeeMallGoodsServiceImpl.java
│ │ ├── NewBeeMallIndexConfigServiceImpl.java
│ │ ├── NewBeeMallOrderServiceImpl.java
│ │ ├── NewBeeMallShoppingCartServiceImpl.java
│ │ └── NewBeeMallUserServiceImpl.java
│ └── util/
│ ├── BeanUtil.java
│ ├── JsonUtil.java
│ ├── MD5Util.java
│ ├── NewBeeMallUtils.java
│ ├── NumberUtil.java
│ ├── PageQueryUtil.java
│ ├── PageResult.java
│ ├── PatternUtil.java
│ ├── Result.java
│ ├── ResultGenerator.java
│ └── SystemUtil.java
└── resources/
├── application.properties
├── mapper/
│ ├── AdminUserMapper.xml
│ ├── CarouselMapper.xml
│ ├── GoodsCategoryMapper.xml
│ ├── IndexConfigMapper.xml
│ ├── MallUserMapper.xml
│ ├── NewBeeMallGoodsMapper.xml
│ ├── NewBeeMallOrderItemMapper.xml
│ ├── NewBeeMallOrderMapper.xml
│ └── NewBeeMallShoppingCartItemMapper.xml
├── newbee_mall_schema.sql
├── static/
│ ├── admin/
│ │ ├── dist/
│ │ │ ├── css/
│ │ │ │ ├── adminlte.css
│ │ │ │ └── main.css
│ │ │ ├── fonts/
│ │ │ │ └── FontAwesome.otf
│ │ │ └── js/
│ │ │ ├── adminlte.js
│ │ │ ├── demo.js
│ │ │ ├── newbee_mall_carousel.js
│ │ │ ├── newbee_mall_category.js
│ │ │ ├── newbee_mall_goods.js
│ │ │ ├── newbee_mall_goods_edit.js
│ │ │ ├── newbee_mall_index_config.js
│ │ │ ├── newbee_mall_order.js
│ │ │ ├── newbee_mall_user.js
│ │ │ ├── plugins/
│ │ │ │ ├── bootstrap/
│ │ │ │ │ ├── css/
│ │ │ │ │ │ ├── bootstrap-grid.css
│ │ │ │ │ │ ├── bootstrap-reboot.css
│ │ │ │ │ │ └── bootstrap.css
│ │ │ │ │ └── js/
│ │ │ │ │ ├── bootstrap.bundle.js
│ │ │ │ │ └── bootstrap.js
│ │ │ │ ├── chart.js
│ │ │ │ ├── chart.js2
│ │ │ │ ├── chartjs2/
│ │ │ │ │ ├── Chart.bundle.js
│ │ │ │ │ ├── Chart.js
│ │ │ │ │ └── docs/
│ │ │ │ │ ├── axes/
│ │ │ │ │ │ ├── cartesian/
│ │ │ │ │ │ │ ├── category.html
│ │ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ │ ├── linear.html
│ │ │ │ │ │ │ ├── logarithmic.html
│ │ │ │ │ │ │ └── time.html
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ ├── labelling.html
│ │ │ │ │ │ ├── radial/
│ │ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ │ └── linear.html
│ │ │ │ │ │ └── styling.html
│ │ │ │ │ ├── charts/
│ │ │ │ │ │ ├── area.html
│ │ │ │ │ │ ├── bar.html
│ │ │ │ │ │ ├── bubble.html
│ │ │ │ │ │ ├── doughnut.html
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ ├── line.html
│ │ │ │ │ │ ├── mixed.html
│ │ │ │ │ │ ├── polar.html
│ │ │ │ │ │ ├── radar.html
│ │ │ │ │ │ └── scatter.html
│ │ │ │ │ ├── configuration/
│ │ │ │ │ │ ├── animations.html
│ │ │ │ │ │ ├── elements.html
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ ├── layout.html
│ │ │ │ │ │ ├── legend.html
│ │ │ │ │ │ ├── title.html
│ │ │ │ │ │ └── tooltip.html
│ │ │ │ │ ├── developers/
│ │ │ │ │ │ ├── api.html
│ │ │ │ │ │ ├── axes.html
│ │ │ │ │ │ ├── charts.html
│ │ │ │ │ │ ├── contributing.html
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ ├── plugins.html
│ │ │ │ │ │ └── updates.html
│ │ │ │ │ ├── general/
│ │ │ │ │ │ ├── colors.html
│ │ │ │ │ │ ├── device-pixel-ratio.md
│ │ │ │ │ │ ├── fonts.html
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ ├── interactions/
│ │ │ │ │ │ │ ├── events.html
│ │ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ │ └── modes.html
│ │ │ │ │ │ ├── options.html
│ │ │ │ │ │ └── responsive.html
│ │ │ │ │ ├── getting-started/
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ ├── installation.html
│ │ │ │ │ │ ├── integration.html
│ │ │ │ │ │ └── usage.html
│ │ │ │ │ ├── gitbook/
│ │ │ │ │ │ ├── fonts/
│ │ │ │ │ │ │ └── fontawesome/
│ │ │ │ │ │ │ └── FontAwesome.otf
│ │ │ │ │ │ ├── gitbook-plugin-anchorjs/
│ │ │ │ │ │ │ └── anchor-style.js
│ │ │ │ │ │ ├── gitbook-plugin-chartjs/
│ │ │ │ │ │ │ ├── Chart.bundle.js
│ │ │ │ │ │ │ ├── Chart.js
│ │ │ │ │ │ │ ├── chartjs-plugin-deferred.js
│ │ │ │ │ │ │ └── style.css
│ │ │ │ │ │ ├── gitbook-plugin-fontsettings/
│ │ │ │ │ │ │ ├── fontsettings.js
│ │ │ │ │ │ │ └── website.css
│ │ │ │ │ │ ├── gitbook-plugin-ga/
│ │ │ │ │ │ │ └── plugin.js
│ │ │ │ │ │ ├── gitbook-plugin-highlight/
│ │ │ │ │ │ │ ├── ebook.css
│ │ │ │ │ │ │ └── website.css
│ │ │ │ │ │ ├── gitbook-plugin-search-plus/
│ │ │ │ │ │ │ ├── search.css
│ │ │ │ │ │ │ └── search.js
│ │ │ │ │ │ ├── gitbook-plugin-sharing/
│ │ │ │ │ │ │ └── buttons.js
│ │ │ │ │ │ ├── gitbook.js
│ │ │ │ │ │ ├── style.css
│ │ │ │ │ │ └── theme.js
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── notes/
│ │ │ │ │ │ ├── comparison.html
│ │ │ │ │ │ ├── extensions.html
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ └── license.html
│ │ │ │ │ ├── search_plus_index.json
│ │ │ │ │ └── style.css
│ │ │ │ ├── font-awesome/
│ │ │ │ │ ├── css/
│ │ │ │ │ │ └── font-awesome.css
│ │ │ │ │ └── fonts/
│ │ │ │ │ └── FontAwesome.otf
│ │ │ │ ├── jquery/
│ │ │ │ │ ├── core.js
│ │ │ │ │ ├── jquery.js
│ │ │ │ │ └── jquery.slim.js
│ │ │ │ ├── login-bg-particles.js
│ │ │ │ ├── particles.js
│ │ │ │ └── popper/
│ │ │ │ ├── esm/
│ │ │ │ │ ├── popper-utils.js
│ │ │ │ │ └── popper.js
│ │ │ │ ├── popper-utils.js
│ │ │ │ ├── popper.js
│ │ │ │ └── umd/
│ │ │ │ ├── popper-utils.js
│ │ │ │ └── popper.js
│ │ │ ├── profile.js
│ │ │ ├── public.js
│ │ │ └── test.js
│ │ └── plugins/
│ │ ├── ajaxupload/
│ │ │ └── ajaxupload.js
│ │ ├── bootstrap/
│ │ │ ├── css/
│ │ │ │ ├── bootstrap-grid.css
│ │ │ │ ├── bootstrap-reboot.css
│ │ │ │ └── bootstrap.css
│ │ │ └── js/
│ │ │ ├── bootstrap.bundle.js
│ │ │ └── bootstrap.js
│ │ ├── jqgrid-5.7.0/
│ │ │ ├── grid.locale-cn.js
│ │ │ ├── ui.jqgrid-bootstrap-ui.css
│ │ │ ├── ui.jqgrid-bootstrap.css
│ │ │ ├── ui.jqgrid-bootstrap4.css
│ │ │ └── ui.jqgrid.css
│ │ ├── jquery/
│ │ │ ├── core.js
│ │ │ ├── jquery.js
│ │ │ └── jquery.slim.js
│ │ ├── select2/
│ │ │ ├── i18n/
│ │ │ │ ├── az.js
│ │ │ │ ├── bg.js
│ │ │ │ ├── ca.js
│ │ │ │ ├── cs.js
│ │ │ │ ├── da.js
│ │ │ │ ├── de.js
│ │ │ │ ├── en.js
│ │ │ │ ├── es.js
│ │ │ │ ├── et.js
│ │ │ │ ├── eu.js
│ │ │ │ ├── fa.js
│ │ │ │ ├── fi.js
│ │ │ │ ├── fr.js
│ │ │ │ ├── gl.js
│ │ │ │ ├── he.js
│ │ │ │ ├── hi.js
│ │ │ │ ├── hr.js
│ │ │ │ ├── hu.js
│ │ │ │ ├── id.js
│ │ │ │ ├── is.js
│ │ │ │ ├── it.js
│ │ │ │ ├── ko.js
│ │ │ │ ├── lt.js
│ │ │ │ ├── lv.js
│ │ │ │ ├── mk.js
│ │ │ │ ├── nb.js
│ │ │ │ ├── nl.js
│ │ │ │ ├── pl.js
│ │ │ │ ├── pt-BR.js
│ │ │ │ ├── pt.js
│ │ │ │ ├── ro.js
│ │ │ │ ├── ru.js
│ │ │ │ ├── sk.js
│ │ │ │ ├── sr.js
│ │ │ │ ├── sv.js
│ │ │ │ ├── th.js
│ │ │ │ ├── tr.js
│ │ │ │ ├── uk.js
│ │ │ │ ├── vi.js
│ │ │ │ ├── zh-CN.js
│ │ │ │ └── zh-TW.js
│ │ │ ├── select2.css
│ │ │ ├── select2.full.js
│ │ │ └── select2.js
│ │ └── wangeditor-5.1.23/
│ │ ├── index.js
│ │ └── style.css
│ └── mall/
│ ├── css/
│ │ ├── bootstrap-modal.css
│ │ ├── common.css
│ │ └── iconfont.css
│ ├── js/
│ │ ├── bootstrap3.js
│ │ ├── detail.js
│ │ ├── index.js
│ │ ├── jquery-1.8.0.js
│ │ └── search.js
│ └── styles/
│ ├── addresses.css
│ ├── cart.css
│ ├── detail.css
│ ├── header.css
│ ├── index.css
│ ├── login.css
│ ├── my-orders.css
│ ├── order-detail.css
│ ├── order-settle.css
│ ├── pay-select.css
│ ├── pay.css
│ ├── personal.css
│ └── search.css
└── templates/
├── admin/
│ ├── footer.html
│ ├── header.html
│ ├── index.html
│ ├── login.html
│ ├── newbee_mall_carousel.html
│ ├── newbee_mall_category.html
│ ├── newbee_mall_goods.html
│ ├── newbee_mall_goods_edit.html
│ ├── newbee_mall_index_config.html
│ ├── newbee_mall_order.html
│ ├── newbee_mall_user.html
│ ├── profile.html
│ └── sidebar.html
├── error/
│ ├── error.html
│ ├── error_400.html
│ ├── error_404.html
│ └── error_5xx.html
└── mall/
├── alipay.html
├── cart.html
├── detail.html
├── footer.html
├── header.html
├── index.html
├── login.html
├── my-orders.html
├── order-detail.html
├── order-settle.html
├── pay-select.html
├── personal-sidebar.html
├── personal.html
├── register.html
├── search.html
└── wxpay.html
Showing preview only (317K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3880 symbols across 130 files)
FILE: src/main/java/ltd/newbee/mall/NewBeeMallApplication.java
class NewBeeMallApplication (line 21) | @MapperScan("ltd.newbee.mall.dao")
method main (line 24) | public static void main(String[] args) {
FILE: src/main/java/ltd/newbee/mall/common/Constants.java
class Constants (line 18) | public class Constants {
FILE: src/main/java/ltd/newbee/mall/common/IndexConfigTypeEnum.java
type IndexConfigTypeEnum (line 18) | public enum IndexConfigTypeEnum {
method IndexConfigTypeEnum (line 31) | IndexConfigTypeEnum(int type, String name) {
method getIndexConfigTypeEnumByType (line 36) | public static IndexConfigTypeEnum getIndexConfigTypeEnumByType(int typ...
method getType (line 45) | public int getType() {
method setType (line 49) | public void setType(int type) {
method getName (line 53) | public String getName() {
method setName (line 57) | public void setName(String name) {
FILE: src/main/java/ltd/newbee/mall/common/NewBeeMallCategoryLevelEnum.java
type NewBeeMallCategoryLevelEnum (line 18) | public enum NewBeeMallCategoryLevelEnum {
method NewBeeMallCategoryLevelEnum (line 29) | NewBeeMallCategoryLevelEnum(int level, String name) {
method getNewBeeMallOrderStatusEnumByLevel (line 34) | public static NewBeeMallCategoryLevelEnum getNewBeeMallOrderStatusEnum...
method getLevel (line 43) | public int getLevel() {
method setLevel (line 47) | public void setLevel(int level) {
method getName (line 51) | public String getName() {
method setName (line 55) | public void setName(String name) {
FILE: src/main/java/ltd/newbee/mall/common/NewBeeMallException.java
class NewBeeMallException (line 11) | public class NewBeeMallException extends RuntimeException {
method NewBeeMallException (line 13) | public NewBeeMallException() {
method NewBeeMallException (line 16) | public NewBeeMallException(String message) {
method fail (line 25) | public static void fail(String message) {
FILE: src/main/java/ltd/newbee/mall/common/NewBeeMallOrderStatusEnum.java
type NewBeeMallOrderStatusEnum (line 18) | public enum NewBeeMallOrderStatusEnum {
method NewBeeMallOrderStatusEnum (line 34) | NewBeeMallOrderStatusEnum(int orderStatus, String name) {
method getNewBeeMallOrderStatusEnumByStatus (line 39) | public static NewBeeMallOrderStatusEnum getNewBeeMallOrderStatusEnumBy...
method getOrderStatus (line 48) | public int getOrderStatus() {
method setOrderStatus (line 52) | public void setOrderStatus(int orderStatus) {
method getName (line 56) | public String getName() {
method setName (line 60) | public void setName(String name) {
FILE: src/main/java/ltd/newbee/mall/common/PayStatusEnum.java
type PayStatusEnum (line 18) | public enum PayStatusEnum {
method PayStatusEnum (line 28) | PayStatusEnum(int payStatus, String name) {
method getPayStatusEnumByStatus (line 33) | public static PayStatusEnum getPayStatusEnumByStatus(int payStatus) {
method getPayStatus (line 42) | public int getPayStatus() {
method setPayStatus (line 46) | public void setPayStatus(int payStatus) {
method getName (line 50) | public String getName() {
method setName (line 54) | public void setName(String name) {
FILE: src/main/java/ltd/newbee/mall/common/PayTypeEnum.java
type PayTypeEnum (line 18) | public enum PayTypeEnum {
method PayTypeEnum (line 29) | PayTypeEnum(int payType, String name) {
method getPayTypeEnumByType (line 34) | public static PayTypeEnum getPayTypeEnumByType(int payType) {
method getPayType (line 43) | public int getPayType() {
method setPayType (line 47) | public void setPayType(int payType) {
method getName (line 51) | public String getName() {
method setName (line 55) | public void setName(String name) {
FILE: src/main/java/ltd/newbee/mall/common/ServiceResultEnum.java
type ServiceResultEnum (line 17) | public enum ServiceResultEnum {
method ServiceResultEnum (line 80) | ServiceResultEnum(String result) {
method getResult (line 84) | public String getResult() {
method setResult (line 88) | public void setResult(String result) {
FILE: src/main/java/ltd/newbee/mall/config/NeeBeeMallWebMvcConfigurer.java
class NeeBeeMallWebMvcConfigurer (line 21) | @Configuration
method addInterceptors (line 31) | public void addInterceptors(InterceptorRegistry registry) {
method addResourceHandlers (line 62) | public void addResourceHandlers(ResourceHandlerRegistry registry) {
FILE: src/main/java/ltd/newbee/mall/controller/admin/AdminController.java
class AdminController (line 30) | @Controller
method login (line 37) | @GetMapping({"/login"})
method test (line 42) | @GetMapping({"/test"})
method index (line 48) | @GetMapping({"", "/", "/index", "/index.html"})
method login (line 54) | @PostMapping(value = "/login")
method profile (line 85) | @GetMapping("/profile")
method passwordUpdate (line 98) | @PostMapping("/profile/password")
method nameUpdate (line 117) | @PostMapping("/profile/name")
method logout (line 132) | @GetMapping("/logout")
FILE: src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallCarouselController.java
class NewBeeMallCarouselController (line 33) | @Controller
method carouselPage (line 40) | @GetMapping("/carousels")
method list (line 49) | @RequestMapping(value = "/carousels/list", method = RequestMethod.GET)
method save (line 62) | @RequestMapping(value = "/carousels/save", method = RequestMethod.POST)
method update (line 81) | @RequestMapping(value = "/carousels/update", method = RequestMethod.POST)
method info (line 100) | @GetMapping("/carousels/info/{id}")
method delete (line 113) | @RequestMapping(value = "/carousels/delete", method = RequestMethod.POST)
FILE: src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallGoodsCategoryController.java
class NewBeeMallGoodsCategoryController (line 35) | @Controller
method categoriesPage (line 42) | @GetMapping("/categories")
method list (line 57) | @RequestMapping(value = "/categories/list", method = RequestMethod.GET)
method listForSelect (line 70) | @RequestMapping(value = "/categories/listForSelect", method = RequestM...
method save (line 104) | @RequestMapping(value = "/categories/save", method = RequestMethod.POST)
method update (line 125) | @RequestMapping(value = "/categories/update", method = RequestMethod.P...
method info (line 146) | @GetMapping("/categories/info/{id}")
method delete (line 159) | @RequestMapping(value = "/categories/delete", method = RequestMethod.P...
FILE: src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallGoodsController.java
class NewBeeMallGoodsController (line 41) | @Controller
method goodsPage (line 50) | @GetMapping("/goods")
method edit (line 56) | @GetMapping("/goods/edit")
method edit (line 78) | @GetMapping("/goods/edit/{goodsId}")
method list (line 135) | @RequestMapping(value = "/goods/list", method = RequestMethod.GET)
method save (line 148) | @RequestMapping(value = "/goods/save", method = RequestMethod.POST)
method update (line 175) | @RequestMapping(value = "/goods/update", method = RequestMethod.POST)
method info (line 202) | @GetMapping("/goods/info/{id}")
method delete (line 212) | @RequestMapping(value = "/goods/status/{sellStatus}", method = Request...
FILE: src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallGoodsIndexConfigController.java
class NewBeeMallGoodsIndexConfigController (line 35) | @Controller
method indexConfigsPage (line 42) | @GetMapping("/indexConfigs")
method list (line 57) | @RequestMapping(value = "/indexConfigs/list", method = RequestMethod.GET)
method save (line 70) | @RequestMapping(value = "/indexConfigs/save", method = RequestMethod.P...
method update (line 90) | @RequestMapping(value = "/indexConfigs/update", method = RequestMethod...
method info (line 110) | @GetMapping("/indexConfigs/info/{id}")
method delete (line 123) | @RequestMapping(value = "/indexConfigs/delete", method = RequestMethod...
FILE: src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallOrderController.java
class NewBeeMallOrderController (line 36) | @Controller
method ordersPage (line 43) | @GetMapping("/orders")
method list (line 52) | @RequestMapping(value = "/orders/list", method = RequestMethod.GET)
method update (line 65) | @RequestMapping(value = "/orders/update", method = RequestMethod.POST)
method info (line 86) | @GetMapping("/order-items/{id}")
method checkDone (line 99) | @RequestMapping(value = "/orders/checkDone", method = RequestMethod.POST)
method checkOut (line 116) | @RequestMapping(value = "/orders/checkOut", method = RequestMethod.POST)
method closeOrder (line 133) | @RequestMapping(value = "/orders/close", method = RequestMethod.POST)
FILE: src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallUserController.java
class NewBeeMallUserController (line 30) | @Controller
method usersPage (line 37) | @GetMapping("/users")
method list (line 46) | @RequestMapping(value = "/users/list", method = RequestMethod.GET)
method delete (line 59) | @RequestMapping(value = "/users/lock/{lockStatus}", method = RequestMe...
FILE: src/main/java/ltd/newbee/mall/controller/common/CommonController.java
class CommonController (line 26) | @Controller
method defaultKaptcha (line 29) | @GetMapping("/common/kaptcha")
method mallKaptcha (line 45) | @GetMapping("/common/mall/kaptcha")
FILE: src/main/java/ltd/newbee/mall/controller/common/ErrorPageController.java
class ErrorPageController (line 21) | @Controller
method ErrorPageController (line 29) | public ErrorPageController(ErrorAttributes errorAttributes) {
method ErrorPageController (line 33) | public ErrorPageController() {
method resolveErrorView (line 39) | @Override
FILE: src/main/java/ltd/newbee/mall/controller/common/NewBeeMallExceptionHandler.java
class NewBeeMallExceptionHandler (line 22) | @RestControllerAdvice
method handleException (line 25) | @ExceptionHandler(Exception.class)
FILE: src/main/java/ltd/newbee/mall/controller/common/UploadController.java
class UploadController (line 42) | @Controller
method upload (line 49) | @PostMapping({"/upload/file"})
method uploadV2 (line 83) | @PostMapping({"/upload/files"})
FILE: src/main/java/ltd/newbee/mall/controller/mall/GoodsController.java
class GoodsController (line 32) | @Controller
method searchPage (line 40) | @GetMapping({"/search", "/search.html"})
method detailPage (line 74) | @GetMapping("/goods/detail/{goodsId}")
FILE: src/main/java/ltd/newbee/mall/controller/mall/IndexController.java
class IndexController (line 28) | @Controller
method indexPage (line 40) | @GetMapping({"/index", "/", "/index.html"})
FILE: src/main/java/ltd/newbee/mall/controller/mall/OrderController.java
class OrderController (line 36) | @Controller
method orderDetailPage (line 44) | @GetMapping("/orders/{orderNo}")
method orderListPage (line 52) | @GetMapping("/orders")
method saveOrder (line 67) | @GetMapping("/saveOrder")
method cancelOrder (line 85) | @PutMapping("/orders/{orderNo}/cancel")
method finishOrder (line 97) | @PutMapping("/orders/{orderNo}/finish")
method selectPayType (line 109) | @GetMapping("/selectPayType")
method payOrder (line 126) | @GetMapping("/payPage")
method paySuccess (line 147) | @GetMapping("/paySuccess")
FILE: src/main/java/ltd/newbee/mall/controller/mall/PersonalController.java
class PersonalController (line 28) | @Controller
method personalPage (line 34) | @GetMapping("/personal")
method logout (line 41) | @GetMapping("/logout")
method loginPage (line 47) | @GetMapping({"/login", "login.html"})
method registerPage (line 52) | @GetMapping({"/register", "register.html"})
method addressesPage (line 57) | @GetMapping("/personal/addresses")
method login (line 62) | @PostMapping("/login")
method register (line 93) | @PostMapping("/register")
method updateInfo (line 123) | @PostMapping("/personal/updateInfo")
FILE: src/main/java/ltd/newbee/mall/controller/mall/ShoppingCartController.java
class ShoppingCartController (line 30) | @Controller
method cartListPage (line 36) | @GetMapping("/shop-cart")
method saveNewBeeMallShoppingCartItem (line 63) | @PostMapping("/shop-cart")
method updateNewBeeMallShoppingCartItem (line 78) | @PutMapping("/shop-cart")
method updateNewBeeMallShoppingCartItem (line 93) | @DeleteMapping("/shop-cart/{newBeeMallShoppingCartItemId}")
method settlePage (line 107) | @GetMapping("/shop-cart/settle")
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallGoodsDetailVO.java
class NewBeeMallGoodsDetailVO (line 17) | public class NewBeeMallGoodsDetailVO implements Serializable {
method getGoodsId (line 35) | public Long getGoodsId() {
method setGoodsId (line 39) | public void setGoodsId(Long goodsId) {
method getGoodsName (line 43) | public String getGoodsName() {
method setGoodsName (line 47) | public void setGoodsName(String goodsName) {
method getGoodsIntro (line 51) | public String getGoodsIntro() {
method setGoodsIntro (line 55) | public void setGoodsIntro(String goodsIntro) {
method getGoodsCoverImg (line 59) | public String getGoodsCoverImg() {
method setGoodsCoverImg (line 63) | public void setGoodsCoverImg(String goodsCoverImg) {
method getSellingPrice (line 67) | public Integer getSellingPrice() {
method setSellingPrice (line 71) | public void setSellingPrice(Integer sellingPrice) {
method getOriginalPrice (line 75) | public Integer getOriginalPrice() {
method setOriginalPrice (line 79) | public void setOriginalPrice(Integer originalPrice) {
method getGoodsDetailContent (line 83) | public String getGoodsDetailContent() {
method setGoodsDetailContent (line 87) | public void setGoodsDetailContent(String goodsDetailContent) {
method getGoodsCarouselList (line 91) | public String[] getGoodsCarouselList() {
method setGoodsCarouselList (line 95) | public void setGoodsCarouselList(String[] goodsCarouselList) {
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallIndexCarouselVO.java
class NewBeeMallIndexCarouselVO (line 16) | public class NewBeeMallIndexCarouselVO implements Serializable {
method getCarouselUrl (line 22) | public String getCarouselUrl() {
method setCarouselUrl (line 26) | public void setCarouselUrl(String carouselUrl) {
method getRedirectUrl (line 30) | public String getRedirectUrl() {
method setRedirectUrl (line 34) | public void setRedirectUrl(String redirectUrl) {
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallIndexCategoryVO.java
class NewBeeMallIndexCategoryVO (line 17) | public class NewBeeMallIndexCategoryVO implements Serializable {
method getCategoryId (line 27) | public Long getCategoryId() {
method setCategoryId (line 31) | public void setCategoryId(Long categoryId) {
method getCategoryLevel (line 35) | public Byte getCategoryLevel() {
method setCategoryLevel (line 39) | public void setCategoryLevel(Byte categoryLevel) {
method getCategoryName (line 43) | public String getCategoryName() {
method setCategoryName (line 47) | public void setCategoryName(String categoryName) {
method getSecondLevelCategoryVOS (line 51) | public List<SecondLevelCategoryVO> getSecondLevelCategoryVOS() {
method setSecondLevelCategoryVOS (line 55) | public void setSecondLevelCategoryVOS(List<SecondLevelCategoryVO> seco...
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallIndexConfigGoodsVO.java
class NewBeeMallIndexConfigGoodsVO (line 16) | public class NewBeeMallIndexConfigGoodsVO implements Serializable {
method getGoodsId (line 30) | public Long getGoodsId() {
method setGoodsId (line 34) | public void setGoodsId(Long goodsId) {
method getGoodsName (line 38) | public String getGoodsName() {
method setGoodsName (line 42) | public void setGoodsName(String goodsName) {
method getGoodsIntro (line 46) | public String getGoodsIntro() {
method setGoodsIntro (line 50) | public void setGoodsIntro(String goodsIntro) {
method getGoodsCoverImg (line 54) | public String getGoodsCoverImg() {
method setGoodsCoverImg (line 58) | public void setGoodsCoverImg(String goodsCoverImg) {
method getSellingPrice (line 62) | public Integer getSellingPrice() {
method setSellingPrice (line 66) | public void setSellingPrice(Integer sellingPrice) {
method getTag (line 70) | public String getTag() {
method setTag (line 74) | public void setTag(String tag) {
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallOrderDetailVO.java
class NewBeeMallOrderDetailVO (line 18) | public class NewBeeMallOrderDetailVO implements Serializable {
method getOrderNo (line 44) | public String getOrderNo() {
method setOrderNo (line 48) | public void setOrderNo(String orderNo) {
method getTotalPrice (line 52) | public Integer getTotalPrice() {
method setTotalPrice (line 56) | public void setTotalPrice(Integer totalPrice) {
method getPayStatus (line 60) | public Byte getPayStatus() {
method setPayStatus (line 64) | public void setPayStatus(Byte payStatus) {
method getPayType (line 68) | public Byte getPayType() {
method setPayType (line 72) | public void setPayType(Byte payType) {
method getPayTime (line 76) | public Date getPayTime() {
method setPayTime (line 80) | public void setPayTime(Date payTime) {
method getOrderStatus (line 84) | public Byte getOrderStatus() {
method setOrderStatus (line 88) | public void setOrderStatus(Byte orderStatus) {
method getUserAddress (line 92) | public String getUserAddress() {
method setUserAddress (line 96) | public void setUserAddress(String userAddress) {
method getCreateTime (line 100) | public Date getCreateTime() {
method setCreateTime (line 104) | public void setCreateTime(Date createTime) {
method getPayStatusString (line 108) | public String getPayStatusString() {
method setPayStatusString (line 112) | public void setPayStatusString(String payStatusString) {
method getPayTypeString (line 116) | public String getPayTypeString() {
method setPayTypeString (line 120) | public void setPayTypeString(String payTypeString) {
method getOrderStatusString (line 124) | public String getOrderStatusString() {
method setOrderStatusString (line 128) | public void setOrderStatusString(String orderStatusString) {
method getNewBeeMallOrderItemVOS (line 132) | public List<NewBeeMallOrderItemVO> getNewBeeMallOrderItemVOS() {
method setNewBeeMallOrderItemVOS (line 136) | public void setNewBeeMallOrderItemVOS(List<NewBeeMallOrderItemVO> newB...
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallOrderItemVO.java
class NewBeeMallOrderItemVO (line 16) | public class NewBeeMallOrderItemVO implements Serializable {
method getGoodsId (line 28) | public Long getGoodsId() {
method setGoodsId (line 32) | public void setGoodsId(Long goodsId) {
method getGoodsName (line 36) | public String getGoodsName() {
method setGoodsName (line 40) | public void setGoodsName(String goodsName) {
method getGoodsCoverImg (line 44) | public String getGoodsCoverImg() {
method setGoodsCoverImg (line 48) | public void setGoodsCoverImg(String goodsCoverImg) {
method getSellingPrice (line 52) | public Integer getSellingPrice() {
method setSellingPrice (line 56) | public void setSellingPrice(Integer sellingPrice) {
method getGoodsCount (line 60) | public Integer getGoodsCount() {
method setGoodsCount (line 64) | public void setGoodsCount(Integer goodsCount) {
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallOrderListVO.java
class NewBeeMallOrderListVO (line 18) | public class NewBeeMallOrderListVO implements Serializable {
method getOrderId (line 38) | public Long getOrderId() {
method setOrderId (line 42) | public void setOrderId(Long orderId) {
method getOrderNo (line 46) | public String getOrderNo() {
method setOrderNo (line 50) | public void setOrderNo(String orderNo) {
method getTotalPrice (line 54) | public Integer getTotalPrice() {
method setTotalPrice (line 58) | public void setTotalPrice(Integer totalPrice) {
method getPayType (line 62) | public Byte getPayType() {
method setPayType (line 66) | public void setPayType(Byte payType) {
method getOrderStatus (line 70) | public Byte getOrderStatus() {
method setOrderStatus (line 74) | public void setOrderStatus(Byte orderStatus) {
method getOrderStatusString (line 78) | public String getOrderStatusString() {
method setOrderStatusString (line 82) | public void setOrderStatusString(String orderStatusString) {
method getUserAddress (line 86) | public String getUserAddress() {
method setUserAddress (line 90) | public void setUserAddress(String userAddress) {
method getCreateTime (line 94) | public Date getCreateTime() {
method setCreateTime (line 98) | public void setCreateTime(Date createTime) {
method getNewBeeMallOrderItemVOS (line 102) | public List<NewBeeMallOrderItemVO> getNewBeeMallOrderItemVOS() {
method setNewBeeMallOrderItemVOS (line 106) | public void setNewBeeMallOrderItemVOS(List<NewBeeMallOrderItemVO> newB...
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallSearchGoodsVO.java
class NewBeeMallSearchGoodsVO (line 16) | public class NewBeeMallSearchGoodsVO implements Serializable {
method getGoodsId (line 28) | public Long getGoodsId() {
method setGoodsId (line 32) | public void setGoodsId(Long goodsId) {
method getGoodsName (line 36) | public String getGoodsName() {
method setGoodsName (line 40) | public void setGoodsName(String goodsName) {
method getGoodsIntro (line 44) | public String getGoodsIntro() {
method setGoodsIntro (line 48) | public void setGoodsIntro(String goodsIntro) {
method getGoodsCoverImg (line 52) | public String getGoodsCoverImg() {
method setGoodsCoverImg (line 56) | public void setGoodsCoverImg(String goodsCoverImg) {
method getSellingPrice (line 60) | public Integer getSellingPrice() {
method setSellingPrice (line 64) | public void setSellingPrice(Integer sellingPrice) {
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallShoppingCartItemVO.java
class NewBeeMallShoppingCartItemVO (line 16) | public class NewBeeMallShoppingCartItemVO implements Serializable {
method getGoodsId (line 30) | public Long getGoodsId() {
method setGoodsId (line 34) | public void setGoodsId(Long goodsId) {
method getGoodsName (line 38) | public String getGoodsName() {
method setGoodsName (line 42) | public void setGoodsName(String goodsName) {
method getGoodsCoverImg (line 46) | public String getGoodsCoverImg() {
method setGoodsCoverImg (line 50) | public void setGoodsCoverImg(String goodsCoverImg) {
method getSellingPrice (line 54) | public Integer getSellingPrice() {
method setSellingPrice (line 58) | public void setSellingPrice(Integer sellingPrice) {
method getCartItemId (line 62) | public Long getCartItemId() {
method setCartItemId (line 66) | public void setCartItemId(Long cartItemId) {
method getGoodsCount (line 70) | public Integer getGoodsCount() {
method setGoodsCount (line 74) | public void setGoodsCount(Integer goodsCount) {
FILE: src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallUserVO.java
class NewBeeMallUserVO (line 13) | public class NewBeeMallUserVO implements Serializable {
method getUserId (line 27) | public Long getUserId() {
method setUserId (line 31) | public void setUserId(Long userId) {
method getNickName (line 35) | public String getNickName() {
method setNickName (line 39) | public void setNickName(String nickName) {
method getLoginName (line 43) | public String getLoginName() {
method setLoginName (line 47) | public void setLoginName(String loginName) {
method getIntroduceSign (line 51) | public String getIntroduceSign() {
method setIntroduceSign (line 55) | public void setIntroduceSign(String introduceSign) {
method getAddress (line 59) | public String getAddress() {
method setAddress (line 63) | public void setAddress(String address) {
method getShopCartItemCount (line 67) | public int getShopCartItemCount() {
method setShopCartItemCount (line 71) | public void setShopCartItemCount(int shopCartItemCount) {
FILE: src/main/java/ltd/newbee/mall/controller/vo/SearchPageCategoryVO.java
class SearchPageCategoryVO (line 19) | public class SearchPageCategoryVO implements Serializable {
method getFirstLevelCategoryName (line 31) | public String getFirstLevelCategoryName() {
method setFirstLevelCategoryName (line 35) | public void setFirstLevelCategoryName(String firstLevelCategoryName) {
method getSecondLevelCategoryList (line 39) | public List<GoodsCategory> getSecondLevelCategoryList() {
method setSecondLevelCategoryList (line 43) | public void setSecondLevelCategoryList(List<GoodsCategory> secondLevel...
method getSecondLevelCategoryName (line 47) | public String getSecondLevelCategoryName() {
method setSecondLevelCategoryName (line 51) | public void setSecondLevelCategoryName(String secondLevelCategoryName) {
method getThirdLevelCategoryList (line 55) | public List<GoodsCategory> getThirdLevelCategoryList() {
method setThirdLevelCategoryList (line 59) | public void setThirdLevelCategoryList(List<GoodsCategory> thirdLevelCa...
method getCurrentCategoryName (line 63) | public String getCurrentCategoryName() {
method setCurrentCategoryName (line 67) | public void setCurrentCategoryName(String currentCategoryName) {
FILE: src/main/java/ltd/newbee/mall/controller/vo/SecondLevelCategoryVO.java
class SecondLevelCategoryVO (line 17) | public class SecondLevelCategoryVO implements Serializable {
method getCategoryId (line 29) | public Long getCategoryId() {
method setCategoryId (line 33) | public void setCategoryId(Long categoryId) {
method getCategoryLevel (line 37) | public Byte getCategoryLevel() {
method setCategoryLevel (line 41) | public void setCategoryLevel(Byte categoryLevel) {
method getCategoryName (line 45) | public String getCategoryName() {
method setCategoryName (line 49) | public void setCategoryName(String categoryName) {
method getThirdLevelCategoryVOS (line 53) | public List<ThirdLevelCategoryVO> getThirdLevelCategoryVOS() {
method setThirdLevelCategoryVOS (line 57) | public void setThirdLevelCategoryVOS(List<ThirdLevelCategoryVO> thirdL...
method getParentId (line 61) | public Long getParentId() {
method setParentId (line 65) | public void setParentId(Long parentId) {
FILE: src/main/java/ltd/newbee/mall/controller/vo/ThirdLevelCategoryVO.java
class ThirdLevelCategoryVO (line 16) | public class ThirdLevelCategoryVO implements Serializable {
method getCategoryId (line 24) | public Long getCategoryId() {
method setCategoryId (line 28) | public void setCategoryId(Long categoryId) {
method getCategoryLevel (line 32) | public Byte getCategoryLevel() {
method setCategoryLevel (line 36) | public void setCategoryLevel(Byte categoryLevel) {
method getCategoryName (line 40) | public String getCategoryName() {
method setCategoryName (line 44) | public void setCategoryName(String categoryName) {
FILE: src/main/java/ltd/newbee/mall/dao/AdminUserMapper.java
type AdminUserMapper (line 14) | public interface AdminUserMapper {
method insert (line 15) | int insert(AdminUser record);
method insertSelective (line 17) | int insertSelective(AdminUser record);
method login (line 26) | AdminUser login(@Param("userName") String userName, @Param("password")...
method selectByPrimaryKey (line 28) | AdminUser selectByPrimaryKey(Integer adminUserId);
method updateByPrimaryKeySelective (line 30) | int updateByPrimaryKeySelective(AdminUser record);
method updateByPrimaryKey (line 32) | int updateByPrimaryKey(AdminUser record);
FILE: src/main/java/ltd/newbee/mall/dao/CarouselMapper.java
type CarouselMapper (line 17) | public interface CarouselMapper {
method deleteByPrimaryKey (line 18) | int deleteByPrimaryKey(Integer carouselId);
method insert (line 20) | int insert(Carousel record);
method insertSelective (line 22) | int insertSelective(Carousel record);
method selectByPrimaryKey (line 24) | Carousel selectByPrimaryKey(Integer carouselId);
method updateByPrimaryKeySelective (line 26) | int updateByPrimaryKeySelective(Carousel record);
method updateByPrimaryKey (line 28) | int updateByPrimaryKey(Carousel record);
method findCarouselList (line 30) | List<Carousel> findCarouselList(PageQueryUtil pageUtil);
method getTotalCarousels (line 32) | int getTotalCarousels(PageQueryUtil pageUtil);
method deleteBatch (line 34) | int deleteBatch(Integer[] ids);
method findCarouselsByNum (line 36) | List<Carousel> findCarouselsByNum(@Param("number") int number);
FILE: src/main/java/ltd/newbee/mall/dao/GoodsCategoryMapper.java
type GoodsCategoryMapper (line 17) | public interface GoodsCategoryMapper {
method deleteByPrimaryKey (line 18) | int deleteByPrimaryKey(Long categoryId);
method insert (line 20) | int insert(GoodsCategory record);
method insertSelective (line 22) | int insertSelective(GoodsCategory record);
method selectByPrimaryKey (line 24) | GoodsCategory selectByPrimaryKey(Long categoryId);
method selectByLevelAndName (line 26) | GoodsCategory selectByLevelAndName(@Param("categoryLevel") Byte catego...
method updateByPrimaryKeySelective (line 28) | int updateByPrimaryKeySelective(GoodsCategory record);
method updateByPrimaryKey (line 30) | int updateByPrimaryKey(GoodsCategory record);
method findGoodsCategoryList (line 32) | List<GoodsCategory> findGoodsCategoryList(PageQueryUtil pageUtil);
method getTotalGoodsCategories (line 34) | int getTotalGoodsCategories(PageQueryUtil pageUtil);
method deleteBatch (line 36) | int deleteBatch(Integer[] ids);
method selectByLevelAndParentIdsAndNumber (line 38) | List<GoodsCategory> selectByLevelAndParentIdsAndNumber(@Param("parentI...
FILE: src/main/java/ltd/newbee/mall/dao/IndexConfigMapper.java
type IndexConfigMapper (line 17) | public interface IndexConfigMapper {
method deleteByPrimaryKey (line 18) | int deleteByPrimaryKey(Long configId);
method insert (line 20) | int insert(IndexConfig record);
method insertSelective (line 22) | int insertSelective(IndexConfig record);
method selectByPrimaryKey (line 24) | IndexConfig selectByPrimaryKey(Long configId);
method selectByTypeAndGoodsId (line 26) | IndexConfig selectByTypeAndGoodsId(@Param("configType") int configType...
method updateByPrimaryKeySelective (line 28) | int updateByPrimaryKeySelective(IndexConfig record);
method updateByPrimaryKey (line 30) | int updateByPrimaryKey(IndexConfig record);
method findIndexConfigList (line 32) | List<IndexConfig> findIndexConfigList(PageQueryUtil pageUtil);
method getTotalIndexConfigs (line 34) | int getTotalIndexConfigs(PageQueryUtil pageUtil);
method deleteBatch (line 36) | int deleteBatch(Long[] ids);
method findIndexConfigsByTypeAndNum (line 38) | List<IndexConfig> findIndexConfigsByTypeAndNum(@Param("configType") in...
FILE: src/main/java/ltd/newbee/mall/dao/MallUserMapper.java
type MallUserMapper (line 17) | public interface MallUserMapper {
method deleteByPrimaryKey (line 18) | int deleteByPrimaryKey(Long userId);
method insert (line 20) | int insert(MallUser record);
method insertSelective (line 22) | int insertSelective(MallUser record);
method selectByPrimaryKey (line 24) | MallUser selectByPrimaryKey(Long userId);
method selectByLoginName (line 26) | MallUser selectByLoginName(String loginName);
method selectByLoginNameAndPasswd (line 28) | MallUser selectByLoginNameAndPasswd(@Param("loginName") String loginNa...
method updateByPrimaryKeySelective (line 30) | int updateByPrimaryKeySelective(MallUser record);
method updateByPrimaryKey (line 32) | int updateByPrimaryKey(MallUser record);
method findMallUserList (line 34) | List<MallUser> findMallUserList(PageQueryUtil pageUtil);
method getTotalMallUsers (line 36) | int getTotalMallUsers(PageQueryUtil pageUtil);
method lockUserBatch (line 38) | int lockUserBatch(@Param("ids") Integer[] ids, @Param("lockStatus") in...
FILE: src/main/java/ltd/newbee/mall/dao/NewBeeMallGoodsMapper.java
type NewBeeMallGoodsMapper (line 18) | public interface NewBeeMallGoodsMapper {
method deleteByPrimaryKey (line 19) | int deleteByPrimaryKey(Long goodsId);
method insert (line 21) | int insert(NewBeeMallGoods record);
method insertSelective (line 23) | int insertSelective(NewBeeMallGoods record);
method selectByPrimaryKey (line 25) | NewBeeMallGoods selectByPrimaryKey(Long goodsId);
method selectByCategoryIdAndName (line 27) | NewBeeMallGoods selectByCategoryIdAndName(@Param("goodsName") String g...
method updateByPrimaryKeySelective (line 29) | int updateByPrimaryKeySelective(NewBeeMallGoods record);
method updateByPrimaryKeyWithBLOBs (line 31) | int updateByPrimaryKeyWithBLOBs(NewBeeMallGoods record);
method updateByPrimaryKey (line 33) | int updateByPrimaryKey(NewBeeMallGoods record);
method findNewBeeMallGoodsList (line 35) | List<NewBeeMallGoods> findNewBeeMallGoodsList(PageQueryUtil pageUtil);
method getTotalNewBeeMallGoods (line 37) | int getTotalNewBeeMallGoods(PageQueryUtil pageUtil);
method selectByPrimaryKeys (line 39) | List<NewBeeMallGoods> selectByPrimaryKeys(List<Long> goodsIds);
method findNewBeeMallGoodsListBySearch (line 41) | List<NewBeeMallGoods> findNewBeeMallGoodsListBySearch(PageQueryUtil pa...
method getTotalNewBeeMallGoodsBySearch (line 43) | int getTotalNewBeeMallGoodsBySearch(PageQueryUtil pageUtil);
method batchInsert (line 45) | int batchInsert(@Param("newBeeMallGoodsList") List<NewBeeMallGoods> ne...
method updateStockNum (line 47) | int updateStockNum(@Param("stockNumDTOS") List<StockNumDTO> stockNumDT...
method recoverStockNum (line 49) | int recoverStockNum(@Param("stockNumDTOS") List<StockNumDTO> stockNumD...
method batchUpdateSellStatus (line 51) | int batchUpdateSellStatus(@Param("orderIds")Long[] orderIds,@Param("se...
FILE: src/main/java/ltd/newbee/mall/dao/NewBeeMallOrderItemMapper.java
type NewBeeMallOrderItemMapper (line 16) | public interface NewBeeMallOrderItemMapper {
method deleteByPrimaryKey (line 17) | int deleteByPrimaryKey(Long orderItemId);
method insert (line 19) | int insert(NewBeeMallOrderItem record);
method insertSelective (line 21) | int insertSelective(NewBeeMallOrderItem record);
method selectByPrimaryKey (line 23) | NewBeeMallOrderItem selectByPrimaryKey(Long orderItemId);
method selectByOrderId (line 31) | List<NewBeeMallOrderItem> selectByOrderId(Long orderId);
method selectByOrderIds (line 39) | List<NewBeeMallOrderItem> selectByOrderIds(@Param("orderIds") List<Lon...
method insertBatch (line 47) | int insertBatch(@Param("orderItems") List<NewBeeMallOrderItem> orderIt...
method updateByPrimaryKeySelective (line 49) | int updateByPrimaryKeySelective(NewBeeMallOrderItem record);
method updateByPrimaryKey (line 51) | int updateByPrimaryKey(NewBeeMallOrderItem record);
FILE: src/main/java/ltd/newbee/mall/dao/NewBeeMallOrderMapper.java
type NewBeeMallOrderMapper (line 17) | public interface NewBeeMallOrderMapper {
method deleteByPrimaryKey (line 18) | int deleteByPrimaryKey(Long orderId);
method insert (line 20) | int insert(NewBeeMallOrder record);
method insertSelective (line 22) | int insertSelective(NewBeeMallOrder record);
method selectByPrimaryKey (line 24) | NewBeeMallOrder selectByPrimaryKey(Long orderId);
method selectByOrderNo (line 26) | NewBeeMallOrder selectByOrderNo(String orderNo);
method updateByPrimaryKeySelective (line 28) | int updateByPrimaryKeySelective(NewBeeMallOrder record);
method updateByPrimaryKey (line 30) | int updateByPrimaryKey(NewBeeMallOrder record);
method findNewBeeMallOrderList (line 32) | List<NewBeeMallOrder> findNewBeeMallOrderList(PageQueryUtil pageUtil);
method getTotalNewBeeMallOrders (line 34) | int getTotalNewBeeMallOrders(PageQueryUtil pageUtil);
method selectByPrimaryKeys (line 36) | List<NewBeeMallOrder> selectByPrimaryKeys(@Param("orderIds") List<Long...
method checkOut (line 38) | int checkOut(@Param("orderIds") List<Long> orderIds);
method closeOrder (line 40) | int closeOrder(@Param("orderIds") List<Long> orderIds, @Param("orderSt...
method checkDone (line 42) | int checkDone(@Param("orderIds") List<Long> asList);
FILE: src/main/java/ltd/newbee/mall/dao/NewBeeMallShoppingCartItemMapper.java
type NewBeeMallShoppingCartItemMapper (line 16) | public interface NewBeeMallShoppingCartItemMapper {
method deleteByPrimaryKey (line 17) | int deleteByPrimaryKey(Long cartItemId);
method insert (line 19) | int insert(NewBeeMallShoppingCartItem record);
method insertSelective (line 21) | int insertSelective(NewBeeMallShoppingCartItem record);
method selectByPrimaryKey (line 23) | NewBeeMallShoppingCartItem selectByPrimaryKey(Long cartItemId);
method selectByUserIdAndGoodsId (line 25) | NewBeeMallShoppingCartItem selectByUserIdAndGoodsId(@Param("newBeeMall...
method selectByUserId (line 27) | List<NewBeeMallShoppingCartItem> selectByUserId(@Param("newBeeMallUser...
method selectCountByUserId (line 29) | int selectCountByUserId(Long newBeeMallUserId);
method updateByPrimaryKeySelective (line 31) | int updateByPrimaryKeySelective(NewBeeMallShoppingCartItem record);
method updateByPrimaryKey (line 33) | int updateByPrimaryKey(NewBeeMallShoppingCartItem record);
method deleteBatch (line 35) | int deleteBatch(List<Long> ids);
FILE: src/main/java/ltd/newbee/mall/entity/AdminUser.java
class AdminUser (line 11) | public class AdminUser {
method getAdminUserId (line 22) | public Integer getAdminUserId() {
method setAdminUserId (line 26) | public void setAdminUserId(Integer adminUserId) {
method getLoginUserName (line 30) | public String getLoginUserName() {
method setLoginUserName (line 34) | public void setLoginUserName(String loginUserName) {
method getLoginPassword (line 38) | public String getLoginPassword() {
method setLoginPassword (line 42) | public void setLoginPassword(String loginPassword) {
method getNickName (line 46) | public String getNickName() {
method setNickName (line 50) | public void setNickName(String nickName) {
method getLocked (line 54) | public Byte getLocked() {
method setLocked (line 58) | public void setLocked(Byte locked) {
method toString (line 62) | @Override
FILE: src/main/java/ltd/newbee/mall/entity/Carousel.java
class Carousel (line 15) | public class Carousel {
method getCarouselId (line 36) | public Integer getCarouselId() {
method setCarouselId (line 40) | public void setCarouselId(Integer carouselId) {
method getCarouselUrl (line 44) | public String getCarouselUrl() {
method setCarouselUrl (line 48) | public void setCarouselUrl(String carouselUrl) {
method getRedirectUrl (line 52) | public String getRedirectUrl() {
method setRedirectUrl (line 56) | public void setRedirectUrl(String redirectUrl) {
method getCarouselRank (line 60) | public Integer getCarouselRank() {
method setCarouselRank (line 64) | public void setCarouselRank(Integer carouselRank) {
method getIsDeleted (line 68) | public Byte getIsDeleted() {
method setIsDeleted (line 72) | public void setIsDeleted(Byte isDeleted) {
method getCreateTime (line 76) | public Date getCreateTime() {
method setCreateTime (line 80) | public void setCreateTime(Date createTime) {
method getCreateUser (line 84) | public Integer getCreateUser() {
method setCreateUser (line 88) | public void setCreateUser(Integer createUser) {
method getUpdateTime (line 92) | public Date getUpdateTime() {
method setUpdateTime (line 96) | public void setUpdateTime(Date updateTime) {
method getUpdateUser (line 100) | public Integer getUpdateUser() {
method setUpdateUser (line 104) | public void setUpdateUser(Integer updateUser) {
method toString (line 108) | @Override
FILE: src/main/java/ltd/newbee/mall/entity/GoodsCategory.java
class GoodsCategory (line 15) | public class GoodsCategory {
method getCategoryId (line 38) | public Long getCategoryId() {
method setCategoryId (line 42) | public void setCategoryId(Long categoryId) {
method getCategoryLevel (line 46) | public Byte getCategoryLevel() {
method setCategoryLevel (line 50) | public void setCategoryLevel(Byte categoryLevel) {
method getParentId (line 54) | public Long getParentId() {
method setParentId (line 58) | public void setParentId(Long parentId) {
method getCategoryName (line 62) | public String getCategoryName() {
method setCategoryName (line 66) | public void setCategoryName(String categoryName) {
method getCategoryRank (line 70) | public Integer getCategoryRank() {
method setCategoryRank (line 74) | public void setCategoryRank(Integer categoryRank) {
method getIsDeleted (line 78) | public Byte getIsDeleted() {
method setIsDeleted (line 82) | public void setIsDeleted(Byte isDeleted) {
method getCreateTime (line 86) | public Date getCreateTime() {
method setCreateTime (line 90) | public void setCreateTime(Date createTime) {
method getCreateUser (line 94) | public Integer getCreateUser() {
method setCreateUser (line 98) | public void setCreateUser(Integer createUser) {
method getUpdateTime (line 102) | public Date getUpdateTime() {
method setUpdateTime (line 106) | public void setUpdateTime(Date updateTime) {
method getUpdateUser (line 110) | public Integer getUpdateUser() {
method setUpdateUser (line 114) | public void setUpdateUser(Integer updateUser) {
method toString (line 118) | @Override
FILE: src/main/java/ltd/newbee/mall/entity/IndexConfig.java
class IndexConfig (line 15) | public class IndexConfig {
method getConfigId (line 40) | public Long getConfigId() {
method setConfigId (line 44) | public void setConfigId(Long configId) {
method getConfigName (line 48) | public String getConfigName() {
method setConfigName (line 52) | public void setConfigName(String configName) {
method getConfigType (line 56) | public Byte getConfigType() {
method setConfigType (line 60) | public void setConfigType(Byte configType) {
method getGoodsId (line 64) | public Long getGoodsId() {
method setGoodsId (line 68) | public void setGoodsId(Long goodsId) {
method getRedirectUrl (line 72) | public String getRedirectUrl() {
method setRedirectUrl (line 76) | public void setRedirectUrl(String redirectUrl) {
method getConfigRank (line 80) | public Integer getConfigRank() {
method setConfigRank (line 84) | public void setConfigRank(Integer configRank) {
method getIsDeleted (line 88) | public Byte getIsDeleted() {
method setIsDeleted (line 92) | public void setIsDeleted(Byte isDeleted) {
method getCreateTime (line 96) | public Date getCreateTime() {
method setCreateTime (line 100) | public void setCreateTime(Date createTime) {
method getCreateUser (line 104) | public Integer getCreateUser() {
method setCreateUser (line 108) | public void setCreateUser(Integer createUser) {
method getUpdateTime (line 112) | public Date getUpdateTime() {
method setUpdateTime (line 116) | public void setUpdateTime(Date updateTime) {
method getUpdateUser (line 120) | public Integer getUpdateUser() {
method setUpdateUser (line 124) | public void setUpdateUser(Integer updateUser) {
method toString (line 128) | @Override
FILE: src/main/java/ltd/newbee/mall/entity/MallUser.java
class MallUser (line 15) | public class MallUser {
method getUserId (line 35) | public Long getUserId() {
method setUserId (line 39) | public void setUserId(Long userId) {
method getNickName (line 43) | public String getNickName() {
method setNickName (line 47) | public void setNickName(String nickName) {
method getLoginName (line 51) | public String getLoginName() {
method setLoginName (line 55) | public void setLoginName(String loginName) {
method getPasswordMd5 (line 59) | public String getPasswordMd5() {
method setPasswordMd5 (line 63) | public void setPasswordMd5(String passwordMd5) {
method getIntroduceSign (line 67) | public String getIntroduceSign() {
method setIntroduceSign (line 71) | public void setIntroduceSign(String introduceSign) {
method getAddress (line 75) | public String getAddress() {
method setAddress (line 79) | public void setAddress(String address) {
method getIsDeleted (line 83) | public Byte getIsDeleted() {
method setIsDeleted (line 87) | public void setIsDeleted(Byte isDeleted) {
method getLockedFlag (line 91) | public Byte getLockedFlag() {
method setLockedFlag (line 95) | public void setLockedFlag(Byte lockedFlag) {
method getCreateTime (line 99) | public Date getCreateTime() {
method setCreateTime (line 103) | public void setCreateTime(Date createTime) {
method toString (line 107) | @Override
FILE: src/main/java/ltd/newbee/mall/entity/NewBeeMallGoods.java
class NewBeeMallGoods (line 15) | public class NewBeeMallGoods {
method getGoodsId (line 50) | public Long getGoodsId() {
method setGoodsId (line 54) | public void setGoodsId(Long goodsId) {
method getGoodsName (line 58) | public String getGoodsName() {
method setGoodsName (line 62) | public void setGoodsName(String goodsName) {
method getGoodsIntro (line 66) | public String getGoodsIntro() {
method setGoodsIntro (line 70) | public void setGoodsIntro(String goodsIntro) {
method getGoodsCategoryId (line 74) | public Long getGoodsCategoryId() {
method setGoodsCategoryId (line 78) | public void setGoodsCategoryId(Long goodsCategoryId) {
method getGoodsCoverImg (line 82) | public String getGoodsCoverImg() {
method setGoodsCoverImg (line 86) | public void setGoodsCoverImg(String goodsCoverImg) {
method getGoodsCarousel (line 90) | public String getGoodsCarousel() {
method setGoodsCarousel (line 94) | public void setGoodsCarousel(String goodsCarousel) {
method getOriginalPrice (line 98) | public Integer getOriginalPrice() {
method setOriginalPrice (line 102) | public void setOriginalPrice(Integer originalPrice) {
method getSellingPrice (line 106) | public Integer getSellingPrice() {
method setSellingPrice (line 110) | public void setSellingPrice(Integer sellingPrice) {
method getStockNum (line 114) | public Integer getStockNum() {
method setStockNum (line 118) | public void setStockNum(Integer stockNum) {
method getTag (line 122) | public String getTag() {
method setTag (line 126) | public void setTag(String tag) {
method getGoodsSellStatus (line 130) | public Byte getGoodsSellStatus() {
method setGoodsSellStatus (line 134) | public void setGoodsSellStatus(Byte goodsSellStatus) {
method getCreateUser (line 138) | public Integer getCreateUser() {
method setCreateUser (line 142) | public void setCreateUser(Integer createUser) {
method getCreateTime (line 146) | public Date getCreateTime() {
method setCreateTime (line 150) | public void setCreateTime(Date createTime) {
method getUpdateUser (line 154) | public Integer getUpdateUser() {
method setUpdateUser (line 158) | public void setUpdateUser(Integer updateUser) {
method getUpdateTime (line 162) | public Date getUpdateTime() {
method setUpdateTime (line 166) | public void setUpdateTime(Date updateTime) {
method getGoodsDetailContent (line 170) | public String getGoodsDetailContent() {
method setGoodsDetailContent (line 174) | public void setGoodsDetailContent(String goodsDetailContent) {
method toString (line 178) | @Override
FILE: src/main/java/ltd/newbee/mall/entity/NewBeeMallOrder.java
class NewBeeMallOrder (line 15) | public class NewBeeMallOrder {
method getOrderId (line 43) | public Long getOrderId() {
method setOrderId (line 47) | public void setOrderId(Long orderId) {
method getOrderNo (line 51) | public String getOrderNo() {
method setOrderNo (line 55) | public void setOrderNo(String orderNo) {
method getUserId (line 59) | public Long getUserId() {
method setUserId (line 63) | public void setUserId(Long userId) {
method getTotalPrice (line 67) | public Integer getTotalPrice() {
method setTotalPrice (line 71) | public void setTotalPrice(Integer totalPrice) {
method getPayStatus (line 75) | public Byte getPayStatus() {
method setPayStatus (line 79) | public void setPayStatus(Byte payStatus) {
method getPayType (line 83) | public Byte getPayType() {
method setPayType (line 87) | public void setPayType(Byte payType) {
method getPayTime (line 91) | public Date getPayTime() {
method setPayTime (line 95) | public void setPayTime(Date payTime) {
method getOrderStatus (line 99) | public Byte getOrderStatus() {
method setOrderStatus (line 103) | public void setOrderStatus(Byte orderStatus) {
method getExtraInfo (line 107) | public String getExtraInfo() {
method setExtraInfo (line 111) | public void setExtraInfo(String extraInfo) {
method getUserAddress (line 115) | public String getUserAddress() {
method setUserAddress (line 119) | public void setUserAddress(String userAddress) {
method getIsDeleted (line 123) | public Byte getIsDeleted() {
method setIsDeleted (line 127) | public void setIsDeleted(Byte isDeleted) {
method getCreateTime (line 131) | public Date getCreateTime() {
method setCreateTime (line 135) | public void setCreateTime(Date createTime) {
method getUpdateTime (line 139) | public Date getUpdateTime() {
method setUpdateTime (line 143) | public void setUpdateTime(Date updateTime) {
method toString (line 147) | @Override
FILE: src/main/java/ltd/newbee/mall/entity/NewBeeMallOrderItem.java
class NewBeeMallOrderItem (line 13) | public class NewBeeMallOrderItem {
method getOrderItemId (line 30) | public Long getOrderItemId() {
method setOrderItemId (line 34) | public void setOrderItemId(Long orderItemId) {
method getOrderId (line 38) | public Long getOrderId() {
method setOrderId (line 42) | public void setOrderId(Long orderId) {
method getGoodsId (line 46) | public Long getGoodsId() {
method setGoodsId (line 50) | public void setGoodsId(Long goodsId) {
method getGoodsName (line 54) | public String getGoodsName() {
method setGoodsName (line 58) | public void setGoodsName(String goodsName) {
method getGoodsCoverImg (line 62) | public String getGoodsCoverImg() {
method setGoodsCoverImg (line 66) | public void setGoodsCoverImg(String goodsCoverImg) {
method getSellingPrice (line 70) | public Integer getSellingPrice() {
method setSellingPrice (line 74) | public void setSellingPrice(Integer sellingPrice) {
method getGoodsCount (line 78) | public Integer getGoodsCount() {
method setGoodsCount (line 82) | public void setGoodsCount(Integer goodsCount) {
method getCreateTime (line 86) | public Date getCreateTime() {
method setCreateTime (line 90) | public void setCreateTime(Date createTime) {
method toString (line 94) | @Override
FILE: src/main/java/ltd/newbee/mall/entity/NewBeeMallShoppingCartItem.java
class NewBeeMallShoppingCartItem (line 13) | public class NewBeeMallShoppingCartItem {
method getCartItemId (line 28) | public Long getCartItemId() {
method setCartItemId (line 32) | public void setCartItemId(Long cartItemId) {
method getUserId (line 36) | public Long getUserId() {
method setUserId (line 40) | public void setUserId(Long userId) {
method getGoodsId (line 44) | public Long getGoodsId() {
method setGoodsId (line 48) | public void setGoodsId(Long goodsId) {
method getGoodsCount (line 52) | public Integer getGoodsCount() {
method setGoodsCount (line 56) | public void setGoodsCount(Integer goodsCount) {
method getIsDeleted (line 60) | public Byte getIsDeleted() {
method setIsDeleted (line 64) | public void setIsDeleted(Byte isDeleted) {
method getCreateTime (line 68) | public Date getCreateTime() {
method setCreateTime (line 72) | public void setCreateTime(Date createTime) {
method getUpdateTime (line 76) | public Date getUpdateTime() {
method setUpdateTime (line 80) | public void setUpdateTime(Date updateTime) {
method toString (line 84) | @Override
FILE: src/main/java/ltd/newbee/mall/entity/StockNumDTO.java
class StockNumDTO (line 14) | public class StockNumDTO {
method getGoodsId (line 19) | public Long getGoodsId() {
method setGoodsId (line 23) | public void setGoodsId(Long goodsId) {
method getGoodsCount (line 27) | public Integer getGoodsCount() {
method setGoodsCount (line 31) | public void setGoodsCount(Integer goodsCount) {
FILE: src/main/java/ltd/newbee/mall/interceptor/AdminLoginInterceptor.java
class AdminLoginInterceptor (line 26) | @Component
method preHandle (line 29) | @Override
method postHandle (line 42) | @Override
method afterCompletion (line 46) | @Override
FILE: src/main/java/ltd/newbee/mall/interceptor/NewBeeMallCartNumberInterceptor.java
class NewBeeMallCartNumberInterceptor (line 30) | @Component
method preHandle (line 36) | @Override
method postHandle (line 49) | @Override
method afterCompletion (line 53) | @Override
FILE: src/main/java/ltd/newbee/mall/interceptor/NewBeeMallLoginInterceptor.java
class NewBeeMallLoginInterceptor (line 27) | @Component
method preHandle (line 30) | @Override
method postHandle (line 40) | @Override
method afterCompletion (line 44) | @Override
FILE: src/main/java/ltd/newbee/mall/service/AdminUserService.java
type AdminUserService (line 13) | public interface AdminUserService {
method login (line 15) | AdminUser login(String userName, String password);
method getUserDetailById (line 23) | AdminUser getUserDetailById(Integer loginUserId);
method updatePassword (line 33) | Boolean updatePassword(Integer loginUserId, String originalPassword, S...
method updateName (line 43) | Boolean updateName(Integer loginUserId, String loginUserName, String n...
FILE: src/main/java/ltd/newbee/mall/service/NewBeeMallCarouselService.java
type NewBeeMallCarouselService (line 18) | public interface NewBeeMallCarouselService {
method getCarouselPage (line 25) | PageResult getCarouselPage(PageQueryUtil pageUtil);
method saveCarousel (line 27) | String saveCarousel(Carousel carousel);
method updateCarousel (line 29) | String updateCarousel(Carousel carousel);
method getCarouselById (line 31) | Carousel getCarouselById(Integer id);
method deleteBatch (line 33) | Boolean deleteBatch(Integer[] ids);
method getCarouselsForIndex (line 41) | List<NewBeeMallIndexCarouselVO> getCarouselsForIndex(int number);
FILE: src/main/java/ltd/newbee/mall/service/NewBeeMallCategoryService.java
type NewBeeMallCategoryService (line 19) | public interface NewBeeMallCategoryService {
method getCategorisPage (line 26) | PageResult getCategorisPage(PageQueryUtil pageUtil);
method saveCategory (line 28) | String saveCategory(GoodsCategory goodsCategory);
method updateGoodsCategory (line 30) | String updateGoodsCategory(GoodsCategory goodsCategory);
method getGoodsCategoryById (line 32) | GoodsCategory getGoodsCategoryById(Long id);
method deleteBatch (line 34) | Boolean deleteBatch(Integer[] ids);
method getCategoriesForIndex (line 41) | List<NewBeeMallIndexCategoryVO> getCategoriesForIndex();
method getCategoriesForSearch (line 49) | SearchPageCategoryVO getCategoriesForSearch(Long categoryId);
method selectByLevelAndParentIdsAndNumber (line 58) | List<GoodsCategory> selectByLevelAndParentIdsAndNumber(List<Long> pare...
FILE: src/main/java/ltd/newbee/mall/service/NewBeeMallGoodsService.java
type NewBeeMallGoodsService (line 17) | public interface NewBeeMallGoodsService {
method getNewBeeMallGoodsPage (line 24) | PageResult getNewBeeMallGoodsPage(PageQueryUtil pageUtil);
method saveNewBeeMallGoods (line 32) | String saveNewBeeMallGoods(NewBeeMallGoods goods);
method batchSaveNewBeeMallGoods (line 40) | void batchSaveNewBeeMallGoods(List<NewBeeMallGoods> newBeeMallGoodsList);
method updateNewBeeMallGoods (line 48) | String updateNewBeeMallGoods(NewBeeMallGoods goods);
method getNewBeeMallGoodsById (line 56) | NewBeeMallGoods getNewBeeMallGoodsById(Long id);
method batchUpdateSellStatus (line 64) | Boolean batchUpdateSellStatus(Long[] ids,int sellStatus);
method searchNewBeeMallGoods (line 72) | PageResult searchNewBeeMallGoods(PageQueryUtil pageUtil);
FILE: src/main/java/ltd/newbee/mall/service/NewBeeMallIndexConfigService.java
type NewBeeMallIndexConfigService (line 18) | public interface NewBeeMallIndexConfigService {
method getConfigsPage (line 25) | PageResult getConfigsPage(PageQueryUtil pageUtil);
method saveIndexConfig (line 27) | String saveIndexConfig(IndexConfig indexConfig);
method updateIndexConfig (line 29) | String updateIndexConfig(IndexConfig indexConfig);
method getIndexConfigById (line 31) | IndexConfig getIndexConfigById(Long id);
method getConfigGoodsesForIndex (line 39) | List<NewBeeMallIndexConfigGoodsVO> getConfigGoodsesForIndex(int config...
method deleteBatch (line 41) | Boolean deleteBatch(Long[] ids);
FILE: src/main/java/ltd/newbee/mall/service/NewBeeMallOrderService.java
type NewBeeMallOrderService (line 21) | public interface NewBeeMallOrderService {
method getNewBeeMallOrdersPage (line 28) | PageResult getNewBeeMallOrdersPage(PageQueryUtil pageUtil);
method updateOrderInfo (line 36) | String updateOrderInfo(NewBeeMallOrder newBeeMallOrder);
method checkDone (line 44) | String checkDone(Long[] ids);
method checkOut (line 52) | String checkOut(Long[] ids);
method closeOrder (line 60) | String closeOrder(Long[] ids);
method saveOrder (line 69) | String saveOrder(NewBeeMallUserVO user, List<NewBeeMallShoppingCartIte...
method getOrderDetailByOrderNo (line 78) | NewBeeMallOrderDetailVO getOrderDetailByOrderNo(String orderNo, Long u...
method getNewBeeMallOrderByOrderNo (line 86) | NewBeeMallOrder getNewBeeMallOrderByOrderNo(String orderNo);
method getMyOrders (line 94) | PageResult getMyOrders(PageQueryUtil pageUtil);
method cancelOrder (line 103) | String cancelOrder(String orderNo, Long userId);
method finishOrder (line 112) | String finishOrder(String orderNo, Long userId);
method paySuccess (line 114) | String paySuccess(String orderNo, int payType);
method getOrderItems (line 116) | List<NewBeeMallOrderItemVO> getOrderItems(Long id);
FILE: src/main/java/ltd/newbee/mall/service/NewBeeMallShoppingCartService.java
type NewBeeMallShoppingCartService (line 16) | public interface NewBeeMallShoppingCartService {
method saveNewBeeMallCartItem (line 24) | String saveNewBeeMallCartItem(NewBeeMallShoppingCartItem newBeeMallSho...
method updateNewBeeMallCartItem (line 32) | String updateNewBeeMallCartItem(NewBeeMallShoppingCartItem newBeeMallS...
method getNewBeeMallCartItemById (line 40) | NewBeeMallShoppingCartItem getNewBeeMallCartItemById(Long newBeeMallSh...
method deleteById (line 50) | Boolean deleteById(Long shoppingCartItemId, Long userId);
method getMyShoppingCartItems (line 58) | List<NewBeeMallShoppingCartItemVO> getMyShoppingCartItems(Long newBeeM...
FILE: src/main/java/ltd/newbee/mall/service/NewBeeMallUserService.java
type NewBeeMallUserService (line 18) | public interface NewBeeMallUserService {
method getNewBeeMallUsersPage (line 25) | PageResult getNewBeeMallUsersPage(PageQueryUtil pageUtil);
method register (line 34) | String register(String loginName, String password);
method login (line 44) | String login(String loginName, String passwordMD5, HttpSession httpSes...
method updateUserInfo (line 52) | NewBeeMallUserVO updateUserInfo(MallUser mallUser, HttpSession httpSes...
method lockUsers (line 61) | Boolean lockUsers(Integer[] ids, int lockStatus);
FILE: src/main/java/ltd/newbee/mall/service/impl/AdminUserServiceImpl.java
class AdminUserServiceImpl (line 19) | @Service
method login (line 25) | @Override
method getUserDetailById (line 31) | @Override
method updatePassword (line 36) | @Override
method updateName (line 56) | @Override
FILE: src/main/java/ltd/newbee/mall/service/impl/NewBeeMallCarouselServiceImpl.java
class NewBeeMallCarouselServiceImpl (line 27) | @Service
method getCarouselPage (line 33) | @Override
method saveCarousel (line 41) | @Override
method updateCarousel (line 49) | @Override
method getCarouselById (line 65) | @Override
method deleteBatch (line 70) | @Override
method getCarouselsForIndex (line 79) | @Override
FILE: src/main/java/ltd/newbee/mall/service/impl/NewBeeMallCategoryServiceImpl.java
class NewBeeMallCategoryServiceImpl (line 33) | @Service
method getCategorisPage (line 39) | @Override
method saveCategory (line 47) | @Override
method updateGoodsCategory (line 59) | @Override
method getGoodsCategoryById (line 77) | @Override
method deleteBatch (line 82) | @Override
method getCategoriesForIndex (line 91) | @Override
method getCategoriesForSearch (line 144) | @Override
method selectByLevelAndParentIdsAndNumber (line 163) | @Override
FILE: src/main/java/ltd/newbee/mall/service/impl/NewBeeMallGoodsServiceImpl.java
class NewBeeMallGoodsServiceImpl (line 32) | @Service
method getNewBeeMallGoodsPage (line 40) | @Override
method saveNewBeeMallGoods (line 48) | @Override
method batchSaveNewBeeMallGoods (line 67) | @Override
method updateNewBeeMallGoods (line 74) | @Override
method getNewBeeMallGoodsById (line 100) | @Override
method batchUpdateSellStatus (line 109) | @Override
method searchNewBeeMallGoods (line 114) | @Override
FILE: src/main/java/ltd/newbee/mall/service/impl/NewBeeMallIndexConfigServiceImpl.java
class NewBeeMallIndexConfigServiceImpl (line 30) | @Service
method getConfigsPage (line 39) | @Override
method saveIndexConfig (line 47) | @Override
method updateIndexConfig (line 61) | @Override
method getIndexConfigById (line 82) | @Override
method getConfigGoodsesForIndex (line 87) | @Override
method deleteBatch (line 113) | @Override
FILE: src/main/java/ltd/newbee/mall/service/impl/NewBeeMallOrderServiceImpl.java
class NewBeeMallOrderServiceImpl (line 38) | @Service
method getNewBeeMallOrdersPage (line 50) | @Override
method updateOrderInfo (line 58) | @Override
method checkDone (line 75) | @Override
method checkOut (line 111) | @Override
method closeOrder (line 147) | @Override
method saveOrder (line 185) | @Override
method getOrderDetailByOrderNo (line 265) | @Override
method getNewBeeMallOrderByOrderNo (line 289) | @Override
method getMyOrders (line 294) | @Override
method cancelOrder (line 325) | @Override
method finishOrder (line 351) | @Override
method paySuccess (line 374) | @Override
method getOrderItems (line 396) | @Override
method recoverStockNum (line 415) | public Boolean recoverStockNum(List<Long> orderIds) {
FILE: src/main/java/ltd/newbee/mall/service/impl/NewBeeMallShoppingCartServiceImpl.java
class NewBeeMallShoppingCartServiceImpl (line 28) | @Service
method saveNewBeeMallCartItem (line 37) | @Override
method updateNewBeeMallCartItem (line 66) | @Override
method getNewBeeMallCartItemById (line 93) | @Override
method deleteById (line 98) | @Override
method getMyShoppingCartItems (line 111) | @Override
FILE: src/main/java/ltd/newbee/mall/service/impl/NewBeeMallUserServiceImpl.java
class NewBeeMallUserServiceImpl (line 25) | @Service
method getNewBeeMallUsersPage (line 31) | @Override
method register (line 39) | @Override
method login (line 55) | @Override
method updateUserInfo (line 76) | @Override
method lockUsers (line 100) | @Override
FILE: src/main/java/ltd/newbee/mall/util/BeanUtil.java
class BeanUtil (line 12) | public abstract class BeanUtil {
method copyProperties (line 14) | public static Object copyProperties(Object source, Object target, Stri...
method copyList (line 22) | public static <T> List<T> copyList(List sources, Class<T> clazz) {
method copyList (line 26) | public static <T> List<T> copyList(List sources, Class<T> clazz, Callb...
method toMap (line 47) | public static Map<String, Object> toMap(Object bean, String... ignoreP...
method toBean (line 61) | public static <T> T toBean(Map<String, Object> map, Class<T> beanType) {
type Callback (line 71) | public static interface Callback<T> {
method set (line 72) | void set(Object source, T target);
method checkPojoNullField (line 76) | public static boolean checkPojoNullField(Object o, Class<?> clz) {
FILE: src/main/java/ltd/newbee/mall/util/JsonUtil.java
class JsonUtil (line 15) | public class JsonUtil {
method jsonToObj (line 21) | public static Object jsonToObj(Class objClass, String jsonStr) throws ...
method objToJson (line 31) | public static String objToJson(Object obj) throws JsonProcessingExcept...
FILE: src/main/java/ltd/newbee/mall/util/MD5Util.java
class MD5Util (line 11) | public class MD5Util {
method byteArrayToHexString (line 13) | private static String byteArrayToHexString(byte b[]) {
method byteToHexString (line 21) | private static String byteToHexString(byte b) {
method MD5Encode (line 30) | public static String MD5Encode(String origin, String charsetname) {
FILE: src/main/java/ltd/newbee/mall/util/NewBeeMallUtils.java
class NewBeeMallUtils (line 10) | public class NewBeeMallUtils {
method getHost (line 12) | public static URI getHost(URI uri) {
method cleanString (line 22) | public static String cleanString(String value) {
FILE: src/main/java/ltd/newbee/mall/util/NumberUtil.java
class NumberUtil (line 12) | public class NumberUtil {
method NumberUtil (line 14) | private NumberUtil() {
method isPhone (line 24) | public static boolean isPhone(String phone) {
method genRandomNum (line 36) | public static int genRandomNum(int length) {
method genOrderNo (line 53) | public static String genOrderNo() {
FILE: src/main/java/ltd/newbee/mall/util/PageQueryUtil.java
class PageQueryUtil (line 14) | public class PageQueryUtil extends LinkedHashMap<String, Object> {
method PageQueryUtil (line 20) | public PageQueryUtil(Map<String, Object> params) {
method getPage (line 32) | public int getPage() {
method setPage (line 36) | public void setPage(int page) {
method getLimit (line 40) | public int getLimit() {
method setLimit (line 44) | public void setLimit(int limit) {
method toString (line 48) | @Override
FILE: src/main/java/ltd/newbee/mall/util/PageResult.java
class PageResult (line 14) | public class PageResult implements Serializable {
method PageResult (line 35) | public PageResult(List<?> list, int totalCount, int pageSize, int curr...
method getTotalCount (line 43) | public int getTotalCount() {
method setTotalCount (line 47) | public void setTotalCount(int totalCount) {
method getPageSize (line 51) | public int getPageSize() {
method setPageSize (line 55) | public void setPageSize(int pageSize) {
method getTotalPage (line 59) | public int getTotalPage() {
method setTotalPage (line 63) | public void setTotalPage(int totalPage) {
method getCurrPage (line 67) | public int getCurrPage() {
method setCurrPage (line 71) | public void setCurrPage(int currPage) {
method getList (line 75) | public List<?> getList() {
method setList (line 79) | public void setList(List<?> list) {
FILE: src/main/java/ltd/newbee/mall/util/PatternUtil.java
class PatternUtil (line 14) | public class PatternUtil {
method validKeyword (line 28) | public static Boolean validKeyword(String keyword) {
method isEmail (line 42) | public static boolean isEmail(String emailStr) {
method isURL (line 53) | public static boolean isURL(String urlString) {
FILE: src/main/java/ltd/newbee/mall/util/Result.java
class Result (line 11) | public class Result<T> implements Serializable {
method Result (line 17) | public Result() {
method Result (line 20) | public Result(int resultCode, String message) {
method getResultCode (line 25) | public int getResultCode() {
method setResultCode (line 29) | public void setResultCode(int resultCode) {
method getMessage (line 33) | public String getMessage() {
method setMessage (line 37) | public void setMessage(String message) {
method getData (line 41) | public T getData() {
method setData (line 45) | public void setData(T data) {
method toString (line 49) | @Override
FILE: src/main/java/ltd/newbee/mall/util/ResultGenerator.java
class ResultGenerator (line 13) | public class ResultGenerator {
method genSuccessResult (line 19) | public static Result genSuccessResult() {
method genSuccessResult (line 26) | public static Result genSuccessResult(String message) {
method genSuccessResult (line 33) | public static Result genSuccessResult(Object data) {
method genFailResult (line 41) | public static Result genFailResult(String message) {
method genErrorResult (line 52) | public static Result genErrorResult(int code, String message) {
FILE: src/main/java/ltd/newbee/mall/util/SystemUtil.java
class SystemUtil (line 12) | public class SystemUtil {
method SystemUtil (line 14) | private SystemUtil() {
method genToken (line 24) | public static String genToken(String src) {
FILE: src/main/resources/newbee_mall_schema.sql
type `tb_newbee_mall_admin_user` (line 16) | CREATE TABLE `tb_newbee_mall_admin_user` (
type `tb_newbee_mall_carousel` (line 44) | CREATE TABLE `tb_newbee_mall_carousel` (
type `tb_newbee_mall_goods_category` (line 75) | CREATE TABLE `tb_newbee_mall_goods_category` (
type `tb_newbee_mall_goods_info` (line 197) | CREATE TABLE `tb_newbee_mall_goods_info` (
type `tb_newbee_mall_index_config` (line 810) | CREATE TABLE `tb_newbee_mall_index_config` (
type `tb_newbee_mall_order` (line 865) | CREATE TABLE `tb_newbee_mall_order` (
type `tb_newbee_mall_order_item` (line 920) | CREATE TABLE `tb_newbee_mall_order_item` (
type `tb_newbee_mall_shopping_cart_item` (line 982) | CREATE TABLE `tb_newbee_mall_shopping_cart_item` (
type `tb_newbee_mall_user` (line 1001) | CREATE TABLE `tb_newbee_mall_user` (
FILE: src/main/resources/static/admin/dist/js/adminlte.js
function ControlSidebar (line 71) | function ControlSidebar(element, config) {
function Layout (line 213) | function Layout(element) {
function PushMenu (line 364) | function PushMenu(element, options) {
function Treeview (line 526) | function Treeview(element, config) {
function Widget (line 691) | function Widget(element, settings) {
FILE: src/main/resources/static/admin/dist/js/demo.js
function createSkinBlock (line 162) | function createSkinBlock(colors, callback) {
FILE: src/main/resources/static/admin/dist/js/newbee_mall_carousel.js
function coverImageFormatter (line 39) | function coverImageFormatter(cellvalue) {
function reload (line 79) | function reload() {
function carouselAdd (line 86) | function carouselAdd() {
function carouselEdit (line 144) | function carouselEdit() {
function deleteCarousel (line 164) | function deleteCarousel() {
function reset (line 205) | function reset() {
FILE: src/main/resources/static/admin/dist/js/newbee_mall_category.js
function reload (line 49) | function reload() {
function categoryAdd (line 56) | function categoryAdd() {
function categoryManage (line 65) | function categoryManage() {
function categoryBack (line 86) | function categoryBack() {
function categoryEdit (line 160) | function categoryEdit() {
function deleteCagegory (line 179) | function deleteCagegory() {
function reset (line 221) | function reset() {
FILE: src/main/resources/static/admin/dist/js/newbee_mall_goods.js
function goodsSellStatusFormatter (line 52) | function goodsSellStatusFormatter(cellvalue) {
function coverImageFormatter (line 62) | function coverImageFormatter(cellvalue) {
function reload (line 71) | function reload() {
function addGoods (line 82) | function addGoods() {
function editGoods (line 89) | function editGoods() {
function putUpGoods (line 100) | function putUpGoods() {
function putDownGoods (line 143) | function putDownGoods() {
FILE: src/main/resources/static/admin/dist/js/newbee_mall_goods_edit.js
method onBeforeUpload (line 21) | onBeforeUpload(file) {
method onProgress (line 27) | onProgress(progress) {
method onSuccess (line 30) | onSuccess(file, res) {
method onFailed (line 33) | onFailed(file, res) {
method onError (line 37) | onError(file, err, res) {
FILE: src/main/resources/static/admin/dist/js/newbee_mall_index_config.js
function reload (line 50) | function reload() {
function configAdd (line 57) | function configAdd() {
function configEdit (line 126) | function configEdit() {
function deleteConfig (line 142) | function deleteConfig () {
function reset (line 183) | function reset() {
FILE: src/main/resources/static/admin/dist/js/newbee_mall_order.js
function operateFormatter (line 46) | function operateFormatter(cellvalue, rowObject) {
function orderStatusFormatter (line 52) | function orderStatusFormatter(cellvalue) {
function payTypeFormatter (line 80) | function payTypeFormatter(cellvalue) {
function reload (line 102) | function reload() {
function openOrderItems (line 114) | function openOrderItems(orderId) {
function openExpressInfo (line 149) | function openExpressInfo(orderId) {
function orderEdit (line 159) | function orderEdit() {
function orderCheckDone (line 223) | function orderCheckDone() {
function orderCheckOut (line 287) | function orderCheckOut() {
function closeOrder (line 348) | function closeOrder() {
function reset (line 389) | function reset() {
FILE: src/main/resources/static/admin/dist/js/newbee_mall_user.js
function lockedFormatter (line 44) | function lockedFormatter(cellvalue) {
function deletedFormatter (line 52) | function deletedFormatter(cellvalue) {
function reload (line 64) | function reload() {
function lockUser (line 72) | function lockUser(lockStatus) {
FILE: src/main/resources/static/admin/dist/js/plugins/chart.js
function a (line 10) | function a(o,s){if(!n[o]){if(!e[o]){var l="function"==typeof require&&re...
function i (line 10) | function i(t){if(t){var e=[0,0,0],n=1,i=t.match(/^#([a-fA-F0-9]{3})$/i);...
function a (line 10) | function a(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*(...
function r (line 10) | function r(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+...
function o (line 10) | function o(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]...
function s (line 10) | function s(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(...
function l (line 10) | function l(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]...
function u (line 10) | function u(t,e,n){return Math.min(Math.max(e,t),n)}
function d (line 10) | function d(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}
function i (line 10) | function i(t){var e,n,i,a=t[0]/255,r=t[1]/255,o=t[2]/255,s=Math.min(a,r,...
function a (line 10) | function a(t){var e,n,i,a=t[0],r=t[1],o=t[2],s=Math.min(a,r,o),l=Math.ma...
function o (line 10) | function o(t){var e=t[0],n=t[1],a=t[2];return[i(t)[0],100*(1/255*Math.mi...
function s (line 10) | function s(t){var e,n,i,a,r=t[0]/255,o=t[1]/255,s=t[2]/255;return a=Math...
function l (line 10) | function l(t){return S[JSON.stringify(t)]}
function u (line 10) | function u(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;return[100*(.4124*(e=...
function d (line 10) | function d(t){var e,n,i,a=u(t),r=a[0],o=a[1],s=a[2];return r/=95.047,o/=...
function c (line 10) | function c(t){var e,n,i,a,r,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0==s)ret...
function h (line 10) | function h(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,r=e-...
function f (line 10) | function f(t){var e,n,i,a,o=t[0]/360,s=t[1]/100,l=t[2]/100,u=s+l;switch(...
function m (line 10) | function m(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100,s=t[3]/100;retu...
function p (line 10) | function p(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100;return e=3.2406...
function v (line 10) | function v(t){var e,n,i,a=t[0],r=t[1],o=t[2];return a/=95.047,r/=100,o/=...
function y (line 10) | function y(t){var e,n,i,a,r=t[0],o=t[1],s=t[2];return r<=8?a=(n=100*r/90...
function x (line 10) | function x(t){var e,n,i,a=t[0],r=t[1],o=t[2];return e=Math.atan2(o,r),(n...
function _ (line 10) | function _(t){return p(y(t))}
function k (line 10) | function k(t){var e,n,i,a=t[0],r=t[1];return i=t[2]/360*2*Math.PI,e=r*Ma...
function w (line 10) | function w(t){return M[t]}
function n (line 10) | function n(){return xe.apply(null,arguments)}
function i (line 10) | function i(t){return t instanceof Array||"[object Array]"===Object.proto...
function a (line 10) | function a(t){return null!=t&&"[object Object]"===Object.prototype.toStr...
function r (line 10) | function r(t){var e;for(e in t)return!1;return!0}
function o (line 10) | function o(t){return void 0===t}
function s (line 10) | function s(t){return"number"==typeof t||"[object Number]"===Object.proto...
function l (line 10) | function l(t){return t instanceof Date||"[object Date]"===Object.prototy...
function u (line 10) | function u(t,e){var n,i=[];for(n=0;n<t.length;++n)i.push(e(t[n],n));retu...
function d (line 10) | function d(t,e){return Object.prototype.hasOwnProperty.call(t,e)}
function c (line 10) | function c(t,e){for(var n in e)d(e,n)&&(t[n]=e[n]);return d(e,"toString"...
function h (line 10) | function h(t,e,n,i){return Yt(t,e,n,i,!0).utc()}
function f (line 10) | function f(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,...
function g (line 10) | function g(t){return null==t._pf&&(t._pf=f()),t._pf}
function m (line 10) | function m(t){if(null==t._isValid){var e=g(t),n=ke.call(e.parsedDatePart...
function p (line 10) | function p(t){var e=h(NaN);return null!=t?c(g(e),t):g(e).userInvalidated...
function v (line 10) | function v(t,e){var n,i,a;if(o(e._isAMomentObject)||(t._isAMomentObject=...
function y (line 10) | function y(t){v(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),...
function b (line 10) | function b(t){return t instanceof y||null!=t&&null!=t._isAMomentObject}
function x (line 10) | function x(t){return t<0?Math.ceil(t)||0:Math.floor(t)}
function _ (line 10) | function _(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=x(e)),n}
function k (line 10) | function k(t,e,n){var i,a=Math.min(t.length,e.length),r=Math.abs(t.lengt...
function w (line 10) | function w(t){!1===n.suppressDeprecationWarnings&&"undefined"!=typeof co...
function M (line 10) | function M(t,e){var i=!0;return c(function(){if(null!=n.deprecationHandl...
function S (line 10) | function S(t,e){null!=n.deprecationHandler&&n.deprecationHandler(t,e),Se...
function D (line 10) | function D(t){return t instanceof Function||"[object Function]"===Object...
function C (line 10) | function C(t,e){var n,i=c({},t);for(n in e)d(e,n)&&(a(t[n])&&a(e[n])?(i[...
function P (line 10) | function P(t){null!=t&&this.set(t)}
function T (line 10) | function T(t,e){var n=t.toLowerCase();Te[n]=Te[n+"s"]=Te[e]=t}
function A (line 10) | function A(t){return"string"==typeof t?Te[t]||Te[t.toLowerCase()]:void 0}
function I (line 10) | function I(t){var e,n,i={};for(n in t)d(t,n)&&(e=A(n))&&(i[e]=t[n]);retu...
function O (line 10) | function O(t,e){Ae[t]=e}
function F (line 10) | function F(t){var e=[];for(var n in t)e.push({unit:n,priority:Ae[n]});re...
function R (line 10) | function R(t,e){return function(i){return null!=i?(W(this,t,i),n.updateO...
function L (line 10) | function L(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}
function W (line 10) | function W(t,e,n){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](n)}
function Y (line 10) | function Y(t,e,n){var i=""+Math.abs(t),a=e-i.length;return(t>=0?n?"+":""...
function N (line 10) | function N(t,e,n,i){var a=i;"string"==typeof i&&(a=function(){return thi...
function z (line 10) | function z(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.repl...
function B (line 10) | function B(t){var e,n,i=t.match(Ie);for(e=0,n=i.length;e<n;e++)Re[i[e]]?...
function V (line 10) | function V(t,e){return t.isValid()?(e=H(e,t.localeData()),Fe[e]=Fe[e]||B...
function H (line 10) | function H(t,e){var n=5;for(Oe.lastIndex=0;n>=0&&Oe.test(t);)t=t.replace...
function E (line 10) | function E(t,e,n){Ke[t]=D(e)?e:function(t,i){return t&&n?n:e}}
function j (line 10) | function j(t,e){return d(Ke,t)?Ke[t](e._strict,e._locale):new RegExp(U(t))}
function U (line 10) | function U(t){return q(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]...
function q (line 10) | function q(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}
function G (line 10) | function G(t,e){var n,i=e;for("string"==typeof t&&(t=[t]),s(e)&&(i=funct...
function Z (line 10) | function Z(t,e){G(t,function(t,n,i,a){i._w=i._w||{},e(t,i._w,i,a)})}
function X (line 10) | function X(t,e,n){null!=e&&d(Qe,t)&&Qe[t](e,n._a,n,t)}
function J (line 10) | function J(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}
function K (line 10) | function K(t,e,n){var i,a,r,o=t.toLocaleLowerCase();if(!this._monthsPars...
function Q (line 10) | function Q(t,e){var n;if(!t.isValid())return t;if("string"==typeof e)if(...
function $ (line 10) | function $(t){return null!=t?(Q(this,t),n.updateOffset(this,!0),this):L(...
function tt (line 10) | function tt(){function t(t,e){return e.length-t.length}var e,n,i=[],a=[]...
function et (line 10) | function et(t){return nt(t)?366:365}
function nt (line 10) | function nt(t){return t%4==0&&t%100!=0||t%400==0}
function it (line 10) | function it(t,e,n,i,a,r,o){var s=new Date(t,e,n,i,a,r,o);return t<100&&t...
function at (line 10) | function at(t){var e=new Date(Date.UTC.apply(null,arguments));return t<1...
function rt (line 10) | function rt(t,e,n){var i=7+e-n;return-((7+at(t,0,i).getUTCDay()-e)%7)+i-1}
function ot (line 10) | function ot(t,e,n,i,a){var r,o,s=1+7*(e-1)+(7+n-i)%7+rt(t,i,a);return s<...
function st (line 10) | function st(t,e,n){var i,a,r=rt(t.year(),e,n),o=Math.floor((t.dayOfYear(...
function lt (line 10) | function lt(t,e,n){var i=rt(t,e,n),a=rt(t+1,e,n);return(et(t)-i+a)/7}
function ut (line 10) | function ut(t,e){return"string"!=typeof t?t:isNaN(t)?"number"==typeof(t=...
function dt (line 10) | function dt(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(...
function ct (line 10) | function ct(t,e,n){var i,a,r,o=t.toLocaleLowerCase();if(!this._weekdaysP...
function ht (line 10) | function ht(){function t(t,e){return e.length-t.length}var e,n,i,a,r,o=[...
function ft (line 10) | function ft(){return this.hours()%12||12}
function gt (line 10) | function gt(t,e){N(t,0,0,function(){return this.localeData().meridiem(th...
function mt (line 10) | function mt(t,e){return e._meridiemParse}
function pt (line 10) | function pt(t){return t?t.toLowerCase().replace("_","-"):t}
function vt (line 10) | function vt(t){for(var e,n,i,a,r=0;r<t.length;){for(e=(a=pt(t[r]).split(...
function yt (line 10) | function yt(n){var i=null;if(!Sn[n]&&void 0!==e&&e&&e.exports)try{i=kn._...
function bt (line 10) | function bt(t,e){var n;return t&&(n=o(e)?_t(t):xt(t,e))&&(kn=n),kn._abbr}
function xt (line 10) | function xt(t,e){if(null!==e){var n=Mn;if(e.abbr=t,null!=Sn[t])S("define...
function _t (line 10) | function _t(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abb...
function kt (line 10) | function kt(t){var e,n=t._a;return n&&-2===g(t).overflow&&(e=n[tn]<0||n[...
function wt (line 10) | function wt(t){var e,n,i,a,r,o,s=t._i,l=Cn.exec(s)||Pn.exec(s);if(l){for...
function Mt (line 10) | function Mt(t){var e,n,i,a,r,o,s,l,u={" GMT":" +0000"," EDT":" -0400"," ...
function St (line 10) | function St(t){var e=On.exec(t._i);null===e?(wt(t),!1===t._isValid&&(del...
function Dt (line 10) | function Dt(t,e,n){return null!=t?t:null!=e?e:n}
function Ct (line 10) | function Ct(t){var e=new Date(n.now());return t._useUTC?[e.getUTCFullYea...
function Pt (line 10) | function Pt(t){var e,n,i,a,r=[];if(!t._d){for(i=Ct(t),t._w&&null==t._a[e...
function Tt (line 10) | function Tt(t){var e,n,i,a,r,o,s,l;if(null!=(e=t._w).GG||null!=e.W||null...
function At (line 10) | function At(t){if(t._f!==n.ISO_8601)if(t._f!==n.RFC_2822){t._a=[],g(t).e...
function It (line 10) | function It(t,e,n){var i;return null==n?e:null!=t.meridiemHour?t.meridie...
function Ot (line 10) | function Ot(t){var e,n,i,a,r;if(0===t._f.length)return g(t).invalidForma...
function Ft (line 10) | function Ft(t){if(!t._d){var e=I(t._i);t._a=u([e.year,e.month,e.day||e.d...
function Rt (line 10) | function Rt(t){var e=new y(kt(Lt(t)));return e._nextDay&&(e.add(1,"d"),e...
function Lt (line 10) | function Lt(t){var e=t._i,n=t._f;return t._locale=t._locale||_t(t._l),nu...
function Wt (line 10) | function Wt(t){var e=t._i;o(e)?t._d=new Date(n.now()):l(e)?t._d=new Date...
function Yt (line 10) | function Yt(t,e,n,o,s){var l={};return!0!==n&&!1!==n||(o=n,n=void 0),(a(...
function Nt (line 10) | function Nt(t,e,n,i){return Yt(t,e,n,i,!1)}
function zt (line 10) | function zt(t,e){var n,a;if(1===e.length&&i(e[0])&&(e=e[0]),!e.length)re...
function Bt (line 10) | function Bt(t){for(var e in t)if(-1===Wn.indexOf(e)||null!=t[e]&&isNaN(t...
function Vt (line 10) | function Vt(t){var e=I(t),n=e.year||0,i=e.quarter||0,a=e.month||0,r=e.we...
function Ht (line 10) | function Ht(t){return t instanceof Vt}
function Et (line 10) | function Et(t){return t<0?-1*Math.round(-1*t):Math.round(t)}
function jt (line 10) | function jt(t,e){N(t,0,0,function(){var t=this.utcOffset(),n="+";return ...
function Ut (line 10) | function Ut(t,e){var n=(e||"").match(t);if(null===n)return null;var i=((...
function qt (line 10) | function qt(t,e){var i,a;return e._isUTC?(i=e.clone(),a=(b(t)||l(t)?t.va...
function Gt (line 10) | function Gt(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}
function Zt (line 10) | function Zt(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}
function Xt (line 10) | function Xt(t,e){var n,i,a,r=t,o=null;return Ht(t)?r={ms:t._milliseconds...
function Jt (line 10) | function Jt(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)...
function Kt (line 10) | function Kt(t,e){var n={milliseconds:0,months:0};return n.months=e.month...
function Qt (line 10) | function Qt(t,e){var n;return t.isValid()&&e.isValid()?(e=qt(e,t),t.isBe...
function $t (line 10) | function $t(t,e){return function(n,i){var a,r;return null===i||isNaN(+i)...
function te (line 10) | function te(t,e,i,a){var r=e._milliseconds,o=Et(e._days),s=Et(e._months)...
function ee (line 10) | function ee(t,e){var n,i=12*(e.year()-t.year())+(e.month()-t.month()),a=...
function ne (line 10) | function ne(t){var e;return void 0===t?this._locale._abbr:(null!=(e=_t(t...
function ie (line 10) | function ie(){return this._locale}
function ae (line 10) | function ae(t,e){N(0,[t,t.length],0,e)}
function re (line 10) | function re(t,e,n,i,a){var r;return null==t?st(this,i,a).year:(r=lt(t,i,...
function oe (line 10) | function oe(t,e,n,i,a){var r=ot(t,e,n,i,a),o=at(r.year,0,r.dayOfYear);re...
function se (line 10) | function se(t){return t}
function le (line 10) | function le(t,e,n,i){var a=_t(),r=h().set(i,e);return a[n](r,t)}
function ue (line 10) | function ue(t,e,n){if(s(t)&&(e=t,t=void 0),t=t||"",null!=e)return le(t,e...
function de (line 10) | function de(t,e,n,i){"boolean"==typeof t?(s(e)&&(n=e,e=void 0),e=e||""):...
function ce (line 10) | function ce(t,e,n,i){var a=Xt(e,n);return t._milliseconds+=i*a._millisec...
function he (line 10) | function he(t){return t<0?Math.floor(t):Math.ceil(t)}
function fe (line 10) | function fe(t){return 4800*t/146097}
function ge (line 10) | function ge(t){return 146097*t/4800}
function me (line 10) | function me(t){return function(){return this.as(t)}}
function pe (line 10) | function pe(t){return function(){return this.isValid()?this._data[t]:NaN}}
function ve (line 10) | function ve(t,e,n,i,a){return a.relativeTime(e||1,!!n,t,i)}
function ye (line 10) | function ye(t,e,n){var i=Xt(t).abs(),a=hi(i.as("s")),r=hi(i.as("m")),o=h...
function be (line 10) | function be(){if(!this.isValid())return this.localeData().invalidDate();...
function e (line 10) | function e(t,e){return r.valueOrDefault(t.showLine,e.showLines)}
function t (line 10) | function t(t,e,n){return Math.max(Math.min(t,n),e)}
function e (line 10) | function e(t){var e=(t=t||{}).data=t.data||{};return e.datasets=e.datase...
function n (line 10) | function n(t){var e=t.options;e.scale?t.scale.options=e.scale:e.scales&&...
function s (line 10) | function s(t){return"top"===t||"bottom"===t}
function e (line 10) | function e(t,e){t._chartjs?t._chartjs.listeners.push(e):(Object.definePr...
function n (line 10) | function n(t,e){var n=t._chartjs;if(n){var i=n.listeners,r=i.indexOf(e);...
function i (line 10) | function i(t,e,n,i){var r,o,s,l,u,d,c,h,f,g=Object.keys(n);for(r=0,o=g.l...
function e (line 10) | function e(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),-1!==...
function n (line 10) | function n(t){return void 0!==t&&null!==t&&"none"!==t}
function o (line 10) | function o(t,i,a){var r=document.defaultView,o=t.parentNode,s=r.getCompu...
function i (line 10) | function i(t,e){return t.native?{x:t.x,y:t.y}:u.getRelativePosition(t,e)}
function a (line 10) | function a(t,e){var n,i,a,r,o;for(i=0,r=t.data.datasets.length;i<r;++i)i...
function r (line 10) | function r(t,e){var n=[];return a(t,function(t){t.inRange(e.x,e.y)&&n.pu...
function o (line 10) | function o(t,e,n,i){var r=Number.POSITIVE_INFINITY,o=[];return a(t,funct...
function s (line 10) | function s(t){var e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return fun...
function l (line 10) | function l(t,e,n){var a=i(e,t);n.axis=n.axis||"x";var l=s(n.axis),u=n.in...
function e (line 10) | function e(t,e){return i.where(t,function(t){return t.position===e})}
function n (line 10) | function n(t,e){t.forEach(function(t,e){return t._tmpIndex_=e,t}),t.sort...
function o (line 10) | function o(t){var e=i.findNextWhere(D,function(e){return e.box===t});if(...
function s (line 10) | function s(t){t.isHorizontal()?(t.left=t.fullWidth?d:I,t.right=t.fullWid...
function i (line 10) | function i(t){var e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(t[e].label)...
function a (line 10) | function a(t,e,n){var i=t.getPixelForTick(e);return n&&(i-=0===e?(t.getP...
function e (line 10) | function e(t,e,n){return s.isArray(e)?s.longestText(t,n,e):t.measureText...
function n (line 10) | function n(t){var e=s.valueOrDefault,n=r.global,i=e(t.fontSize,n.default...
function l (line 10) | function l(t){return s.options.toLineHeight(s.valueOrDefault(t.lineHeigh...
function e (line 10) | function e(t,e){var n=r.color(t);return n.alpha(e*n.alpha()).rgbaString()}
function n (line 10) | function n(t,e){return e&&(r.isArray(e)?Array.prototype.push.apply(t,e):...
function o (line 10) | function o(t){var e=t._xScale,n=t._yScale||t._scale,i=t._index,a=t._data...
function s (line 10) | function s(t){var e=i.global,n=r.valueOrDefault;return{xPadding:t.xPaddi...
function l (line 10) | function l(t,e){var n=t._chart.ctx,i=2*e.yPadding,a=0,o=e.body,s=o.reduc...
function u (line 10) | function u(t,e){var n=t._model,i=t._chart,a=t._chart.chartArea,r="center...
function d (line 10) | function d(t,e,n){var i=t.x,a=t.y,r=t.caretSize,o=t.caretPadding,s=t.cor...
function i (line 10) | function i(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.r...
function i (line 10) | function i(t){return void 0!==t._view.width}
function a (line 10) | function a(t){var e,n,a,r,o=t._view;if(i(t)){var s=o.width/2;e=o.x-s,n=o...
function t (line 10) | function t(t){return v[(y+t)%4]}
function i (line 10) | function i(t,e){var n=p.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);...
function a (line 10) | function a(t,e){var n=t.style,a=t.getAttribute("height"),r=t.getAttribut...
function r (line 10) | function r(t,e,n){t.addEventListener(e,n,w)}
function o (line 10) | function o(t,e,n){t.removeEventListener(e,n,w)}
function s (line 10) | function s(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?...
function l (line 10) | function l(t,e){var n=k[t.type]||t.type,i=p.getRelativePosition(t,e);ret...
function u (line 10) | function u(t,e){var n=!1,i=[];return function(){i=Array.prototype.slice....
function d (line 10) | function d(t){var e=document.createElement("div"),n=y+"size-monitor",i="...
function c (line 10) | function c(t,e){var n=t[v]||(t[v]={}),i=n.renderProxy=function(t){t.anim...
function h (line 10) | function h(t){var e=t[v]||{},n=e.renderProxy;n&&(p.each(_,function(e){o(...
function f (line 10) | function f(t,e,n){var i=t[v]||(t[v]={}),a=i.resizer=d(u(function(){if(i....
function g (line 10) | function g(t){var e=t[v]||{},n=e.resizer;delete e.resizer,h(t),n&&n.pare...
function m (line 10) | function m(t,e){var n=t._style||document.createElement("style");t._style...
function t (line 10) | function t(t,e,n){var i,a=t._model||{},r=a.fill;if(void 0===r&&(r=!!a.ba...
function e (line 10) | function e(t){var e,n=t.el._model||{},i=t.el._scale||{},a=t.fill,r=null;...
function n (line 10) | function n(t,e,n){var i,a=t[e].fill,r=[e];if(!n)return a;for(;!1!==a&&-1...
function o (line 10) | function o(t){var e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||(...
function s (line 10) | function s(t){return t&&!t.skip}
function l (line 10) | function l(t,e,n,i,a){var o;if(i&&a){for(t.moveTo(e[0].x,e[0].y),o=1;o<i...
function u (line 10) | function u(t,e,n,i,a,r){var o,u,d,c,h,f,g,m=e.length,p=i.spanGaps,v=[],y...
function e (line 10) | function e(t,e){return t.usePointStyle?e*Math.SQRT2:t.boxWidth}
function n (line 10) | function n(e,n){var i=new t.Legend({ctx:e.ctx,options:n,chart:e});o.conf...
function e (line 10) | function e(e,i){var a=new t.Title({ctx:e.ctx,options:i,chart:e});n.confi...
function t (line 10) | function t(t){return o?t.xAxisID===e.id:t.yAxisID===e.id}
function t (line 10) | function t(t){return l?t.xAxisID===e.id:t.yAxisID===e.id}
function e (line 10) | function e(t){var e=t.options;return e.angleLines.display||e.pointLabels...
function n (line 10) | function n(t){var e=t.options.pointLabels,n=a.valueOrDefault(e.fontSize,...
function o (line 10) | function o(t,e,n){return a.isArray(n)?{w:a.longestText(t,t.font,n),h:n.l...
function s (line 10) | function s(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t...
function l (line 10) | function l(t){var i,r,l,u=n(t),d=Math.min(t.height/2,t.width/2),c={r:t.w...
function u (line 10) | function u(t){var e=Math.min(t.height/2,t.width/2);t.drawingArea=Math.ro...
function d (line 10) | function d(t){return 0===t||180===t?"center":t<180?"left":"right"}
function c (line 10) | function c(t,e,n,i){if(a.isArray(e))for(var r=n.y,o=1.5*i,s=0;s<e.length...
function h (line 10) | function h(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}
function f (line 10) | function f(t){var i=t.ctx,r=a.valueOrDefault,o=t.options,s=o.angleLines,...
function g (line 10) | function g(t,n,i,r){var o=t.ctx;if(o.strokeStyle=a.valueAtIndexOrDefault...
function m (line 10) | function m(t){return a.isNumber(t)?t:0}
function i (line 10) | function i(t,e){return t-e}
function a (line 10) | function a(t){var e,n,i,a={},r=[];for(e=0,n=t.length;e<n;++e)a[i=t[e]]||...
function r (line 10) | function r(t,e,n,i){if("linear"===i||!t.length)return[{time:e,pos:0},{ti...
function o (line 10) | function o(t,e,n){for(var i,a,r,o=0,s=t.length-1;o>=0&&o<=s;){if(i=o+s>>...
function s (line 10) | function s(t,e,n,i){var a=o(t,e,n),r=a.lo?a.hi?a.lo:t[t.length-2]:t[0],s...
function l (line 10) | function l(t,e){var n=e.parser,i=e.parser||e.format;return"function"==ty...
function u (line 10) | function u(t,e){if(b.isNullOrUndef(t))return null;var n=e.options.time,i...
function d (line 10) | function d(t,e,n,i){var a,r,o,s=e-t,l=k[n],u=l.size,d=l.steps;if(!d)retu...
function c (line 10) | function c(t,e,n,i){var a,r,o,s=w.length;for(a=w.indexOf(t);a<s-1;++a)if...
function h (line 10) | function h(t,e,n,i){var a,r,o=v.duration(v(i).diff(v(n)));for(a=w.length...
function f (line 10) | function f(t){for(var e=w.indexOf(t)+1,n=w.length;e<n;++e)if(k[w[e]].com...
function g (line 10) | function g(t,e,n,i){var a,r=i.time,o=r.unit||c(r.minUnit,t,e,n),s=f(o),l...
function m (line 10) | function m(t,e,n,i,a){var r,o,l=0,u=0;return a.offset&&e.length&&(a.time...
function p (line 10) | function p(t,e){var n,i,a,r,o=[];for(n=0,i=t.length;n<i;++n)a=t[n],r=!!e...
FILE: src/main/resources/static/admin/dist/js/plugins/chartjs2/Chart.bundle.js
function s (line 10) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
function getRgba (line 33) | function getRgba(string) {
function getHsla (line 93) | function getHsla(string) {
function getHwb (line 109) | function getHwb(string) {
function getRgb (line 125) | function getRgb(string) {
function getHsl (line 130) | function getHsl(string) {
function getAlpha (line 135) | function getAlpha(string) {
function hexString (line 149) | function hexString(rgb) {
function rgbString (line 154) | function rgbString(rgba, alpha) {
function rgbaString (line 161) | function rgbaString(rgba, alpha) {
function percentString (line 169) | function percentString(rgba, alpha) {
function percentaString (line 180) | function percentaString(rgba, alpha) {
function hslString (line 187) | function hslString(hsla, alpha) {
function hslaString (line 194) | function hslaString(hsla, alpha) {
function hwbString (line 204) | function hwbString(hwb, alpha) {
function keyword (line 212) | function keyword(rgb) {
function scale (line 217) | function scale(num, min, max) {
function hexDouble (line 221) | function hexDouble(num) {
function rgb2hsl (line 779) | function rgb2hsl(rgb) {
function rgb2hsv (line 814) | function rgb2hsv(rgb) {
function rgb2hwb (line 847) | function rgb2hwb(rgb) {
function rgb2cmyk (line 858) | function rgb2cmyk(rgb) {
function rgb2keyword (line 871) | function rgb2keyword(rgb) {
function rgb2xyz (line 875) | function rgb2xyz(rgb) {
function rgb2lab (line 892) | function rgb2lab(rgb) {
function rgb2lch (line 914) | function rgb2lch(args) {
function hsl2rgb (line 918) | function hsl2rgb(hsl) {
function hsl2hsv (line 956) | function hsl2hsv(hsl) {
function hsl2hwb (line 975) | function hsl2hwb(args) {
function hsl2cmyk (line 979) | function hsl2cmyk(args) {
function hsl2keyword (line 983) | function hsl2keyword(args) {
function hsv2rgb (line 988) | function hsv2rgb(hsv) {
function hsv2hsl (line 1016) | function hsv2hsl(hsv) {
function hsv2hwb (line 1030) | function hsv2hwb(args) {
function hsv2cmyk (line 1034) | function hsv2cmyk(args) {
function hsv2keyword (line 1038) | function hsv2keyword(args) {
function hwb2rgb (line 1043) | function hwb2rgb(hwb) {
function hwb2hsl (line 1078) | function hwb2hsl(args) {
function hwb2hsv (line 1082) | function hwb2hsv(args) {
function hwb2cmyk (line 1086) | function hwb2cmyk(args) {
function hwb2keyword (line 1090) | function hwb2keyword(args) {
function cmyk2rgb (line 1094) | function cmyk2rgb(cmyk) {
function cmyk2hsl (line 1107) | function cmyk2hsl(args) {
function cmyk2hsv (line 1111) | function cmyk2hsv(args) {
function cmyk2hwb (line 1115) | function cmyk2hwb(args) {
function cmyk2keyword (line 1119) | function cmyk2keyword(args) {
function xyz2rgb (line 1124) | function xyz2rgb(xyz) {
function xyz2lab (line 1151) | function xyz2lab(xyz) {
function xyz2lch (line 1172) | function xyz2lch(args) {
function lab2xyz (line 1176) | function lab2xyz(lab) {
function lab2lch (line 1197) | function lab2lch(lab) {
function lab2rgb (line 1212) | function lab2rgb(args) {
function lch2lab (line 1216) | function lch2lab(lch) {
function lch2xyz (line 1228) | function lch2xyz(args) {
function lch2rgb (line 1232) | function lch2rgb(args) {
function keyword2rgb (line 1236) | function keyword2rgb(keyword) {
function keyword2hsl (line 1240) | function keyword2hsl(args) {
function keyword2hsv (line 1244) | function keyword2hsv(args) {
function keyword2hwb (line 1248) | function keyword2hwb(args) {
function keyword2cmyk (line 1252) | function keyword2cmyk(args) {
function keyword2lab (line 1256) | function keyword2lab(args) {
function keyword2xyz (line 1260) | function keyword2xyz(args) {
function hooks (line 1682) | function hooks () {
function setHookCallback (line 1688) | function setHookCallback (callback) {
function isArray (line 1692) | function isArray(input) {
function isObject (line 1696) | function isObject(input) {
function isObjectEmpty (line 1702) | function isObjectEmpty(obj) {
function isUndefined (line 1711) | function isUndefined(input) {
function isNumber (line 1715) | function isNumber(input) {
function isDate (line 1719) | function isDate(input) {
function map (line 1723) | function map(arr, fn) {
function hasOwnProp (line 1731) | function hasOwnProp(a, b) {
function extend (line 1735) | function extend(a, b) {
function createUTC (line 1753) | function createUTC (input, format, locale, strict) {
function defaultParsingFlags (line 1757) | function defaultParsingFlags() {
function getParsingFlags (line 1777) | function getParsingFlags(m) {
function isValid (line 1804) | function isValid(m) {
function createInvalid (line 1837) | function createInvalid (flags) {
function copyConfig (line 1853) | function copyConfig(to, from) {
function Moment (line 1903) | function Moment(config) {
function isMoment (line 1918) | function isMoment (obj) {
function absFloor (line 1922) | function absFloor (number) {
function toInt (line 1931) | function toInt(argumentForCoercion) {
function compareArrays (line 1943) | function compareArrays(array1, array2, dontConvert) {
function warn (line 1957) | function warn(msg) {
function deprecate (line 1964) | function deprecate(msg, fn) {
function deprecateSimple (line 1996) | function deprecateSimple(name, msg) {
function isFunction (line 2009) | function isFunction(input) {
function set (line 2013) | function set (config) {
function mergeConfigs (line 2032) | function mergeConfigs(parentConfig, childConfig) {
function Locale (line 2058) | function Locale(config) {
function calendar (line 2091) | function calendar (key, mom, now) {
function longDateFormat (line 2105) | function longDateFormat (key) {
function invalidDate (line 2122) | function invalidDate () {
function ordinal (line 2129) | function ordinal (number) {
function relativeTime (line 2150) | function relativeTime (number, withoutSuffix, string, isFuture) {
function pastFuture (line 2157) | function pastFuture (diff, output) {
function addUnitAlias (line 2164) | function addUnitAlias (unit, shorthand) {
function normalizeUnits (line 2169) | function normalizeUnits(units) {
function normalizeObjectUnits (line 2173) | function normalizeObjectUnits(inputObject) {
function addUnitPriority (line 2192) | function addUnitPriority(unit, priority) {
function getPrioritizedUnits (line 2196) | function getPrioritizedUnits(unitsObj) {
function makeGetSet (line 2207) | function makeGetSet (unit, keepTime) {
function get (line 2219) | function get (mom, unit) {
function set$1 (line 2224) | function set$1 (mom, unit, value) {
function stringGet (line 2232) | function stringGet (units) {
function stringSet (line 2241) | function stringSet (units, value) {
function zeroFill (line 2257) | function zeroFill(number, targetLength, forceSign) {
function addFormatToken (line 2277) | function addFormatToken (token, padded, ordinal, callback) {
function removeFormattingTokens (line 2299) | function removeFormattingTokens(input) {
function makeFormatFunction (line 2306) | function makeFormatFunction(format) {
function formatMoment (line 2327) | function formatMoment(m, format) {
function expandFormat (line 2338) | function expandFormat(format, locale) {
function addRegexToken (line 2382) | function addRegexToken (token, regex, strictRegex) {
function getParseRegexForToken (line 2388) | function getParseRegexForToken (token, config) {
function unescapeFormat (line 2397) | function unescapeFormat(s) {
function regexEscape (line 2403) | function regexEscape(s) {
function addParseToken (line 2409) | function addParseToken (token, callback) {
function addWeekParseToken (line 2424) | function addWeekParseToken (token, callback) {
function addTimeToArrayFromToken (line 2431) | function addTimeToArrayFromToken(token, input, config) {
function daysInMonth (line 2466) | function daysInMonth(year, month) {
function localeMonths (line 2521) | function localeMonths (m, format) {
function localeMonthsShort (line 2531) | function localeMonthsShort (m, format) {
function handleStrictParse (line 2540) | function handleStrictParse(monthName, format, strict) {
function localeMonthsParse (line 2581) | function localeMonthsParse (monthName, format, strict) {
function setMonth (line 2621) | function setMonth (mom, value) {
function getSetMonth (line 2646) | function getSetMonth (value) {
function getDaysInMonth (line 2656) | function getDaysInMonth () {
function monthsShortRegex (line 2661) | function monthsShortRegex (isStrict) {
function monthsRegex (line 2681) | function monthsRegex (isStrict) {
function computeMonthsParse (line 2700) | function computeMonthsParse () {
function daysInYear (line 2778) | function daysInYear(year) {
function isLeapYear (line 2782) | function isLeapYear(year) {
function getIsLeapYear (line 2796) | function getIsLeapYear () {
function createDate (line 2800) | function createDate (y, m, d, h, M, s, ms) {
function createUTCDate (line 2812) | function createUTCDate (y) {
function firstWeekOffset (line 2823) | function firstWeekOffset(year, dow, doy) {
function dayOfYearFromWeeks (line 2833) | function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
function weekOfYear (line 2856) | function weekOfYear(mom, dow, doy) {
function weeksInYear (line 2878) | function weeksInYear(year, dow, doy) {
function localeWeek (line 2914) | function localeWeek (mom) {
function localeFirstDayOfWeek (line 2923) | function localeFirstDayOfWeek () {
function localeFirstDayOfYear (line 2927) | function localeFirstDayOfYear () {
function getSetWeek (line 2933) | function getSetWeek (input) {
function getSetISOWeek (line 2938) | function getSetISOWeek (input) {
function parseWeekday (line 3004) | function parseWeekday(input, locale) {
function parseIsoWeekday (line 3021) | function parseIsoWeekday(input, locale) {
function localeWeekdays (line 3031) | function localeWeekdays (m, format) {
function localeWeekdaysShort (line 3041) | function localeWeekdaysShort (m) {
function localeWeekdaysMin (line 3046) | function localeWeekdaysMin (m) {
function handleStrictParse$1 (line 3050) | function handleStrictParse$1(weekdayName, format, strict) {
function localeWeekdaysParse (line 3114) | function localeWeekdaysParse (weekdayName, format, strict) {
function getSetDayOfWeek (line 3156) | function getSetDayOfWeek (input) {
function getSetLocaleDayOfWeek (line 3169) | function getSetLocaleDayOfWeek (input) {
function getSetISODayOfWeek (line 3177) | function getSetISODayOfWeek (input) {
function weekdaysRegex (line 3195) | function weekdaysRegex (isStrict) {
function weekdaysShortRegex (line 3215) | function weekdaysShortRegex (isStrict) {
function weekdaysMinRegex (line 3235) | function weekdaysMinRegex (isStrict) {
function computeWeekdaysParse (line 3255) | function computeWeekdaysParse () {
function hFormat (line 3298) | function hFormat() {
function kFormat (line 3302) | function kFormat() {
function meridiem (line 3328) | function meridiem (token, lowercase) {
function matchMeridiem (line 3346) | function matchMeridiem (isStrict, locale) {
function localeIsPM (line 3406) | function localeIsPM (input) {
function localeMeridiem (line 3413) | function localeMeridiem (hours, minutes, isLower) {
function normalizeLocale (line 3459) | function normalizeLocale(key) {
function chooseLocale (line 3466) | function chooseLocale(names) {
function loadLocale (line 3490) | function loadLocale(name) {
function getSetGlobalLocale (line 3509) | function getSetGlobalLocale (key, values) {
function defineLocale (line 3528) | function defineLocale (name, config) {
function updateLocale (line 3575) | function updateLocale(name, config) {
function getLocale (line 3603) | function getLocale (key) {
function listLocales (line 3626) | function listLocales() {
function checkOverflow (line 3630) | function checkOverflow (m) {
function configFromISO (line 3698) | function configFromISO(config) {
function configFromRFC2822 (line 3754) | function configFromRFC2822(config) {
function configFromString (line 3822) | function configFromString(config) {
function defaults (line 3859) | function defaults(a, b, c) {
function currentDateArray (line 3869) | function currentDateArray(config) {
function configFromArray (line 3882) | function configFromArray (config) {
function dayOfYearFromWeekInfo (line 3944) | function dayOfYearFromWeekInfo(config) {
function configFromStringAndFormat (line 4008) | function configFromStringAndFormat(config) {
function meridiemFixWrap (line 4080) | function meridiemFixWrap (locale, hour, meridiem) {
function configFromStringAndArray (line 4106) | function configFromStringAndArray(config) {
function configFromObject (line 4150) | function configFromObject(config) {
function createFromConfig (line 4163) | function createFromConfig (config) {
function prepareConfig (line 4174) | function prepareConfig (config) {
function configFromInput (line 4207) | function configFromInput(config) {
function createLocalOrUTC (line 4230) | function createLocalOrUTC (input, format, locale, strict, isUTC) {
function createLocal (line 4254) | function createLocal (input, format, locale, strict) {
function pickBy (line 4287) | function pickBy(fn, moments) {
function min (line 4305) | function min () {
function max (line 4311) | function max () {
function isDurationValid (line 4323) | function isDurationValid(m) {
function isValid$1 (line 4345) | function isValid$1() {
function createInvalid$1 (line 4349) | function createInvalid$1() {
function Duration (line 4353) | function Duration (duration) {
function isDuration (line 4390) | function isDuration (obj) {
function absRound (line 4394) | function absRound (number) {
function offset (line 4404) | function offset (token, separator) {
function offsetFromString (line 4435) | function offsetFromString(matcher, string) {
function cloneWithOffset (line 4452) | function cloneWithOffset(input, model) {
function getDateOffset (line 4466) | function getDateOffset (m) {
function getSetOffset (line 4490) | function getSetOffset (input, keepLocalTime, keepMinutes) {
function getSetZone (line 4528) | function getSetZone (input, keepLocalTime) {
function setOffsetToUTC (line 4542) | function setOffsetToUTC (keepLocalTime) {
function setOffsetToLocal (line 4546) | function setOffsetToLocal (keepLocalTime) {
function setOffsetToParsedOffset (line 4558) | function setOffsetToParsedOffset () {
function hasAlignedHourOffset (line 4573) | function hasAlignedHourOffset (input) {
function isDaylightSavingTime (line 4582) | function isDaylightSavingTime () {
function isDaylightSavingTimeShifted (line 4589) | function isDaylightSavingTimeShifted () {
function isLocal (line 4610) | function isLocal () {
function isUtcOffset (line 4614) | function isUtcOffset () {
function isUtc (line 4618) | function isUtc () {
function createDuration (line 4630) | function createDuration (input, key) {
function parseIso (line 4694) | function parseIso (inp, sign) {
function positiveMomentsDifference (line 4703) | function positiveMomentsDifference(base, other) {
function momentsDifference (line 4717) | function momentsDifference(base, other) {
function createAdder (line 4736) | function createAdder(direction, name) {
function addSubtract (line 4753) | function addSubtract (mom, duration, isAdding, updateOffset) {
function getCalendarFormat (line 4782) | function getCalendarFormat(myMoment, now) {
function calendar$1 (line 4792) | function calendar$1 (time, formats) {
function clone (line 4804) | function clone () {
function isAfter (line 4808) | function isAfter (input, units) {
function isBefore (line 4821) | function isBefore (input, units) {
function isBetween (line 4834) | function isBetween (from, to, units, inclusivity) {
function isSame (line 4840) | function isSame (input, units) {
function isSameOrAfter (line 4855) | function isSameOrAfter (input, units) {
function isSameOrBefore (line 4859) | function isSameOrBefore (input, units) {
function diff (line 4863) | function diff (input, units, asFloat) {
function monthDiff (line 4901) | function monthDiff (a, b) {
function toString (line 4925) | function toString () {
function toISOString (line 4929) | function toISOString() {
function inspect (line 4950) | function inspect () {
function format (line 4968) | function format (inputString) {
function from (line 4976) | function from (time, withoutSuffix) {
function fromNow (line 4986) | function fromNow (withoutSuffix) {
function to (line 4990) | function to (time, withoutSuffix) {
function toNow (line 5000) | function toNow (withoutSuffix) {
function locale (line 5007) | function locale (key) {
function localeData (line 5032) | function localeData () {
function startOf (line 5036) | function startOf (units) {
function endOf (line 5080) | function endOf (units) {
function valueOf (line 5094) | function valueOf () {
function unix (line 5098) | function unix () {
function toDate (line 5102) | function toDate () {
function toArray (line 5106) | function toArray () {
function toObject (line 5111) | function toObject () {
function toJSON (line 5124) | function toJSON () {
function isValid$2 (line 5129) | function isValid$2 () {
function parsingFlags (line 5133) | function parsingFlags () {
function invalidAt (line 5137) | function invalidAt () {
function creationData (line 5141) | function creationData() {
function addWeekYearFormatToken (line 5161) | function addWeekYearFormatToken (token, getter) {
function getSetWeekYear (line 5202) | function getSetWeekYear (input) {
function getSetISOWeekYear (line 5211) | function getSetISOWeekYear (input) {
function getISOWeeksInYear (line 5216) | function getISOWeeksInYear () {
function getWeeksInYear (line 5220) | function getWeeksInYear () {
function getSetWeekYearHelper (line 5225) | function getSetWeekYearHelper(input, week, weekday, dow, doy) {
function setWeekAll (line 5238) | function setWeekAll(weekYear, week, weekday, dow, doy) {
function getSetQuarter (line 5269) | function getSetQuarter (input) {
function getSetDayOfYear (line 5327) | function getSetDayOfYear (input) {
function parseMs (line 5426) | function parseMs(input, array) {
function getZoneAbbr (line 5444) | function getZoneAbbr () {
function getZoneName (line 5448) | function getZoneName () {
function createUnix (line 5556) | function createUnix (input) {
function createInZone (line 5560) | function createInZone () {
function preParsePostFormat (line 5564) | function preParsePostFormat (string) {
function get$1 (line 5606) | function get$1 (format, index, field, setter) {
function listMonthsImpl (line 5612) | function listMonthsImpl (format, index, field) {
function listWeekdaysImpl (line 5640) | function listWeekdaysImpl (localeSorted, format, index, field) {
function listMonths (line 5676) | function listMonths (format, index) {
function listMonthsShort (line 5680) | function listMonthsShort (format, index) {
function listWeekdays (line 5684) | function listWeekdays (localeSorted, format, index) {
function listWeekdaysShort (line 5688) | function listWeekdaysShort (localeSorted, format, index) {
function listWeekdaysMin (line 5692) | function listWeekdaysMin (localeSorted, format, index) {
function abs (line 5714) | function abs () {
function addSubtract$1 (line 5731) | function addSubtract$1 (duration, input, value, direction) {
function add$1 (line 5742) | function add$1 (input, value) {
function subtract$1 (line 5747) | function subtract$1 (input, value) {
function absCeil (line 5751) | function absCeil (number) {
function bubble (line 5759) | function bubble () {
function daysToMonths (line 5806) | function daysToMonths (days) {
function monthsToDays (line 5812) | function monthsToDays (months) {
function as (line 5817) | function as (units) {
function valueOf$1 (line 5848) | function valueOf$1 () {
function makeAs (line 5860) | function makeAs (alias) {
function get$2 (line 5875) | function get$2 (units) {
function makeGetter (line 5880) | function makeGetter(name) {
function weeks (line 5894) | function weeks () {
function substituteTimeAgo (line 5909) | function substituteTimeAgo(string, number, withoutSuffix, isFuture, loca...
function relativeTime$1 (line 5913) | function relativeTime$1 (posNegDuration, withoutSuffix, locale) {
function getSetRelativeTimeRounding (line 5941) | function getSetRelativeTimeRounding (roundingFunction) {
function getSetRelativeTimeThreshold (line 5953) | function getSetRelativeTimeThreshold (threshold, limit) {
function humanize (line 5967) | function humanize (withSuffix) {
function toISOString$1 (line 5984) | function toISOString$1() {
function lineEnabled (line 7234) | function lineEnabled(dataset, options) {
function capControlPoint (line 7450) | function capControlPoint(pt, min, max) {
function initConfig (line 8176) | function initConfig(config) {
function updateConfig (line 8197) | function updateConfig(chart) {
function positionIsHorizontal (line 8213) | function positionIsHorizontal(position) {
function listenArrayEvents (line 9072) | function listenArrayEvents(array, listener) {
function unlistenArrayEvents (line 9113) | function unlistenArrayEvents(array, listener) {
function interpolate (line 9410) | function interpolate(start, view, model, ease) {
function parseMaxStyle (line 9936) | function parseMaxStyle(styleValue, node, parentProperty) {
function isConstrainedValue (line 9956) | function isConstrainedValue(value) {
function getConstraintDimension (line 9965) | function getConstraintDimension(domNode, maxStyle, percentageProperty) {
function getRelativePosition (line 10137) | function getRelativePosition(e, chart) {
function parseVisibleItems (line 10153) | function parseVisibleItems(chart, handler) {
function getIntersectItems (line 10178) | function getIntersectItems(chart, position) {
function getNearestItems (line 10198) | function getNearestItems(chart, position, intersect, distanceMetric) {
function getDistanceMetricForAxis (line 10227) | function getDistanceMetricForAxis(axis) {
function indexMode (line 10238) | function indexMode(chart, e, options) {
function filterByPosition (line 10516) | function filterByPosition(array, position) {
function sortByWeight (line 10522) | function sortByWeight(array, reverse) {
function getMinimumBoxSize (line 10698) | function getMinimumBoxSize(box) {
function fitBox (line 10750) | function fitBox(box) {
function finalFitVerticalBox (line 10796) | function finalFitVerticalBox(box) {
function placeBox (line 10881) | function placeBox(box) {
function labelsFromTicks (line 11398) | function labelsFromTicks(ticks) {
function getLineValue (line 11409) | function getLineValue(scale, index, offsetGridLines) {
function computeTextSize (line 11424) | function computeTextSize(context, tick, font) {
function parseFontOptions (line 11430) | function parseFontOptions(options) {
function parseLineHeight (line 11445) | function parseLineHeight(options) {
function mergeOpacity (line 12620) | function mergeOpacity(colorString, opacity) {
function pushOrConcat (line 12626) | function pushOrConcat(base, toPush) {
function createTooltipItem (line 12642) | function createTooltipItem(element) {
function getBaseModel (line 12662) | function getBaseModel(tooltipOpts) {
function getTooltipSize (line 12714) | function getTooltipSize(tooltip, model) {
function determineAlignment (line 12782) | function determineAlignment(tooltip, size) {
function getBackgroundPoint (line 12855) | function getBackgroundPoint(vm, size, alignment) {
function xRange (line 13693) | function xRange(mouseX) {
function yRange (line 13698) | function yRange(mouseY) {
function isVertical (line 13793) | function isVertical(bar) {
function getBarBounds (line 13803) | function getBarBounds(bar) {
function cornerAt (line 13904) | function cornerAt(index) {
function readUsedSize (line 14977) | function readUsedSize(element, property) {
function initCanvas (line 14988) | function initCanvas(canvas, config) {
function addEventListener (line 15062) | function addEventListener(node, type, listener) {
function removeEventListener (line 15066) | function removeEventListener(node, type, listener) {
function createEvent (line 15070) | function createEvent(type, chart, x, y, nativeEvent) {
function fromNativeEvent (line 15080) | function fromNativeEvent(event, chart) {
function throttled (line 15086) | function throttled(fn, thisArg) {
function createResizer (line 15105) | function createResizer(handler) {
function watchForRender (line 15163) | function watchForRender(node, handler) {
function unwatchForRender (line 15185) | function unwatchForRender(node) {
function addResizeListener (line 15200) | function addResizeListener(node, listener, chart) {
function removeResizeListener (line 15225) | function removeResizeListener(node) {
function injectCSS (line 15237) | function injectCSS(platform, css) {
function decodeFill (line 15523) | function decodeFill(el, index, count) {
function computeBoundary (line 15572) | function computeBoundary(source) {
function resolveTarget (line 15616) | function resolveTarget(sources, index, propagate) {
function createMapper (line 15647) | function createMapper(source) {
function isDrawable (line 15662) | function isDrawable(point) {
function drawArea (line 15666) | function drawArea(ctx, curve0, curve1, len0, len1) {
function doFill (line 15688) | function doFill(ctx, points, mapper, view, color, loop) {
function getBoxWidth (line 15887) | function getBoxWidth(labelOpts, fontSize) {
function createNewLegendAndAttach (line 16312) | function createNewLegendAndAttach(chart, legendOpts) {
function createNewTitleBlockAndAttach (line 16564) | function createNewTitleBlockAndAttach(chart, titleOpts) {
function IDMatches (line 16771) | function IDMatches(meta) {
function IDMatches (line 17098) | function IDMatches(meta) {
function getValueCount (line 17376) | function getValueCount(scale) {
function getPointLabelFontOptions (line 17381) | function getPointLabelFontOptions(scale) {
function measureLabelSize (line 17396) | function measureLabelSize(ctx, fontSize, label) {
function determineLimits (line 17410) | function determineLimits(angle, pos, size, min, max) {
function fitWithPointLabels (line 17432) | function fitWithPointLabels(scale) {
function fit (line 17517) | function fit(scale) {
function getTextAlignForAngle (line 17523) | function getTextAlignForAngle(angle) {
function fillText (line 17533) | function fillText(ctx, text, position, fontSize) {
function adjustPointPositionForLabelHeight (line 17547) | function adjustPointPositionForLabelHeight(angle, textSize, position) {
function drawPointLabels (line 17555) | function drawPointLabels(scale) {
function drawRadiusLine (line 17600) | function drawRadiusLine(scale, gridLineOpts, radius, index) {
function numberOrZero (line 17633) | function numberOrZero(param) {
function sorter (line 17912) | function sorter(a, b) {
function arrayUnique (line 17916) | function arrayUnique(items) {
function buildLookupTable (line 17947) | function buildLookupTable(timestamps, min, max, distribution) {
function lookup (line 17983) | function lookup(table, key, value) {
function interpolate (line 18015) | function interpolate(table, skey, sval, tkey) {
function momentify (line 18033) | function momentify(value, options) {
function parse (line 18062) | function parse(input, scale) {
function determineStepSize (line 18084) | function determineStepSize(min, max, unit, capacity) {
function determineUnitForAutoTicks (line 18108) | function determineUnitForAutoTicks(minUnit, min, max, capacity) {
function determineUnitForFormatting (line 18127) | function determineUnitForFormatting(ticks, minUnit, min, max) {
function determineMajorUnit (line 18142) | function determineMajorUnit(unit) {
function generate (line 18156) | function generate(min, max, capacity, options) {
function computeOffsets (line 18211) | function computeOffsets(table, ticks, min, max, options) {
function ticksFromTimestamps (line 18238) | function ticksFromTimestamps(values, majorUnit) {
FILE: src/main/resources/static/admin/dist/js/plugins/chartjs2/Chart.js
function s (line 10) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
function getRgba (line 35) | function getRgba(string) {
function getHsla (line 95) | function getHsla(string) {
function getHwb (line 111) | function getHwb(string) {
function getRgb (line 127) | function getRgb(string) {
function getHsl (line 132) | function getHsl(string) {
function getAlpha (line 137) | function getAlpha(string) {
function hexString (line 151) | function hexString(rgb) {
function rgbString (line 156) | function rgbString(rgba, alpha) {
function rgbaString (line 163) | function rgbaString(rgba, alpha) {
function percentString (line 171) | function percentString(rgba, alpha) {
function percentaString (line 182) | function percentaString(rgba, alpha) {
function hslString (line 189) | function hslString(hsla, alpha) {
function hslaString (line 196) | function hslaString(hsla, alpha) {
function hwbString (line 206) | function hwbString(hwb, alpha) {
function keyword (line 214) | function keyword(rgb) {
function scale (line 219) | function scale(num, min, max) {
function hexDouble (line 223) | function hexDouble(num) {
function rgb2hsl (line 781) | function rgb2hsl(rgb) {
function rgb2hsv (line 816) | function rgb2hsv(rgb) {
function rgb2hwb (line 849) | function rgb2hwb(rgb) {
function rgb2cmyk (line 860) | function rgb2cmyk(rgb) {
function rgb2keyword (line 873) | function rgb2keyword(rgb) {
function rgb2xyz (line 877) | function rgb2xyz(rgb) {
function rgb2lab (line 894) | function rgb2lab(rgb) {
function rgb2lch (line 916) | function rgb2lch(args) {
function hsl2rgb (line 920) | function hsl2rgb(hsl) {
function hsl2hsv (line 958) | function hsl2hsv(hsl) {
function hsl2hwb (line 977) | function hsl2hwb(args) {
function hsl2cmyk (line 981) | function hsl2cmyk(args) {
function hsl2keyword (line 985) | function hsl2keyword(args) {
function hsv2rgb (line 990) | function hsv2rgb(hsv) {
function hsv2hsl (line 1018) | function hsv2hsl(hsv) {
function hsv2hwb (line 1032) | function hsv2hwb(args) {
function hsv2cmyk (line 1036) | function hsv2cmyk(args) {
function hsv2keyword (line 1040) | function hsv2keyword(args) {
function hwb2rgb (line 1045) | function hwb2rgb(hwb) {
function hwb2hsl (line 1080) | function hwb2hsl(args) {
function hwb2hsv (line 1084) | function hwb2hsv(args) {
function hwb2cmyk (line 1088) | function hwb2cmyk(args) {
function hwb2keyword (line 1092) | function hwb2keyword(args) {
function cmyk2rgb (line 1096) | function cmyk2rgb(cmyk) {
function cmyk2hsl (line 1109) | function cmyk2hsl(args) {
function cmyk2hsv (line 1113) | function cmyk2hsv(args) {
function cmyk2hwb (line 1117) | function cmyk2hwb(args) {
function cmyk2keyword (line 1121) | function cmyk2keyword(args) {
function xyz2rgb (line 1126) | function xyz2rgb(xyz) {
function xyz2lab (line 1153) | function xyz2lab(xyz) {
function xyz2lch (line 1174) | function xyz2lch(args) {
function lab2xyz (line 1178) | function lab2xyz(lab) {
function lab2lch (line 1199) | function lab2lch(lab) {
function lab2rgb (line 1214) | function lab2rgb(args) {
function lch2lab (line 1218) | function lch2lab(lch) {
function lch2xyz (line 1230) | function lch2xyz(args) {
function lch2rgb (line 1234) | function lch2rgb(args) {
function keyword2rgb (line 1238) | function keyword2rgb(keyword) {
function keyword2hsl (line 1242) | function keyword2hsl(args) {
function keyword2hsv (line 1246) | function keyword2hsv(args) {
function keyword2hwb (line 1250) | function keyword2hwb(args) {
function keyword2cmyk (line 1254) | function keyword2cmyk(args) {
function keyword2lab (line 1258) | function keyword2lab(args) {
function keyword2xyz (line 1262) | function keyword2xyz(args) {
function lineEnabled (line 2771) | function lineEnabled(dataset, options) {
function capControlPoint (line 2987) | function capControlPoint(pt, min, max) {
function initConfig (line 3713) | function initConfig(config) {
function updateConfig (line 3734) | function updateConfig(chart) {
function positionIsHorizontal (line 3750) | function positionIsHorizontal(position) {
function listenArrayEvents (line 4609) | function listenArrayEvents(array, listener) {
function unlistenArrayEvents (line 4650) | function unlistenArrayEvents(array, listener) {
function interpolate (line 4947) | function interpolate(start, view, model, ease) {
function parseMaxStyle (line 5473) | function parseMaxStyle(styleValue, node, parentProperty) {
function isConstrainedValue (line 5493) | function isConstrainedValue(value) {
function getConstraintDimension (line 5502) | function getConstraintDimension(domNode, maxStyle, percentageProperty) {
function getRelativePosition (line 5674) | function getRelativePosition(e, chart) {
function parseVisibleItems (line 5690) | function parseVisibleItems(chart, handler) {
function getIntersectItems (line 5715) | function getIntersectItems(chart, position) {
function getNearestItems (line 5735) | function getNearestItems(chart, position, intersect, distanceMetric) {
function getDistanceMetricForAxis (line 5764) | function getDistanceMetricForAxis(axis) {
function indexMode (line 5775) | function indexMode(chart, e, options) {
function filterByPosition (line 6053) | function filterByPosition(array, position) {
function sortByWeight (line 6059) | function sortByWeight(array, reverse) {
function getMinimumBoxSize (line 6235) | function getMinimumBoxSize(box) {
function fitBox (line 6287) | function fitBox(box) {
function finalFitVerticalBox (line 6333) | function finalFitVerticalBox(box) {
function placeBox (line 6418) | function placeBox(box) {
function labelsFromTicks (line 6935) | function labelsFromTicks(ticks) {
function getLineValue (line 6946) | function getLineValue(scale, index, offsetGridLines) {
function computeTextSize (line 6961) | function computeTextSize(context, tick, font) {
function parseFontOptions (line 6967) | function parseFontOptions(options) {
function parseLineHeight (line 6982) | function parseLineHeight(options) {
function mergeOpacity (line 8157) | function mergeOpacity(colorString, opacity) {
function pushOrConcat (line 8163) | function pushOrConcat(base, toPush) {
function createTooltipItem (line 8179) | function createTooltipItem(element) {
function getBaseModel (line 8199) | function getBaseModel(tooltipOpts) {
function getTooltipSize (line 8251) | function getTooltipSize(tooltip, model) {
function determineAlignment (line 8319) | function determineAlignment(tooltip, size) {
function getBackgroundPoint (line 8392) | function getBackgroundPoint(vm, size, alignment) {
function xRange (line 9230) | function xRange(mouseX) {
function yRange (line 9235) | function yRange(mouseY) {
function isVertical (line 9330) | function isVertical(bar) {
function getBarBounds (line 9340) | function getBarBounds(bar) {
function cornerAt (line 9441) | function cornerAt(index) {
function readUsedSize (line 10514) | function readUsedSize(element, property) {
function initCanvas (line 10525) | function initCanvas(canvas, config) {
function addEventListener (line 10599) | function addEventListener(node, type, listener) {
function removeEventListener (line 10603) | function removeEventListener(node, type, listener) {
function createEvent (line 10607) | function createEvent(type, chart, x, y, nativeEvent) {
function fromNativeEvent (line 10617) | function fromNativeEvent(event, chart) {
function throttled (line 10623) | function throttled(fn, thisArg) {
function createResizer (line 10642) | function createResizer(handler) {
function watchForRender (line 10700) | function watchForRender(node, handler) {
function unwatchForRender (line 10722) | function unwatchForRender(node) {
function addResizeListener (line 10737) | function addResizeListener(node, listener, chart) {
function removeResizeListener (line 10762) | function removeResizeListener(node) {
function injectCSS (line 10774) | function injectCSS(platform, css) {
function decodeFill (line 11060) | function decodeFill(el, index, count) {
function computeBoundary (line 11109) | function computeBoundary(source) {
function resolveTarget (line 11153) | function resolveTarget(sources, index, propagate) {
function createMapper (line 11184) | function createMapper(source) {
function isDrawable (line 11199) | function isDrawable(point) {
function drawArea (line 11203) | function drawArea(ctx, curve0, curve1, len0, len1) {
function doFill (line 11225) | function doFill(ctx, points, mapper, view, color, loop) {
function getBoxWidth (line 11424) | function getBoxWidth(labelOpts, fontSize) {
function createNewLegendAndAttach (line 11849) | function createNewLegendAndAttach(chart, legendOpts) {
function createNewTitleBlockAndAttach (line 12101) | function createNewTitleBlockAndAttach(chart, titleOpts) {
function IDMatches (line 12308) | function IDMatches(meta) {
function IDMatches (line 12635) | function IDMatches(meta) {
function getValueCount (line 12913) | function getValueCount(scale) {
function getPointLabelFontOptions (line 12918) | function getPointLabelFontOptions(scale) {
function measureLabelSize (line 12933) | function measureLabelSize(ctx, fontSize, label) {
function determineLimits (line 12947) | function determineLimits(angle, pos, size, min, max) {
function fitWithPointLabels (line 12969) | function fitWithPointLabels(scale) {
function fit (line 13054) | function fit(scale) {
function getTextAlignForAngle (line 13060) | function getTextAlignForAngle(angle) {
function fillText (line 13070) | function fillText(ctx, text, position, fontSize) {
function adjustPointPositionForLabelHeight (line 13084) | function adjustPointPositionForLabelHeight(angle, textSize, position) {
function drawPointLabels (line 13092) | function drawPointLabels(scale) {
function drawRadiusLine (line 13137) | function drawRadiusLine(scale, gridLineOpts, radius, index) {
function numberOrZero (line 13170) | function numberOrZero(param) {
function sorter (line 13449) | function sorter(a, b) {
function arrayUnique (line 13453) | function arrayUnique(items) {
function buildLookupTable (line 13484) | function buildLookupTable(timestamps, min, max, distribution) {
function lookup (line 13520) | function lookup(table, key, value) {
function interpolate (line 13552) | function interpolate(table, skey, sval, tkey) {
function momentify (line 13570) | function momentify(value, options) {
function parse (line 13599) | function parse(input, scale) {
function determineStepSize (line 13621) | function determineStepSize(min, max, unit, capacity) {
function determineUnitForAutoTicks (line 13645) | function determineUnitForAutoTicks(minUnit, min, max, capacity) {
function determineUnitForFormatting (line 13664) | function determineUnitForFormatting(ticks, minUnit, min, max) {
function determineMajorUnit (line 13679) | function determineMajorUnit(unit) {
function generate (line 13693) | function generate(min, max, capacity, options) {
function computeOffsets (line 13748) | function computeOffsets(table, ticks, min, max, options) {
function ticksFromTimestamps (line 13775) | function ticksFromTimestamps(values, majorUnit) {
FILE: src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-chartjs/Chart.bundle.js
function s (line 10) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
function getRgba (line 33) | function getRgba(string) {
function getHsla (line 93) | function getHsla(string) {
function getHwb (line 109) | function getHwb(string) {
function getRgb (line 125) | function getRgb(string) {
function getHsl (line 130) | function getHsl(string) {
function getAlpha (line 135) | function getAlpha(string) {
function hexString (line 149) | function hexString(rgb) {
function rgbString (line 154) | function rgbString(rgba, alpha) {
function rgbaString (line 161) | function rgbaString(rgba, alpha) {
function percentString (line 169) | function percentString(rgba, alpha) {
function percentaString (line 180) | function percentaString(rgba, alpha) {
function hslString (line 187) | function hslString(hsla, alpha) {
function hslaString (line 194) | function hslaString(hsla, alpha) {
function hwbString (line 204) | function hwbString(hwb, alpha) {
function keyword (line 212) | function keyword(rgb) {
function scale (line 217) | function scale(num, min, max) {
function hexDouble (line 221) | function hexDouble(num) {
function rgb2hsl (line 777) | function rgb2hsl(rgb) {
function rgb2hsv (line 812) | function rgb2hsv(rgb) {
function rgb2hwb (line 845) | function rgb2hwb(rgb) {
function rgb2cmyk (line 856) | function rgb2cmyk(rgb) {
function rgb2keyword (line 869) | function rgb2keyword(rgb) {
function rgb2xyz (line 873) | function rgb2xyz(rgb) {
function rgb2lab (line 890) | function rgb2lab(rgb) {
function rgb2lch (line 912) | function rgb2lch(args) {
function hsl2rgb (line 916) | function hsl2rgb(hsl) {
function hsl2hsv (line 954) | function hsl2hsv(hsl) {
function hsl2hwb (line 973) | function hsl2hwb(args) {
function hsl2cmyk (line 977) | function hsl2cmyk(args) {
function hsl2keyword (line 981) | function hsl2keyword(args) {
function hsv2rgb (line 986) | function hsv2rgb(hsv) {
function hsv2hsl (line 1014) | function hsv2hsl(hsv) {
function hsv2hwb (line 1028) | function hsv2hwb(args) {
function hsv2cmyk (line 1032) | function hsv2cmyk(args) {
function hsv2keyword (line 1036) | function hsv2keyword(args) {
function hwb2rgb (line 1041) | function hwb2rgb(hwb) {
function hwb2hsl (line 1076) | function hwb2hsl(args) {
function hwb2hsv (line 1080) | function hwb2hsv(args) {
function hwb2cmyk (line 1084) | function hwb2cmyk(args) {
function hwb2keyword (line 1088) | function hwb2keyword(args) {
function cmyk2rgb (line 1092) | function cmyk2rgb(cmyk) {
function cmyk2hsl (line 1105) | function cmyk2hsl(args) {
function cmyk2hsv (line 1109) | function cmyk2hsv(args) {
function cmyk2hwb (line 1113) | function cmyk2hwb(args) {
function cmyk2keyword (line 1117) | function cmyk2keyword(args) {
function xyz2rgb (line 1122) | function xyz2rgb(xyz) {
function xyz2lab (line 1149) | function xyz2lab(xyz) {
function xyz2lch (line 1170) | function xyz2lch(args) {
function lab2xyz (line 1174) | function lab2xyz(lab) {
function lab2lch (line 1195) | function lab2lch(lab) {
function lab2rgb (line 1210) | function lab2rgb(args) {
function lch2lab (line 1214) | function lch2lab(lch) {
function lch2xyz (line 1226) | function lch2xyz(args) {
function lch2rgb (line 1230) | function lch2rgb(args) {
function keyword2rgb (line 1234) | function keyword2rgb(keyword) {
function keyword2hsl (line 1238) | function keyword2hsl(args) {
function keyword2hsv (line 1242) | function keyword2hsv(args) {
function keyword2hwb (line 1246) | function keyword2hwb(args) {
function keyword2cmyk (line 1250) | function keyword2cmyk(args) {
function keyword2lab (line 1254) | function keyword2lab(args) {
function keyword2xyz (line 1258) | function keyword2xyz(args) {
function hooks (line 1677) | function hooks () {
function setHookCallback (line 1683) | function setHookCallback (callback) {
function isArray (line 1687) | function isArray(input) {
function isObject (line 1691) | function isObject(input) {
function isObjectEmpty (line 1697) | function isObjectEmpty(obj) {
function isNumber (line 1706) | function isNumber(input) {
function isDate (line 1710) | function isDate(input) {
function map (line 1714) | function map(arr, fn) {
function hasOwnProp (line 1722) | function hasOwnProp(a, b) {
function extend (line 1726) | function extend(a, b) {
function createUTC (line 1744) | function createUTC (input, format, locale, strict) {
function defaultParsingFlags (line 1748) | function defaultParsingFlags() {
function getParsingFlags (line 1766) | function getParsingFlags(m) {
function isValid (line 1793) | function isValid(m) {
function createInvalid (line 1826) | function createInvalid (flags) {
function isUndefined (line 1838) | function isUndefined(input) {
function copyConfig (line 1846) | function copyConfig(to, from) {
function Moment (line 1896) | function Moment(config) {
function isMoment (line 1911) | function isMoment (obj) {
function absFloor (line 1915) | function absFloor (number) {
function toInt (line 1924) | function toInt(argumentForCoercion) {
function compareArrays (line 1936) | function compareArrays(array1, array2, dontConvert) {
function warn (line 1950) | function warn(msg) {
function deprecate (line 1957) | function deprecate(msg, fn) {
function deprecateSimple (line 1989) | function deprecateSimple(name, msg) {
function isFunction (line 2002) | function isFunction(input) {
function set (line 2006) | function set (config) {
function mergeConfigs (line 2022) | function mergeConfigs(parentConfig, childConfig) {
function Locale (line 2048) | function Locale(config) {
function calendar (line 2081) | function calendar (key, mom, now) {
function longDateFormat (line 2095) | function longDateFormat (key) {
function invalidDate (line 2112) | function invalidDate () {
function ordinal (line 2119) | function ordinal (number) {
function relativeTime (line 2139) | function relativeTime (number, withoutSuffix, string, isFuture) {
function pastFuture (line 2146) | function pastFuture (diff, output) {
function addUnitAlias (line 2153) | function addUnitAlias (unit, shorthand) {
function normalizeUnits (line 2158) | function normalizeUnits(units) {
function normalizeObjectUnits (line 2162) | function normalizeObjectUnits(inputObject) {
function addUnitPriority (line 2181) | function addUnitPriority(unit, priority) {
function getPrioritizedUnits (line 2185) | function getPrioritizedUnits(unitsObj) {
function makeGetSet (line 2196) | function makeGetSet (unit, keepTime) {
function get (line 2208) | function get (mom, unit) {
function set$1 (line 2213) | function set$1 (mom, unit, value) {
function stringGet (line 2221) | function stringGet (units) {
function stringSet (line 2230) | function stringSet (units, value) {
function zeroFill (line 2246) | function zeroFill(number, targetLength, forceSign) {
function addFormatToken (line 2266) | function addFormatToken (token, padded, ordinal, callback) {
function removeFormattingTokens (line 2288) | function removeFormattingTokens(input) {
function makeFormatFunction (line 2295) | function makeFormatFunction(format) {
function formatMoment (line 2316) | function formatMoment(m, format) {
function expandFormat (line 2327) | function expandFormat(format, locale) {
function addRegexToken (line 2371) | function addRegexToken (token, regex, strictRegex) {
function getParseRegexForToken (line 2377) | function getParseRegexForToken (token, config) {
function unescapeFormat (line 2386) | function unescapeFormat(s) {
function regexEscape (line 2392) | function regexEscape(s) {
function addParseToken (line 2398) | function addParseToken (token, callback) {
function addWeekParseToken (line 2413) | function addWeekParseToken (token, callback) {
function addTimeToArrayFromToken (line 2420) | function addTimeToArrayFromToken(token, input, config) {
function daysInMonth (line 2455) | function daysInMonth(year, month) {
function localeMonths (line 2510) | function localeMonths (m, format) {
function localeMonthsShort (line 2519) | function localeMonthsShort (m, format) {
function handleStrictParse (line 2527) | function handleStrictParse(monthName, format, strict) {
function localeMonthsParse (line 2568) | function localeMonthsParse (monthName, format, strict) {
function setMonth (line 2608) | function setMonth (mom, value) {
function getSetMonth (line 2633) | function getSetMonth (value) {
function getDaysInMonth (line 2643) | function getDaysInMonth () {
function monthsShortRegex (line 2648) | function monthsShortRegex (isStrict) {
function monthsRegex (line 2668) | function monthsRegex (isStrict) {
function computeMonthsParse (line 2687) | function computeMonthsParse () {
function daysInYear (line 2765) | function daysInYear(year) {
function isLeapYear (line 2769) | function isLeapYear(year) {
function getIsLeapYear (line 2783) | function getIsLeapYear () {
function createDate (line 2787) | function createDate (y, m, d, h, M, s, ms) {
function createUTCDate (line 2799) | function createUTCDate (y) {
function firstWeekOffset (line 2810) | function firstWeekOffset(year, dow, doy) {
function dayOfYearFromWeeks (line 2820) | function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
function weekOfYear (line 2843) | function weekOfYear(mom, dow, doy) {
function weeksInYear (line 2865) | function weeksInYear(year, dow, doy) {
function localeWeek (line 2901) | function localeWeek (mom) {
function localeFirstDayOfWeek (line 2910) | function localeFirstDayOfWeek () {
function localeFirstDayOfYear (line 2914) | function localeFirstDayOfYear () {
function getSetWeek (line 2920) | function getSetWeek (input) {
function getSetISOWeek (line 2925) | function getSetISOWeek (input) {
function parseWeekday (line 2991) | function parseWeekday(input, locale) {
function parseIsoWeekday (line 3008) | function parseIsoWeekday(input, locale) {
function localeWeekdays (line 3018) | function localeWeekdays (m, format) {
function localeWeekdaysShort (line 3027) | function localeWeekdaysShort (m) {
function localeWeekdaysMin (line 3032) | function localeWeekdaysMin (m) {
function handleStrictParse$1 (line 3036) | function handleStrictParse$1(weekdayName, format, strict) {
function localeWeekdaysParse (line 3100) | function localeWeekdaysParse (weekdayName, format, strict) {
function getSetDayOfWeek (line 3142) | function getSetDayOfWeek (input) {
function getSetLocaleDayOfWeek (line 3155) | function getSetLocaleDayOfWeek (input) {
function getSetISODayOfWeek (line 3163) | function getSetISODayOfWeek (input) {
function weekdaysRegex (line 3181) | function weekdaysRegex (isStrict) {
function weekdaysShortRegex (line 3201) | function weekdaysShortRegex (isStrict) {
function weekdaysMinRegex (line 3221) | function weekdaysMinRegex (isStrict) {
function computeWeekdaysParse (line 3241) | function computeWeekdaysParse () {
function hFormat (line 3284) | function hFormat() {
function kFormat (line 3288) | function kFormat() {
function meridiem (line 3314) | function meridiem (token, lowercase) {
function matchMeridiem (line 3332) | function matchMeridiem (isStrict, locale) {
function localeIsPM (line 3386) | function localeIsPM (input) {
function localeMeridiem (line 3393) | function localeMeridiem (hours, minutes, isLower) {
function normalizeLocale (line 3439) | function normalizeLocale(key) {
function chooseLocale (line 3446) | function chooseLocale(names) {
function loadLocale (line 3470) | function loadLocale(name) {
function getSetGlobalLocale (line 3489) | function getSetGlobalLocale (key, values) {
function defineLocale (line 3508) | function defineLocale (name, config) {
function updateLocale (line 3555) | function updateLocale(name, config) {
function getLocale (line 3583) | function getLocale (key) {
function listLocales (line 3606) | function listLocales() {
function checkOverflow (line 3610) | function checkOverflow (m) {
function configFromISO (line 3678) | function configFromISO(config) {
function configFromString (line 3731) | function configFromString(config) {
function defaults (line 3757) | function defaults(a, b, c) {
function currentDateArray (line 3767) | function currentDateArray(config) {
function configFromArray (line 3780) | function configFromArray (config) {
function dayOfYearFromWeekInfo (line 3842) | function dayOfYearFromWeekInfo(config) {
function configFromStringAndFormat (line 3903) | function configFromStringAndFormat(config) {
function meridiemFixWrap (line 3972) | function meridiemFixWrap (locale, hour, meridiem) {
function configFromStringAndArray (line 3998) | function configFromStringAndArray(config) {
function configFromObject (line 4042) | function configFromObject(config) {
function createFromConfig (line 4055) | function createFromConfig (config) {
function prepareConfig (line 4066) | function prepareConfig (config) {
function configFromInput (line 4099) | function configFromInput(config) {
function createLocalOrUTC (line 4122) | function createLocalOrUTC (input, format, locale, strict, isUTC) {
function createLocal (line 4146) | function createLocal (input, format, locale, strict) {
function pickBy (line 4179) | function pickBy(fn, moments) {
function min (line 4197) | function min () {
function max (line 4203) | function max () {
function Duration (line 4213) | function Duration (duration) {
function isDuration (line 4248) | function isDuration (obj) {
function absRound (line 4252) | function absRound (number) {
function offset (line 4262) | function offset (token, separator) {
function offsetFromString (line 4293) | function offsetFromString(matcher, string) {
function cloneWithOffset (line 4310) | function cloneWithOffset(input, model) {
function getDateOffset (line 4324) | function getDateOffset (m) {
function getSetOffset (line 4348) | function getSetOffset (input, keepLocalTime) {
function getSetZone (line 4386) | function getSetZone (input, keepLocalTime) {
function setOffsetToUTC (line 4400) | function setOffsetToUTC (keepLocalTime) {
function setOffsetToLocal (line 4404) | function setOffsetToLocal (keepLocalTime) {
function setOffsetToParsedOffset (line 4416) | function setOffsetToParsedOffset () {
function hasAlignedHourOffset (line 4431) | function hasAlignedHourOffset (input) {
function isDaylightSavingTime (line 4440) | function isDaylightSavingTime () {
function isDaylightSavingTimeShifted (line 4447) | function isDaylightSavingTimeShifted () {
function isLocal (line 4468) | function isLocal () {
function isUtcOffset (line 4472) | function isUtcOffset () {
function isUtc (line 4476) | function isUtc () {
function createDuration (line 4488) | function createDuration (input, key) {
function parseIso (line 4551) | function parseIso (inp, sign) {
function positiveMomentsDifference (line 4560) | function positiveMomentsDifference(base, other) {
function momentsDifference (line 4574) | function momentsDifference(base, other) {
function createAdder (line 4593) | function createAdder(direction, name) {
function addSubtract (line 4610) | function addSubtract (mom, duration, isAdding, updateOffset) {
function getCalendarFormat (line 4639) | function getCalendarFormat(myMoment, now) {
function calendar$1 (line 4649) | function calendar$1 (time, formats) {
function clone (line 4661) | function clone () {
function isAfter (line 4665) | function isAfter (input, units) {
function isBefore (line 4678) | function isBefore (input, units) {
function isBetween (line 4691) | function isBetween (from, to, units, inclusivity) {
function isSame (line 4697) | function isSame (input, units) {
function isSameOrAfter (line 4712) | function isSameOrAfter (input, units) {
function isSameOrBefore (line 4716) | function isSameOrBefore (input, units) {
function diff (line 4720) | function diff (input, units, asFloat) {
function monthDiff (line 4758) | function monthDiff (a, b) {
function toString (line 4782) | function toString () {
function toISOString (line 4786) | function toISOString () {
function inspect (line 4806) | function inspect () {
function format (line 4824) | function format (inputString) {
function from (line 4832) | function from (time, withoutSuffix) {
function fromNow (line 4842) | function fromNow (withoutSuffix) {
function to (line 4846) | function to (time, withoutSuffix) {
function toNow (line 4856) | function toNow (withoutSuffix) {
function locale (line 4863) | function locale (key) {
function localeData (line 4888) | function localeData () {
function startOf (line 4892) | function startOf (units) {
function endOf (line 4936) | function endOf (units) {
function valueOf (line 4950) | function valueOf () {
function unix (line 4954) | function unix () {
function toDate (line 4958) | function toDate () {
function toArray (line 4962) | function toArray () {
function toObject (line 4967) | function toObject () {
function toJSON (line 4980) | function toJSON () {
function isValid$1 (line 4985) | function isValid$1 () {
function parsingFlags (line 4989) | function parsingFlags () {
function invalidAt (line 4993) | function invalidAt () {
function creationData (line 4997) | function creationData() {
function addWeekYearFormatToken (line 5017) | function addWeekYearFormatToken (token, getter) {
function getSetWeekYear (line 5058) | function getSetWeekYear (input) {
function getSetISOWeekYear (line 5067) | function getSetISOWeekYear (input) {
function getISOWeeksInYear (line 5072) | function getISOWeeksInYear () {
function getWeeksInYear (line 5076) | function getWeeksInYear () {
function getSetWeekYearHelper (line 5081) | function getSetWeekYearHelper(input, week, weekday, dow, doy) {
function setWeekAll (line 5094) | function setWeekAll(weekYear, week, weekday, dow, doy) {
function getSetQuarter (line 5125) | function getSetQuarter (input) {
function getSetDayOfYear (line 5180) | function getSetDayOfYear (input) {
function parseMs (line 5279) | function parseMs(input, array) {
function getZoneAbbr (line 5297) | function getZoneAbbr () {
function getZoneName (line 5301) | function getZoneName () {
function createUnix (line 5409) | function createUnix (input) {
function createInZone (line 5413) | function createInZone () {
function preParsePostFormat (line 5417) | function preParsePostFormat (string) {
function get$1 (line 5459) | function get$1 (format, index, field, setter) {
function listMonthsImpl (line 5465) | function listMonthsImpl (format, index, field) {
function listWeekdaysImpl (line 5493) | function listWeekdaysImpl (localeSorted, format, index, field) {
function listMonths (line 5529) | function listMonths (format, index) {
function listMonthsShort (line 5533) | function listMonthsShort (format, index) {
function listWeekdays (line 5537) | function listWeekdays (localeSorted, format, index) {
function listWeekdaysShort (line 5541) | function listWeekdaysShort (localeSorted, format, index) {
function listWeekdaysMin (line 5545) | function listWeekdaysMin (localeSorted, format, index) {
function abs (line 5567) | function abs () {
function addSubtract$1 (line 5584) | function addSubtract$1 (duration, input, value, direction) {
function add$1 (line 5595) | function add$1 (input, value) {
function subtract$1 (line 5600) | function subtract$1 (input, value) {
function absCeil (line 5604) | function absCeil (number) {
function bubble (line 5612) | function bubble () {
function daysToMonths (line 5659) | function daysToMonths (days) {
function monthsToDays (line 5665) | function monthsToDays (months) {
function as (line 5670) | function as (units) {
function valueOf$1 (line 5698) | function valueOf$1 () {
function makeAs (line 5707) | function makeAs (alias) {
function get$2 (line 5722) | function get$2 (units) {
function makeGetter (line 5727) | function makeGetter(name) {
function weeks (line 5741) | function weeks () {
function substituteTimeAgo (line 5755) | function substituteTimeAgo(string, number, withoutSuffix, isFuture, loca...
function relativeTime$1 (line 5759) | function relativeTime$1 (posNegDuration, withoutSuffix, locale) {
function getSetRelativeTimeRounding (line 5786) | function getSetRelativeTimeRounding (roundingFunction) {
function getSetRelativeTimeThreshold (line 5798) | function getSetRelativeTimeThreshold (threshold, limit) {
function humanize (line 5809) | function humanize (withSuffix) {
function toISOString$1 (line 5822) | function toISOString$1() {
function lineEnabled (line 7143) | function lineEnabled(dataset, options) {
function capControlPoint (line 7365) | function capControlPoint(pt, min, max) {
function initConfig (line 8146) | function initConfig(config) {
function updateConfig (line 8167) | function updateConfig(chart) {
function listenArrayEvents (line 8892) | function listenArrayEvents(array, listener) {
function unlistenArrayEvents (line 8933) | function unlistenArrayEvents(array, listener) {
function parseMaxStyle (line 10026) | function parseMaxStyle(styleValue, node, parentProperty) {
function isConstrainedValue (line 10046) | function isConstrainedValue(value) {
function getConstraintDimension (line 10055) | function getConstraintDimension(domNode, maxStyle, percentageProperty) {
function getRelativePosition (line 10270) | function getRelativePosition(e, chart) {
function parseVisibleItems (line 10286) | function parseVisibleItems(chart, handler) {
function getIntersectItems (line 10311) | function getIntersectItems(chart, position) {
function getNearestItems (line 10331) | function getNearestItems(chart, position, intersect, distanceMetric) {
function indexMode (line 10359) | function indexMode(chart, e, options) {
function getMinimumBoxSize (line 10766) | function getMinimumBoxSize(box) {
function fitBox (line 10818) | function fitBox(box) {
function finalFitVerticalBox (line 10864) | function finalFitVerticalBox(box) {
function placeBox (line 10949) | function placeBox(box) {
function getBoxWidth (line 11074) | function getBoxWidth(labelOpts, fontSize) {
function createNewLegendAndAttach (line 11495) | function createNewLegendAndAttach(chartInstance, legendOpts) {
function computeTextSize (line 11919) | function computeTextSize(context, tick, font) {
function parseFontOptions (line 11925) | function parseFontOptions(options) {
function createNewTitleBlockAndAttach (line 13063) | function createNewTitleBlockAndAttach(chartInstance, titleOpts) {
function mergeOpacity (line 13111) | function mergeOpacity(colorString, opacity) {
function pushOrConcat (line 13196) | function pushOrConcat(base, toPush) {
function createTooltipItem (line 13212) | function createTooltipItem(element) {
function getBaseModel (line 13232) | function getBaseModel(tooltipOpts) {
function getTooltipSize (line 13282) | function getTooltipSize(tooltip, model) {
function determineAlignment (line 13350) | function determineAlignment(tooltip, size) {
function getBackgroundPoint (line 13423) | function getBackgroundPoint(vm, size, alignment) {
function lineToPoint (line 14131) | function lineToPoint(previousPoint, point) {
function xRange (line 14296) | function xRange(mouseX) {
function yRange (line 14301) | function yRange(mouseY) {
function isVertical (line 14391) | function isVertical(bar) {
function getBarBounds (line 14401) | function getBarBounds(bar) {
function cornerAt (line 14502) | function cornerAt(index) {
function readUsedSize (line 14621) | function readUsedSize(element, property) {
function initCanvas (line 14632) | function initCanvas(canvas, config) {
function createEvent (line 14682) | function createEvent(type, chart, x, y, native) {
function fromNativeEvent (line 14692) | function fromNativeEvent(event, chart) {
function createResizer (line 14698) | function createResizer(handler) {
function addResizeListener (line 14734) | function addResizeListener(node, listener, chart) {
function removeResizeListener (line 14758) | function removeResizeListener(node) {
function IDMatches (line 15087) | function IDMatches(meta) {
function IDMatches (line 15376) | function IDMatches(meta) {
function getValueCount (line 15646) | function getValueCount(scale) {
function getPointLabelFontOptions (line 15650) | function getPointLabelFontOptions(scale) {
function measureLabelSize (line 15665) | function measureLabelSize(ctx, fontSize, label) {
function determineLimits (line 15679) | function determineLimits(angle, pos, size, min, max) {
function fitWithPointLabels (line 15701) | function fitWithPointLabels(scale) {
function fit (line 15788) | function fit(scale) {
function getTextAlignForAngle (line 15794) | function getTextAlignForAngle(angle) {
function fillText (line 15804) | function fillText(ctx, text, position, fontSize) {
function adjustPointPositionForLabelHeight (line 15818) | function adjustPointPositionForLabelHeight(angle, textSize, position) {
function drawPointLabels (line 15826) | function drawPointLabels(scale) {
function drawRadiusLine (line 15868) | function drawRadiusLine(scale, gridLineOpts, radius, index) {
function numberOrZero (line 15901) | function numberOrZero(param) {
FILE: src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-chartjs/Chart.js
function s (line 10) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
function getRgba (line 35) | function getRgba(string) {
function getHsla (line 95) | function getHsla(string) {
function getHwb (line 111) | function getHwb(string) {
function getRgb (line 127) | function getRgb(string) {
function getHsl (line 132) | function getHsl(string) {
function getAlpha (line 137) | function getAlpha(string) {
function hexString (line 151) | function hexString(rgb) {
function rgbString (line 156) | function rgbString(rgba, alpha) {
function rgbaString (line 163) | function rgbaString(rgba, alpha) {
function percentString (line 171) | function percentString(rgba, alpha) {
function percentaString (line 182) | function percentaString(rgba, alpha) {
function hslString (line 189) | function hslString(hsla, alpha) {
function hslaString (line 196) | function hslaString(hsla, alpha) {
function hwbString (line 206) | function hwbString(hwb, alpha) {
function keyword (line 214) | function keyword(rgb) {
function scale (line 219) | function scale(num, min, max) {
function hexDouble (line 223) | function hexDouble(num) {
function rgb2hsl (line 779) | function rgb2hsl(rgb) {
function rgb2hsv (line 814) | function rgb2hsv(rgb) {
function rgb2hwb (line 847) | function rgb2hwb(rgb) {
function rgb2cmyk (line 858) | function rgb2cmyk(rgb) {
function rgb2keyword (line 871) | function rgb2keyword(rgb) {
function rgb2xyz (line 875) | function rgb2xyz(rgb) {
function rgb2lab (line 892) | function rgb2lab(rgb) {
function rgb2lch (line 914) | function rgb2lch(args) {
function hsl2rgb (line 918) | function hsl2rgb(hsl) {
function hsl2hsv (line 956) | function hsl2hsv(hsl) {
function hsl2hwb (line 975) | function hsl2hwb(args) {
function hsl2cmyk (line 979) | function hsl2cmyk(args) {
function hsl2keyword (line 983) | function hsl2keyword(args) {
function hsv2rgb (line 988) | function hsv2rgb(hsv) {
function hsv2hsl (line 1016) | function hsv2hsl(hsv) {
function hsv2hwb (line 1030) | function hsv2hwb(args) {
function hsv2cmyk (line 1034) | function hsv2cmyk(args) {
function hsv2keyword (line 1038) | function hsv2keyword(args) {
function hwb2rgb (line 1043) | function hwb2rgb(hwb) {
function hwb2hsl (line 1078) | function hwb2hsl(args) {
function hwb2hsv (line 1082) | function hwb2hsv(args) {
function hwb2cmyk (line 1086) | function hwb2cmyk(args) {
function hwb2keyword (line 1090) | function hwb2keyword(args) {
function cmyk2rgb (line 1094) | function cmyk2rgb(cmyk) {
function cmyk2hsl (line 1107) | function cmyk2hsl(args) {
function cmyk2hsv (line 1111) | function cmyk2hsv(args) {
function cmyk2hwb (line 1115) | function cmyk2hwb(args) {
function cmyk2keyword (line 1119) | function cmyk2keyword(args) {
function xyz2rgb (line 1124) | function xyz2rgb(xyz) {
function xyz2lab (line 1151) | function xyz2lab(xyz) {
function xyz2lch (line 1172) | function xyz2lch(args) {
function lab2xyz (line 1176) | function lab2xyz(lab) {
function lab2lch (line 1197) | function lab2lch(lab) {
function lab2rgb (line 1212) | function lab2rgb(args) {
function lch2lab (line 1216) | function lch2lab(lch) {
function lch2xyz (line 1228) | function lch2xyz(args) {
function lch2rgb (line 1232) | function lch2rgb(args) {
function keyword2rgb (line 1236) | function keyword2rgb(keyword) {
function keyword2hsl (line 1240) | function keyword2hsl(args) {
function keyword2hsv (line 1244) | function keyword2hsv(args) {
function keyword2hwb (line 1248) | function keyword2hwb(args) {
function keyword2cmyk (line 1252) | function keyword2cmyk(args) {
function keyword2lab (line 1256) | function keyword2lab(args) {
function keyword2xyz (line 1260) | function keyword2xyz(args) {
function lineEnabled (line 2842) | function lineEnabled(dataset, options) {
function capControlPoint (line 3064) | function capControlPoint(pt, min, max) {
function initConfig (line 3845) | function initConfig(config) {
function updateConfig (line 3866) | function updateConfig(chart) {
function listenArrayEvents (line 4591) | function listenArrayEvents(array, listener) {
function unlistenArrayEvents (line 4632) | function unlistenArrayEvents(array, listener) {
function parseMaxStyle (line 5725) | function parseMaxStyle(styleValue, node, parentProperty) {
function isConstrainedValue (line 5745) | function isConstrainedValue(value) {
function getConstraintDimension (line 5754) | function getConstraintDimension(domNode, maxStyle, percentageProperty) {
function getRelativePosition (line 5969) | function getRelativePosition(e, chart) {
function parseVisibleItems (line 5985) | function parseVisibleItems(chart, handler) {
function getIntersectItems (line 6010) | function getIntersectItems(chart, position) {
function getNearestItems (line 6030) | function getNearestItems(chart, position, intersect, distanceMetric) {
function indexMode (line 6058) | function indexMode(chart, e, options) {
function getMinimumBoxSize (line 6465) | function getMinimumBoxSize(box) {
function fitBox (line 6517) | function fitBox(box) {
function finalFitVerticalBox (line 6563) | function finalFitVerticalBox(box) {
function placeBox (line 6648) | function placeBox(box) {
function getBoxWidth (line 6773) | function getBoxWidth(labelOpts, fontSize) {
function createNewLegendAndAttach (line 7194) | function createNewLegendAndAttach(chartInstance, legendOpts) {
function computeTextSize (line 7618) | function computeTextSize(context, tick, font) {
function parseFontOptions (line 7624) | function parseFontOptions(options) {
function createNewTitleBlockAndAttach (line 8762) | function createNewTitleBlockAndAttach(chartInstance, titleOpts) {
function mergeOpacity (line 8810) | function mergeOpacity(colorString, opacity) {
function pushOrConcat (line 8895) | function pushOrConcat(base, toPush) {
function createTooltipItem (line 8911) | function createTooltipItem(element) {
function getBaseModel (line 8931) | function getBaseModel(tooltipOpts) {
function getTooltipSize (line 8981) | function getTooltipSize(tooltip, model) {
function determineAlignment (line 9049) | function determineAlignment(tooltip, size) {
function getBackgroundPoint (line 9122) | function getBackgroundPoint(vm, size, alignment) {
function lineToPoint (line 9830) | function lineToPoint(previousPoint, point) {
function xRange (line 9995) | function xRange(mouseX) {
function yRange (line 10000) | function yRange(mouseY) {
function isVertical (line 10090) | function isVertical(bar) {
function getBarBounds (line 10100) | function getBarBounds(bar) {
function cornerAt (line 10201) | function cornerAt(index) {
function readUsedSize (line 10320) | function readUsedSize(element, property) {
function initCanvas (line 10331) | function initCanvas(canvas, config) {
function createEvent (line 10381) | function createEvent(type, chart, x, y, native) {
function fromNativeEvent (line 10391) | function fromNativeEvent(event, chart) {
function createResizer (line 10397) | function createResizer(handler) {
function addResizeListener (line 10433) | function addResizeListener(node, listener, chart) {
function removeResizeListener (line 10457) | function removeResizeListener(node) {
function IDMatches (line 10786) | function IDMatches(meta) {
function IDMatches (line 11075) | function IDMatches(meta) {
function getValueCount (line 11345) | function getValueCount(scale) {
function getPointLabelFontOptions (line 11349) | function getPointLabelFontOptions(scale) {
function measureLabelSize (line 11364) | function measureLabelSize(ctx, fontSize, label) {
function determineLimits (line 11378) | function determineLimits(angle, pos, size, min, max) {
function fitWithPointLabels (line 11400) | function fitWithPointLabels(scale) {
function fit (line 11487) | function fit(scale) {
function getTextAlignForAngle (line 11493) | function getTextAlignForAngle(angle) {
function fillText (line 11503) | function fillText(ctx, text, position, fontSize) {
function adjustPointPositionForLabelHeight (line 11517) | function adjustPointPositionForLabelHeight(angle, textSize, position) {
function drawPointLabels (line 11525) | function drawPointLabels(scale) {
function drawRadiusLine (line 11567) | function drawRadiusLine(scale, gridLineOpts, radius, index) {
function numberOrZero (line 11600) | function numberOrZero(param) {
FILE: src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-chartjs/chartjs-plugin-deferred.js
function computeOffset (line 47) | function computeOffset(value, base) {
function chartInViewport (line 57) | function chartInViewport(instance) {
function buildDeferredModel (line 76) | function buildDeferredModel(instance) {
function onScroll (line 100) | function onScroll(event) {
function isScrollable (line 126) | function isScrollable(node) {
function watch (line 138) | function watch(instance) {
function unwatch (line 159) | function unwatch(instance) {
FILE: src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-fontsettings/fontsettings.js
function getThemes (line 44) | function getThemes() {
function setThemes (line 49) | function setThemes(themes) {
function getFamilies (line 55) | function getFamilies() {
function setFamilies (line 60) | function setFamilies(families) {
function saveFontSettings (line 66) | function saveFontSettings() {
function enlargeFontSize (line 72) | function enlargeFontSize(e) {
function reduceFontSize (line 81) | function reduceFontSize(e) {
function changeFontFamily (line 90) | function changeFontFamily(configName, e) {
function changeColorTheme (line 101) | function changeColorTheme(configName, e) {
function getFontFamilyId (line 123) | function getFontFamilyId(configName) {
function getThemeId (line 134) | function getThemeId(configName) {
function update (line 143) | function update() {
function init (line 159) | function init(config) {
function updateButtons (line 174) | function updateButtons() {
FILE: src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-search-plus/search.js
function throttle (line 19) | function throttle (fn, wait) {
function displayResults (line 34) | function displayResults (res) {
function escapeRegExp (line 85) | function escapeRegExp (keyword) {
function query (line 90) | function query (keyword) {
function launchSearch (line 117) | function launchSearch (keyword) {
function closeSearch (line 130) | function closeSearch () {
function bindSearch (line 135) | function bindSearch () {
function showResult (line 200) | function showResult () {
function updateQueryString (line 216) | function updateQueryString (key, value) {
FILE: src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook.js
function o (line 1) | function o(s,a){if(!n[s]){if(!t[s]){var u="function"==typeof require&&re...
function n (line 1) | function n(e,t){t=t||te;var n=t.createElement("script");n.text=e,t.head....
function r (line 1) | function r(e){var t=!!e&&"length"in e&&e.length,n=de.type(e);return"func...
function o (line 1) | function o(e,t,n){return de.isFunction(t)?de.grep(e,function(e,r){return...
function i (line 1) | function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}
function s (line 1) | function s(e){var t={};return de.each(e.match(qe)||[],function(e,n){t[n]...
function a (line 1) | function a(e){return e}
function u (line 1) | function u(e){throw e}
function c (line 1) | function c(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done...
function l (line 1) | function l(){te.removeEventListener("DOMContentLoaded",l),e.removeEventL...
function f (line 1) | function f(){this.expando=de.expando+f.uid++}
function p (line 1) | function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?...
function h (line 1) | function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.rep...
function d (line 1) | function d(e,t,n,r){var o,i=1,s=20,a=r?function(){return r.cur()}:functi...
function g (line 1) | function g(e){var t,n=e.ownerDocument,r=e.nodeName,o=Ue[r];return o?o:(t...
function m (line 1) | function m(e,t){for(var n,r,o=[],i=0,s=e.length;i<s;i++)r=e[i],r.style&&...
function v (line 1) | function v(e,t){var n;return n="undefined"!=typeof e.getElementsByTagNam...
function y (line 1) | function y(e,t){for(var n=0,r=e.length;n<r;n++)Fe.set(e[n],"globalEval",...
function x (line 1) | function x(e,t,n,r,o){for(var i,s,a,u,c,l,f=t.createDocumentFragment(),p...
function b (line 1) | function b(){return!0}
function w (line 1) | function w(){return!1}
function T (line 1) | function T(){try{return te.activeElement}catch(e){}}
function C (line 1) | function C(e,t,n,r,o,i){var s,a;if("object"==typeof t){"string"!=typeof ...
function j (line 1) | function j(e,t){return de.nodeName(e,"table")&&de.nodeName(11!==t.nodeTy...
function k (line 1) | function k(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
function E (line 1) | function E(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribu...
function S (line 1) | function S(e,t){var n,r,o,i,s,a,u,c;if(1===t.nodeType){if(Fe.hasData(e)&...
function N (line 1) | function N(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ze.test(e.ty...
function A (line 1) | function A(e,t,r,o){t=oe.apply([],t);var i,s,a,u,c,l,f=0,p=e.length,h=p-...
function q (line 1) | function q(e,t,n){for(var r,o=t?de.filter(t,e):e,i=0;null!=(r=o[i]);i++)...
function D (line 1) | function D(e,t,n){var r,o,i,s,a=e.style;return n=n||at(e),n&&(s=n.getPro...
function O (line 1) | function O(e,t){return{get:function(){return e()?void delete this.get:(t...
function L (line 1) | function L(e){if(e in pt)return e;for(var t=e[0].toUpperCase()+e.slice(1...
function H (line 1) | function H(e,t,n){var r=$e.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3...
function F (line 1) | function F(e,t,n,r,o){var i,s=0;for(i=n===(r?"border":"content")?4:"widt...
function R (line 1) | function R(e,t,n){var r,o=!0,i=at(e),s="border-box"===de.css(e,"boxSizin...
function I (line 1) | function I(e,t,n,r,o){return new I.prototype.init(e,t,n,r,o)}
function P (line 1) | function P(){dt&&(e.requestAnimationFrame(P),de.fx.tick())}
function M (line 1) | function M(){return e.setTimeout(function(){ht=void 0}),ht=de.now()}
function $ (line 1) | function $(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=We[r],o[...
function W (line 1) | function W(e,t,n){for(var r,o=(U.tweeners[t]||[]).concat(U.tweeners["*"]...
function B (line 1) | function B(e,t,n){var r,o,i,s,a,u,c,l,f="width"in t||"height"in t,p=this...
function _ (line 1) | function _(e,t){var n,r,o,i,s;for(n in e)if(r=de.camelCase(n),o=t[r],i=e...
function U (line 1) | function U(e,t,n){var r,o,i=0,s=U.prefilters.length,a=de.Deferred().alwa...
function z (line 1) | function z(e){var t=e.match(qe)||[];return t.join(" ")}
function X (line 1) | function X(e){return e.getAttribute&&e.getAttribute("class")||""}
function V (line 1) | function V(e,t,n,r){var o;if(de.isArray(t))de.each(t,function(t,o){n||Et...
function G (line 1) | function G(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
function Y (line 1) | function Y(e,t,n,r){function o(a){var u;return i[a]=!0,de.each(e[a]||[],...
function Q (line 1) | function Q(e,t){var n,r,o=de.ajaxSettings.flatOptions||{};for(n in t)voi...
function J (line 1) | function J(e,t,n){for(var r,o,i,s,a=e.contents,u=e.dataTypes;"*"===u[0];...
function K (line 1) | function K(e,t,n,r){var o,i,s,a,u,c={},l=e.dataTypes.slice();if(l[1])for...
function Z (line 1) | function Z(e){return de.isWindow(e)?e:9===e.nodeType&&e.defaultView}
function t (line 1) | function t(e,t,n,r){var o,i,s,a,u,c,l,p=t&&t.ownerDocument,d=t?t.nodeTyp...
function n (line 1) | function n(){function e(n,r){return t.push(n+" ")>C.cacheLength&&delete ...
function r (line 1) | function r(e){return e[$]=!0,e}
function o (line 1) | function o(e){var t=L.createElement("fieldset");try{return!!e(t)}catch(e...
function i (line 1) | function i(e,t){for(var n=e.split("|"),r=n.length;r--;)C.attrHandle[n[r]...
function s (line 1) | function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.source...
function a (line 1) | function a(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
function u (line 1) | function u(e){return function(t){var n=t.nodeName.toLowerCase();return("...
function c (line 1) | function c(e){return function(t){return"form"in t?t.parentNode&&t.disabl...
function l (line 1) | function l(e){return r(function(t){return t=+t,r(function(n,r){for(var o...
function f (line 1) | function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function p (line 1) | function p(){}
function h (line 1) | function h(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function d (line 1) | function d(e,t,n){var r=t.dir,o=t.next,i=o||r,s=n&&"parentNode"===i,a=_+...
function g (line 1) | function g(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)...
function m (line 1) | function m(e,n,r){for(var o=0,i=n.length;o<i;o++)t(e,n[o],r);return r}
function v (line 1) | function v(e,t,n,r,o){for(var i,s=[],a=0,u=e.length,c=null!=t;a<u;a++)(i...
function y (line 1) | function y(e,t,n,o,i,s){return o&&!o[$]&&(o=y(o)),i&&!i[$]&&(i=y(i,s)),r...
function x (line 1) | function x(e){for(var t,n,r,o=e.length,i=C.relative[e[0].type],s=i||C.re...
function b (line 1) | function b(e,n){var o=n.length>0,i=e.length>0,s=function(r,s,a,u,c){var ...
function i (line 2) | function i(t,n,r,o){return function(){var c=this,l=arguments,f=function(...
function t (line 2) | function t(){if(a){a.style.cssText="box-sizing:border-box;position:relat...
function r (line 3) | function r(t,n,r,a){var c,p,h,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),o=vo...
function t (line 3) | function t(e,t){for(var n=0,r=e.length-1;r>=0;r--){var o=e[r];"."===o?e....
function r (line 3) | function r(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r<e.leng...
function r (line 3) | function r(e){for(var t=0;t<e.length&&""===e[t];t++);for(var n=e.length-...
function r (line 3) | function r(){throw new Error("setTimeout has not been defined")}
function o (line 3) | function o(){throw new Error("clearTimeout has not been defined")}
function i (line 3) | function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&s...
function s (line 3) | function s(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&...
function a (line 3) | function a(){m&&d&&(m=!1,d.length?g=d.concat(g):v=-1,g.length&&u())}
function u (line 3) | function u(){if(!m){var e=i(a);m=!0;for(var t=g.length;t;){for(d=g,g=[];...
function c (line 3) | function c(e,t){this.fun=e,this.array=t}
function l (line 3) | function l(){}
function o (line 3) | function o(e){throw new RangeError(L[e])}
function i (line 3) | function i(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}
function s (line 3) | function s(e,t){var n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),...
function a (line 3) | function a(e){for(var t,n,r=[],o=0,i=e.length;o<i;)t=e.charCodeAt(o++),t...
function u (line 3) | function u(e){return i(e,function(e){var t="";return e>65535&&(e-=65536,...
function c (line 3) | function c(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:T}
function l (line 3) | function l(e,t){return e+22+75*(e<26)-((0!=t)<<5)}
function f (line 3) | function f(e,t,n){var r=0;for(e=n?F(e/E):e>>1,e+=F(e/t);e>H*j>>1;r+=T)e=...
function p (line 3) | function p(e){var t,n,r,i,s,a,l,p,h,d,g=[],m=e.length,v=0,y=N,x=S;for(n=...
function h (line 3) | function h(e){var t,n,r,i,s,u,c,p,h,d,g,m,v,y,x,b=[];for(e=a(e),m=e.leng...
function d (line 3) | function d(e){return s(e,function(e){return q.test(e)?p(e.slice(4).toLow...
function g (line 3) | function g(e){return s(e,function(e){return D.test(e)?"xn--"+h(e):e})}
function r (line 3) | function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function r (line 3) | function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++...
function r (line 3) | function r(){this.protocol=null,this.slashes=null,this.auth=null,this.ho...
function o (line 3) | function o(e,t,n){if(e&&c.isObject(e)&&e instanceof r)return e;var o=new...
function i (line 4) | function i(e){return c.isString(e)&&(e=o(e)),e instanceof r?e.format():r...
function s (line 4) | function s(e,t){return o(e,!1,!0).resolve(t)}
function a (line 4) | function a(e,t){return e?o(e,!1,!0).resolveObject(t):t}
function r (line 4) | function r(e){console.log("page has changed",e),o(e),l||(l=!0,c.trigger(...
function o (line 4) | function o(e){f.page=e.page,f.file=e.file,f.gitbook=e.gitbook,f.config=e...
function i (line 4) | function i(){return f}
FILE: src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/theme.js
function o (line 1) | function o(a,s){if(!n[a]){if(!t[a]){var u="function"==typeof require&&re...
function n (line 1) | function n(e,t){t=t||te;var n=t.createElement("script");n.text=e,t.head....
function r (line 1) | function r(e){var t=!!e&&"length"in e&&e.length,n=de.type(e);return"func...
function o (line 1) | function o(e,t,n){return de.isFunction(t)?de.grep(e,function(e,r){return...
function i (line 1) | function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}
function a (line 1) | function a(e){var t={};return de.each(e.match(qe)||[],function(e,n){t[n]...
function s (line 1) | function s(e){return e}
function u (line 1) | function u(e){throw e}
function l (line 1) | function l(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done...
function c (line 1) | function c(){te.removeEventListener("DOMContentLoaded",c),e.removeEventL...
function f (line 1) | function f(){this.expando=de.expando+f.uid++}
function p (line 1) | function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?...
function h (line 1) | function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.rep...
function d (line 1) | function d(e,t,n,r){var o,i=1,a=20,s=r?function(){return r.cur()}:functi...
function g (line 1) | function g(e){var t,n=e.ownerDocument,r=e.nodeName,o=Ue[r];return o?o:(t...
function m (line 1) | function m(e,t){for(var n,r,o=[],i=0,a=e.length;i<a;i++)r=e[i],r.style&&...
function v (line 1) | function v(e,t){var n;return n="undefined"!=typeof e.getElementsByTagNam...
function y (line 1) | function y(e,t){for(var n=0,r=e.length;n<r;n++)Fe.set(e[n],"globalEval",...
function b (line 1) | function b(e,t,n,r,o){for(var i,a,s,u,l,c,f=t.createDocumentFragment(),p...
function x (line 1) | function x(){return!0}
function w (line 1) | function w(){return!1}
function C (line 1) | function C(){try{return te.activeElement}catch(e){}}
function T (line 1) | function T(e,t,n,r,o,i){var a,s;if("object"==typeof t){"string"!=typeof ...
function k (line 1) | function k(e,t){return de.nodeName(e,"table")&&de.nodeName(11!==t.nodeTy...
function j (line 1) | function j(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
function E (line 1) | function E(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribu...
function N (line 1) | function N(e,t){var n,r,o,i,a,s,u,l;if(1===t.nodeType){if(Fe.hasData(e)&...
function S (line 1) | function S(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ze.test(e.ty...
function A (line 1) | function A(e,t,r,o){t=oe.apply([],t);var i,a,s,u,l,c,f=0,p=e.length,h=p-...
function q (line 1) | function q(e,t,n){for(var r,o=t?de.filter(t,e):e,i=0;null!=(r=o[i]);i++)...
function D (line 1) | function D(e,t,n){var r,o,i,a,s=e.style;return n=n||st(e),n&&(a=n.getPro...
function O (line 1) | function O(e,t){return{get:function(){return e()?void delete this.get:(t...
function L (line 1) | function L(e){if(e in pt)return e;for(var t=e[0].toUpperCase()+e.slice(1...
function H (line 1) | function H(e,t,n){var r=$e.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3...
function F (line 1) | function F(e,t,n,r,o){var i,a=0;for(i=n===(r?"border":"content")?4:"widt...
function P (line 1) | function P(e,t,n){var r,o=!0,i=st(e),a="border-box"===de.css(e,"boxSizin...
function I (line 1) | function I(e,t,n,r,o){return new I.prototype.init(e,t,n,r,o)}
function R (line 1) | function R(){dt&&(e.requestAnimationFrame(R),de.fx.tick())}
function M (line 1) | function M(){return e.setTimeout(function(){ht=void 0}),ht=de.now()}
function $ (line 1) | function $(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=_e[r],o[...
function _ (line 1) | function _(e,t,n){for(var r,o=(U.tweeners[t]||[]).concat(U.tweeners["*"]...
function W (line 1) | function W(e,t,n){var r,o,i,a,s,u,l,c,f="width"in t||"height"in t,p=this...
function B (line 1) | function B(e,t){var n,r,o,i,a;for(n in e)if(r=de.camelCase(n),o=t[r],i=e...
function U (line 1) | function U(e,t,n){var r,o,i=0,a=U.prefilters.length,s=de.Deferred().alwa...
function z (line 1) | function z(e){var t=e.match(qe)||[];return t.join(" ")}
function X (line 1) | function X(e){return e.getAttribute&&e.getAttribute("class")||""}
function K (line 1) | function K(e,t,n,r){var o;if(de.isArray(t))de.each(t,function(t,o){n||Et...
function V (line 1) | function V(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
function G (line 1) | function G(e,t,n,r){function o(s){var u;return i[s]=!0,de.each(e[s]||[],...
function Y (line 1) | function Y(e,t){var n,r,o=de.ajaxSettings.flatOptions||{};for(n in t)voi...
function Q (line 1) | function Q(e,t,n){for(var r,o,i,a,s=e.contents,u=e.dataTypes;"*"===u[0];...
function J (line 1) | function J(e,t,n,r){var o,i,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for...
function Z (line 1) | function Z(e){return de.isWindow(e)?e:9===e.nodeType&&e.defaultView}
function t (line 1) | function t(e,t,n,r){var o,i,a,s,u,l,c,p=t&&t.ownerDocument,d=t?t.nodeTyp...
function n (line 1) | function n(){function e(n,r){return t.push(n+" ")>T.cacheLength&&delete ...
function r (line 1) | function r(e){return e[$]=!0,e}
function o (line 1) | function o(e){var t=L.createElement("fieldset");try{return!!e(t)}catch(e...
function i (line 1) | function i(e,t){for(var n=e.split("|"),r=n.length;r--;)T.attrHandle[n[r]...
function a (line 1) | function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.source...
function s (line 1) | function s(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
function u (line 1) | function u(e){return function(t){var n=t.nodeName.toLowerCase();return("...
function l (line 1) | function l(e){return function(t){return"form"in t?t.parentNode&&t.disabl...
function c (line 1) | function c(e){return r(function(t){return t=+t,r(function(n,r){for(var o...
function f (line 1) | function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function p (line 1) | function p(){}
function h (line 1) | function h(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function d (line 1) | function d(e,t,n){var r=t.dir,o=t.next,i=o||r,a=n&&"parentNode"===i,s=B+...
function g (line 1) | function g(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)...
function m (line 1) | function m(e,n,r){for(var o=0,i=n.length;o<i;o++)t(e,n[o],r);return r}
function v (line 1) | function v(e,t,n,r,o){for(var i,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(i...
function y (line 1) | function y(e,t,n,o,i,a){return o&&!o[$]&&(o=y(o)),i&&!i[$]&&(i=y(i,a)),r...
function b (line 1) | function b(e){for(var t,n,r,o=e.length,i=T.relative[e[0].type],a=i||T.re...
function x (line 1) | function x(e,n){var o=n.length>0,i=e.length>0,a=function(r,a,s,u,l){var ...
function i (line 2) | function i(t,n,r,o){return function(){var l=this,c=arguments,f=function(...
function t (line 2) | function t(){if(s){s.style.cssText="box-sizing:border-box;position:relat...
function r (line 3) | function r(t,n,r,s){var l,p,h,x,w,C=n;c||(c=!0,u&&e.clearTimeout(u),o=vo...
function o (line 3) | function o(e,t,n){return e.addEventListener?void e.addEventListener(t,n,...
function i (line 3) | function i(e){if("keypress"==e.type){var t=String.fromCharCode(e.which);...
function a (line 3) | function a(e,t){return e.sort().join(",")===t.sort().join(",")}
function s (line 3) | function s(e){var t=[];return e.shiftKey&&t.push("shift"),e.altKey&&t.pu...
function u (line 3) | function u(e){return e.preventDefault?void e.preventDefault():void(e.ret...
function l (line 3) | function l(e){return e.stopPropagation?void e.stopPropagation():void(e.c...
function c (line 3) | function c(e){return"shift"==e||"ctrl"==e||"alt"==e||"meta"==e}
function f (line 3) | function f(){if(!v){v={};for(var e in y)e>95&&e<112||y.hasOwnProperty(e)...
function p (line 3) | function p(e,t,n){return n||(n=f()[e]?"keydown":"keypress"),"keypress"==...
function h (line 3) | function h(e){return"+"===e?["+"]:(e=e.replace(/\+{2}/g,"+plus"),e.split...
function d (line 3) | function d(e,t){var n,r,o,i=[];for(n=h(e),o=0;o<n.length;++o)r=n[o],w[r]...
function g (line 3) | function g(e,t){return null!==e&&e!==n&&(e===t||g(e.parentNode,t))}
function m (line 3) | function m(e){function t(e){e=e||{};var t,n=!1;for(t in x)e[t]?n=!0:x[t]...
function o (line 3) | function o(e){throw new RangeError(L[e])}
function i (line 3) | function i(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}
function a (line 3) | function a(e,t){var n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),...
function s (line 3) | function s(e){for(var t,n,r=[],o=0,i=e.length;o<i;)t=e.charCodeAt(o++),t...
function u (line 3) | function u(e){return i(e,function(e){var t="";return e>65535&&(e-=65536,...
function l (line 3) | function l(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:C}
function c (line 3) | function c(e,t){return e+22+75*(e<26)-((0!=t)<<5)}
function f (line 3) | function f(e,t,n){var r=0;for(e=n?F(e/E):e>>1,e+=F(e/t);e>H*k>>1;r+=C)e=...
function p (line 3) | function p(e){var t,n,r,i,a,s,c,p,h,d,g=[],m=e.length,v=0,y=S,b=N;for(n=...
function h (line 3) | function h(e){var t,n,r,i,a,u,l,p,h,d,g,m,v,y,b,x=[];for(e=s(e),m=e.leng...
function d (line 3) | function d(e){return a(e,function(e){return q.test(e)?p(e.slice(4).toLow...
function g (line 3) | function g(e){return a(e,function(e){return D.test(e)?"xn--"+h(e):e})}
function r (line 3) | function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function r (line 4) | function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++...
function r (line 4) | function r(){this.protocol=null,this.slashes=null,this.auth=null,this.ho...
function o (line 4) | function o(e,t,n){if(e&&l.isObject(e)&&e instanceof r)return e;var o=new...
function i (line 4) | function i(e){return l.isString(e)&&(e=o(e)),e instanceof r?e.format():r...
function a (line 4) | function a(e,t){return o(e,!1,!0).resolve(t)}
function s (line 4) | function s(e,t){return e?o(e,!1,!0).resolveObject(t):t}
function r (line 4) | function r(e){var t=a(e.currentTarget).parent().find(".dropdown-menu");t...
function o (line 4) | function o(e){a(".dropdown-menu").removeClass("open")}
function i (line 4) | function i(){a(document).on("click",".toggle-dropdown",r),a(document).on...
function r (line 4) | function r(){s.init(),i.init(),o.init(),a.init(),u.createButton({index:0...
function r (line 4) | function r(e,t){i.bind(e,function(e){return t(),!1})}
function o (line 4) | function o(){r(["right"],function(e){a.goNext()}),r(["left"],function(e)...
function r (line 4) | function r(e){return o.state.$book.addClass("is-loading"),e.always(funct...
function r (line 4) | function r(){return w(k.isSmallScreen()?".book-body":".body-inner")}
function o (line 4) | function o(e){var t=r(),n=0;i(e)&&(e&&(n=a(e)),t.unbind("scroll"),t.anim...
function i (line 4) | function i(e){var t=r(),n=t.find(e);return!!n.length}
function a (line 4) | function a(e){var t=r(),n=t.find(".page-inner"),o=t.find(e),i=o.offsetPa...
function s (line 4) | function s(e,t){if(e||t||(e=b.first()),t&&(e=b.length>1?b.filter(functio...
function u (line 4) | function u(e){var t=e.children("a"),n=t.attr("href").split("#")[1];retur...
function l (line 4) | function l(){var e=r(),t=e.scrollTop(),n=e.prop("scrollHeight"),o=e.prop...
function c (line 4) | function c(e,t){var n=C.parse(N),r=C.resolve(window.location.pathname,e)...
function f (line 4) | function f(){var e,t;e=parseInt(w(".body-inner").css("width"),10),t=pars...
function p (line 4) | function p(e){var t=w(".book-body"),n=t.find(".body-inner"),o=n.find(".p...
function h (line 4) | function h(e){return 0===e.button}
function d (line 4) | function d(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}
function g (line 4) | function g(e){var t=w(this),n=t.attr("target");if(!d(e)&&h(e)&&!n){e.sto...
function m (line 4) | function m(){var e=w(".navigation-next").attr("href");e&&c(e,!0)}
function v (line 4) | function v(){var e=w(".navigation-prev").attr("href");e&&c(e,!0)}
function y (line 4) | function y(){w.ajaxSetup({cache:!1}),history.replaceState({path:window.l...
function r (line 4) | function r(e,t){null!=l.state&&o()==e||(null==t&&(t=!0),l.state.$book.to...
function o (line 4) | function o(){return l.state.$book.hasClass("with-summary")}
function i (line 4) | function i(){u.isMobile()||r(l.storage.get("sidebar",!0),!1),s(document)...
function a (line 4) | function a(e){var t=s(".book-summary");t.find("li").each(function(){var ...
function r (line 4) | function r(){return"btn-"+g++}
function o (line 4) | function o(e,t,n,r){var o=e.children(t).length;n<0&&(n=Math.max(0,o+1+n)...
function i (line 4) | function i(e){e.preventDefault()}
function a (line 4) | function a(e){var t=p("<div>",{class:"dropdown-menu",html:'<div class="d...
function s (line 4) | function s(e){return e=p.extend({label:"",icon:"",text:"",position:"left...
function u (line 4) | function u(e){var t,n=p(".book-header"),r=n.find("h1"),i="pull-"+e.posit...
function l (line 4) | function l(){p(".js-toolbar-action").remove(),d.forEach(u)}
function c (line 4) | function c(e){d=p.grep(d,function(t){return t.id!=e}),l()}
function f (line 4) | function f(e){d=p.grep(d,function(t){return e.indexOf(t.id)==-1}),l()}
FILE: src/main/resources/static/admin/dist/js/plugins/particles.js
function draw (line 455) | function draw(){
function init (line 791) | function init(){
function process (line 873) | function process(bubble_param, particles_param, p_obj_bubble, p_obj, id){
function process (line 964) | function process(){
function hexToRgb (line 1441) | function hexToRgb(hex){
function clamp (line 1456) | function clamp(number, min, max) {
function isInArray (line 1460) | function isInArray(value, array) {
FILE: src/main/resources/static/admin/dist/js/profile.js
function validUserNameForUpdate (line 61) | function validUserNameForUpdate(userName, nickName) {
function validPasswordForUpdate (line 88) | function validPasswordForUpdate(originalPassword, newPassword) {
FILE: src/main/resources/static/admin/dist/js/public.js
function isNull (line 8) | function isNull(obj) {
function validLength (line 22) | function validLength(obj, length) {
function isURL (line 35) | function isURL(str_url) {
function validUserName (line 59) | function validUserName(userName) {
function validPhoneNumber (line 72) | function validPhoneNumber(phone) {
function validCN_ENString2_18 (line 85) | function validCN_ENString2_18(str) {
function
Condensed preview — 329 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (8,909K chars).
[
{
"path": ".gitattributes",
"chars": 57,
"preview": "*.js linguist-language=java\n*.css linguist-language=java\n"
},
{
"path": ".gitignore",
"chars": 268,
"preview": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springB"
},
{
"path": "LICENSE",
"chars": 35149,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "README.md",
"chars": 12404,
"preview": "\n- [技术栈](#技术栈)\n- [项目结构](#项目结构)\n- [开发环境搭建](#开发环境搭建)\n- [快速开始](#快速开始)\n- [开发规范](#开"
},
{
"path": "docs/FAQ.md",
"chars": 5115,
"preview": "# newbee-mall 常见问题 FAQ\n\n## 目录\n- [环境配置相关](#环境配置相关)\n- [项目启动相关](#项目启动相关)\n- [功能使用相关](#功能使用相关)\n- [开发调试相关](#开发调试相关)\n- [部署运维相关]"
},
{
"path": "pom.xml",
"chars": 3253,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- @author 13\n @qq交流群 796794009\n @email 2449207463@qq.com\n @lin"
},
{
"path": "src/main/java/ltd/newbee/mall/NewBeeMallApplication.java",
"chars": 710,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/common/Constants.java",
"chars": 1616,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/common/IndexConfigTypeEnum.java",
"chars": 1445,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/common/NewBeeMallCategoryLevelEnum.java",
"chars": 1309,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/common/NewBeeMallException.java",
"chars": 569,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/common/NewBeeMallOrderStatusEnum.java",
"chars": 1618,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/common/PayStatusEnum.java",
"chars": 1230,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/common/PayTypeEnum.java",
"chars": 1201,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/common/ServiceResultEnum.java",
"chars": 1724,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/config/NeeBeeMallWebMvcConfigurer.java",
"chars": 2892,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/admin/AdminController.java",
"chars": 5114,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallCarouselController.java",
"chars": 4106,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallGoodsCategoryController.java",
"chars": 7258,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallGoodsController.java",
"chars": 11686,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallGoodsIndexConfigController.java",
"chars": 4739,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallOrderController.java",
"chars": 4910,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/admin/NewBeeMallUserController.java",
"chars": 2330,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/common/CommonController.java",
"chars": 2112,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/common/ErrorPageController.java",
"chars": 1591,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/common/NewBeeMallExceptionHandler.java",
"chars": 2072,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/common/UploadController.java",
"chars": 6007,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/mall/GoodsController.java",
"chars": 3820,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/mall/IndexController.java",
"chars": 2702,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/mall/OrderController.java",
"chars": 7372,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/mall/PersonalController.java",
"chars": 5361,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/mall/ShoppingCartController.java",
"chars": 5881,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallGoodsDetailVO.java",
"chars": 2091,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallIndexCarouselVO.java",
"chars": 757,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallIndexCategoryVO.java",
"chars": 1333,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallIndexConfigGoodsVO.java",
"chars": 1494,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallOrderDetailVO.java",
"chars": 2938,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallOrderItemVO.java",
"chars": 1345,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallOrderListVO.java",
"chars": 2298,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallSearchGoodsVO.java",
"chars": 1341,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallShoppingCartItemVO.java",
"chars": 1542,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/vo/NewBeeMallUserVO.java",
"chars": 1492,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/vo/SearchPageCategoryVO.java",
"chars": 1895,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/vo/SecondLevelCategoryVO.java",
"chars": 1502,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/controller/vo/ThirdLevelCategoryVO.java",
"chars": 965,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/dao/AdminUserMapper.java",
"chars": 770,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/dao/CarouselMapper.java",
"chars": 908,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/dao/GoodsCategoryMapper.java",
"chars": 1188,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/dao/IndexConfigMapper.java",
"chars": 1085,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/dao/MallUserMapper.java",
"chars": 1045,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/dao/NewBeeMallGoodsMapper.java",
"chars": 1677,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/dao/NewBeeMallOrderItemMapper.java",
"chars": 1198,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/dao/NewBeeMallOrderMapper.java",
"chars": 1219,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/dao/NewBeeMallShoppingCartItemMapper.java",
"chars": 1129,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/entity/AdminUser.java",
"chars": 1904,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/entity/Carousel.java",
"chars": 3108,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/entity/GoodsCategory.java",
"chars": 3319,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/entity/IndexConfig.java",
"chars": 3523,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/entity/MallUser.java",
"chars": 3000,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/entity/NewBeeMallGoods.java",
"chars": 5073,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/entity/NewBeeMallOrder.java",
"chars": 3931,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/entity/NewBeeMallOrderItem.java",
"chars": 2627,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/entity/NewBeeMallShoppingCartItem.java",
"chars": 2231,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/entity/StockNumDTO.java",
"chars": 644,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/interceptor/AdminLoginInterceptor.java",
"chars": 1648,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/interceptor/NewBeeMallCartNumberInterceptor.java",
"chars": 2165,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/interceptor/NewBeeMallLoginInterceptor.java",
"chars": 1484,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/service/AdminUserService.java",
"chars": 951,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/service/NewBeeMallCarouselService.java",
"chars": 945,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/service/NewBeeMallCategoryService.java",
"chars": 1379,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/service/NewBeeMallGoodsService.java",
"chars": 1383,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/service/NewBeeMallIndexConfigService.java",
"chars": 997,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/service/NewBeeMallOrderService.java",
"chars": 2311,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/service/NewBeeMallShoppingCartService.java",
"chars": 1348,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/service/NewBeeMallUserService.java",
"chars": 1316,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/service/impl/AdminUserServiceImpl.java",
"chars": 2356,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/service/impl/NewBeeMallCarouselServiceImpl.java",
"chars": 3079,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/service/impl/NewBeeMallCategoryServiceImpl.java",
"chars": 9213,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/service/impl/NewBeeMallGoodsServiceImpl.java",
"chars": 6221,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/service/impl/NewBeeMallIndexConfigServiceImpl.java",
"chars": 5068,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/service/impl/NewBeeMallOrderServiceImpl.java",
"chars": 21705,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/service/impl/NewBeeMallShoppingCartServiceImpl.java",
"chars": 7322,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/service/impl/NewBeeMallUserServiceImpl.java",
"chars": 4442,
"preview": "/**\n * 严肃声明:\n * 开源版本请务必保留此注释头信息,若删除我方将保留所有法律责任追究!\n * 本系统已申请软件著作权,受国家版权局知识产权以及国家计算机软件著作权保护!\n * 可正常分享和学习源码,不得用于违法犯罪活动,违者必究"
},
{
"path": "src/main/java/ltd/newbee/mall/util/BeanUtil.java",
"chars": 3292,
"preview": "package ltd.newbee.mall.util;\n\nimport org.springframework.beans.BeanUtils;\nimport org.springframework.beans.BeanWrapper;"
},
{
"path": "src/main/java/ltd/newbee/mall/util/JsonUtil.java",
"chars": 935,
"preview": "package ltd.newbee.mall.util;\n\n\nimport java.io.IOException;\n\nimport com.fasterxml.jackson.core.JsonParseException;\nimpor"
},
{
"path": "src/main/java/ltd/newbee/mall/util/MD5Util.java",
"chars": 1447,
"preview": "package ltd.newbee.mall.util;\n\nimport java.security.MessageDigest;\n\n/**\n * @author 13\n * @qq交流群 796794009\n * @email 2449"
},
{
"path": "src/main/java/ltd/newbee/mall/util/NewBeeMallUtils.java",
"chars": 2164,
"preview": "package ltd.newbee.mall.util;\n\nimport org.springframework.util.StringUtils;\n\nimport java.net.URI;\n\n/**\n * @author 13\n */"
},
{
"path": "src/main/java/ltd/newbee/mall/util/NumberUtil.java",
"chars": 1271,
"preview": "package ltd.newbee.mall.util;\n\nimport java.util.regex.Matcher;\nimport java.util.regex.Pattern;\n\n/**\n * @author 13\n * @qq"
},
{
"path": "src/main/java/ltd/newbee/mall/util/PageQueryUtil.java",
"chars": 1131,
"preview": "package ltd.newbee.mall.util;\n\nimport java.util.LinkedHashMap;\nimport java.util.Map;\n\n/**\n * 分页查询参数\n *\n * @author 13\n * "
},
{
"path": "src/main/java/ltd/newbee/mall/util/PageResult.java",
"chars": 1638,
"preview": "package ltd.newbee.mall.util;\n\nimport java.io.Serializable;\nimport java.util.List;\n\n/**\n * 分页工具类\n *\n * @author 13\n * @qq"
},
{
"path": "src/main/java/ltd/newbee/mall/util/PatternUtil.java",
"chars": 1515,
"preview": "package ltd.newbee.mall.util;\n\nimport java.util.regex.Matcher;\nimport java.util.regex.Pattern;\n\n/**\n * 正则工具类\n *\n * @auth"
},
{
"path": "src/main/java/ltd/newbee/mall/util/Result.java",
"chars": 1165,
"preview": "package ltd.newbee.mall.util;\n\nimport java.io.Serializable;\n\n/**\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@"
},
{
"path": "src/main/java/ltd/newbee/mall/util/ResultGenerator.java",
"chars": 1727,
"preview": "package ltd.newbee.mall.util;\n\nimport org.springframework.util.StringUtils;\n\n/**\n * 响应结果生成工具\n *\n * @author 13\n * @qq交流群 "
},
{
"path": "src/main/java/ltd/newbee/mall/util/SystemUtil.java",
"chars": 950,
"preview": "package ltd.newbee.mall.util;\n\nimport java.math.BigInteger;\nimport java.security.MessageDigest;\n\n/**\n * @author 13\n * @q"
},
{
"path": "src/main/resources/application.properties",
"chars": 939,
"preview": "# author 13\n# qq-group 796794009\n# email 2449207463@qq.com\n# link https://github.com/newbee-ltd\n\nserver.port=28089\nsprin"
},
{
"path": "src/main/resources/mapper/AdminUserMapper.xml",
"chars": 3799,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "src/main/resources/mapper/CarouselMapper.xml",
"chars": 7252,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "src/main/resources/mapper/GoodsCategoryMapper.xml",
"chars": 9085,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "src/main/resources/mapper/IndexConfigMapper.xml",
"chars": 8910,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "src/main/resources/mapper/MallUserMapper.xml",
"chars": 7522,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "src/main/resources/mapper/NewBeeMallGoodsMapper.xml",
"chars": 17094,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "src/main/resources/mapper/NewBeeMallOrderItemMapper.xml",
"chars": 6892,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "src/main/resources/mapper/NewBeeMallOrderMapper.xml",
"chars": 11849,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "src/main/resources/mapper/NewBeeMallShoppingCartItemMapper.xml",
"chars": 6262,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "src/main/resources/newbee_mall_schema.sql",
"chars": 213962,
"preview": "-- ----------------------------\n-- Copyright (c) 2019-2020 十三 all rights reserved.\n-- ----------------------------\n\nSET "
},
{
"path": "src/main/resources/static/admin/dist/css/adminlte.css",
"chars": 252475,
"preview": "/*!\n * AdminLTE v3.0.0-alpha\n * Author: Abdullah Almsaeed\n *\t Website: AdminLTE.io <http://adminlte.io>\n * License"
},
{
"path": "src/main/resources/static/admin/dist/css/main.css",
"chars": 1631,
"preview": "html { overflow-x:hidden; }\n.content-header {\n\tposition: relative;\n\tpadding: 0 0 3px 8px\n}\n\n.content-header>.breadcrumb "
},
{
"path": "src/main/resources/static/admin/dist/js/adminlte.js",
"chars": 19717,
"preview": "/*!\n * AdminLTE v3.0.0-alpha (https://adminlte.io)\n * Copyright 2014-2018 Abdullah Almsaeed <abdullah@almsaeedstudio.com"
},
{
"path": "src/main/resources/static/admin/dist/js/demo.js",
"chars": 5209,
"preview": "/**\n * AdminLTE Demo Menu\n * ------------------\n * You should not use this file in production.\n * This file is for demo "
},
{
"path": "src/main/resources/static/admin/dist/js/newbee_mall_carousel.js",
"chars": 6539,
"preview": "$(function () {\n $(\"#jqGrid\").jqGrid({\n url: '/admin/carousels/list',\n datatype: \"json\",\n colMod"
},
{
"path": "src/main/resources/static/admin/dist/js/newbee_mall_category.js",
"chars": 6795,
"preview": "$(function () {\n var categoryLevel = $(\"#categoryLevel\").val();\n var parentId = $(\"#parentId\").val();\n\n $(\"#jqG"
},
{
"path": "src/main/resources/static/admin/dist/js/newbee_mall_goods.js",
"chars": 5345,
"preview": "$(function () {\n $(\"#jqGrid\").jqGrid({\n url: '/admin/goods/list',\n datatype: \"json\",\n colModel: "
},
{
"path": "src/main/resources/static/admin/dist/js/newbee_mall_goods_edit.js",
"chars": 11189,
"preview": "var editor;\n\n$(function () {\n\n //富文本编辑器 用于商品详情编辑\n const E = window.wangEditor;\n\n const editorConfig = { MENU_CO"
},
{
"path": "src/main/resources/static/admin/dist/js/newbee_mall_index_config.js",
"chars": 5857,
"preview": "$(function () {\n var configType = $(\"#configType\").val();\n\n $(\"#jqGrid\").jqGrid({\n url: '/admin/indexConfig"
},
{
"path": "src/main/resources/static/admin/dist/js/newbee_mall_order.js",
"chars": 11529,
"preview": "$(function () {\n $(\"#jqGrid\").jqGrid({\n url: '/admin/orders/list',\n datatype: \"json\",\n colModel:"
},
{
"path": "src/main/resources/static/admin/dist/js/newbee_mall_user.js",
"chars": 3875,
"preview": "$(function () {\n $(\"#jqGrid\").jqGrid({\n url: '/admin/users/list',\n datatype: \"json\",\n colModel: "
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/bootstrap/css/bootstrap-grid.css",
"chars": 0,
"preview": ""
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/bootstrap/css/bootstrap-reboot.css",
"chars": 0,
"preview": ""
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/bootstrap/css/bootstrap.css",
"chars": 0,
"preview": ""
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/bootstrap/js/bootstrap.bundle.js",
"chars": 0,
"preview": ""
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/bootstrap/js/bootstrap.js",
"chars": 0,
"preview": ""
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chart.js",
"chars": 208221,
"preview": "/*!\n * Chart.js\n * http://chartjs.org/\n * Version: 2.7.1\n *\n * Copyright 2017 Nick Downie\n * Released under the MIT lice"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chart.js2",
"chars": 208221,
"preview": "/*!\n * Chart.js\n * http://chartjs.org/\n * Version: 2.7.1\n *\n * Copyright 2017 Nick Downie\n * Released under the MIT lice"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/Chart.bundle.js",
"chars": 527128,
"preview": "/*!\n * Chart.js\n * http://chartjs.org/\n * Version: 2.7.1\n *\n * Copyright 2017 Nick Downie\n * Released under the MIT lice"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/Chart.js",
"chars": 398183,
"preview": "/*!\n * Chart.js\n * http://chartjs.org/\n * Version: 2.7.1\n *\n * Copyright 2017 Nick Downie\n * Released under the MIT lice"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/axes/cartesian/category.html",
"chars": 22501,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/axes/cartesian/index.html",
"chars": 27054,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/axes/cartesian/linear.html",
"chars": 22550,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/axes/cartesian/logarithmic.html",
"chars": 18618,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/axes/cartesian/time.html",
"chars": 25846,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/axes/index.html",
"chars": 22869,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/axes/labelling.html",
"chars": 20805,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/axes/radial/index.html",
"chars": 18021,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/axes/radial/linear.html",
"chars": 26456,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/axes/styling.html",
"chars": 26827,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/charts/area.html",
"chars": 22347,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/charts/bar.html",
"chars": 28301,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/charts/bubble.html",
"chars": 24394,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/charts/doughnut.html",
"chars": 23137,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/charts/index.html",
"chars": 17902,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/charts/line.html",
"chars": 31937,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/charts/mixed.html",
"chars": 21120,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/charts/polar.html",
"chars": 22117,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/charts/radar.html",
"chars": 24963,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/charts/scatter.html",
"chars": 19161,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/configuration/animations.html",
"chars": 22953,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/configuration/elements.html",
"chars": 26089,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/configuration/index.html",
"chars": 19475,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/configuration/layout.html",
"chars": 18838,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/configuration/legend.html",
"chars": 27363,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/configuration/title.html",
"chars": 20067,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/configuration/tooltip.html",
"chars": 41012,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/developers/api.html",
"chars": 27569,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/developers/axes.html",
"chars": 26537,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/developers/charts.html",
"chars": 24591,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/developers/contributing.html",
"chars": 21855,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/developers/index.html",
"chars": 19754,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/developers/plugins.html",
"chars": 22664,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/developers/updates.html",
"chars": 18753,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/general/colors.html",
"chars": 21181,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/general/device-pixel-ratio.md",
"chars": 808,
"preview": "# Device Pixel Ratio\n\nBy default the chart's canvas will use a 1:1 pixel ratio, unless the physical display has a higher"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/general/fonts.html",
"chars": 20404,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/general/index.html",
"chars": 18133,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/general/interactions/events.html",
"chars": 19580,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/general/interactions/index.html",
"chars": 19152,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/general/interactions/modes.html",
"chars": 22621,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/general/options.html",
"chars": 20288,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/general/responsive.html",
"chars": 22324,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/getting-started/index.html",
"chars": 20417,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/getting-started/installation.html",
"chars": 21486,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/getting-started/integration.html",
"chars": 19721,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/getting-started/usage.html",
"chars": 23075,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-anchorjs/anchor-style.js",
"chars": 188,
"preview": "gitbook.events.bind('start', function(e, config) {\n anchors.options = config.anchorjs || {};\n});\n\ngitbook.events.bind"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-chartjs/Chart.bundle.js",
"chars": 483196,
"preview": "/*!\n * Chart.js\n * http://chartjs.org/\n * Version: 2.5.0\n *\n * Copyright 2017 Nick Downie\n * Released under the MIT lice"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-chartjs/Chart.js",
"chars": 359738,
"preview": "/*!\n * Chart.js\n * http://chartjs.org/\n * Version: 2.5.0\n *\n * Copyright 2017 Nick Downie\n * Released under the MIT lice"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-chartjs/chartjs-plugin-deferred.js",
"chars": 5211,
"preview": "/*!\n * chartjs-plugin-deferred\n * http://chartjs.org/\n * Version: 0.2.0\n *\n * Copyright 2016 Simon Brunel\n * Released un"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-chartjs/style.css",
"chars": 137,
"preview": ".chartjs-wrapper canvas {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-fontsettings/fontsettings.js",
"chars": 6447,
"preview": "require(['gitbook', 'jquery'], function(gitbook, $) {\n // Configuration\n var MAX_SIZE = 4,\n MIN_SIZE "
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-fontsettings/website.css",
"chars": 8596,
"preview": "/*\n * Theme 1\n */\n.color-theme-1 .dropdown-menu {\n background-color: #111111;\n border-color: #7e888b;\n}\n.color-theme-1"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-ga/plugin.js",
"chars": 725,
"preview": "require([\"gitbook\"], function(gitbook) {\n // Load analytics.js\n gitbook.events.bind(\"start\", function(e, config) {"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-highlight/ebook.css",
"chars": 2865,
"preview": "pre,\ncode {\n /* http://jmblog.github.io/color-themes-for-highlightjs */\n /* Tomorrow Comment */\n /* Tomorrow Red */\n "
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-highlight/website.css",
"chars": 31446,
"preview": ".book .book-body .page-wrapper .page-inner section.normal pre,\n.book .book-body .page-wrapper .page-inner section.normal"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-search-plus/search.css",
"chars": 1199,
"preview": "/*\n This CSS only styled the search results section, not the search input\n It defines the basic interraction to hi"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-search-plus/search.js",
"chars": 6841,
"preview": "require([\n 'gitbook',\n 'jquery'\n], function (gitbook, $) {\n var MAX_DESCRIPTION_SIZE = 500\n var state = gitbook.stat"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook-plugin-sharing/buttons.js",
"chars": 2875,
"preview": "require(['gitbook', 'jquery'], function(gitbook, $) {\n var SITES = {\n 'facebook': {\n 'label': 'Face"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/gitbook.js",
"chars": 105321,
"preview": "!function e(t,n,r){function o(s,a){if(!n[s]){if(!t[s]){var u=\"function\"==typeof require&&require;if(!a&&u)return u(s,!0)"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/style.css",
"chars": 52710,
"preview": "/*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/gitbook/theme.js",
"chars": 113097,
"preview": "!function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var u=\"function\"==typeof require&&require;if(!s&&u)return u(a,!0)"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/index.html",
"chars": 22015,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/notes/comparison.html",
"chars": 19996,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/notes/extensions.html",
"chars": 21174,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/notes/index.html",
"chars": 17585,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/notes/license.html",
"chars": 17348,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=utf"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/search_plus_index.json",
"chars": 129509,
"preview": "{\"./\":{\"url\":\"./\",\"title\":\"Chart.js\",\"keywords\":\"\",\"body\":\"Chart.js Installation You can download the latest version of "
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/chartjs2/docs/style.css",
"chars": 265,
"preview": "a.anchorjs-link {\n color: rgba(65, 131, 196, 0.1);\n font-weight: 400;\n text-decoration: none;\n transition: c"
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/font-awesome/css/font-awesome.css",
"chars": 0,
"preview": ""
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/font-awesome/fonts/FontAwesome.otf",
"chars": 0,
"preview": ""
},
{
"path": "src/main/resources/static/admin/dist/js/plugins/jquery/core.js",
"chars": 0,
"preview": ""
}
]
// ... and 129 more files (download for full content)
About this extraction
This page contains the full source code of the newbee-ltd/newbee-mall GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 329 files (7.9 MB), approximately 2.1M tokens, and a symbol index with 3880 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.