Full Code of 18391713434/GMall for AI

master 249011456c26 cached
765 files
4.6 MB
1.2M tokens
1828 symbols
1 requests
Download .txt
Showing preview only (5,019K chars total). Download the full file or copy to clipboard to get everything.
Repository: 18391713434/GMall
Branch: master
Commit: 249011456c26
Files: 765
Total size: 4.6 MB

Directory structure:
gitextract_t0grgfaf/

├── .gitattributes
├── README.md
├── gmall-admin/
│   └── gmall-admin/
│       ├── .babelrc
│       ├── .editorconfig
│       ├── .eslintignore
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .postcssrc.js
│       ├── .travis.yml
│       ├── LICENSE
│       ├── README-zh.md
│       ├── README.md
│       ├── build/
│       │   ├── build.js
│       │   ├── check-versions.js
│       │   ├── utils.js
│       │   ├── vue-loader.conf.js
│       │   ├── webpack.base.conf.js
│       │   ├── webpack.dev.conf.js
│       │   └── webpack.prod.conf.js
│       ├── config/
│       │   ├── dev.env.js
│       │   ├── dev.env.js.bak
│       │   ├── index.js
│       │   ├── index.js.bak
│       │   └── prod.env.js
│       ├── index.html
│       ├── package.json
│       ├── src/
│       │   ├── App.vue
│       │   ├── api/
│       │   │   ├── baseinfo/
│       │   │   │   └── prop.js
│       │   │   ├── components/
│       │   │   │   └── CatalogSelector.js
│       │   │   ├── login.js
│       │   │   ├── product/
│       │   │   │   ├── sku.js
│       │   │   │   └── spu.js
│       │   │   └── table.js
│       │   ├── components/
│       │   │   ├── Breadcrumb/
│       │   │   │   └── index.vue
│       │   │   ├── Hamburger/
│       │   │   │   └── index.vue
│       │   │   └── SvgIcon/
│       │   │       └── index.vue
│       │   ├── icons/
│       │   │   ├── index.js
│       │   │   └── svgo.yml
│       │   ├── main.js
│       │   ├── permission.js
│       │   ├── router/
│       │   │   └── index.js
│       │   ├── store/
│       │   │   ├── getters.js
│       │   │   ├── index.js
│       │   │   └── modules/
│       │   │       ├── app.js
│       │   │       └── user.js
│       │   ├── styles/
│       │   │   ├── element-ui.scss
│       │   │   ├── index.scss
│       │   │   ├── mixin.scss
│       │   │   ├── sidebar.scss
│       │   │   ├── transition.scss
│       │   │   └── variables.scss
│       │   ├── utils/
│       │   │   ├── auth.js
│       │   │   ├── index.js
│       │   │   ├── request.js
│       │   │   └── validate.js
│       │   └── views/
│       │       ├── 404.vue
│       │       ├── baseinfo/
│       │       │   └── prop/
│       │       │       └── list.vue
│       │       ├── components/
│       │       │   └── CatalogSelector.vue
│       │       ├── dashboard/
│       │       │   └── index.vue
│       │       ├── form/
│       │       │   └── index.vue
│       │       ├── layout/
│       │       │   ├── Layout.vue
│       │       │   ├── components/
│       │       │   │   ├── AppMain.vue
│       │       │   │   ├── Navbar.vue
│       │       │   │   ├── Sidebar/
│       │       │   │   │   ├── Item.vue
│       │       │   │   │   ├── Link.vue
│       │       │   │   │   ├── SidebarItem.vue
│       │       │   │   │   └── index.vue
│       │       │   │   └── index.js
│       │       │   └── mixin/
│       │       │       └── ResizeHandler.js
│       │       ├── login/
│       │       │   └── index.vue
│       │       ├── nested/
│       │       │   ├── menu1/
│       │       │   │   ├── index.vue
│       │       │   │   ├── menu1-1/
│       │       │   │   │   └── index.vue
│       │       │   │   ├── menu1-2/
│       │       │   │   │   ├── index.vue
│       │       │   │   │   ├── menu1-2-1/
│       │       │   │   │   │   └── index.vue
│       │       │   │   │   └── menu1-2-2/
│       │       │   │   │       └── index.vue
│       │       │   │   └── menu1-3/
│       │       │   │       └── index.vue
│       │       │   └── menu2/
│       │       │       └── index.vue
│       │       ├── product/
│       │       │   ├── components/
│       │       │   │   ├── SkuForm.vue
│       │       │   │   ├── SpuForm.vue
│       │       │   │   └── SpuForm.vue.bak
│       │       │   └── spu/
│       │       │       ├── list.vue
│       │       │       └── list.vue.bak
│       │       ├── table/
│       │       │   └── index.vue
│       │       └── tree/
│       │           └── index.vue
│       └── static/
│           └── .gitkeep
├── gmall-api/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           ├── entity/
│                           │   ├── Member.java
│                           │   ├── MemberReceiveAddress.java
│                           │   ├── OmsCartItem.java
│                           │   ├── OmsCompanyAddress.java
│                           │   ├── OmsOrder.java
│                           │   ├── OmsOrderItem.java
│                           │   ├── PaymentInfo.java
│                           │   ├── PmsBaseAttrInfo.java
│                           │   ├── PmsBaseAttrValue.java
│                           │   ├── PmsBaseCatalog1.java
│                           │   ├── PmsBaseCatalog2.java
│                           │   ├── PmsBaseCatalog3.java
│                           │   ├── PmsBaseSaleAttr.java
│                           │   ├── PmsProductImage.java
│                           │   ├── PmsProductInfo.java
│                           │   ├── PmsProductSaleAttr.java
│                           │   ├── PmsProductSaleAttrValue.java
│                           │   ├── PmsSearchCrumb.java
│                           │   ├── PmsSearchParam.java
│                           │   ├── PmsSearchSkuInfo.java
│                           │   ├── PmsSkuAttrValue.java
│                           │   ├── PmsSkuImage.java
│                           │   ├── PmsSkuInfo.java
│                           │   ├── PmsSkuSaleAttrValue.java
│                           │   └── UmsMemberLevel.java
│                           └── service/
│                               ├── AttrService.java
│                               ├── CartService.java
│                               ├── CataLogService.java
│                               ├── MemberReceiveAddressService.java
│                               ├── OrderItemService.java
│                               ├── OrderService.java
│                               ├── PaymentService.java
│                               ├── SearchService.java
│                               ├── SkuService.java
│                               ├── SpuService.java
│                               └── UserService.java
├── gmall-cart-service/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallCartServiceApplication.java
│       │   │               ├── mapper/
│       │   │               │   └── CartMapper.java
│       │   │               └── service/
│       │   │                   └── impl/
│       │   │                       └── CartServiceImpl.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       └── mapper/
│       │           └── CartMapper.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallCartServiceApplicationTests.java
├── gmall-cart-web/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallCartWebApplication.java
│       │   │               └── controller/
│       │   │                   └── CartController.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       ├── static/
│       │       │   ├── bootstrap/
│       │       │   │   ├── css/
│       │       │   │   │   └── bootstrap.css
│       │       │   │   └── js/
│       │       │   │       └── bootstrap.js
│       │       │   ├── css/
│       │       │   │   ├── One_bdyStyle.css
│       │       │   │   ├── One_mainFoot.css
│       │       │   │   ├── font-awesome-4.7.0/
│       │       │   │   │   ├── HELP-US-OUT.txt
│       │       │   │   │   ├── css/
│       │       │   │   │   │   └── font-awesome.css
│       │       │   │   │   ├── fonts/
│       │       │   │   │   │   └── FontAwesome.otf
│       │       │   │   │   ├── less/
│       │       │   │   │   │   ├── animated.less
│       │       │   │   │   │   ├── bordered-pulled.less
│       │       │   │   │   │   ├── core.less
│       │       │   │   │   │   ├── fixed-width.less
│       │       │   │   │   │   ├── font-awesome.less
│       │       │   │   │   │   ├── icons.less
│       │       │   │   │   │   ├── larger.less
│       │       │   │   │   │   ├── list.less
│       │       │   │   │   │   ├── mixins.less
│       │       │   │   │   │   ├── path.less
│       │       │   │   │   │   ├── rotated-flipped.less
│       │       │   │   │   │   ├── screen-reader.less
│       │       │   │   │   │   ├── stacked.less
│       │       │   │   │   │   └── variables.less
│       │       │   │   │   └── scss/
│       │       │   │   │       ├── _animated.scss
│       │       │   │   │       ├── _bordered-pulled.scss
│       │       │   │   │       ├── _core.scss
│       │       │   │   │       ├── _fixed-width.scss
│       │       │   │   │       ├── _icons.scss
│       │       │   │   │       ├── _larger.scss
│       │       │   │   │       ├── _list.scss
│       │       │   │   │       ├── _mixins.scss
│       │       │   │   │       ├── _path.scss
│       │       │   │   │       ├── _rotated-flipped.scss
│       │       │   │   │       ├── _screen-reader.scss
│       │       │   │   │       ├── _stacked.scss
│       │       │   │   │       ├── _variables.scss
│       │       │   │   │       └── font-awesome.scss
│       │       │   │   ├── index.css
│       │       │   │   └── success.css
│       │       │   ├── js/
│       │       │   │   ├── index.js
│       │       │   │   └── success.js
│       │       │   └── success.html
│       │       └── templates/
│       │           ├── One_JDshop.html
│       │           ├── cartList.html
│       │           ├── cartListInner.html
│       │           └── success.html
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallCartWebApplicationTests.java
├── gmall-common-util/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── util/
│                               └── HttpclientUtil.java
├── gmall-item-web/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallItemWebApplication.java
│       │   │               └── controller/
│       │   │                   └── ItemController.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       ├── static/
│       │       │   ├── bootstrap/
│       │       │   │   ├── css/
│       │       │   │   │   └── bootstrap.css
│       │       │   │   └── js/
│       │       │   │       └── bootstrap.js
│       │       │   ├── js/
│       │       │   │   ├── index.js
│       │       │   │   ├── jquery1.9.js
│       │       │   │   ├── js.js
│       │       │   │   └── spuId_66.js
│       │       │   └── scss/
│       │       │       ├── SHOUhou.css
│       │       │       ├── header.css
│       │       │       ├── main.css
│       │       │       └── shop.css
│       │       └── templates/
│       │           └── item.html
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallItemWebApplicationTests.java
├── gmall-manage-service/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallManageServiceApplication.java
│       │   │               ├── mapper/
│       │   │               │   ├── AttrInfoMapper.java
│       │   │               │   ├── AttrValueMapper.java
│       │   │               │   ├── BaseSaleAttrMapper.java
│       │   │               │   ├── CataLog1Mapper.java
│       │   │               │   ├── CataLog2Mapper.java
│       │   │               │   ├── CataLog3Mapper.java
│       │   │               │   ├── ImageMapper.java
│       │   │               │   ├── SaleAttrMapper.java
│       │   │               │   ├── SaleAttrValueMapper.java
│       │   │               │   ├── SkuAttrValueMapper.java
│       │   │               │   ├── SkuImageMapper.java
│       │   │               │   ├── SkuInfoMapper.java
│       │   │               │   ├── SkuSaleAttrValueMapper.java
│       │   │               │   └── SpuMapper.java
│       │   │               └── service/
│       │   │                   └── impl/
│       │   │                       ├── AttrServiceImpl.java
│       │   │                       ├── CataLogServiceImpl.java
│       │   │                       ├── SkuServiceImpl.java
│       │   │                       └── SpuServiceImpl.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       └── mapper/
│       │           ├── AttrInfoMapper.xml
│       │           ├── AttrValueMapper.xml
│       │           ├── CataLog1Mapper.xml
│       │           ├── CataLog2Mapper.xml
│       │           ├── CataLog3Mapper.xml
│       │           ├── SaleAttrMapper.xml
│       │           ├── SkuInfoMapper.xml
│       │           └── SpuMapper.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           ├── CodeGenerator.java
│                           └── GmallManageServiceApplicationTests.java
├── gmall-manage-web/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallManageWebApplication.java
│       │   │               ├── controller/
│       │   │               │   ├── AttrController.java
│       │   │               │   ├── CataLogController.java
│       │   │               │   ├── SkuController.java
│       │   │               │   └── SpuController.java
│       │   │               └── util/
│       │   │                   └── PmsUploadUtil.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       └── tracker.conf
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           ├── GmallManageWebApplicationTests.java
│                           └── UrlCrawBoke.java
├── gmall-order-service/
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallOrderServiceApplication.java
│       │   │               ├── OrderServiceMqListener.java
│       │   │               ├── mapper/
│       │   │               │   ├── OrderItemMapper.java
│       │   │               │   └── OrderMapper.java
│       │   │               └── service/
│       │   │                   └── impl/
│       │   │                       ├── OrderItemServiceImpl.java
│       │   │                       └── OrderServiceImpl.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       └── mapper/
│       │           ├── OrderItemMapper.xml
│       │           └── OrderMapper.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallOrderServiceApplicationTests.java
├── gmall-order-web/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallOrderWebApplication.java
│       │   │               └── controller/
│       │   │                   └── OrderController.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       ├── static/
│       │       │   ├── css/
│       │       │   │   ├── JD2.css
│       │       │   │   ├── index.css
│       │       │   │   ├── list.css
│       │       │   │   └── style.css
│       │       │   └── js/
│       │       │       └── list.js
│       │       └── templates/
│       │           ├── list.html
│       │           ├── trade.html
│       │           └── tradeFail.html
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallOrderWebApplicationTests.java
├── gmall-parent/
│   └── pom.xml
├── gmall-passport-web/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallPassportWebApplication.java
│       │   │               └── controller/
│       │   │                   └── PassportController.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       ├── static/
│       │       │   ├── css/
│       │       │   │   ├── gm1.css
│       │       │   │   └── gm1.css.bak
│       │       │   └── js/
│       │       │       └── zepto.js
│       │       └── templates/
│       │           └── index.html
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallPassportWebApplicationTests.java
├── gmall-payment/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallPaymentApplication.java
│       │   │               ├── PaymentServiceMqListener.java
│       │   │               ├── config/
│       │   │               │   └── AlipayConfig.java
│       │   │               ├── controller/
│       │   │               │   └── PaymentController.java
│       │   │               ├── mapper/
│       │   │               │   └── PaymentMapper.java
│       │   │               └── service/
│       │   │                   └── impl/
│       │   │                       └── PaymentServiceImpl.java
│       │   └── resources/
│       │       ├── alipay.properties
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       ├── static/
│       │       │   └── css/
│       │       │       └── style.css
│       │       └── templates/
│       │           ├── finish.html
│       │           ├── index.html
│       │           └── paymentindex.html
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallPaymentApplicationTests.java
├── gmall-search-service/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallSearchServiceApplication.java
│       │   │               └── service/
│       │   │                   └── impl/
│       │   │                       └── SearchServiceImpl.java
│       │   └── resources/
│       │       ├── application.properties
│       │       └── log4j.properties
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallSearchServiceApplicationTests.java
├── gmall-search-web/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallSearchWebApplication.java
│       │   │               └── controller/
│       │   │                   └── SearchController.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       ├── static/
│       │       │   ├── index/
│       │       │   │   ├── css/
│       │       │   │   │   └── GL.css
│       │       │   │   ├── img/
│       │       │   │   │   ├── 58171918N852b09d5.jpg!q90
│       │       │   │   │   ├── 5852299fN1840f35a.jpg!q90
│       │       │   │   │   ├── 585229bdNc20796ec.jpg!q90
│       │       │   │   │   ├── 58522b1bN916da74b.jpg!q90
│       │       │   │   │   ├── 58522b9dNf06d6f3d.jpg!q90
│       │       │   │   │   ├── 59251deeN5daf7ec3.jpg!q90
│       │       │   │   │   ├── 5927ef42Nc91cffc7.jpg!cc_200x140
│       │       │   │   │   ├── 5948b387N1e3bff83.jpg!q90
│       │       │   │   │   ├── 5948bb23N6da9eb71.jpg!q90
│       │       │   │   │   ├── 5950ca4bN6ab3d2f8.jpg!q90
│       │       │   │   │   ├── 5950ca84N9509b283.jpg!q90
│       │       │   │   │   ├── 5950cb54N467732a3.jpg!q90
│       │       │   │   │   ├── 595493f7Nacab54de.jpg!q90
│       │       │   │   │   ├── 597944aeNd644dbd8.jpg!q90
│       │       │   │   │   ├── 59b26e7dN59707ce1.jpg!q90
│       │       │   │   │   ├── 59c1c15dNff3351e4.jpg!q90
│       │       │   │   │   ├── 59e56045N56ae92f1.jpg!q90
│       │       │   │   │   ├── 59ed51ddN8eefe457.jpg!q90
│       │       │   │   │   ├── 5a02d06cN1e37012f.jpg!q90
│       │       │   │   │   ├── 5a0502a0Nf18e2c44.jpg!q90
│       │       │   │   │   ├── 5a086aadNdd4a2d3d.jpg!q90
│       │       │   │   │   ├── 5a086b2cN0353b2df.png!q90
│       │       │   │   │   ├── 5a095387N0626036b.jpg!q90
│       │       │   │   │   ├── 5a097363Nf5fb64a6.jpg!q90
│       │       │   │   │   ├── 5a0bae3dNd70d9115.jpg!q90
│       │       │   │   │   ├── 5a0ce692N1a6c1453.jpg!q90
│       │       │   │   │   ├── 5a0cf69eN35720550.jpg!q90
│       │       │   │   │   ├── 5a0e3ab4N84732c2b.jpg!q90
│       │       │   │   │   ├── 5a0e64f0N68973e71.jpg!q90
│       │       │   │   │   ├── 5a0e9e4eN3d592b05.jpg!q90
│       │       │   │   │   ├── 5a122e02Nff6d7d36 (1).jpg!q90
│       │       │   │   │   ├── 5a122e02Nff6d7d36.jpg!q90
│       │       │   │   │   ├── 5a1233b5Nb10b9cbc (1).jpg!q90
│       │       │   │   │   ├── 5a1233b5Nb10b9cbc.jpg!q90
│       │       │   │   │   ├── 5a123702Nd17543ed.jpg!q90
│       │       │   │   │   ├── 5a124b62Na95768ed.jpg!q90
│       │       │   │   │   ├── 5a1273dbN740798e9.jpg!q90
│       │       │   │   │   ├── 5a12a25fN96769d3c.jpg!q90
│       │       │   │   │   ├── 5a138438N19d98566.jpg!q90
│       │       │   │   │   ├── 5a13bf0bNe1606e58.jpg!q90
│       │       │   │   │   ├── 5a13c218N7c86dc71.jpg!cc_200x140
│       │       │   │   │   ├── 5a13f30fN5ed4a260.jpg!q90
│       │       │   │   │   ├── 5a14d244N753235ee.jpg!q90
│       │       │   │   │   ├── 5a153de2Nf8b4fd68.jpg!q90
│       │       │   │   │   ├── 5a154759N5385d5d6.jpg!q90
│       │       │   │   │   ├── 5a154c8dN4135f0ca.jpg!q90
│       │       │   │   │   ├── 5a15541bNb9c925af.jpg!cc_200x140
│       │       │   │   │   ├── 5a155909Nfaeaff7d.jpg!q90
│       │       │   │   │   ├── 5a162e07N716d0432.jpg!q90
│       │       │   │   │   ├── 5a1645d7Nb450ea8f.jpg!q90
│       │       │   │   │   ├── 5a166870N0df26ef0.jpg!q90
│       │       │   │   │   ├── 5a16712eN5b12d2a1.jpg!q90
│       │       │   │   │   ├── 5a168352N61f45409.jpg!q90
│       │       │   │   │   ├── 5a1683e0N115c3304.jpg!q90
│       │       │   │   │   ├── 5a168d1eN8d09a8b8.jpg!q90
│       │       │   │   │   ├── 5a169882Nd454bf29.jpg!q90
│       │       │   │   │   ├── 5a1698b7Nd63c86ed.jpg!q90
│       │       │   │   │   ├── 5a16a84fN6dc1786f.jpg!q90
│       │       │   │   │   ├── 5a176f84N5e5df987.jpg!q90
│       │       │   │   │   ├── 5a1775a6N2f1b3538.jpg!q90
│       │       │   │   │   ├── 5a177937N733d5884.jpg!q90
│       │       │   │   │   ├── 5a177c43N7a83454e.jpg!q90
│       │       │   │   │   ├── 5a177d99Nd0347bf1.jpg!cc_200x140
│       │       │   │   │   ├── 5a1783a8N7d7f6988.jpg!q90
│       │       │   │   │   ├── 5a17b2c2Na8f437b9.jpg!cc_200x140
│       │       │   │   │   ├── 5a17b56fNd535f5ec.jpg!q90
│       │       │   │   │   ├── 5a17c3feN9cd403e8.jpg!q90
│       │       │   │   │   ├── 5a17ced0Nc020e244 (1).jpg!q90
│       │       │   │   │   ├── 5a17ced0Nc020e244.jpg!q90
│       │       │   │   │   ├── 5a17d1d0Nd648ae8b.jpg!q90
│       │       │   │   │   ├── 5a17d1d2Nac4c7ead.jpg!q90
│       │       │   │   │   ├── 5a17d5e7N220f95a8.jpg!q90
│       │       │   │   │   ├── 5a17e3abNfc2ae745.jpg!q90
│       │       │   │   │   ├── 5a17e4a2N3e7d7612.jpg!q90
│       │       │   │   │   ├── 5a17ec77Nd92f9470.jpg!q90
│       │       │   │   │   ├── 5a1b6757N8a831b02.jpg!q90
│       │       │   │   │   ├── 5a1b677bNe5a0a902.jpg!q90
│       │       │   │   │   ├── 5a1b83c7Nded9c556.jpg!q90
│       │       │   │   │   ├── n1.jpg!q90
│       │       │   │   │   ├── n14.jpg!q90
│       │       │   │   │   ├── n15.jpg!q90
│       │       │   │   │   ├── n16.jpg!q90
│       │       │   │   │   ├── n6.jpg!q90
│       │       │   │   │   ├── n7.jpg!q90
│       │       │   │   │   ├── n8.jpg!q90
│       │       │   │   │   ├── n9.jpg!q90
│       │       │   │   │   ├── s1.jpg!q90
│       │       │   │   │   ├── s10.jpg!q90
│       │       │   │   │   ├── s14.jpg!q90
│       │       │   │   │   ├── s15.jpg!q90
│       │       │   │   │   ├── s16.jpg!q90
│       │       │   │   │   ├── s6.jpg!q90
│       │       │   │   │   ├── s7.jpg!q90
│       │       │   │   │   ├── s8.jpg!q90
│       │       │   │   │   ├── s9.jpg!q90
│       │       │   │   │   ├── saved_resource
│       │       │   │   │   ├── saved_resource(1)
│       │       │   │   │   ├── w1.jpg!q90
│       │       │   │   │   ├── w6.jpg!q90
│       │       │   │   │   ├── w7.jpg!q90
│       │       │   │   │   ├── w8.jpg!q90
│       │       │   │   │   ├── wl.js.下载
│       │       │   │   │   ├── y1.jpg!q90
│       │       │   │   │   ├── y6.jpg!q90
│       │       │   │   │   ├── y7.jpg!q90
│       │       │   │   │   └── y8.jpg!q90
│       │       │   │   ├── js/
│       │       │   │   │   ├── catalogLoader.js
│       │       │   │   │   ├── header.js
│       │       │   │   │   ├── index.js
│       │       │   │   │   ├── left,top.js
│       │       │   │   │   ├── secend.js
│       │       │   │   │   ├── text.js
│       │       │   │   │   └── zz.js
│       │       │   │   └── json/
│       │       │   │       └── catalog.json
│       │       │   └── list/
│       │       │       ├── css/
│       │       │       │   └── index.css
│       │       │       ├── font/
│       │       │       │   ├── demo.css
│       │       │       │   ├── demo_fontclass.html
│       │       │       │   ├── demo_symbol.html
│       │       │       │   ├── demo_unicode.html
│       │       │       │   ├── iconfont.css
│       │       │       │   └── iconfont.js
│       │       │       ├── img/
│       │       │       │   └── 5716981.html
│       │       │       └── js/
│       │       │           ├── index.js
│       │       │           └── jquery-1.12.4.js
│       │       └── templates/
│       │           ├── index.html
│       │           └── list.html
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallSearchWebApplicationTests.java
├── gmall-service-util/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           ├── config/
│                           │   ├── ActiveMQConfig.java
│                           │   ├── RedisConfig.java
│                           │   └── RedissonConfig.java
│                           └── util/
│                               ├── ActiveMQUtil.java
│                               └── RedisUtil.java
├── gmall-user-service/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallUserServiceApplication.java
│       │   │               ├── mapper/
│       │   │               │   ├── MemberReceiveAddressMapper.java
│       │   │               │   ├── UserMapper.java
│       │   │               │   └── UserReceiveAddressMapper.java
│       │   │               └── service/
│       │   │                   └── impl/
│       │   │                       ├── MemberReceiveAddressServiceImpl.java
│       │   │                       └── UserServiceImpl.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       └── mapper/
│       │           └── UserMapper.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallUserServiceApplicationTests.java
├── gmall-user-web/
│   ├── mvnw.cmd
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallUserWebApplication.java
│       │   │               └── controller/
│       │   │                   ├── MemberReceiveAddressController.java
│       │   │                   └── UserController.java
│       │   └── resources/
│       │       ├── application.properties
│       │       └── log4j.properties
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallUserWebApplicationTests.java
├── gmall-web-util/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           ├── annotations/
│                           │   └── LoginRequired.java
│                           ├── config/
│                           │   └── WebMvcConfiguration.java
│                           ├── interceptors/
│                           │   └── AuthInterceptor.java
│                           └── util/
│                               ├── CookieUtil.java
│                               └── JwtUtil.java
├── gware-manage/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           ├── GwareManageApplication.java
│       │   │           └── gware/
│       │   │               ├── bean/
│       │   │               │   ├── OmsOrder.java
│       │   │               │   ├── OmsOrderItem.java
│       │   │               │   ├── WareInfo.java
│       │   │               │   ├── WareOrderTask.java
│       │   │               │   ├── WareOrderTaskDetail.java
│       │   │               │   ├── WareSku.java
│       │   │               │   └── enums/
│       │   │               │       ├── OrderStatus.java
│       │   │               │       ├── PaymentStatus.java
│       │   │               │       ├── PaymentWay.java
│       │   │               │       └── ProcessStatus.java
│       │   │               ├── config/
│       │   │               │   ├── ActiveMQConfig.java
│       │   │               │   ├── GwareConst.java
│       │   │               │   └── JsonpController.java
│       │   │               ├── controller/
│       │   │               │   └── GwareController.java
│       │   │               ├── enums/
│       │   │               │   └── TaskStatus.java
│       │   │               ├── mapper/
│       │   │               │   ├── WareInfoMapper.java
│       │   │               │   ├── WareOrderTaskDetailMapper.java
│       │   │               │   ├── WareOrderTaskMapper.java
│       │   │               │   └── WareSkuMapper.java
│       │   │               ├── mq/
│       │   │               │   └── WareConsumer.java
│       │   │               ├── service/
│       │   │               │   ├── GwareService.java
│       │   │               │   └── impl/
│       │   │               │       └── GwareServiceImpl.java
│       │   │               └── util/
│       │   │                   ├── ActiveMQUtil.java
│       │   │                   └── HttpclientUtil.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── mapper/
│       │       │   ├── WareInfoMapper.xml
│       │       │   └── WareSkuMapper.xml
│       │       ├── static/
│       │       │   └── easyui/
│       │       │       ├── datagrid-detailview.js
│       │       │       ├── easyloader.js
│       │       │       ├── plugins/
│       │       │       │   ├── jquery.accordion.js
│       │       │       │   ├── jquery.calendar.js
│       │       │       │   ├── jquery.combo.js
│       │       │       │   ├── jquery.combobox.js
│       │       │       │   ├── jquery.combogrid.js
│       │       │       │   ├── jquery.combotree.js
│       │       │       │   ├── jquery.combotreegrid.js
│       │       │       │   ├── jquery.datagrid.js
│       │       │       │   ├── jquery.datalist.js
│       │       │       │   ├── jquery.datebox.js
│       │       │       │   ├── jquery.datetimebox.js
│       │       │       │   ├── jquery.datetimespinner.js
│       │       │       │   ├── jquery.dialog.js
│       │       │       │   ├── jquery.draggable.js
│       │       │       │   ├── jquery.droppable.js
│       │       │       │   ├── jquery.filebox.js
│       │       │       │   ├── jquery.form.js
│       │       │       │   ├── jquery.layout.js
│       │       │       │   ├── jquery.linkbutton.js
│       │       │       │   ├── jquery.menu.js
│       │       │       │   ├── jquery.menubutton.js
│       │       │       │   ├── jquery.messager.js
│       │       │       │   ├── jquery.mobile.js
│       │       │       │   ├── jquery.numberbox.js
│       │       │       │   ├── jquery.numberspinner.js
│       │       │       │   ├── jquery.pagination.js
│       │       │       │   ├── jquery.panel.js
│       │       │       │   ├── jquery.parser.js
│       │       │       │   ├── jquery.passwordbox.js
│       │       │       │   ├── jquery.progressbar.js
│       │       │       │   ├── jquery.propertygrid.js
│       │       │       │   ├── jquery.resizable.js
│       │       │       │   ├── jquery.searchbox.js
│       │       │       │   ├── jquery.slider.js
│       │       │       │   ├── jquery.spinner.js
│       │       │       │   ├── jquery.splitbutton.js
│       │       │       │   ├── jquery.switchbutton.js
│       │       │       │   ├── jquery.tabs.js
│       │       │       │   ├── jquery.tagbox.js
│       │       │       │   ├── jquery.textbox.js
│       │       │       │   ├── jquery.timespinner.js
│       │       │       │   ├── jquery.tooltip.js
│       │       │       │   ├── jquery.tree.js
│       │       │       │   ├── jquery.treegrid.js
│       │       │       │   ├── jquery.validatebox.js
│       │       │       │   └── jquery.window.js
│       │       │       └── themes/
│       │       │           ├── angular.css
│       │       │           ├── black/
│       │       │           │   ├── accordion.css
│       │       │           │   ├── calendar.css
│       │       │           │   ├── checkbox.css
│       │       │           │   ├── combo.css
│       │       │           │   ├── combobox.css
│       │       │           │   ├── datagrid.css
│       │       │           │   ├── datalist.css
│       │       │           │   ├── datebox.css
│       │       │           │   ├── dialog.css
│       │       │           │   ├── easyui.css
│       │       │           │   ├── filebox.css
│       │       │           │   ├── layout.css
│       │       │           │   ├── linkbutton.css
│       │       │           │   ├── menu.css
│       │       │           │   ├── menubutton.css
│       │       │           │   ├── messager.css
│       │       │           │   ├── numberbox.css
│       │       │           │   ├── pagination.css
│       │       │           │   ├── panel.css
│       │       │           │   ├── passwordbox.css
│       │       │           │   ├── progressbar.css
│       │       │           │   ├── propertygrid.css
│       │       │           │   ├── radiobutton.css
│       │       │           │   ├── searchbox.css
│       │       │           │   ├── slider.css
│       │       │           │   ├── spinner.css
│       │       │           │   ├── splitbutton.css
│       │       │           │   ├── switchbutton.css
│       │       │           │   ├── tabs.css
│       │       │           │   ├── tagbox.css
│       │       │           │   ├── textbox.css
│       │       │           │   ├── tooltip.css
│       │       │           │   ├── tree.css
│       │       │           │   ├── validatebox.css
│       │       │           │   └── window.css
│       │       │           ├── bootstrap/
│       │       │           │   ├── accordion.css
│       │       │           │   ├── calendar.css
│       │       │           │   ├── checkbox.css
│       │       │           │   ├── combo.css
│       │       │           │   ├── combobox.css
│       │       │           │   ├── datagrid.css
│       │       │           │   ├── datalist.css
│       │       │           │   ├── datebox.css
│       │       │           │   ├── dialog.css
│       │       │           │   ├── easyui.css
│       │       │           │   ├── filebox.css
│       │       │           │   ├── layout.css
│       │       │           │   ├── linkbutton.css
│       │       │           │   ├── menu.css
│       │       │           │   ├── menubutton.css
│       │       │           │   ├── messager.css
│       │       │           │   ├── numberbox.css
│       │       │           │   ├── pagination.css
│       │       │           │   ├── panel.css
│       │       │           │   ├── passwordbox.css
│       │       │           │   ├── progressbar.css
│       │       │           │   ├── propertygrid.css
│       │       │           │   ├── radiobutton.css
│       │       │           │   ├── searchbox.css
│       │       │           │   ├── slider.css
│       │       │           │   ├── spinner.css
│       │       │           │   ├── splitbutton.css
│       │       │           │   ├── switchbutton.css
│       │       │           │   ├── tabs.css
│       │       │           │   ├── tagbox.css
│       │       │           │   ├── textbox.css
│       │       │           │   ├── tooltip.css
│       │       │           │   ├── tree.css
│       │       │           │   ├── validatebox.css
│       │       │           │   └── window.css
│       │       │           ├── color.css
│       │       │           ├── default/
│       │       │           │   ├── accordion.css
│       │       │           │   ├── calendar.css
│       │       │           │   ├── checkbox.css
│       │       │           │   ├── combo.css
│       │       │           │   ├── combobox.css
│       │       │           │   ├── datagrid.css
│       │       │           │   ├── datalist.css
│       │       │           │   ├── datebox.css
│       │       │           │   ├── dialog.css
│       │       │           │   ├── easyui.css
│       │       │           │   ├── filebox.css
│       │       │           │   ├── layout.css
│       │       │           │   ├── linkbutton.css
│       │       │           │   ├── menu.css
│       │       │           │   ├── menubutton.css
│       │       │           │   ├── messager.css
│       │       │           │   ├── numberbox.css
│       │       │           │   ├── pagination.css
│       │       │           │   ├── panel.css
│       │       │           │   ├── passwordbox.css
│       │       │           │   ├── progressbar.css
│       │       │           │   ├── propertygrid.css
│       │       │           │   ├── radiobutton.css
│       │       │           │   ├── searchbox.css
│       │       │           │   ├── slider.css
│       │       │           │   ├── spinner.css
│       │       │           │   ├── splitbutton.css
│       │       │           │   ├── switchbutton.css
│       │       │           │   ├── tabs.css
│       │       │           │   ├── tagbox.css
│       │       │           │   ├── textbox.css
│       │       │           │   ├── tooltip.css
│       │       │           │   ├── tree.css
│       │       │           │   ├── validatebox.css
│       │       │           │   └── window.css
│       │       │           ├── gray/
│       │       │           │   ├── accordion.css
│       │       │           │   ├── calendar.css
│       │       │           │   ├── checkbox.css
│       │       │           │   ├── combo.css
│       │       │           │   ├── combobox.css
│       │       │           │   ├── datagrid.css
│       │       │           │   ├── datalist.css
│       │       │           │   ├── datebox.css
│       │       │           │   ├── dialog.css
│       │       │           │   ├── easyui.css
│       │       │           │   ├── filebox.css
│       │       │           │   ├── layout.css
│       │       │           │   ├── linkbutton.css
│       │       │           │   ├── menu.css
│       │       │           │   ├── menubutton.css
│       │       │           │   ├── messager.css
│       │       │           │   ├── numberbox.css
│       │       │           │   ├── pagination.css
│       │       │           │   ├── panel.css
│       │       │           │   ├── passwordbox.css
│       │       │           │   ├── progressbar.css
│       │       │           │   ├── propertygrid.css
│       │       │           │   ├── radiobutton.css
│       │       │           │   ├── searchbox.css
│       │       │           │   ├── slider.css
│       │       │           │   ├── spinner.css
│       │       │           │   ├── splitbutton.css
│       │       │           │   ├── switchbutton.css
│       │       │           │   ├── tabs.css
│       │       │           │   ├── tagbox.css
│       │       │           │   ├── textbox.css
│       │       │           │   ├── tooltip.css
│       │       │           │   ├── tree.css
│       │       │           │   ├── validatebox.css
│       │       │           │   └── window.css
│       │       │           ├── icon.css
│       │       │           ├── material/
│       │       │           │   ├── accordion.css
│       │       │           │   ├── calendar.css
│       │       │           │   ├── checkbox.css
│       │       │           │   ├── combo.css
│       │       │           │   ├── combobox.css
│       │       │           │   ├── datagrid.css
│       │       │           │   ├── datalist.css
│       │       │           │   ├── datebox.css
│       │       │           │   ├── dialog.css
│       │       │           │   ├── easyui.css
│       │       │           │   ├── filebox.css
│       │       │           │   ├── layout.css
│       │       │           │   ├── linkbutton.css
│       │       │           │   ├── menu.css
│       │       │           │   ├── menubutton.css
│       │       │           │   ├── messager.css
│       │       │           │   ├── numberbox.css
│       │       │           │   ├── pagination.css
│       │       │           │   ├── panel.css
│       │       │           │   ├── passwordbox.css
│       │       │           │   ├── progressbar.css
│       │       │           │   ├── propertygrid.css
│       │       │           │   ├── radiobutton.css
│       │       │           │   ├── searchbox.css
│       │       │           │   ├── slider.css
│       │       │           │   ├── spinner.css
│       │       │           │   ├── splitbutton.css
│       │       │           │   ├── switchbutton.css
│       │       │           │   ├── tabs.css
│       │       │           │   ├── tagbox.css
│       │       │           │   ├── textbox.css
│       │       │           │   ├── tooltip.css
│       │       │           │   ├── tree.css
│       │       │           │   ├── validatebox.css
│       │       │           │   └── window.css
│       │       │           ├── metro/
│       │       │           │   ├── accordion.css
│       │       │           │   ├── calendar.css
│       │       │           │   ├── checkbox.css
│       │       │           │   ├── combo.css
│       │       │           │   ├── combobox.css
│       │       │           │   ├── datagrid.css
│       │       │           │   ├── datalist.css
│       │       │           │   ├── datebox.css
│       │       │           │   ├── dialog.css
│       │       │           │   ├── easyui.css
│       │       │           │   ├── filebox.css
│       │       │           │   ├── layout.css
│       │       │           │   ├── linkbutton.css
│       │       │           │   ├── menu.css
│       │       │           │   ├── menubutton.css
│       │       │           │   ├── messager.css
│       │       │           │   ├── numberbox.css
│       │       │           │   ├── pagination.css
│       │       │           │   ├── panel.css
│       │       │           │   ├── passwordbox.css
│       │       │           │   ├── progressbar.css
│       │       │           │   ├── propertygrid.css
│       │       │           │   ├── radiobutton.css
│       │       │           │   ├── searchbox.css
│       │       │           │   ├── slider.css
│       │       │           │   ├── spinner.css
│       │       │           │   ├── splitbutton.css
│       │       │           │   ├── switchbutton.css
│       │       │           │   ├── tabs.css
│       │       │           │   ├── tagbox.css
│       │       │           │   ├── textbox.css
│       │       │           │   ├── tooltip.css
│       │       │           │   ├── tree.css
│       │       │           │   ├── validatebox.css
│       │       │           │   └── window.css
│       │       │           └── mobile.css
│       │       └── templates/
│       │           ├── index.html
│       │           ├── main.html
│       │           ├── orderTaskList.html
│       │           └── wareSkuListPage.html
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gware/
│                           └── controller/
│                               └── GwareManageApplicationTests.java
└── seckill/
    ├── pom.xml
    └── src/
        ├── main/
        │   ├── java/
        │   │   └── com/
        │   │       └── xatu/
        │   │           └── gmall/
        │   │               ├── SeckillApplication.java
        │   │               └── controller/
        │   │                   └── SeckillController.java
        │   └── resources/
        │       └── application.properties
        └── test/
            └── java/
                └── com/
                    └── xatu/
                        └── gmall/
                            └── SeckillApplicationTests.java

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
*.js linguist-language=java
*.css linguist-language=java
*.html linguist-language=java


================================================
FILE: README.md
================================================
# GMall

#### 仿天猫、京东类似的B2C电商项目:
     基于springboot、dubbo、zookeeper的微服务

- gmall-user-service用户服务的service层8070
* gmall-user-web用户服务的web层8080
- gmall-manage-service用户服务的service层8071
* gmall-manage-web用户服务的web层8081
* gmall-item-service前台的商品详情服务直接调用gmall-manage-service模块
* gmall-item-web前台的商品详情web层8082
- gmall-search-service用户服务的service层8073
* gmall-search-web用户服务的web层8083
- gmall-cart-service用户服务的service层8074
* gmall-cart-web用户服务的web层8084
* gmall-passport-web用户认证中心端口:8085
* gmall-user-service用户服务的service8070


    项目会持续更新,如需协同开发联系(zachary):
     
      WeChat:l18391713434
      Tel:18391713434
      
     ==如需安装好的linux虚拟机副本请和我联系==
     
     
        
        开发环境
        
        工具      版本号          下载 
        JDK       1.8           https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
        Mysql     5.7           https://www.mysql.com/ 
        Redis     3.2           https://redis.io/download
        Elasticsearch 6.2.2     https://www.elastic.co/downloads
        RabbitMq 3.7.14         http://www.rabbitmq.com/download.html 
        nginx     1.10          http://nginx.org/en/download.html
        
        
        
        
        开发工具
        IDEA 开发
        IDE https://www.jetbrains.com/idea/download RedisDesktop 
        redis客户端连接工具 https://redisdesktop.com/download 
        Robomongo mongo客户端连接工具 https://robomongo.org/download
        SwitchHosts 本地host管理 https://oldj.github.io/SwitchHosts/
        X-shell Linux远程连接工具 http://www.netsarang.com/download/software.html
        Navicat 数据库连接工具 http://www.formysql.com/xiazai.html PowerDesigner 
        数据库设计工具 http://powerdesigner.de/
        Axure 原型设计工具 https://www.axure.com/
        MindMaster 思维导图设计工具 http://www.edrawsoft.cn/mindmaster
        ScreenToGif gif录制工具 https://www.screentogif.com/ 
        ProcessOn 流程图绘制工具 https://www.processon.com/ 
        PicPick 屏幕取色工具 https://picpick.app/zh/
        
        技术选型
        
        后端技术 
        Spring Boot 容器+MVC框架 https://spring.io/projects/spring-boot Spring Security 
        认证和授权框架 https://spring.io/projects/spring-security
        MyBatis ORM框架 http://www.mybatis.org/mybatis-3/zh/index.html
        MyBatisGenerator 数据层代码生成 http://www.mybatis.org/generator/index.html 
        PageHelper MyBatis物理分页插件 http://git.oschina.net/free/Mybatis_PageHelper
        Swagger-UI 文档生产工具 https://github.com/swagger-api/swagger-ui
        Hibernator-Validator 验证框架 http://hibernate.org/validator/ 
        Elasticsearch 搜索引擎 https://github.com/elastic/elasticsearch
        RabbitMq 消息队列 https://www.rabbitmq.com/ 
        Redis 分布式缓存 https://redis.io/ 
        Docker 应用容器引擎 https://www.docker.com/ 
        Druid 数据库连接池 https://github.com/alibaba/druid 
        OSS 对象存储 https://github.com/aliyun/aliyun-oss-java-sdk 
        JWT JWT登录支持 https://github.com/jwtk/jjwt 
        LogStash 日志收集 https://github.com/logstash/logstash-logback-encoder
        Lombok 简化对象封装工具 https://github.com/rzwitserloot/lombok
        
        前端技术
        Vue 前端框架 https://vuejs.org/ 
        Vue-router 路由框架 https://router.vuejs.org/ 
        Vuex 全局状态管理框架 https://vuex.vuejs.org/ 
        Element 前端UI框架 https://element.eleme.io/ 
        Axios 前端HTTP框架 https://github.com/axios/axios v-charts 
        基于Echarts的图表框架 https://v-charts.js.org/ 
        Js-cookie cookie管理工具 https://github.com/js-cookie/js-cookie 
        nprogress 进度条控件 https://github.com/rstacruz/nprogress

================================================
FILE: gmall-admin/gmall-admin/.babelrc
================================================
{
  "presets": [
    ["env", {
      "modules": false,
      "targets": {
        "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
      }
    }],
    "stage-2"
  ],
  "plugins":["transform-vue-jsx", "transform-runtime"]
}


================================================
FILE: gmall-admin/gmall-admin/.editorconfig
================================================
# http://editorconfig.org
root = true

[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[*.md]
insert_final_newline = false
trim_trailing_whitespace = false


================================================
FILE: gmall-admin/gmall-admin/.eslintignore
================================================
build/*.js
config/*.js
src/assets


================================================
FILE: gmall-admin/gmall-admin/.eslintrc.js
================================================
module.exports = {
  root: true,
  parserOptions: {
    parser: 'babel-eslint',
    sourceType: 'module'
  },
  env: {
    browser: true,
    node: true,
    es6: true,
  },
  extends: ['plugin:vue/recommended', 'eslint:recommended'],

  // add your custom rules here
  //it is base on https://github.com/vuejs/eslint-config-vue
  rules: {
    "vue/max-attributes-per-line": [2, {
      "singleline": 10,
      "multiline": {
        "max": 1,
        "allowFirstLine": false
      }
    }],
    "vue/name-property-casing": ["error", "PascalCase"],
    'accessor-pairs': 2,
    'arrow-spacing': [2, {
      'before': true,
      'after': true
    }],
    'block-spacing': [2, 'always'],
    'brace-style': [2, '1tbs', {
      'allowSingleLine': true
    }],
    'camelcase': [0, {
      'properties': 'always'
    }],
    'comma-dangle': [2, 'never'],
    'comma-spacing': [2, {
      'before': false,
      'after': true
    }],
    'comma-style': [2, 'last'],
    'constructor-super': 2,
    'curly': [2, 'multi-line'],
    'dot-location': [2, 'property'],
    'eol-last': 2,
    'eqeqeq': [2, 'allow-null'],
    'generator-star-spacing': [2, {
      'before': true,
      'after': true
    }],
    'handle-callback-err': [2, '^(err|error)$'],
    'indent': [2, 2, {
      'SwitchCase': 1
    }],
    'jsx-quotes': [2, 'prefer-single'],
    'key-spacing': [2, {
      'beforeColon': false,
      'afterColon': true
    }],
    'keyword-spacing': [2, {
      'before': true,
      'after': true
    }],
    'new-cap': [2, {
      'newIsCap': true,
      'capIsNew': false
    }],
    'new-parens': 2,
    'no-array-constructor': 2,
    'no-caller': 2,
    'no-console': 'off',
    'no-class-assign': 2,
    'no-cond-assign': 2,
    'no-const-assign': 2,
    'no-control-regex': 2,
    'no-delete-var': 2,
    'no-dupe-args': 2,
    'no-dupe-class-members': 2,
    'no-dupe-keys': 2,
    'no-duplicate-case': 2,
    'no-empty-character-class': 2,
    'no-empty-pattern': 2,
    'no-eval': 2,
    'no-ex-assign': 2,
    'no-extend-native': 2,
    'no-extra-bind': 2,
    'no-extra-boolean-cast': 2,
    'no-extra-parens': [2, 'functions'],
    'no-fallthrough': 2,
    'no-floating-decimal': 2,
    'no-func-assign': 2,
    'no-implied-eval': 2,
    'no-inner-declarations': [2, 'functions'],
    'no-invalid-regexp': 2,
    'no-irregular-whitespace': 2,
    'no-iterator': 2,
    'no-label-var': 2,
    'no-labels': [2, {
      'allowLoop': false,
      'allowSwitch': false
    }],
    'no-lone-blocks': 2,
    'no-mixed-spaces-and-tabs': 2,
    'no-multi-spaces': 2,
    'no-multi-str': 2,
    'no-multiple-empty-lines': [2, {
      'max': 1
    }],
    'no-native-reassign': 2,
    'no-negated-in-lhs': 2,
    'no-new-object': 2,
    'no-new-require': 2,
    'no-new-symbol': 2,
    'no-new-wrappers': 2,
    'no-obj-calls': 2,
    'no-octal': 2,
    'no-octal-escape': 2,
    'no-path-concat': 2,
    'no-proto': 2,
    'no-redeclare': 2,
    'no-regex-spaces': 2,
    'no-return-assign': [2, 'except-parens'],
    'no-self-assign': 2,
    'no-self-compare': 2,
    'no-sequences': 2,
    'no-shadow-restricted-names': 2,
    'no-spaced-func': 2,
    'no-sparse-arrays': 2,
    'no-this-before-super': 2,
    'no-throw-literal': 2,
    'no-trailing-spaces': 2,
    'no-undef': 2,
    'no-undef-init': 2,
    'no-unexpected-multiline': 2,
    'no-unmodified-loop-condition': 2,
    'no-unneeded-ternary': [2, {
      'defaultAssignment': false
    }],
    'no-unreachable': 2,
    'no-unsafe-finally': 2,
    'no-unused-vars': [2, {
      'vars': 'all',
      'args': 'none'
    }],
    'no-useless-call': 2,
    'no-useless-computed-key': 2,
    'no-useless-constructor': 2,
    'no-useless-escape': 0,
    'no-whitespace-before-property': 2,
    'no-with': 2,
    'one-var': [2, {
      'initialized': 'never'
    }],
    'operator-linebreak': [2, 'after', {
      'overrides': {
        '?': 'before',
        ':': 'before'
      }
    }],
    'padded-blocks': [2, 'never'],
    'quotes': [2, 'single', {
      'avoidEscape': true,
      'allowTemplateLiterals': true
    }],
    'semi': [2, 'never'],
    'semi-spacing': [2, {
      'before': false,
      'after': true
    }],
    'space-before-blocks': [2, 'always'],
    'space-before-function-paren': [2, 'never'],
    'space-in-parens': [2, 'never'],
    'space-infix-ops': 2,
    'space-unary-ops': [2, {
      'words': true,
      'nonwords': false
    }],
    'spaced-comment': [2, 'always', {
      'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
    }],
    'template-curly-spacing': [2, 'never'],
    'use-isnan': 2,
    'valid-typeof': 2,
    'wrap-iife': [2, 'any'],
    'yield-star-spacing': [2, 'both'],
    'yoda': [2, 'never'],
    'prefer-const': 2,
    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
    'object-curly-spacing': [2, 'always', {
      objectsInObjects: false
    }],
    'array-bracket-spacing': [2, 'never']
  }
}



================================================
FILE: gmall-admin/gmall-admin/.gitignore
================================================
.DS_Store
node_modules/
dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
package-lock.json

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln


================================================
FILE: gmall-admin/gmall-admin/.postcssrc.js
================================================
// https://github.com/michael-ciniawsky/postcss-load-config

module.exports = {
  "plugins": {
    "postcss-import": {},
    "postcss-url": {},
    // to edit target browsers: use "browserslist" field in package.json
    "autoprefixer": {}
  }
}


================================================
FILE: gmall-admin/gmall-admin/.travis.yml
================================================
language: node_js
node_js: stable
script: npm run test
notifications:
  email: false


================================================
FILE: gmall-admin/gmall-admin/LICENSE
================================================
MIT License

Copyright (c) 2017-present PanJiaChen

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: gmall-admin/gmall-admin/README-zh.md
================================================
# vue-admin-template

> 这是一个 极简的 vue admin 管理后台 它只包含了 Element UI & axios & iconfont & permission control & lint,这些搭建后台必要的东西。

[线上地址](http://panjiachen.github.io/vue-admin-template)

[国内访问](https://panjiachen.gitee.io/vue-admin-template)

## Extra

如果你想要根据用户角色来动态生成侧边栏和 router,你可以使用改分支[permission-control](https://github.com/PanJiaChen/vue-admin-template/tree/permission-control)

本项目基于`webpack4`开发,若还想使用`webpack3`开发,请使用该分支[webpack3](https://github.com/PanJiaChen/vue-admin-template/tree/webpack3)

如果你想使用基于 vue + typescript 的管理后台, 可以看看这个项目: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (鸣谢: [@Armour](https://github.com/Armour))

## 相关项目

[vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)

[electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)

[vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template)

写了一个系列的教程配套文章,如何从零构建后一个完整的后台项目:

- [手摸手,带你用 vue 撸后台 系列一(基础篇)](https://juejin.im/post/59097cd7a22b9d0065fb61d2)
- [手摸手,带你用 vue 撸后台 系列二(登录权限篇)](https://juejin.im/post/591aa14f570c35006961acac)
- [手摸手,带你用 vue 撸后台 系列三 (实战篇)](https://juejin.im/post/593121aa0ce4630057f70d35)
- [手摸手,带你用 vue 撸后台 系列四(vueAdmin 一个极简的后台基础模板,专门针对本项目的文章,算作是一篇文档)](https://juejin.im/post/595b4d776fb9a06bbe7dba56)
- [手摸手,带你封装一个 vue component](https://segmentfault.com/a/1190000009090836)

## Build Setup

```bash
# Clone project
git clone https://github.com/PanJiaChen/vue-admin-template.git

# Install dependencies
npm install

# 建议不要用cnpm  安装有各种诡异的bug 可以通过如下操作解决npm速度慢的问题
npm install --registry=https://registry.npm.taobao.org

# Serve with hot reload at localhost:9528
npm run dev

# Build for production with minification
npm run build

# Build for production and view the bundle analyzer report
npm run build --report
```

## Demo

![demo](https://github.com/PanJiaChen/PanJiaChen.github.io/blob/master/images/demo.gif)

### Element-Ui 使用 cdn 教程

首先找到 `index.html` ([根目录下](https://github.com/PanJiaChen/vue-admin-template/blob/element-ui-cdn/index.html))

引入 Element 的 css 和 js ,并且引入 vue 。因为 Element-Ui 是依赖 vue 的,所以必须在它之前引入 vue 。

之后找到 [webpack.base.conf.js](https://github.com/PanJiaChen/vue-admin-template/blob/element-ui-cdn/build/webpack.base.conf.js) 加入 `externals` 让 webpack 不打包 vue 和 element

```
externals: {
  vue: 'Vue',
  'element-ui':'ELEMENT'
}
```

之后还有一个小细节是如果你用了全局对象方式引入 vue,就不需要 手动 `Vue.use(Vuex)` ,它会自动挂载,具体见 [issue](https://github.com/vuejs/vuex/issues/731)

最终你可以使用 `npm run build --report` 查看效果
如图:
![demo](https://panjiachen.github.io/images/element-cdn.png)

**[具体代码](https://github.com/PanJiaChen/vue-admin-template/commit/746aff560932704ae821f82f10b8b2a9681d5177)**

**[对应分支](https://github.com/PanJiaChen/vue-admin-template/tree/element-ui-cdn)**

## Browsers support

Modern browsers and Internet Explorer 10+.

| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Safari |
| --------- | --------- | --------- | --------- |
| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions

## License

[MIT](https://github.com/PanJiaChen/vue-admin-template/blob/master/LICENSE) license.

Copyright (c) 2017-present PanJiaChen


================================================
FILE: gmall-admin/gmall-admin/README.md
================================================
# vue-admin-template

> A minimal vue admin template with Element UI & axios & iconfont & permission control & lint

**Live demo:** http://panjiachen.github.io/vue-admin-template

[中文文档](https://github.com/PanJiaChen/vue-admin-template/blob/master/README-zh.md)

## Build Setup

```bash
# Clone project
git clone https://github.com/PanJiaChen/vue-admin-template.git

# Install dependencies
npm install

# Serve with hot reload at localhost:9528
npm run dev

# Build for production with minification
npm run build

# Build for production and view the bundle analyzer report
npm run build --report
```

## Demo

![demo](https://github.com/PanJiaChen/PanJiaChen.github.io/blob/master/images/demo.gif)

## Extra

If you want router permission && generate menu by user roles , you can use this branch [permission-control](https://github.com/PanJiaChen/vue-admin-template/tree/permission-control)

This project is based on `webpack4` development. If you want to use `webpack3` development, please use this branch [webpack3](https://github.com/PanJiaChen/vue-admin-template/tree/webpack3)

For `typescript` version, you can use [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (Credits: [@Armour](https://github.com/Armour))

## Related Project

[vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)

[electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)

[vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template)

### Element-Ui using cdn tutorial

First find `index.html`([root directory](https://github.com/PanJiaChen/vue-admin-template/blob/element-ui-cdn/index.html))

Import css and js of `Element`, and then import vue. Because `Element` is vue-dependent, vue must be import before it.

Then find [webpack.base.conf.js](https://github.com/PanJiaChen/vue-admin-template/blob/element-ui-cdn/build/webpack.base.conf.js)
Add `externals` to make webpack not package vue and element.

```
externals: {
  vue: 'Vue',
  'element-ui':'ELEMENT'
}
```

Finally there is a small detail to pay attention to that if you import vue in global, you don't need to manually `Vue.use(Vuex)`, it will be automatically mounted, see
[issue](https://github.com/vuejs/vuex/issues/731)

And you can use `npm run build --report` to see the effect

Pictured:
![demo](https://panjiachen.github.io/images/element-cdn.png)

**[Detailed code](https://github.com/PanJiaChen/vue-admin-template/commit/746aff560932704ae821f82f10b8b2a9681d5177)**

**[Branch](https://github.com/PanJiaChen/vue-admin-template/tree/element-ui-cdn)**

## Browsers support

Modern browsers and Internet Explorer 10+.

| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Safari |
| --------- | --------- | --------- | --------- |
| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions

## License

[MIT](https://github.com/PanJiaChen/vue-admin-template/blob/master/LICENSE) license.

Copyright (c) 2017-present PanJiaChen


================================================
FILE: gmall-admin/gmall-admin/build/build.js
================================================
'use strict'
require('./check-versions')()

process.env.NODE_ENV = 'production'

const ora = require('ora')
const rm = require('rimraf')
const path = require('path')
const chalk = require('chalk')
const webpack = require('webpack')
const config = require('../config')
const webpackConfig = require('./webpack.prod.conf')

const spinner = ora('building for production...')
spinner.start()

rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
  if (err) throw err
  webpack(webpackConfig, (err, stats) => {
    spinner.stop()
    if (err) throw err
    process.stdout.write(
      stats.toString({
        colors: true,
        modules: false,
        children: false,
        chunks: false,
        chunkModules: false
      }) + '\n\n'
    )

    if (stats.hasErrors()) {
      console.log(chalk.red('  Build failed with errors.\n'))
      process.exit(1)
    }

    console.log(chalk.cyan('  Build complete.\n'))
    console.log(
      chalk.yellow(
        '  Tip: built files are meant to be served over an HTTP server.\n' +
          "  Opening index.html over file:// won't work.\n"
      )
    )
  })
})


================================================
FILE: gmall-admin/gmall-admin/build/check-versions.js
================================================
'use strict'
const chalk = require('chalk')
const semver = require('semver')
const packageConfig = require('../package.json')
const shell = require('shelljs')

function exec(cmd) {
  return require('child_process')
    .execSync(cmd)
    .toString()
    .trim()
}

const versionRequirements = [
  {
    name: 'node',
    currentVersion: semver.clean(process.version),
    versionRequirement: packageConfig.engines.node
  }
]

if (shell.which('npm')) {
  versionRequirements.push({
    name: 'npm',
    currentVersion: exec('npm --version'),
    versionRequirement: packageConfig.engines.npm
  })
}

module.exports = function() {
  const warnings = []

  for (let i = 0; i < versionRequirements.length; i++) {
    const mod = versionRequirements[i]

    if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
      warnings.push(
        mod.name +
          ': ' +
          chalk.red(mod.currentVersion) +
          ' should be ' +
          chalk.green(mod.versionRequirement)
      )
    }
  }

  if (warnings.length) {
    console.log('')
    console.log(
      chalk.yellow(
        'To use this template, you must update following to modules:'
      )
    )
    console.log()

    for (let i = 0; i < warnings.length; i++) {
      const warning = warnings[i]
      console.log('  ' + warning)
    }

    console.log()
    process.exit(1)
  }
}


================================================
FILE: gmall-admin/gmall-admin/build/utils.js
================================================
'use strict'
const path = require('path')
const config = require('../config')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const packageConfig = require('../package.json')

exports.assetsPath = function(_path) {
  const assetsSubDirectory =
    process.env.NODE_ENV === 'production'
      ? config.build.assetsSubDirectory
      : config.dev.assetsSubDirectory

  return path.posix.join(assetsSubDirectory, _path)
}

exports.cssLoaders = function(options) {
  options = options || {}

  const cssLoader = {
    loader: 'css-loader',
    options: {
      sourceMap: options.sourceMap
    }
  }

  const postcssLoader = {
    loader: 'postcss-loader',
    options: {
      sourceMap: options.sourceMap
    }
  }

  // generate loader string to be used with extract text plugin
  function generateLoaders(loader, loaderOptions) {
    const loaders = []

    // Extract CSS when that option is specified
    // (which is the case during production build)
    if (options.extract) {
      loaders.push(MiniCssExtractPlugin.loader)
    } else {
      loaders.push('vue-style-loader')
    }

    loaders.push(cssLoader)

    if (options.usePostCSS) {
      loaders.push(postcssLoader)
    }

    if (loader) {
      loaders.push({
        loader: loader + '-loader',
        options: Object.assign({}, loaderOptions, {
          sourceMap: options.sourceMap
        })
      })
    }

    return loaders
  }
  // https://vue-loader.vuejs.org/en/configurations/extract-css.html
  return {
    css: generateLoaders(),
    postcss: generateLoaders(),
    less: generateLoaders('less'),
    sass: generateLoaders('sass', {
      indentedSyntax: true
    }),
    scss: generateLoaders('sass'),
    stylus: generateLoaders('stylus'),
    styl: generateLoaders('stylus')
  }
}

// Generate loaders for standalone style files (outside of .vue)
exports.styleLoaders = function(options) {
  const output = []
  const loaders = exports.cssLoaders(options)

  for (const extension in loaders) {
    const loader = loaders[extension]
    output.push({
      test: new RegExp('\\.' + extension + '$'),
      use: loader
    })
  }

  return output
}

exports.createNotifierCallback = () => {
  const notifier = require('node-notifier')

  return (severity, errors) => {
    if (severity !== 'error') return

    const error = errors[0]
    const filename = error.file && error.file.split('!').pop()

    notifier.notify({
      title: packageConfig.name,
      message: severity + ': ' + error.name,
      subtitle: filename || '',
      icon: path.join(__dirname, 'logo.png')
    })
  }
}


================================================
FILE: gmall-admin/gmall-admin/build/vue-loader.conf.js
================================================
'use strict'

module.exports = {
  //You can set the vue-loader configuration by yourself.
}


================================================
FILE: gmall-admin/gmall-admin/build/webpack.base.conf.js
================================================
'use strict'
const path = require('path')
const utils = require('./utils')
const config = require('../config')
const { VueLoaderPlugin } = require('vue-loader')
const vueLoaderConfig = require('./vue-loader.conf')

function resolve(dir) {
  return path.join(__dirname, '..', dir)
}

const createLintingRule = () => ({
  test: /\.(js|vue)$/,
  loader: 'eslint-loader',
  enforce: 'pre',
  include: [resolve('src'), resolve('test')],
  options: {
    formatter: require('eslint-friendly-formatter'),
    emitWarning: !config.dev.showEslintErrorsInOverlay
  }
})

module.exports = {
  context: path.resolve(__dirname, '../'),
  entry: {
    app: './src/main.js'
  },
  output: {
    path: config.build.assetsRoot,
    filename: '[name].js',
    publicPath:
      process.env.NODE_ENV === 'production'
        ? config.build.assetsPublicPath
        : config.dev.assetsPublicPath
  },
  resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      '@': resolve('src')
    }
  },
  module: {
    rules: [
      ...(config.dev.useEslint ? [createLintingRule()] : []),
      {
        test: /\.vue$/,
        loader: 'vue-loader',
        options: vueLoaderConfig
      },
      {
        test: /\.js$/,
        loader: 'babel-loader',
        include: [
          resolve('src'),
          resolve('test'),
          resolve('node_modules/webpack-dev-server/client')
        ]
      },
      {
        test: /\.svg$/,
        loader: 'svg-sprite-loader',
        include: [resolve('src/icons')],
        options: {
          symbolId: 'icon-[name]'
        }
      },
      {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        loader: 'url-loader',
        exclude: [resolve('src/icons')],
        options: {
          limit: 10000,
          name: utils.assetsPath('img/[name].[hash:7].[ext]')
        }
      },
      {
        test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: utils.assetsPath('media/[name].[hash:7].[ext]')
        }
      },
      {
        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
        }
      }
    ]
  },
  plugins: [new VueLoaderPlugin()],
  node: {
    // prevent webpack from injecting useless setImmediate polyfill because Vue
    // source contains it (although only uses it if it's native).
    setImmediate: false,
    // prevent webpack from injecting mocks to Node native modules
    // that does not make sense for the client
    dgram: 'empty',
    fs: 'empty',
    net: 'empty',
    tls: 'empty',
    child_process: 'empty'
  }
}


================================================
FILE: gmall-admin/gmall-admin/build/webpack.dev.conf.js
================================================
'use strict'
const path = require('path')
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const portfinder = require('portfinder')

function resolve(dir) {
  return path.join(__dirname, '..', dir)
}

const HOST = process.env.HOST
const PORT = process.env.PORT && Number(process.env.PORT)

const devWebpackConfig = merge(baseWebpackConfig, {
  mode: 'development',
  module: {
    rules: utils.styleLoaders({
      sourceMap: config.dev.cssSourceMap,
      usePostCSS: true
    })
  },
  // cheap-module-eval-source-map is faster for development
  devtool: config.dev.devtool,

  // these devServer options should be customized in /config/index.js
  devServer: {
    clientLogLevel: 'warning',
    historyApiFallback: true,
    hot: true,
    compress: true,
    host: HOST || config.dev.host,
    port: PORT || config.dev.port,
    open: config.dev.autoOpenBrowser,
    overlay: config.dev.errorOverlay
      ? { warnings: false, errors: true }
      : false,
    publicPath: config.dev.assetsPublicPath,
    proxy: config.dev.proxyTable,
    quiet: true, // necessary for FriendlyErrorsPlugin
    watchOptions: {
      poll: config.dev.poll
    }
  },
  plugins: [
    new webpack.DefinePlugin({
      'process.env': require('../config/dev.env')
    }),
    new webpack.HotModuleReplacementPlugin(),
    // https://github.com/ampedandwired/html-webpack-plugin
    new HtmlWebpackPlugin({
      filename: 'index.html',
      template: 'index.html',
      inject: true,
      favicon: resolve('favicon.ico'),
      title: 'vue-admin-template'
    })
  ]
})

module.exports = new Promise((resolve, reject) => {
  portfinder.basePort = process.env.PORT || config.dev.port
  portfinder.getPort((err, port) => {
    if (err) {
      reject(err)
    } else {
      // publish the new Port, necessary for e2e tests
      process.env.PORT = port
      // add port to devServer config
      devWebpackConfig.devServer.port = port

      // Add FriendlyErrorsPlugin
      devWebpackConfig.plugins.push(
        new FriendlyErrorsPlugin({
          compilationSuccessInfo: {
            messages: [
              `Your application is running here: http://${
                devWebpackConfig.devServer.host
              }:${port}`
            ]
          },
          onErrors: config.dev.notifyOnErrors
            ? utils.createNotifierCallback()
            : undefined
        })
      )

      resolve(devWebpackConfig)
    }
  })
})


================================================
FILE: gmall-admin/gmall-admin/build/webpack.prod.conf.js
================================================
'use strict'
const path = require('path')
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')

function resolve(dir) {
  return path.join(__dirname, '..', dir)
}

const env = require('../config/prod.env')

// For NamedChunksPlugin
const seen = new Set()
const nameLength = 4

const webpackConfig = merge(baseWebpackConfig, {
  mode: 'production',
  module: {
    rules: utils.styleLoaders({
      sourceMap: config.build.productionSourceMap,
      extract: true,
      usePostCSS: true
    })
  },
  devtool: config.build.productionSourceMap ? config.build.devtool : false,
  output: {
    path: config.build.assetsRoot,
    filename: utils.assetsPath('js/[name].[chunkhash:8].js'),
    chunkFilename: utils.assetsPath('js/[name].[chunkhash:8].js')
  },
  plugins: [
    // http://vuejs.github.io/vue-loader/en/workflow/production.html
    new webpack.DefinePlugin({
      'process.env': env
    }),
    // extract css into its own file
    new MiniCssExtractPlugin({
      filename: utils.assetsPath('css/[name].[contenthash:8].css'),
      chunkFilename: utils.assetsPath('css/[name].[contenthash:8].css')
    }),
    // generate dist index.html with correct asset hash for caching.
    // you can customize output by editing /index.html
    // see https://github.com/ampedandwired/html-webpack-plugin
    new HtmlWebpackPlugin({
      filename: config.build.index,
      template: 'index.html',
      inject: true,
      favicon: resolve('favicon.ico'),
      title: 'vue-admin-template',
      minify: {
        removeComments: true,
        collapseWhitespace: true,
        removeAttributeQuotes: true
        // more options:
        // https://github.com/kangax/html-minifier#options-quick-reference
      }
      // default sort mode uses toposort which cannot handle cyclic deps
      // in certain cases, and in webpack 4, chunk order in HTML doesn't
      // matter anyway
    }),
    new ScriptExtHtmlWebpackPlugin({
      //`runtime` must same as runtimeChunk name. default is `runtime`
      inline: /runtime\..*\.js$/
    }),
    // keep chunk.id stable when chunk has no name
    new webpack.NamedChunksPlugin(chunk => {
      if (chunk.name) {
        return chunk.name
      }
      const modules = Array.from(chunk.modulesIterable)
      if (modules.length > 1) {
        const hash = require('hash-sum')
        const joinedHash = hash(modules.map(m => m.id).join('_'))
        let len = nameLength
        while (seen.has(joinedHash.substr(0, len))) len++
        seen.add(joinedHash.substr(0, len))
        return `chunk-${joinedHash.substr(0, len)}`
      } else {
        return modules[0].id
      }
    }),
    // keep module.id stable when vender modules does not change
    new webpack.HashedModuleIdsPlugin(),
    // copy custom static assets
    new CopyWebpackPlugin([
      {
        from: path.resolve(__dirname, '../static'),
        to: config.build.assetsSubDirectory,
        ignore: ['.*']
      }
    ])
  ],
  optimization: {
    splitChunks: {
      chunks: 'all',
      cacheGroups: {
        libs: {
          name: 'chunk-libs',
          test: /[\\/]node_modules[\\/]/,
          priority: 10,
          chunks: 'initial' // 只打包初始时依赖的第三方
        },
        elementUI: {
          name: 'chunk-elementUI', // 单独将 elementUI 拆包
          priority: 20, // 权重要大于 libs 和 app 不然会被打包进 libs 或者 app
          test: /[\\/]node_modules[\\/]element-ui[\\/]/
        }
      }
    },
    runtimeChunk: 'single',
    minimizer: [
      new UglifyJsPlugin({
        uglifyOptions: {
          mangle: {
            safari10: true
          }
        },
        sourceMap: config.build.productionSourceMap,
        cache: true,
        parallel: true
      }),
      // Compress extracted CSS. We are using this plugin so that possible
      // duplicated CSS from different components can be deduped.
      new OptimizeCSSAssetsPlugin()
    ]
  }
})

if (config.build.productionGzip) {
  const CompressionWebpackPlugin = require('compression-webpack-plugin')

  webpackConfig.plugins.push(
    new CompressionWebpackPlugin({
      asset: '[path].gz[query]',
      algorithm: 'gzip',
      test: new RegExp(
        '\\.(' + config.build.productionGzipExtensions.join('|') + ')$'
      ),
      threshold: 10240,
      minRatio: 0.8
    })
  )
}

if (config.build.generateAnalyzerReport || config.build.bundleAnalyzerReport) {
  const BundleAnalyzerPlugin = require('webpack-bundle-analyzer')
    .BundleAnalyzerPlugin

  if (config.build.bundleAnalyzerReport) {
    webpackConfig.plugins.push(
      new BundleAnalyzerPlugin({
        analyzerPort: 8080,
        generateStatsFile: false
      })
    )
  }

  if (config.build.generateAnalyzerReport) {
    webpackConfig.plugins.push(
      new BundleAnalyzerPlugin({
        analyzerMode: 'static',
        reportFilename: 'bundle-report.html',
        openAnalyzer: false
      })
    )
  }
}

module.exports = webpackConfig


================================================
FILE: gmall-admin/gmall-admin/config/dev.env.js
================================================
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')
// 后端接口地址
module.exports = merge(prodEnv, {
  NODE_ENV: '"development"',
  BASE_API: '"http://localhost:8081"'
})


================================================
FILE: gmall-admin/gmall-admin/config/dev.env.js.bak
================================================
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')
// 后端接口地址
module.exports = merge(prodEnv, {
  NODE_ENV: '"development"',
  BASE_API: '"http://192.168.1.73:8082"'
})


================================================
FILE: gmall-admin/gmall-admin/config/index.js
================================================
'use strict'
// Template version: 1.2.6
// see http://vuejs-templates.github.io/webpack for documentation.

const path = require('path')

module.exports = {
  dev: {
    // Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {},

    // Various Dev Server settings
    host: 'localhost', // can be overwritten by process.env.HOST
    port: 8888, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
    autoOpenBrowser: true,
    errorOverlay: true,
    notifyOnErrors: false,
    poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-

    // Use Eslint Loader?
    // If true, your code will be linted during bundling and
    // linting errors and warnings will be shown in the console.
    useEslint: true,
    // If true, eslint errors and warnings will also be shown in the error overlay
    // in the browser.
    showEslintErrorsInOverlay: false,

    /**
     * Source Maps
     */

    // https://webpack.js.org/configuration/devtool/#development
    devtool: 'cheap-source-map',

    // CSS Sourcemaps off by default because relative paths are "buggy"
    // with this option, according to the CSS-Loader README
    // (https://github.com/webpack/css-loader#sourcemaps)
    // In our experience, they generally work as expected,
    // just be aware of this issue when enabling this option.
    cssSourceMap: false
  },

  build: {
    // Template for index.html
    index: path.resolve(__dirname, '../dist/index.html'),

    // Paths
    assetsRoot: path.resolve(__dirname, '../dist'),
    assetsSubDirectory: 'static',

    /**
     * You can set by youself according to actual condition
     * You will need to set this if you plan to deploy your site under a sub path,
     * for example GitHub pages. If you plan to deploy your site to https://foo.github.io/bar/,
     * then assetsPublicPath should be set to "/bar/".
     * In most cases please use '/' !!!
     */
    assetsPublicPath: '/',

    /**
     * Source Maps
     */

    productionSourceMap: false,
    // https://webpack.js.org/configuration/devtool/#production
    devtool: 'source-map',

    // Gzip off by default as many popular static hosts such as
    // Surge or Netlify already gzip all static assets for you.
    // Before setting to `true`, make sure to:
    // npm install --save-dev compression-webpack-plugin
    productionGzip: false,
    productionGzipExtensions: ['js', 'css'],

    // Run the build command with an extra argument to
    // View the bundle analyzer report after build finishes:
    // `npm run build --report`
    // Set to `true` or `false` to always turn it on or off
    bundleAnalyzerReport: process.env.npm_config_report || false,

    // `npm run build:prod --generate_report`
    generateAnalyzerReport: process.env.npm_config_generate_report || false
  }
}


================================================
FILE: gmall-admin/gmall-admin/config/index.js.bak
================================================
'use strict'
// Template version: 1.2.6
// see http://vuejs-templates.github.io/webpack for documentation.

const path = require('path')

module.exports = {
  dev: {
    // Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {},

    // Various Dev Server settings
    host: '192.168.1.73', // can be overwritten by process.env.HOST
    port: 8888, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
    autoOpenBrowser: true,
    errorOverlay: true,
    notifyOnErrors: false,
    poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-

    // Use Eslint Loader?
    // If true, your code will be linted during bundling and
    // linting errors and warnings will be shown in the console.
    useEslint: true,
    // If true, eslint errors and warnings will also be shown in the error overlay
    // in the browser.
    showEslintErrorsInOverlay: false,

    /**
     * Source Maps
     */

    // https://webpack.js.org/configuration/devtool/#development
    devtool: 'cheap-source-map',

    // CSS Sourcemaps off by default because relative paths are "buggy"
    // with this option, according to the CSS-Loader README
    // (https://github.com/webpack/css-loader#sourcemaps)
    // In our experience, they generally work as expected,
    // just be aware of this issue when enabling this option.
    cssSourceMap: false
  },

  build: {
    // Template for index.html
    index: path.resolve(__dirname, '../dist/index.html'),

    // Paths
    assetsRoot: path.resolve(__dirname, '../dist'),
    assetsSubDirectory: 'static',

    /**
     * You can set by youself according to actual condition
     * You will need to set this if you plan to deploy your site under a sub path,
     * for example GitHub pages. If you plan to deploy your site to https://foo.github.io/bar/,
     * then assetsPublicPath should be set to "/bar/".
     * In most cases please use '/' !!!
     */
    assetsPublicPath: '/',

    /**
     * Source Maps
     */

    productionSourceMap: false,
    // https://webpack.js.org/configuration/devtool/#production
    devtool: 'source-map',

    // Gzip off by default as many popular static hosts such as
    // Surge or Netlify already gzip all static assets for you.
    // Before setting to `true`, make sure to:
    // npm install --save-dev compression-webpack-plugin
    productionGzip: false,
    productionGzipExtensions: ['js', 'css'],

    // Run the build command with an extra argument to
    // View the bundle analyzer report after build finishes:
    // `npm run build --report`
    // Set to `true` or `false` to always turn it on or off
    bundleAnalyzerReport: process.env.npm_config_report || false,

    // `npm run build:prod --generate_report`
    generateAnalyzerReport: process.env.npm_config_generate_report || false
  }
}


================================================
FILE: gmall-admin/gmall-admin/config/prod.env.js
================================================
'use strict'
module.exports = {
  NODE_ENV: '"production"',
  BASE_API: '"https://easy-mock.com/mock/5950a2419adc231f356a6636/vue-admin"',
}


================================================
FILE: gmall-admin/gmall-admin/index.html
================================================
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>谷粒商城后台管理系统</title>
  </head>
  <body>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>


================================================
FILE: gmall-admin/gmall-admin/package.json
================================================
{
  "name": "gmall-admin",
  "version": "1.0.0",
  "license": "MIT",
  "description": "谷粒商城后台管理系统",
  "author": "atguigu",
  "scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    "build": "node build/build.js",
    "build:report": "npm_config_report=true npm run build",
    "lint": "eslint --ext .js,.vue src",
    "test": "npm run lint",
    "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml"
  },
  "dependencies": {
    "axios": "0.18.0",
    "element-ui": "2.4.6",
    "js-cookie": "2.2.0",
    "normalize.css": "7.0.0",
    "nprogress": "0.2.0",
    "vue": "2.5.17",
    "vue-router": "3.0.1",
    "vuex": "3.0.1"
  },
  "devDependencies": {
    "autoprefixer": "8.5.0",
    "babel-core": "6.26.0",
    "babel-eslint": "8.2.6",
    "babel-helper-vue-jsx-merge-props": "2.0.3",
    "babel-loader": "7.1.5",
    "babel-plugin-syntax-jsx": "6.18.0",
    "babel-plugin-transform-runtime": "6.23.0",
    "babel-plugin-transform-vue-jsx": "3.7.0",
    "babel-preset-env": "1.7.0",
    "babel-preset-stage-2": "6.24.1",
    "chalk": "2.4.1",
    "copy-webpack-plugin": "4.5.2",
    "css-loader": "1.0.0",
    "eslint": "4.19.1",
    "eslint-friendly-formatter": "4.0.1",
    "eslint-loader": "2.0.0",
    "eslint-plugin-vue": "4.7.1",
    "eventsource-polyfill": "0.9.6",
    "file-loader": "1.1.11",
    "friendly-errors-webpack-plugin": "1.7.0",
    "html-webpack-plugin": "4.0.0-alpha",
    "mini-css-extract-plugin": "0.4.1",
    "node-notifier": "5.2.1",
    "node-sass": "^4.7.2",
    "optimize-css-assets-webpack-plugin": "5.0.0",
    "ora": "3.0.0",
    "path-to-regexp": "2.4.0",
    "portfinder": "1.0.16",
    "postcss-import": "12.0.0",
    "postcss-loader": "2.1.6",
    "postcss-url": "7.3.2",
    "rimraf": "2.6.2",
    "sass-loader": "7.0.3",
    "script-ext-html-webpack-plugin": "2.0.1",
    "semver": "5.5.0",
    "shelljs": "0.8.2",
    "svg-sprite-loader": "3.8.0",
    "svgo": "1.0.5",
    "uglifyjs-webpack-plugin": "1.2.7",
    "url-loader": "1.0.1",
    "vue-loader": "15.3.0",
    "vue-style-loader": "4.1.2",
    "vue-template-compiler": "2.5.17",
    "webpack": "4.16.5",
    "webpack-bundle-analyzer": "2.13.1",
    "webpack-cli": "3.1.0",
    "webpack-dev-server": "3.1.5",
    "webpack-merge": "4.1.4"
  },
  "engines": {
    "node": ">= 6.0.0",
    "npm": ">= 3.0.0"
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not ie <= 8"
  ]
}


================================================
FILE: gmall-admin/gmall-admin/src/App.vue
================================================
<template>
  <div id="app">
    <router-view/>
  </div>
</template>

<script>
export default {
  name: 'App'
}
</script>


================================================
FILE: gmall-admin/gmall-admin/src/api/baseinfo/prop.js
================================================
import request from '@/utils/request'

export default {

  // 查找一级分类
  getCatalog1() {
    return request({
      url: 'getCatalog1',
      method: 'post'
    })
  },

  // 查找二级分类
  getCatalog2(catalog1Id) {
    return request({
      url: 'getCatalog2?catalog1Id=' + catalog1Id,
      method: 'post'
    })
  },

  // 查找三级分类
  getCatalog3(catalog2Id) {
    return request({
      url: 'getCatalog3?catalog2Id=' + catalog2Id,
      method: 'post'
    })
  },

  // 根据三级分类id获取属性列表
  getAttrInfoList(catalog3Id) {
    return request({
      url: 'attrInfoList?catalog3Id=' + catalog3Id,
      method: 'get'
    })
  },

  // 根据属性id获取属性值列表
  getAttrValueList(attrId) {
    return request({
      url: 'getAttrValueList?attrId=' + attrId,
      method: 'post'
    })
  },

  // 保存属性
  saveAttrInfo(attrForm) {
    return request({
      url: 'saveAttrInfo',
      method: 'post',
      data: attrForm
    })
  }
}


================================================
FILE: gmall-admin/gmall-admin/src/api/components/CatalogSelector.js
================================================
import request from '@/utils/request'

export default {

  // 查找一级分类
  getCatalog1() {
    return request({
      url: 'getCatalog1',
      method: 'post'
    })
  },

  // 查找二级分类
  getCatalog2(catalog1Id) {
    return request({
      url: 'getCatalog2?catalog1Id=' + catalog1Id,
      method: 'post'
    })
  },

  // 查找三级分类
  getCatalog3(catalog2Id) {
    return request({
      url: 'getCatalog3?catalog2Id=' + catalog2Id,
      method: 'post'
    })
  }

}


================================================
FILE: gmall-admin/gmall-admin/src/api/login.js
================================================
import request from '@/utils/request'

export function login(username, password) {
  return request({
    url: '/user/login',
    method: 'post',
    data: {
      username,
      password
    }
  })
}

export function getInfo(token) {
  return request({
    url: '/user/info',
    method: 'get',
    params: { token }
  })
}

export function logout() {
  return request({
    url: '/user/logout',
    method: 'post'
  })
}


================================================
FILE: gmall-admin/gmall-admin/src/api/product/sku.js
================================================
import request from '@/utils/request'

export default {

  // 保存Sku
  saveSkuInfo(skuForm) {
    return request({
      url: 'saveSkuInfo',
      method: 'post',
      data: skuForm
    })
  }
}


================================================
FILE: gmall-admin/gmall-admin/src/api/product/spu.js
================================================
import request from '@/utils/request'

export default {

  // 根据三级分类id获取属性列表
  getSpuList(catalog3Id) {
    return request({
      url: 'spuList?catalog3Id=' + catalog3Id,
      method: 'get'
    })
  },

  // 保存Spu
  saveSpuInfo(spuForm) {
    return request({
      url: 'saveSpuInfo',
      method: 'post',
      data: spuForm
    })
  },

  // 获取基本销售属性列表
  getBaseSaleAttrList() {
    return request({
      url: 'baseSaleAttrList',
      method: 'post'
    })
  },

  // 根据spuId获取销售属性列表
  getSpuSaleAttrList(spuId) {
    return request({
      url: 'spuSaleAttrList?spuId=' + spuId,
      method: 'get'
    })
  },

  // 根据spuId获取图片列表
  getSpuImageList(spuId) {
    return request({
      url: 'spuImageList?spuId=' + spuId,
      method: 'get'
    })
  }
}


================================================
FILE: gmall-admin/gmall-admin/src/api/table.js
================================================
import request from '@/utils/request'

export function getList(params) {
  return request({
    url: '/table/list',
    method: 'get',
    params
  })
}


================================================
FILE: gmall-admin/gmall-admin/src/components/Breadcrumb/index.vue
================================================
<template>
  <el-breadcrumb class="app-breadcrumb" separator="/">
    <transition-group name="breadcrumb">
      <el-breadcrumb-item v-for="(item,index) in levelList" v-if="item.meta.title" :key="item.path">
        <span v-if="item.redirect==='noredirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span>
        <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
      </el-breadcrumb-item>
    </transition-group>
  </el-breadcrumb>
</template>

<script>
import pathToRegexp from 'path-to-regexp'

export default {
  data() {
    return {
      levelList: null
    }
  },
  watch: {
    $route() {
      this.getBreadcrumb()
    }
  },
  created() {
    this.getBreadcrumb()
  },
  methods: {
    getBreadcrumb() {
      let matched = this.$route.matched.filter(item => {
        if (item.name) {
          return true
        }
      })
      const first = matched[0]
      if (first && first.name !== 'dashboard') {
        matched = [{ path: '/dashboard', meta: { title: '首页' }}].concat(matched)
      }
      this.levelList = matched
    },
    pathCompile(path) {
      // To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561
      const { params } = this.$route
      var toPath = pathToRegexp.compile(path)
      return toPath(params)
    },
    handleLink(item) {
      const { redirect, path } = item
      if (redirect) {
        this.$router.push(redirect)
        return
      }
      this.$router.push(this.pathCompile(path))
    }
  }
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
  .app-breadcrumb.el-breadcrumb {
    display: inline-block;
    font-size: 14px;
    line-height: 50px;
    margin-left: 10px;
    .no-redirect {
      color: #97a8be;
      cursor: text;
    }
  }
</style>


================================================
FILE: gmall-admin/gmall-admin/src/components/Hamburger/index.vue
================================================
<template>
  <div>
    <svg
      :class="{'is-active':isActive}"
      t="1492500959545"
      class="hamburger"
      style=""
      viewBox="0 0 1024 1024"
      version="1.1"
      xmlns="http://www.w3.org/2000/svg"
      p-id="1691"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      width="64"
      height="64"
      @click="toggleClick">
      <path
        d="M966.8023 568.849776 57.196677 568.849776c-31.397081 0-56.850799-25.452695-56.850799-56.850799l0 0c0-31.397081 25.452695-56.849776 56.850799-56.849776l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.849776l0 0C1023.653099 543.397081 998.200404 568.849776 966.8023 568.849776z"
        p-id="1692" />
      <path
        d="M966.8023 881.527125 57.196677 881.527125c-31.397081 0-56.850799-25.452695-56.850799-56.849776l0 0c0-31.397081 25.452695-56.849776 56.850799-56.849776l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.849776l0 0C1023.653099 856.07443 998.200404 881.527125 966.8023 881.527125z"
        p-id="1693" />
      <path
        d="M966.8023 256.17345 57.196677 256.17345c-31.397081 0-56.850799-25.452695-56.850799-56.849776l0 0c0-31.397081 25.452695-56.850799 56.850799-56.850799l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.850799l0 0C1023.653099 230.720755 998.200404 256.17345 966.8023 256.17345z"
        p-id="1694" />
    </svg>
  </div>
</template>

<script>
export default {
  name: 'Hamburger',
  props: {
    isActive: {
      type: Boolean,
      default: false
    },
    toggleClick: {
      type: Function,
      default: null
    }
  }
}
</script>

<style scoped>
.hamburger {
	display: inline-block;
	cursor: pointer;
	width: 20px;
	height: 20px;
	transform: rotate(90deg);
	transition: .38s;
	transform-origin: 50% 50%;
}
.hamburger.is-active {
	transform: rotate(0deg);
}
</style>


================================================
FILE: gmall-admin/gmall-admin/src/components/SvgIcon/index.vue
================================================
<template>
  <svg :class="svgClass" aria-hidden="true">
    <use :xlink:href="iconName"/>
  </svg>
</template>

<script>
export default {
  name: 'SvgIcon',
  props: {
    iconClass: {
      type: String,
      required: true
    },
    className: {
      type: String,
      default: ''
    }
  },
  computed: {
    iconName() {
      return `#icon-${this.iconClass}`
    },
    svgClass() {
      if (this.className) {
        return 'svg-icon ' + this.className
      } else {
        return 'svg-icon'
      }
    }
  }
}
</script>

<style scoped>
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}
</style>


================================================
FILE: gmall-admin/gmall-admin/src/icons/index.js
================================================
import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon' // svg组件

// register globally
Vue.component('svg-icon', SvgIcon)

const requireAll = requireContext => requireContext.keys().map(requireContext)
const req = require.context('./svg', false, /\.svg$/)
requireAll(req)


================================================
FILE: gmall-admin/gmall-admin/src/icons/svgo.yml
================================================
# replace default config

# multipass: true
# full: true

plugins:

  # - name
  #
  # or:
  # - name: false
  # - name: true
  #
  # or:
  # - name:
  #     param1: 1
  #     param2: 2

- removeAttrs:
    attrs:
      - 'fill'
      - 'fill-rule'


================================================
FILE: gmall-admin/gmall-admin/src/main.js
================================================
import Vue from 'vue'

import 'normalize.css/normalize.css' // A modern alternative to CSS resets

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import locale from 'element-ui/lib/locale/lang/zh-CN' // lang i18n

import '@/styles/index.scss' // global css

import App from './App'
import router from './router'
import store from './store'

import '@/icons' // icon
import '@/permission' // permission control

Vue.use(ElementUI, { locale })

Vue.config.productionTip = false

new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
})


================================================
FILE: gmall-admin/gmall-admin/src/permission.js
================================================
import router from './router'
import store from './store'
import NProgress from 'nprogress' // Progress 进度条
import 'nprogress/nprogress.css'// Progress 进度条样式
import { Message } from 'element-ui'
import { getToken } from '@/utils/auth' // 验权

const whiteList = ['/login'] // 不重定向白名单
router.beforeEach((to, from, next) => {
  NProgress.start()
  if (getToken()) {
    if (to.path === '/login') {
      next({ path: '/' })
      NProgress.done() // if current page is dashboard will not trigger	afterEach hook, so manually handle it
    } else {
      if (store.getters.roles.length === 0) {
        store.dispatch('GetInfo').then(res => { // 拉取用户信息
          next()
        }).catch((err) => {
          store.dispatch('FedLogOut').then(() => {
            Message.error(err || 'Verification failed, please login again')
            next({ path: '/' })
          })
        })
      } else {
        next()
      }
    }
  } else {
    if (whiteList.indexOf(to.path) !== -1) {
      next()
    } else {
      next(`/login?redirect=${to.path}`) // 否则全部重定向到登录页
      NProgress.done()
    }
  }
})

router.afterEach(() => {
  NProgress.done() // 结束Progress
})


================================================
FILE: gmall-admin/gmall-admin/src/router/index.js
================================================
import Vue from 'vue'
import Router from 'vue-router'

// in development-env not use lazy-loading, because lazy-loading too many pages will cause webpack hot update too slow. so only in production use lazy-loading;
// detail: https://panjiachen.github.io/vue-element-admin-site/#/lazy-loading

Vue.use(Router)

/* Layout */
import Layout from '../views/layout/Layout'

/**
* hidden: true                   if `hidden:true` will not show in the sidebar(default is false)
* alwaysShow: true               if set true, will always show the root menu, whatever its child routes length
*                                if not set alwaysShow, only more than one route under the children
*                                it will becomes nested mode, otherwise not show the root menu
* redirect: noredirect           if `redirect:noredirect` will no redirect in the breadcrumb
* name:'router-name'             the name is used by <keep-alive> (must set!!!)
* meta : {
    title: 'title'               the name show in submenu and breadcrumb (recommend set)
    icon: 'svg-name'             the icon show in the sidebar,
  }
**/
export const constantRouterMap = [
  { path: '/login', component: () => import('@/views/login/index'), hidden: true },
  { path: '/404', component: () => import('@/views/404'), hidden: true },

  // 首页
  {
    path: '/',
    component: Layout,
    redirect: '/dashboard',
    name: 'Dashboard',
    children: [{
      path: 'dashboard',
      component: () => import('@/views/dashboard/index'),
      meta: { title: '谷粒商城后台首页', icon: 'dashboard' }
    }]
  },

  // 基本信息管理
  {
    path: '/baseinfo',
    component: Layout,
    redirect: '/baseinfo/prop/list',
    name: 'BasesInfo',
    meta: { title: '基本信息管理', icon: 'table' },
    alwaysShow: true,
    children: [
      {
        path: 'prop/list',
        name: 'BasesInfoPropList',
        component: () => import('@/views/baseinfo/prop/list'),
        meta: { title: '平台属性列表' }
      }
    ]
  },

  // 商品信息管理
  {
    path: '/product',
    component: Layout,
    redirect: '/product/spu/list',
    name: 'Product',
    meta: { title: '商品信息管理', icon: 'shopping' },
    alwaysShow: true,
    children: [
      {
        path: 'spu/list',
        name: 'ProductSpuList',
        component: () => import('@/views/product/spu/list'),
        meta: { title: '商品属性SPU管理' }
      }
    ]
  },

  { path: '*', redirect: '/404', hidden: true }
]

export default new Router({
  // mode: 'history', //后端支持可开
  scrollBehavior: () => ({ y: 0 }),
  routes: constantRouterMap
})


================================================
FILE: gmall-admin/gmall-admin/src/store/getters.js
================================================
const getters = {
  sidebar: state => state.app.sidebar,
  device: state => state.app.device,
  token: state => state.user.token,
  avatar: state => state.user.avatar,
  name: state => state.user.name,
  roles: state => state.user.roles
}
export default getters


================================================
FILE: gmall-admin/gmall-admin/src/store/index.js
================================================
import Vue from 'vue'
import Vuex from 'vuex'
import app from './modules/app'
import user from './modules/user'
import getters from './getters'

Vue.use(Vuex)

const store = new Vuex.Store({
  modules: {
    app,
    user
  },
  getters
})

export default store


================================================
FILE: gmall-admin/gmall-admin/src/store/modules/app.js
================================================
import Cookies from 'js-cookie'

const app = {
  state: {
    sidebar: {
      opened: !+Cookies.get('sidebarStatus'),
      withoutAnimation: false
    },
    device: 'desktop'
  },
  mutations: {
    TOGGLE_SIDEBAR: state => {
      if (state.sidebar.opened) {
        Cookies.set('sidebarStatus', 1)
      } else {
        Cookies.set('sidebarStatus', 0)
      }
      state.sidebar.opened = !state.sidebar.opened
      state.sidebar.withoutAnimation = false
    },
    CLOSE_SIDEBAR: (state, withoutAnimation) => {
      Cookies.set('sidebarStatus', 1)
      state.sidebar.opened = false
      state.sidebar.withoutAnimation = withoutAnimation
    },
    TOGGLE_DEVICE: (state, device) => {
      state.device = device
    }
  },
  actions: {
    ToggleSideBar: ({ commit }) => {
      commit('TOGGLE_SIDEBAR')
    },
    CloseSideBar({ commit }, { withoutAnimation }) {
      commit('CLOSE_SIDEBAR', withoutAnimation)
    },
    ToggleDevice({ commit }, device) {
      commit('TOGGLE_DEVICE', device)
    }
  }
}

export default app


================================================
FILE: gmall-admin/gmall-admin/src/store/modules/user.js
================================================
// import { login, logout, getInfo } from '@/api/login'
import { getToken, setToken, removeToken } from '@/utils/auth'

const user = {
  state: {
    token: getToken(),
    name: '',
    avatar: '',
    roles: []
  },

  mutations: {
    SET_TOKEN: (state, token) => {
      state.token = token
    },
    SET_NAME: (state, name) => {
      state.name = name
    },
    SET_AVATAR: (state, avatar) => {
      state.avatar = avatar
    },
    SET_ROLES: (state, roles) => {
      state.roles = roles
    }
  },

  actions: {
    // 登录
    // Login({ commit }, userInfo) {
    //   const username = userInfo.username.trim()
    //   return new Promise((resolve, reject) => {
    //     login(username, userInfo.password).then(response => {
    //       const data = response.data
    //       setToken(data.token)
    //       commit('SET_TOKEN', data.token)
    //       resolve()
    //     }).catch(error => {
    //       reject(error)
    //     })
    //   })
    // },
    Login({ commit }, userInfo) {
      const data = {
        'token': 'admin'
      }
      setToken(data.token)
      commit('SET_TOKEN', data.token)
    },

    // 获取用户信息
    // GetInfo({ commit, state }) {
    //   return new Promise((resolve, reject) => {
    //     getInfo(state.token).then(response => {
    //       const data = response.data
    //       if (data.roles && data.roles.length > 0) { // 验证返回的roles是否是一个非空数组
    //         commit('SET_ROLES', data.roles)
    //       } else {
    //         reject('getInfo: roles must be a non-null array !')
    //       }
    //       commit('SET_NAME', data.name)
    //       commit('SET_AVATAR', data.avatar)
    //       resolve(response)
    //     }).catch(error => {
    //       reject(error)
    //     })
    //   })
    // },
    GetInfo({ commit, state }) {
      const data = {
        'roles': [
          '管理员'
        ],
        'name': 'admin',
        'avatar': '/static/default.jpg'
      }
      commit('SET_ROLES', data.roles)
      commit('SET_NAME', data.name)
      commit('SET_AVATAR', data.avatar)
    },

    // 登出
    // LogOut({ commit, state }) {
    //   return new Promise((resolve, reject) => {
    //     logout(state.token).then(() => {
    //       commit('SET_TOKEN', '')
    //       commit('SET_ROLES', [])
    //       removeToken()
    //       resolve()
    //     }).catch(error => {
    //       reject(error)
    //     })
    //   })
    // },
    LogOut({ commit, state }) {
      commit('SET_TOKEN', '')
      commit('SET_ROLES', [])
      removeToken()
    },

    // 前端 登出
    FedLogOut({ commit }) {
      return new Promise(resolve => {
        commit('SET_TOKEN', '')
        removeToken()
        resolve()
      })
    }
  }
}

export default user


================================================
FILE: gmall-admin/gmall-admin/src/styles/element-ui.scss
================================================
 //to reset element-ui default css
.el-upload {
  input[type="file"] {
    display: none !important;
  }
}

.el-upload__input {
  display: none;
}

//暂时性解决diolag 问题 https://github.com/ElemeFE/element/issues/2461
.el-dialog {
  transform: none;
  left: 0;
  position: relative;
  margin: 0 auto;
}

//element ui upload
.upload-container {
  .el-upload {
    width: 100%;
    .el-upload-dragger {
      width: 100%;
      height: 200px;
    }
  }
}


================================================
FILE: gmall-admin/gmall-admin/src/styles/index.scss
================================================
@import './variables.scss';
@import './mixin.scss';
@import './transition.scss';
@import './element-ui.scss';
@import './sidebar.scss';

body {
  height: 100%;
  -moz-osx-font-smoothing: grayscale;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
}

label {
  font-weight: 700;
}

html {
  height: 100%;
  box-sizing: border-box;
}

#app{
  height: 100%;
}

*,
*:before,
*:after {
  box-sizing: inherit;
}

a,
a:focus,
a:hover {
  cursor: pointer;
  color: inherit;
  outline: none;
  text-decoration: none;
}

div:focus{
  outline: none;
 }

a:focus,
a:active {
  outline: none;
}

a,
a:focus,
a:hover {
  cursor: pointer;
  color: inherit;
  text-decoration: none;
}

.clearfix {
  &:after {
    visibility: hidden;
    display: block;
    font-size: 0;
    content: " ";
    clear: both;
    height: 0;
  }
}

//main-container全局样式
.app-main{
  min-height: 100%
}

.app-container {
  padding: 20px;
}


================================================
FILE: gmall-admin/gmall-admin/src/styles/mixin.scss
================================================
@mixin clearfix {
  &:after {
    content: "";
    display: table;
    clear: both;
  }
}

@mixin scrollBar {
  &::-webkit-scrollbar-track-piece {
    background: #d3dce6;
  }
  &::-webkit-scrollbar {
    width: 6px;
  }
  &::-webkit-scrollbar-thumb {
    background: #99a9bf;
    border-radius: 20px;
  }
}

@mixin relative {
  position: relative;
  width: 100%;
  height: 100%;
}



================================================
FILE: gmall-admin/gmall-admin/src/styles/sidebar.scss
================================================
#app {
  // 主体区域
  .main-container {
    min-height: 100%;
    transition: margin-left .28s;
    margin-left: 180px;
    position: relative;
  }
  // 侧边栏
  .sidebar-container {
    transition: width 0.28s;
    width: 180px !important;
    height: 100%;
    position: fixed;
    font-size: 0px;
    top: 0;
    bottom: 0;
    left: 0;
    z-index: 1001;
    overflow: hidden;
    //reset element-ui css
    .horizontal-collapse-transition {
      transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
    }
    .el-scrollbar__bar.is-vertical{
      right: 0px;
    }
    .scrollbar-wrapper {
      overflow-x: hidden!important;
      .el-scrollbar__view {
        height: 100%;
      }
    }
    .is-horizontal {
      display: none;
    }
    a {
      display: inline-block;
      width: 100%;
      overflow: hidden;
    }
    .svg-icon {
      margin-right: 16px;
    }
    .el-menu {
      border: none;
      height: 100%;
      width: 100% !important;
    }
    .is-active > .el-submenu__title{
      color: #f4f4f5!important;
    }
  }
  .hideSidebar {
    .sidebar-container {
      width: 36px !important;
    }
    .main-container {
      margin-left: 36px;
    }
    .submenu-title-noDropdown {
      padding-left: 10px !important;
      position: relative;
      .el-tooltip {
        padding: 0 10px !important;
      }
    }
    .el-submenu {
      overflow: hidden;
      &>.el-submenu__title {
        padding-left: 10px !important;
        .el-submenu__icon-arrow {
          display: none;
        }
      }
    }
    .el-menu--collapse {
      .el-submenu {
        &>.el-submenu__title {
          &>span {
            height: 0;
            width: 0;
            overflow: hidden;
            visibility: hidden;
            display: inline-block;
          }
        }
      }
    }
  }
  .sidebar-container .nest-menu .el-submenu>.el-submenu__title,
  .sidebar-container .el-submenu .el-menu-item {
    min-width: 180px !important;
    background-color: $subMenuBg !important;
    &:hover {
      background-color: $menuHover !important;
    }
  }
  .el-menu--collapse .el-menu .el-submenu {
    min-width: 180px !important;
  }

  //适配移动端
  .mobile {
    .main-container {
      margin-left: 0px;
    }
    .sidebar-container {
      transition: transform .28s;
      width: 180px !important;
    }
    &.hideSidebar {
      .sidebar-container {
        transition-duration: 0.3s;
        transform: translate3d(-180px, 0, 0);
      }
    }
  }
  .withoutAnimation {
    .main-container,
    .sidebar-container {
      transition: none;
    }
  }
}

.el-menu--vertical{
  & >.el-menu{
    .svg-icon{
      margin-right: 16px;
    }
  }
}


================================================
FILE: gmall-admin/gmall-admin/src/styles/transition.scss
================================================
//globl transition css

/*fade*/
.fade-enter-active,
.fade-leave-active {
  transition: opacity 0.28s;
}

.fade-enter,
.fade-leave-active {
  opacity: 0;
}

/*fade-transform*/
.fade-transform-leave-active,
.fade-transform-enter-active {
  transition: all .5s;
}
.fade-transform-enter {
  opacity: 0;
  transform: translateX(-30px);
}
.fade-transform-leave-to {
  opacity: 0;
  transform: translateX(30px);
}

/*fade*/
.breadcrumb-enter-active,
.breadcrumb-leave-active {
  transition: all .5s;
}

.breadcrumb-enter,
.breadcrumb-leave-active {
  opacity: 0;
  transform: translateX(20px);
}

.breadcrumb-move {
  transition: all .5s;
}

.breadcrumb-leave-active {
  position: absolute;
}


================================================
FILE: gmall-admin/gmall-admin/src/styles/variables.scss
================================================
//sidebar
$menuBg:#304156;
$subMenuBg:#1f2d3d;
$menuHover:#001528;


================================================
FILE: gmall-admin/gmall-admin/src/utils/auth.js
================================================
import Cookies from 'js-cookie'

const TokenKey = 'Admin-Token'

export function getToken() {
  return Cookies.get(TokenKey)
}

export function setToken(token) {
  return Cookies.set(TokenKey, token)
}

export function removeToken() {
  return Cookies.remove(TokenKey)
}


================================================
FILE: gmall-admin/gmall-admin/src/utils/index.js
================================================
/**
 * Created by jiachenpan on 16/11/18.
 */

export function parseTime(time, cFormat) {
  if (arguments.length === 0) {
    return null
  }
  const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
  let date
  if (typeof time === 'object') {
    date = time
  } else {
    if (('' + time).length === 10) time = parseInt(time) * 1000
    date = new Date(time)
  }
  const formatObj = {
    y: date.getFullYear(),
    m: date.getMonth() + 1,
    d: date.getDate(),
    h: date.getHours(),
    i: date.getMinutes(),
    s: date.getSeconds(),
    a: date.getDay()
  }
  const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
    let value = formatObj[key]
    // Note: getDay() returns 0 on Sunday
    if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] }
    if (result.length > 0 && value < 10) {
      value = '0' + value
    }
    return value || 0
  })
  return time_str
}

export function formatTime(time, option) {
  time = +time * 1000
  const d = new Date(time)
  const now = Date.now()

  const diff = (now - d) / 1000

  if (diff < 30) {
    return '刚刚'
  } else if (diff < 3600) {
    // less 1 hour
    return Math.ceil(diff / 60) + '分钟前'
  } else if (diff < 3600 * 24) {
    return Math.ceil(diff / 3600) + '小时前'
  } else if (diff < 3600 * 24 * 2) {
    return '1天前'
  }
  if (option) {
    return parseTime(time, option)
  } else {
    return (
      d.getMonth() +
      1 +
      '月' +
      d.getDate() +
      '日' +
      d.getHours() +
      '时' +
      d.getMinutes() +
      '分'
    )
  }
}

export function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path)
}


================================================
FILE: gmall-admin/gmall-admin/src/utils/request.js
================================================
import axios from 'axios'

// 创建axios实例
const service = axios.create({
  baseURL: process.env.BASE_API, // api 的 base_url
  timeout: 5000 // 请求超时时间
})

export default service


================================================
FILE: gmall-admin/gmall-admin/src/utils/validate.js
================================================
/**
 * Created by jiachenpan on 16/11/18.
 */

export function isvalidUsername(str) {
  const valid_map = ['admin', 'editor']
  return valid_map.indexOf(str.trim()) >= 0
}

/* 合法uri*/
export function validateURL(textval) {
  const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return urlregex.test(textval)
}

/* 小写字母*/
export function validateLowerCase(str) {
  const reg = /^[a-z]+$/
  return reg.test(str)
}

/* 大写字母*/
export function validateUpperCase(str) {
  const reg = /^[A-Z]+$/
  return reg.test(str)
}

/* 大小写字母*/
export function validatAlphabets(str) {
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}


================================================
FILE: gmall-admin/gmall-admin/src/views/404.vue
================================================
<template>
  <div class="wscn-http404-container">
    <div class="wscn-http404">
      <div class="pic-404">
        <img class="pic-404__parent" src="@/assets/404_images/404.png" alt="404">
        <img class="pic-404__child left" src="@/assets/404_images/404_cloud.png" alt="404">
        <img class="pic-404__child mid" src="@/assets/404_images/404_cloud.png" alt="404">
        <img class="pic-404__child right" src="@/assets/404_images/404_cloud.png" alt="404">
      </div>
      <div class="bullshit">
        <div class="bullshit__oops">OOPS!</div>
        <div class="bullshit__info">版权所有
          <a class="link-type" href="https://wallstreetcn.com" target="_blank">华尔街见闻</a>
        </div>
        <div class="bullshit__headline">{{ message }}</div>
        <div class="bullshit__info">请检查您输入的网址是否正确,请点击以下按钮返回主页或者发送错误报告</div>
        <a href="" class="bullshit__return-home">返回首页</a>
      </div>
    </div>
  </div>
</template>

<script>

export default {
  name: 'Page404',
  computed: {
    message() {
      return '网管说这个页面你不能进......'
    }
  }
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
.wscn-http404-container{
  transform: translate(-50%,-50%);
  position: absolute;
  top: 40%;
  left: 50%;
}
.wscn-http404 {
  position: relative;
  width: 1200px;
  padding: 0 50px;
  overflow: hidden;
  .pic-404 {
    position: relative;
    float: left;
    width: 600px;
    overflow: hidden;
    &__parent {
      width: 100%;
    }
    &__child {
      position: absolute;
      &.left {
        width: 80px;
        top: 17px;
        left: 220px;
        opacity: 0;
        animation-name: cloudLeft;
        animation-duration: 2s;
        animation-timing-function: linear;
        animation-fill-mode: forwards;
        animation-delay: 1s;
      }
      &.mid {
        width: 46px;
        top: 10px;
        left: 420px;
        opacity: 0;
        animation-name: cloudMid;
        animation-duration: 2s;
        animation-timing-function: linear;
        animation-fill-mode: forwards;
        animation-delay: 1.2s;
      }
      &.right {
        width: 62px;
        top: 100px;
        left: 500px;
        opacity: 0;
        animation-name: cloudRight;
        animation-duration: 2s;
        animation-timing-function: linear;
        animation-fill-mode: forwards;
        animation-delay: 1s;
      }
      @keyframes cloudLeft {
        0% {
          top: 17px;
          left: 220px;
          opacity: 0;
        }
        20% {
          top: 33px;
          left: 188px;
          opacity: 1;
        }
        80% {
          top: 81px;
          left: 92px;
          opacity: 1;
        }
        100% {
          top: 97px;
          left: 60px;
          opacity: 0;
        }
      }
      @keyframes cloudMid {
        0% {
          top: 10px;
          left: 420px;
          opacity: 0;
        }
        20% {
          top: 40px;
          left: 360px;
          opacity: 1;
        }
        70% {
          top: 130px;
          left: 180px;
          opacity: 1;
        }
        100% {
          top: 160px;
          left: 120px;
          opacity: 0;
        }
      }
      @keyframes cloudRight {
        0% {
          top: 100px;
          left: 500px;
          opacity: 0;
        }
        20% {
          top: 120px;
          left: 460px;
          opacity: 1;
        }
        80% {
          top: 180px;
          left: 340px;
          opacity: 1;
        }
        100% {
          top: 200px;
          left: 300px;
          opacity: 0;
        }
      }
    }
  }
  .bullshit {
    position: relative;
    float: left;
    width: 300px;
    padding: 30px 0;
    overflow: hidden;
    &__oops {
      font-size: 32px;
      font-weight: bold;
      line-height: 40px;
      color: #1482f0;
      opacity: 0;
      margin-bottom: 20px;
      animation-name: slideUp;
      animation-duration: 0.5s;
      animation-fill-mode: forwards;
    }
    &__headline {
      font-size: 20px;
      line-height: 24px;
      color: #222;
      font-weight: bold;
      opacity: 0;
      margin-bottom: 10px;
      animation-name: slideUp;
      animation-duration: 0.5s;
      animation-delay: 0.1s;
      animation-fill-mode: forwards;
    }
    &__info {
      font-size: 13px;
      line-height: 21px;
      color: grey;
      opacity: 0;
      margin-bottom: 30px;
      animation-name: slideUp;
      animation-duration: 0.5s;
      animation-delay: 0.2s;
      animation-fill-mode: forwards;
    }
    &__return-home {
      display: block;
      float: left;
      width: 110px;
      height: 36px;
      background: #1482f0;
      border-radius: 100px;
      text-align: center;
      color: #ffffff;
      opacity: 0;
      font-size: 14px;
      line-height: 36px;
      cursor: pointer;
      animation-name: slideUp;
      animation-duration: 0.5s;
      animation-delay: 0.3s;
      animation-fill-mode: forwards;
    }
    @keyframes slideUp {
      0% {
        transform: translateY(60px);
        opacity: 0;
      }
      100% {
        transform: translateY(0);
        opacity: 1;
      }
    }
  }
}
</style>


================================================
FILE: gmall-admin/gmall-admin/src/views/baseinfo/prop/list.vue
================================================
<template>
  <div class="app-container">

    <!--三级下拉列表-->
    <CatalogSelector @listenOnSelect="getAttrInfoList" />

    <!--属性列表-->
    <div v-show="!showAttrInfoForm">
      <div style="margin-bottom:10px;">
        <el-button type="primary" icon="el-icon-plus" size="mini" @click="addAttrInfo()">添加平台属性</el-button>
      </div>

      <el-table
        v-loading="attrInfoListLoading"
        :data="attrInfoList"
        element-loading-text="数据正在加载......"
        border
        fit
        highlight-current-row>
        <el-table-column align="center" label="序号" width="100">
          <template slot-scope="scope">
            {{ scope.$index + 1 }}
          </template>
        </el-table-column>
        <el-table-column label="属性id" width="100">
          <template slot-scope="scope">
            {{ scope.row.id }}
          </template>
        </el-table-column>
        <el-table-column label="属性名称">
          <template slot-scope="scope">
            <span>{{ scope.row.attrName }}</span>
          </template>
        </el-table-column>

        <el-table-column label="操作" width="200" align="center">
          <template slot-scope="scope">
            <el-button type="primary" size="mini" icon="el-icon-edit" @click="editAttrInfoById(scope.row.id, scope.row.attrName)">修改</el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>

    <!--属性表单-->
    <el-form v-show="showAttrInfoForm" :model="attrInfoForm" :inline="true" class="demo-form-inline">

      <el-form-item label="属性名称">
        <el-input v-model="attrInfoForm.attrName"/>
      </el-form-item>

      <div style="margin-bottom:10px;">
        <el-button type="primary" icon="el-icon-plus" size="mini" @click="addAttrValue()">添加属性值</el-button>

      </div>
      <div>
        <el-table
          v-loading="attrValueListLoading"
          :data="attrInfoForm.attrValueList"
          element-loading-text="数据正在加载......"
          border
          fit
          highlight-current-row>
          <el-table-column align="center" label="序号" width="100">
            <template slot-scope="scope">
              {{ scope.$index + 1 }}
            </template>
          </el-table-column>
          <el-table-column label="属性值id" width="100">
            <template slot-scope="scope">
              {{ scope.row.id }}
            </template>
          </el-table-column>
          <el-table-column label="属性值名称">
            <!-- <template slot-scope="scope">
              <span>{{ scope.row.valueName }}</span>
            </template> -->
            <template slot-scope="scope">
              <el-input
                v-if="scope.row.edit"
                v-model="scope.row.valueName"
                class="edit-input"
                size="mini"
                @keyup.enter.native="saveAttrValue(scope.row)"
                @blur="saveAttrValue(scope.row)" />
              <span
                v-else
                @click="editAttrValue(scope.row)">{{ scope.row.valueName }}</span>
            </template>
          </el-table-column>

          <el-table-column label="操作" width="200" align="center">
            <template slot-scope="scope">
              <el-button type="danger" size="mini" icon="el-icon-edit" @click="deleteAttrValueByName(scope.row.valueName)">删除</el-button>
            </template>
          </el-table-column>
        </el-table>
      </div>

      <!--查询按钮-->
      <div style="margin-top:22px;">
        <el-button type="primary" size="mini" @click="saveAttrInfo()">保存</el-button>
        <el-button type="default" size="mini" @click="backToAttrList()">返回</el-button>
      </div>
    </el-form>

  </div>
</template>

<script>
import prop from '@/api/baseinfo/prop'
import CatalogSelector from '@/views/components/CatalogSelector'

export default {
  components: { CatalogSelector },
  data() {
    return {

      // 属性所属分类
      catalogId: null,

      // 属性列表数据
      attrInfoList: null,
      attrInfoListLoading: false,

      // 属性表单数据
      showAttrInfoForm: false,
      attrValueListLoading: false,
      attrInfoForm: {
        id: null,
        attrName: null,
        catalog3Id: null,
        attrValueList: []
      }

    }
  },

  methods: {

    // 获取属性列表
    getAttrInfoList(catalogId) {
      this.catalogId = catalogId
      // 查询数据
      this.attrInfoListLoading = true
      prop.getAttrInfoList(this.catalogId).then(response => {
        this.attrInfoList = response.data
        this.attrInfoListLoading = false
      })
    },

    // 添加平台属性
    addAttrInfo() {
      if (!this.confirmSelect()) {
        return
      }

      // 初始化值
      this.attrInfoForm.id = null
      this.attrInfoForm.attrName = null
      this.attrInfoForm.attrValueList = []

      // 显示表单
      this.showAttrInfoForm = true
    },

    // 选择三级分类确认
    confirmSelect() {
      if (!this.catalogId) {
        this.$alert('请选择三级分类', '提示', {
          confirmButtonText: '确定',
          type: 'warning'
        })
        return false
      }
      return true
    },

    // 修改属性
    editAttrInfoById(attrId, attrName) {
      // 获取属性值列表
      this.attrValueListLoading = true
      prop.getAttrValueList(attrId).then(response => {
        this.attrInfoForm.id = attrId
        this.attrInfoForm.attrName = attrName
        this.attrInfoForm.attrValueList = response.data
        this.attrValueListLoading = false
      })
      // 显示表单
      this.showAttrInfoForm = true
    },

    // 删除属性值
    deleteAttrValueByName(attrValueName) {
      const tempList = []
      this.attrInfoForm.attrValueList.forEach(attrValue => {
        if (attrValue.valueName !== attrValueName) {
          tempList.push(attrValue)
        }
      })
      this.attrInfoForm.attrValueList = tempList
    },

    // 保存属性和属性值
    saveAttrInfo() {
      this.attrInfoForm.catalog3Id = this.catalogId
      prop.saveAttrInfo(this.attrInfoForm).then(response => {
        // 刷新属性列表
        this.getAttrInfoList(this.catalogId)
        // 隐藏表单
        this.showAttrInfoForm = false
      })
    },

    // 返回属性列表页面
    backToAttrList() {
      // 隐藏表单
      this.showAttrInfoForm = false
    },

    // 添加属性值
    addAttrValue() {
      const attrValue = {
        valueName: null,
        edit: true
      }
      this.attrInfoForm.attrValueList.push(attrValue)
    },

    // 保存属性值
    saveAttrValue(row) {
      row.edit = false
    },

    // 编辑属性值
    editAttrValue(row) {
      row.edit = true
    }
  }
}
</script>

<style scoped>
.edit-input {
  padding-right: 60px;
}
.save-btn {
  position: absolute;
  right: 15px;
  top: 10px;
}
</style>



================================================
FILE: gmall-admin/gmall-admin/src/views/components/CatalogSelector.vue
================================================
<template>
  <!--查询表单-->
  <el-form :inline="true" class="demo-form-inline">

    <!-- 一级分类 -->
    <el-form-item label="一级分类">
      <el-select
        v-model="catalog1Id"
        placeholder="请选择"
        @change="catalog1Changed">
        <el-option
          v-for="catalog in catalogList1"
          :key="catalog.id"
          :label="catalog.name"
          :value="catalog.id"/>
      </el-select>
    </el-form-item>

    <!-- 二级分类 -->
    <el-form-item label="二级分类">
      <el-select
        v-model="catalog2Id"
        placeholder="请选择"
        @change="catalog2Changed">
        <el-option
          v-for="catalog in catalogList2"
          :key="catalog.id"
          :label="catalog.name"
          :value="catalog.id"/>
      </el-select>
    </el-form-item>

    <!-- 三级分类 -->
    <el-form-item label="三级分类">
      <el-select
        v-model="catalog3Id"
        placeholder="请选择"
        @change="catalog3Changed">
        <el-option
          v-for="catalog in catalogList3"
          :key="catalog.id"
          :label="catalog.name"
          :value="catalog.id"/>
      </el-select>
    </el-form-item>

  </el-form>

</template>

<script>
import prop from '@/api/components/CatalogSelector'

export default {

  data() {
    return {
      // 查询表单数据
      catalog1Id: null,
      catalog2Id: null,
      catalog3Id: null,
      catalogList1: [],
      catalogList2: [],
      catalogList3: []
    }
  },

  // 初始化一级类别
  created() {
    prop.getCatalog1().then(response => {
      this.catalogList1 = response.data
    })
  },

  methods: {
    // 切换二级类别
    catalog1Changed() {
      prop.getCatalog2(this.catalog1Id).then(response => {
        this.catalog2Id = null
        this.catalog3Id = null
        this.catalogList2 = response.data
      })

      // 清空属性列表
      this.attrInfoList = null
    },

    // 切换三级类别
    catalog2Changed() {
      prop.getCatalog3(this.catalog2Id).then(response => {
        this.catalog3Id = null
        this.catalogList3 = response.data
      })
    },

    // 显示属性列表
    catalog3Changed() {
      // 子组件向父组件传值
      this.$emit('listenOnSelect', this.catalog3Id)
    }

  }

}
</script>



================================================
FILE: gmall-admin/gmall-admin/src/views/dashboard/index.vue
================================================
<template>
  <div class="dashboard-container">
    <div class="dashboard-text">欢迎:{{ name }}</div>
    <div class="dashboard-text">角色:<span v-for="role in roles" :key="role">{{ role }}</span></div>
  </div>
</template>

<script>
import { mapGetters } from 'vuex'

export default {
  name: 'Dashboard',
  computed: {
    ...mapGetters([
      'name',
      'roles'
    ])
  }
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
.dashboard {
  &-container {
    margin: 30px;
  }
  &-text {
    font-size: 30px;
    line-height: 46px;
  }
}
</style>


================================================
FILE: gmall-admin/gmall-admin/src/views/form/index.vue
================================================
<template>
  <div class="app-container">
    <el-form ref="form" :model="form" label-width="120px">
      <el-form-item label="Activity name">
        <el-input v-model="form.name"/>
      </el-form-item>
      <el-form-item label="Activity zone">
        <el-select v-model="form.region" placeholder="please select your zone">
          <el-option label="Zone one" value="shanghai"/>
          <el-option label="Zone two" value="beijing"/>
        </el-select>
      </el-form-item>
      <el-form-item label="Activity time">
        <el-col :span="11">
          <el-date-picker v-model="form.date1" type="date" placeholder="Pick a date" style="width: 100%;"/>
        </el-col>
        <el-col :span="2" class="line">-</el-col>
        <el-col :span="11">
          <el-time-picker v-model="form.date2" type="fixed-time" placeholder="Pick a time" style="width: 100%;"/>
        </el-col>
      </el-form-item>
      <el-form-item label="Instant delivery">
        <el-switch v-model="form.delivery"/>
      </el-form-item>
      <el-form-item label="Activity type">
        <el-checkbox-group v-model="form.type">
          <el-checkbox label="Online activities" name="type"/>
          <el-checkbox label="Promotion activities" name="type"/>
          <el-checkbox label="Offline activities" name="type"/>
          <el-checkbox label="Simple brand exposure" name="type"/>
        </el-checkbox-group>
      </el-form-item>
      <el-form-item label="Resources">
        <el-radio-group v-model="form.resource">
          <el-radio label="Sponsor"/>
          <el-radio label="Venue"/>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="Activity form">
        <el-input v-model="form.desc" type="textarea"/>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="onSubmit">Create</el-button>
        <el-button @click="onCancel">Cancel</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      form: {
        name: '',
        region: '',
        date1: '',
        date2: '',
        delivery: false,
        type: [],
        resource: '',
        desc: ''
      }
    }
  },
  methods: {
    onSubmit() {
      this.$message('submit!')
    },
    onCancel() {
      this.$message({
        message: 'cancel!',
        type: 'warning'
      })
    }
  }
}
</script>

<style scoped>
.line{
  text-align: center;
}
</style>



================================================
FILE: gmall-admin/gmall-admin/src/views/layout/Layout.vue
================================================
<template>
  <div :class="classObj" class="app-wrapper">
    <div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside"/>
    <sidebar class="sidebar-container"/>
    <div class="main-container">
      <navbar/>
      <app-main/>
    </div>
  </div>
</template>

<script>
import { Navbar, Sidebar, AppMain } from './components'
import ResizeMixin from './mixin/ResizeHandler'

export default {
  name: 'Layout',
  components: {
    Navbar,
    Sidebar,
    AppMain
  },
  mixins: [ResizeMixin],
  computed: {
    sidebar() {
      return this.$store.state.app.sidebar
    },
    device() {
      return this.$store.state.app.device
    },
    classObj() {
      return {
        hideSidebar: !this.sidebar.opened,
        openSidebar: this.sidebar.opened,
        withoutAnimation: this.sidebar.withoutAnimation,
        mobile: this.device === 'mobile'
      }
    }
  },
  methods: {
    handleClickOutside() {
      this.$store.dispatch('CloseSideBar', { withoutAnimation: false })
    }
  }
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
  @import "src/styles/mixin.scss";
  .app-wrapper {
    @include clearfix;
    position: relative;
    height: 100%;
    width: 100%;
    &.mobile.openSidebar{
      position: fixed;
      top: 0;
    }
  }
  .drawer-bg {
    background: #000;
    opacity: 0.3;
    width: 100%;
    top: 0;
    height: 100%;
    position: absolute;
    z-index: 999;
  }
</style>


================================================
FILE: gmall-admin/gmall-admin/src/views/layout/components/AppMain.vue
================================================
<template>
  <section class="app-main">
    <transition name="fade-transform" mode="out-in">
      <!-- or name="fade" -->
      <!-- <router-view :key="key"></router-view> -->
      <router-view/>
    </transition>
  </section>
</template>

<script>
export default {
  name: 'AppMain',
  computed: {
    // key() {
    //   return this.$route.name !== undefined ? this.$route.name + +new Date() : this.$route + +new Date()
    // }
  }
}
</script>

<style scoped>
.app-main {
  /*50 = navbar  */
  min-height: calc(100vh - 50px);
  position: relative;
  overflow: hidden;
}
</style>


================================================
FILE: gmall-admin/gmall-admin/src/views/layout/components/Navbar.vue
================================================
<template>
  <el-menu class="navbar" mode="horizontal">
    <hamburger :toggle-click="toggleSideBar" :is-active="sidebar.opened" class="hamburger-container"/>
    <breadcrumb />
    <el-dropdown class="avatar-container" trigger="click">
      <div class="avatar-wrapper">
        <img :src="avatar+'?imageView2/1/w/80/h/80'" class="user-avatar">
        <i class="el-icon-caret-bottom"/>
      </div>
      <el-dropdown-menu slot="dropdown" class="user-dropdown">
        <router-link class="inlineBlock" to="/">
          <el-dropdown-item>
            首页
          </el-dropdown-item>
        </router-link>
        <el-dropdown-item divided>
          <span style="display:block;" @click="logout">退出</span>
        </el-dropdown-item>
      </el-dropdown-menu>
    </el-dropdown>
  </el-menu>
</template>

<script>
import { mapGetters } from 'vuex'
import Breadcrumb from '@/components/Breadcrumb'
import Hamburger from '@/components/Hamburger'

export default {
  components: {
    Breadcrumb,
    Hamburger
  },
  computed: {
    ...mapGetters([
      'sidebar',
      'avatar'
    ])
  },
  methods: {
    toggleSideBar() {
      this.$store.dispatch('ToggleSideBar')
    },
    logout() {
      this.$store.dispatch('LogOut').then(() => {
        location.reload() // 为了重新实例化vue-router对象 避免bug
      })
    }
  }
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
.navbar {
  height: 50px;
  line-height: 50px;
  border-radius: 0px !important;
  .hamburger-container {
    line-height: 58px;
    height: 50px;
    float: left;
    padding: 0 10px;
  }
  .screenfull {
    position: absolute;
    right: 90px;
    top: 16px;
    color: red;
  }
  .avatar-container {
    height: 50px;
    display: inline-block;
    position: absolute;
    right: 35px;
    .avatar-wrapper {
      cursor: pointer;
      margin-top: 5px;
      position: relative;
      line-height: initial;
      .user-avatar {
        width: 40px;
        height: 40px;
        border-radius: 10px;
      }
      .el-icon-caret-bottom {
        position: absolute;
        right: -20px;
        top: 25px;
        font-size: 12px;
      }
    }
  }
}
</style>



================================================
FILE: gmall-admin/gmall-admin/src/views/layout/components/Sidebar/Item.vue
================================================
<script>
export default {
  name: 'MenuItem',
  functional: true,
  props: {
    icon: {
      type: String,
      default: ''
    },
    title: {
      type: String,
      default: ''
    }
  },
  render(h, context) {
    const { icon, title } = context.props
    const vnodes = []

    if (icon) {
      vnodes.push(<svg-icon icon-class={icon}/>)
    }

    if (title) {
      vnodes.push(<span slot='title'>{(title)}</span>)
    }
    return vnodes
  }
}
</script>


================================================
FILE: gmall-admin/gmall-admin/src/views/layout/components/Sidebar/Link.vue
================================================

<template>
  <!-- eslint-disable vue/require-component-is-->
  <component v-bind="linkProps(to)">
    <slot/>
  </component>
</template>

<script>
import { isExternal } from '@/utils'

export default {
  props: {
    to: {
      type: String,
      required: true
    }
  },
  methods: {
    isExternalLink(routePath) {
      return isExternal(routePath)
    },
    linkProps(url) {
      if (this.isExternalLink(url)) {
        return {
          is: 'a',
          href: url,
          target: '_blank',
          rel: 'noopener'
        }
      }
      return {
        is: 'router-link',
        to: url
      }
    }
  }
}
</script>


================================================
FILE: gmall-admin/gmall-admin/src/views/layout/components/Sidebar/SidebarItem.vue
================================================
<template>
  <div v-if="!item.hidden&&item.children" class="menu-wrapper">

    <template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
      <app-link :to="resolvePath(onlyOneChild.path)">
        <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
          <item v-if="onlyOneChild.meta" :icon="onlyOneChild.meta.icon||item.meta.icon" :title="onlyOneChild.meta.title" />
        </el-menu-item>
      </app-link>
    </template>

    <el-submenu v-else :index="resolvePath(item.path)">
      <template slot="title">
        <item v-if="item.meta" :icon="item.meta.icon" :title="item.meta.title" />
      </template>

      <template v-for="child in item.children" v-if="!child.hidden">
        <sidebar-item
          v-if="child.children&&child.children.length>0"
          :is-nest="true"
          :item="child"
          :key="child.path"
          :base-path="resolvePath(child.path)"
          class="nest-menu" />
        <app-link v-else :to="resolvePath(child.path)" :key="child.name">
          <el-menu-item :index="resolvePath(child.path)">
            <item v-if="child.meta" :icon="child.meta.icon" :title="child.meta.title" />
          </el-menu-item>
        </app-link>
      </template>
    </el-submenu>

  </div>
</template>

<script>
import path from 'path'
import { isExternal } from '@/utils'
import Item from './Item'
import AppLink from './Link'

export default {
  name: 'SidebarItem',
  components: { Item, AppLink },
  props: {
    // route object
    item: {
      type: Object,
      required: true
    },
    isNest: {
      type: Boolean,
      default: false
    },
    basePath: {
      type: String,
      default: ''
    }
  },
  data() {
    return {
      onlyOneChild: null
    }
  },
  methods: {
    hasOneShowingChild(children, parent) {
      const showingChildren = children.filter(item => {
        if (item.hidden) {
          return false
        } else {
          // Temp set(will be used if only has one showing child)
          this.onlyOneChild = item
          return true
        }
      })

      // When there is only one child router, the child router is displayed by default
      if (showingChildren.length === 1) {
        return true
      }

      // Show parent if there are no child router to display
      if (showingChildren.length === 0) {
        this.onlyOneChild = { ... parent, path: '', noShowingChildren: true }
        return true
      }

      return false
    },
    resolvePath(routePath) {
      if (this.isExternalLink(routePath)) {
        return routePath
      }
      return path.resolve(this.basePath, routePath)
    },
    isExternalLink(routePath) {
      return isExternal(routePath)
    }
  }
}
</script>


================================================
FILE: gmall-admin/gmall-admin/src/views/layout/components/Sidebar/index.vue
================================================
<template>
  <el-scrollbar wrap-class="scrollbar-wrapper">
    <el-menu
      :show-timeout="200"
      :default-active="$route.path"
      :collapse="isCollapse"
      mode="vertical"
      background-color="#304156"
      text-color="#bfcbd9"
      active-text-color="#409EFF"
    >
      <sidebar-item v-for="route in routes" :key="route.path" :item="route" :base-path="route.path"/>
    </el-menu>
  </el-scrollbar>
</template>

<script>
import { mapGetters } from 'vuex'
import SidebarItem from './SidebarItem'

export default {
  components: { SidebarItem },
  computed: {
    ...mapGetters([
      'sidebar'
    ]),
    routes() {
      return this.$router.options.routes
    },
    isCollapse() {
      return !this.sidebar.opened
    }
  }
}
</script>


================================================
FILE: gmall-admin/gmall-admin/src/views/layout/components/index.js
================================================
export { default as Navbar } from './Navbar'
export { default as Sidebar } from './Sidebar'
export { default as AppMain } from './AppMain'


================================================
FILE: gmall-admin/gmall-admin/src/views/layout/mixin/ResizeHandler.js
================================================
import store from '@/store'

const { body } = document
const WIDTH = 1024
const RATIO = 3

export default {
  watch: {
    $route(route) {
      if (this.device === 'mobile' && this.sidebar.opened) {
        store.dispatch('CloseSideBar', { withoutAnimation: false })
      }
    }
  },
  beforeMount() {
    window.addEventListener('resize', this.resizeHandler)
  },
  mounted() {
    const isMobile = this.isMobile()
    if (isMobile) {
      store.dispatch('ToggleDevice', 'mobile')
      store.dispatch('CloseSideBar', { withoutAnimation: true })
    }
  },
  methods: {
    isMobile() {
      const rect = body.getBoundingClientRect()
      return rect.width - RATIO < WIDTH
    },
    resizeHandler() {
      if (!document.hidden) {
        const isMobile = this.isMobile()
        store.dispatch('ToggleDevice', isMobile ? 'mobile' : 'desktop')

        if (isMobile) {
          store.dispatch('CloseSideBar', { withoutAnimation: true })
        }
      }
    }
  }
}


================================================
FILE: gmall-admin/gmall-admin/src/views/login/index.vue
================================================
<template>
  <div class="login-container">
    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" label-position="left">
      <h3 class="title">谷粒商城后台管理系统</h3>
      <el-form-item prop="username">
        <span class="svg-container">
          <svg-icon icon-class="user" />
        </span>
        <el-input v-model="loginForm.username" name="username" type="text" auto-complete="on" placeholder="username" />
      </el-form-item>
      <el-form-item prop="password">
        <span class="svg-container">
          <svg-icon icon-class="password" />
        </span>
        <el-input
          :type="pwdType"
          v-model="loginForm.password"
          name="password"
          auto-complete="on"
          placeholder="password"
          @keyup.enter.native="handleLogin" />
        <span class="show-pwd" @click="showPwd">
          <svg-icon icon-class="eye" />
        </span>
      </el-form-item>
      <el-form-item>
        <el-button :loading="loading" type="primary" style="width:100%;" @click.native.prevent="handleLogin">
          登录
        </el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
import { isvalidUsername } from '@/utils/validate'

export default {
  name: 'Login',
  data() {
    const validateUsername = (rule, value, callback) => {
      if (!isvalidUsername(value)) {
        callback(new Error('请输入正确的用户名'))
      } else {
        callback()
      }
    }
    const validatePass = (rule, value, callback) => {
      if (value.length < 5) {
        callback(new Error('密码不能小于5位'))
      } else {
        callback()
      }
    }
    return {
      loginForm: {
        username: 'admin',
        password: 'admin'
      },
      loginRules: {
        username: [{ required: true, trigger: 'blur', validator: validateUsername }],
        password: [{ required: true, trigger: 'blur', validator: validatePass }]
      },
      loading: false,
      pwdType: 'password',
      redirect: undefined
    }
  },
  watch: {
    $route: {
      handler: function(route) {
        this.redirect = route.query && route.query.redirect
      },
      immediate: true
    }
  },
  methods: {
    showPwd() {
      if (this.pwdType === 'password') {
        this.pwdType = ''
      } else {
        this.pwdType = 'password'
      }
    },
    handleLogin() {
      this.$refs.loginForm.validate(valid => {
        if (valid) {
          this.loading = true
          this.$store.dispatch('Login', this.loginForm).then(() => {
            this.loading = false
            this.$router.push({ path: this.redirect || '/' })
          }).catch(() => {
            this.loading = false
          })
        } else {
          console.log('error submit!!')
          return false
        }
      })
    }
  }
}
</script>

<style rel="stylesheet/scss" lang="scss">
$bg:#2d3a4b;
$light_gray:#eee;

/* reset element-ui css */
.login-container {
  .el-input {
    display: inline-block;
    height: 47px;
    width: 85%;
    input {
      background: transparent;
      border: 0px;
      -webkit-appearance: none;
      border-radius: 0px;
      padding: 12px 5px 12px 15px;
      color: $light_gray;
      height: 47px;
      &:-webkit-autofill {
        -webkit-box-shadow: 0 0 0px 1000px $bg inset !important;
        -webkit-text-fill-color: #fff !important;
      }
    }
  }
  .el-form-item {
    border: 1px solid rgba(255, 255, 255, 0.1);
    background: rgba(0, 0, 0, 0.1);
    border-radius: 5px;
    color: #454545;
  }
}

</style>

<style rel="stylesheet/scss" lang="scss" scoped>
$bg:#2d3a4b;
$dark_gray:#889aa4;
$light_gray:#eee;
.login-container {
  position: fixed;
  height: 100%;
  width: 100%;
  background-color: $bg;
  .login-form {
    position: absolute;
    left: 0;
    right: 0;
    width: 520px;
    max-width: 100%;
    padding: 35px 35px 15px 35px;
    margin: 120px auto;
  }
  .tips {
    font-size: 14px;
    color: #fff;
    margin-bottom: 10px;
    span {
      &:first-of-type {
        margin-right: 16px;
      }
    }
  }
  .svg-container {
    padding: 6px 5px 6px 15px;
    color: $dark_gray;
    vertical-align: middle;
    width: 30px;
    display: inline-block;
  }
  .title {
    font-size: 26px;
    font-weight: 400;
    color: $light_gray;
    margin: 0px auto 40px auto;
    text-align: center;
    font-weight: bold;
  }
  .show-pwd {
    position: absolute;
    right: 10px;
    top: 7px;
    font-size: 16px;
    color: $dark_gray;
    cursor: pointer;
    user-select: none;
  }
}
</style>


================================================
FILE: gmall-admin/gmall-admin/src/views/nested/menu1/index.vue
================================================
<template >
  <div style="padding:30px;">
    <el-alert :closable="false" title="menu 1">
      <router-view />
    </el-alert>
  </div>
</template>


================================================
FILE: gmall-admin/gmall-admin/src/views/nested/menu1/menu1-1/index.vue
================================================
<template >
  <div style="padding:30px;">
    <el-alert :closable="false" title="menu 1-1" type="success">
      <router-view />
    </el-alert>
  </div>
</template>


================================================
FILE: gmall-admin/gmall-admin/src/views/nested/menu1/menu1-2/index.vue
================================================
<template>
  <div style="padding:30px;">
    <el-alert :closable="false" title="menu 1-2" type="success">
      <router-view />
    </el-alert>
  </div>
</template>


================================================
FILE: gmall-admin/gmall-admin/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue
================================================
<template functional>
  <div style="padding:30px;">
    <el-alert :closable="false" title="menu 1-2-1" type="warning" />
  </div>
</template>


================================================
FILE: gmall-admin/gmall-admin/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue
================================================
<template functional>
  <div style="padding:30px;">
    <el-alert :closable="false" title="menu 1-2-2" type="warning" />
  </div>
</template>


================================================
FILE: gmall-admin/gmall-admin/src/views/nested/menu1/menu1-3/index.vue
================================================
<template functional>
  <div style="padding:30px;">
    <el-alert :closable="false" title="menu 1-3" type="success" />
  </div>
</template>


================================================
FILE: gmall-admin/gmall-admin/src/views/nested/menu2/index.vue
================================================
<template>
  <div style="padding:30px;">
    <el-alert :closable="false" title="menu 2" />
  </div>
</template>


================================================
FILE: gmall-admin/gmall-admin/src/views/product/components/SkuForm.vue
================================================
<template>
  <div>

    <!--基本表单-->
    <el-form :model="skuForm" label-width="150px">

      <el-form-item label="spu名称">
        <span>{{ spuName }} </span>
      </el-form-item>

      <el-form-item label="sku名称">
        <el-input v-model="skuForm.skuName"/>
      </el-form-item>

      <el-form-item label="商品价格">
        <el-input v-model="skuForm.price"/>
      </el-form-item>

      <el-form-item label="商品重量(千克)">
        <el-input v-model="skuForm.weight"/>
      </el-form-item>

      <el-form-item label="商品规格描述">
        <el-input v-model="skuForm.skuDesc" :rows="5" type="textarea"/>
      </el-form-item>

    </el-form>

    <!--平台属性表单-->
    <el-form :model="skuForm" :inline="true" label-width="150px" class="demo-form-inline">
      <el-form-item
        v-for="(attrInfo, index) in attrInfoList"
        :key="attrInfo.id"
        :label="attrInfo.attrName">

        <el-select
          v-model="skuAttrValueListTemp[index]"
          placeholder="请选择">
          <el-option
            v-for="attrValue in attrInfo.attrValueList"
            :key="attrValue.id"
            :label="attrValue.valueName"
            :value="attrInfo.id+'|'+attrValue.id"/>
        </el-select>
      </el-form-item>
    </el-form>

    <!--销售属性表单-->
    <el-form :model="skuForm" :inline="true" label-width="150px" class="demo-form-inline">
      <el-form-item
        v-for="(saleAttr, index) in saleAttrList"
        :key="saleAttr.saleAttrId"
        :label="saleAttr.saleAttrName">

        <el-select
          v-model="skuSaleAttrValueListTemp[index]"
          placeholder="请选择">
          <el-option
            v-for="spuSaleAttrValue in saleAttr.spuSaleAttrValueList"
            :key="spuSaleAttrValue.id"
            :label="spuSaleAttrValue.saleAttrValueName"
            :value="spuSaleAttrValue.id+'|'+spuSaleAttrValue.saleAttrValueName+'|'+ saleAttr.saleAttrId+'|'+saleAttr.saleAttrName"/>
        </el-select>
      </el-form-item>
    </el-form>

    <!-- 图片列表 -->
    <el-table
      v-loading="skuImageListLoading"
      ref="skuImageListTable"
      :data="skuImageList"
      element-loading-text="数据正在加载......"
      border
      fit
      highlight-current-row
      @selection-change="handleSelectionChange">
      <el-table-column align="center" label="序号" width="100">
        <template slot-scope="scope">
          {{ scope.$index + 1 }}
        </template>
      </el-table-column>
      <el-table-column label="图片" width="200">
        <template slot-scope="scope">
          <img :src="scope.row.imgUrl" :alt="scope.row.imgName" width="178">
        </template>
      </el-table-column>
      <el-table-column label="图片名称">
        <template slot-scope="scope">
          {{ scope.row.imgName }}
        </template>
      </el-table-column>
      <el-table-column
        type="selection"
        width="55"/>
      <el-table-column label="操作">
        <template slot-scope="scope">
          <el-tag v-if="scope.row.default" size="mini" type="success">默认</el-tag>
          <el-button v-else type="primary" size="mini" @click="setDefault(scope.row)">设为默认</el-button>
        </template>
      </el-table-column>
    </el-table>

    <!--表单按钮-->
    <el-form :model="skuForm" label-width="150px">
      <!--按钮-->
      <div style="margin-top:22px;">
        <el-button type="primary" size="mini" @click="saveSkuInfo()">保存</el-button>
        <el-button type="default" size="mini" @click="backToSpuList()">返回</el-button>
      </div>
    </el-form>

  </div>
</template>

<script>
import prop from '@/api/baseinfo/prop'
import spu from '@/api/product/spu'
import sku from '@/api/product/sku'

export default {

  props: {
    catalogId: {
      type: String,
      default: null
    },
    spuId: {
      type: String,
      default: null
    },
    spuName: {
      type: String,
      default: null
    }
  },

  data() {
    return {

      // Sku表单数据
      skuForm: {
        id: null,
        spuId: null,
        price: null,
        skuName: null,
        weight: null,
        skuDesc: null,
        catalog3Id: null,

        skuAttrValueList: [],
        skuSaleAttrValueList: [],
        skuImageList: [],
        skuDefaultImg: null
      },

      // 平台属性列表数据
      attrInfoList: [],
      // 销售属性列表数据
      saleAttrList: [],
      // 图片列表数据
      skuImageList: [],
      // 图片列表多选选中的数据
      multipleSelectionSkuImageList: [],
      skuImageListLoading: false,

      // 当前sku的平台属性:格式:attrId|valueId
      skuAttrValueListTemp: [],
      // 当前sku的销售属性:格式:saleAttrValueId|saleAttrValueName|saleAttrId|saleAttrName
      skuSaleAttrValueListTemp: []
    }
  },

  methods: {

    init(spuId) {
      // Sku表单数据
      this.skuForm = {
        id: null,
        spuId: null,
        price: null,
        skuName: null,
        weight: null,
        skuDesc: null,
        catalog3Id: null,

        skuAttrValueList: [],
        skuSaleAttrValueList: [],
        skuImageList: [],
        skuDefaultImg: null
      }

      // 获取平台属性列表
      this.getAttrInfoList()
      // 获取销售属性列表
      this.getSaleAttrList(spuId)
      // 获取图片列表
      this.getSpuImageList(spuId)
    },

    // 获取平台属性列表
    getAttrInfoList() {
      // 查询数据
      prop.getAttrInfoList(this.catalogId).then(response => {
        this.attrInfoList = response.data
      })
    },

    // 获取销售属性列表
    getSaleAttrList(spuId) {
      // 查询数据
      spu.getSpuSaleAttrList(spuId).then(response => {
        this.saleAttrList = response.data
      })
    },

    // 获取图片列表
    getSpuImageList(spuId) {
      // 查询数据
      spu.getSpuImageList(spuId).then(response => {
        this.skuImageList = response.data
      })
    },

    // 设为默认
    setDefault(row) {
      this.skuImageList.forEach(skuImage => {
        skuImage.default = false
      })
      row.default = true
    },

    // 图片多选的数据
    handleSelectionChange(val) {
      this.multipleSelectionSkuImageList = val
    },

    // 保存Sku
    saveSkuInfo() {
      this.skuForm.catalog3Id = this.catalogId
      this.skuForm.spuId = this.spuId

      // 填充平台属性
      this.skuForm.skuAttrValueList = []
      this.skuAttrValueListTemp.forEach(skuAttrValueTemp => {
        const arr = skuAttrValueTemp.split('|')
        const skuAttrValue = {
          attrId: arr[0],
          valueId: arr[1]
        }
        this.skuForm.skuAttrValueList.push(skuAttrValue)
      })

      // 填充销售属性
      this.skuForm.skuSaleAttrValueList = []
      this.skuSaleAttrValueListTemp.forEach(skuSaleAttrValueTemp => {
        const arr = skuSaleAttrValueTemp.split('|')
        const skuSaleAttrValue = {
          saleAttrValueId: arr[0],
          saleAttrValueName: arr[1],
          saleAttrId: arr[2],
          saleAttrName: arr[3]
        }
        this.skuForm.skuSaleAttrValueList.push(skuSaleAttrValue)
      })

      // 填充图片列表
      this.skuForm.skuImageList = []
      this.multipleSelectionSkuImageList.forEach(skuImageTemp => {
        const skuImage = {
          spuImgId: skuImageTemp.id,
          imgName: skuImageTemp.imgName,
          imgUrl: skuImageTemp.imgUrl,
          isDefault: skuImageTemp.default ? 1 : 0
        }
        this.skuForm.skuImageList.push(skuImage)

        if (skuImageTemp.default) {
          this.skuForm.skuDefaultImg = skuImageTemp.imgUrl
        }
      })

      // console.log(this.skuForm)

      sku.saveSkuInfo(this.skuForm).then(response => {
        // 调用父组件监听函数
        this.$emit('listenOnSave')
      })
    },

    // 返回Spu列表页面
    backToSpuList() {
      this.$emit('listenOnClose')
    }
  }
}
</script>



================================================
FILE: gmall-admin/gmall-admin/src/views/product/components/SpuForm.vue
================================================
<template>
  <!--表单-->
  <el-form :model="spuForm" label-width="70px">

    <el-form-item label="spu名称">
      <el-input v-model="spuForm.productName"/>
    </el-form-item>

    <el-form-item label="spu描述">
      <el-input v-model="spuForm.description" :rows="5" type="textarea"/>
    </el-form-item>

    <el-form-item label="图片上传" >
      <el-upload
        :on-success="onUploadSuccess"
        :before-upload="beforeUpload"
        :on-preview="onUploadPreview"
        :on-remove="onUploadRemove"
        :multiple="true"
        :action="BASE_API+'/fileUpload'"
        class="upload-demo"
        list-type="picture-card">
        <i class="el-icon-plus"/>
        <div slot="tip" class="el-upload__tip">只能上传jpg/png/gif文件,且不超过2MB</div>
      </el-upload>
    </el-form-item>

    <div style="margin-bottom:10px;">
      <el-button type="primary" icon="el-icon-plus" size="mini" @click="addSaleAttr()">添加销售属性</el-button>
    </div>
    <div>
      <el-table
        v-loading="spuSaleAttrListLoading"
        ref="spuSaleAttrTable"
        :data="spuSaleAttrListTemp"
        element-loading-text="数据正在加载......"
        border
        fit
        highlight-current-row>
        <el-table-column align="center" label="序号" width="100">
          <template slot-scope="scope">
            {{ scope.$index + 1 }}
          </template>
        </el-table-column>
        <el-table-column label="销售属性id" width="100">
          <template slot-scope="scope">
            {{ scope.row.saleAttrId }}
          </template>
        </el-table-column>
        <el-table-column label="销售属性名称" width="200">
          <template slot-scope="scope">
            <el-select
              ref="saleAttr"
              v-model="scope.row.saleAttr"
              placeholder="请选择">
              <el-option
                v-for="baseSaleAttr in baseSaleAttrList"
                :key="baseSaleAttr.id"
                :label="baseSaleAttr.name"
                :value="baseSaleAttr.id+'|'+baseSaleAttr.name"/>
            </el-select>
          </template>
        </el-table-column>

        <el-table-column label="销售属性值">
          <template slot-scope="scope">
            <el-tag
              v-for="tag in scope.row.spuSaleAttrValueList"
              :key="tag"
              :disable-transitions="false"
              closable
              @close="handleTagClose(tag, scope.row)">
              {{ tag }}
            </el-tag>

            <el-input
              v-if="scope.row.edit"
              v-model="scope.row.saleAttrValue"
              class="input-new-tag"
              size="small"
              @keyup.enter.native="saveAttrValue(scope.row)"
              @blur="saveAttrValue(scope.row)" />
            <el-button v-else class="button-new-tag" size="small" @click="editAttrValue(scope.row)">+ 添加</el-button>

        </template></el-table-column>

        <el-table-column label="操作" width="200" align="center">
          <template slot-scope="scope">
            <el-button type="danger" size="mini" icon="el-icon-edit" @click="deleteSaleAttr(scope.row.saleAttr)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>

    <!--按钮-->
    <div style="margin-top:22px;">
      <el-button type="primary" size="mini" @click="saveSpuInfo()">保存</el-button>
      <el-button type="default" size="mini" @click="backToSpuList()">返回</el-button>
    </div>

    <!--图片预览-->
    <el-dialog :visible.sync="dialogImageVisible">
      <img :src="dialogImageUrl" width="100%" alt="">
    </el-dialog>
  </el-form>

</template>

<script>
import spu from '@/api/product/spu'
export default {

  props: {
    catalogId: {
      type: String,
      default: null
    }
  },

  data() {
    return {

      // 接口API地址
      BASE_API: process.env.BASE_API,

      // 基本销售属性列表
      baseSaleAttrList: [],

      // Spu表单数据
      spuForm: {
        id: null,
        productName: null,
        description: null,
        catalog3Id: null,
        // 上传文件列表
        spuImageList: [],
        // 销售属性
        spuSaleAttrList: []
      },
      spuSaleAttrListTemp: [], // 临时数据:格式:saleAttrId|saleAttrName

      // 销售属性列表loading
      spuSaleAttrListLoading: false,

      // 图片预览区域url
      dialogImageUrl: '',
      // 图片预览对话框
      dialogImageVisible: false

    }
  },

  methods: {

    init() {
      // 初始化值
      // Spu表单数据
      this.spuForm = {
        id: null,
        productName: null,
        description: null,
        catalog3Id: null,
        // 上传文件列表
        spuImageList: [],
        // 销售属性
        spuSaleAttrList: []
      }

      this.getBaseSaleAttrList()
    },

    // 获取基本销售属性列表
    getBaseSaleAttrList() {
      spu.getBaseSaleAttrList().then(response => {
        this.baseSaleAttrList = response.data
      })
    },

    // 保存Spu
    saveSpuInfo() {
      this.spuForm.catalog3Id = this.catalogId
      this.spuForm.spuSaleAttrList = []
      this.spuSaleAttrListTemp.forEach(spuSaleAttr => {
        // 处理销售属性
        const arr = spuSaleAttr.saleAttr.split('|')
        spuSaleAttr.saleAttrId = arr[0]
        spuSaleAttr.saleAttrName = arr[1]
        const saleAttr = {
          saleAttrId: arr[0],
          saleAttrName: arr[1],
          spuSaleAttrValueList: []
        }

        // 处理销售属性值
        spuSaleAttr.spuSaleAttrValueList.forEach(spuSaleAttrValue => {
          const saleAttrValue = {
            saleAttrId: arr[0],
            saleAttrValueName: spuSaleAttrValue
          }
          saleAttr.spuSaleAttrValueList.push(saleAttrValue)
        })

        this.spuForm.spuSaleAttrList.push(saleAttr)
      })

      // console.log(this.spuForm)

      spu.saveSpuInfo(this.spuForm).then(response => {
        // 调用父组件监听函数
        this.$emit('listenOnSave')
      })
    },

    // 返回Spu列表页面
    backToSpuList() {
      this.$emit('listenOnClose')
    },

    // 文件上传限制条件
    beforeUpload(file) {
      const isJPG = file.type === 'image/jpeg'
      const isPNG = file.type === 'image/png'
      const isGIF = file.type === 'image/gif'
      const isLt2M = file.size / 1024 / 1024 < 2

      if (!isJPG && !isPNG && !isGIF) {
        this.$message.error('上传头像图片只能是 JPG、PNG 或 GIF 格式!')
        return false
      }
      if (!isLt2M) {
        this.$message.error('上传头像图片大小不能超过 2MB!')
        return false
      }
      return true
    },

    // 上传图片成功的回调
    onUploadSuccess(res, file) {
      // 填充上传文件列表
      this.spuForm.spuImageList.push({
        imgName: file.name,
        imgUrl: file.response
      })
    },

    // 上传的文件预览
    onUploadPreview(file) {
      this.dialogImageUrl = file.url
      this.dialogImageVisible = true
    },

    // 删除上传的文件
    onUploadRemove(file, fileList) {
      this.spuForm.spuImageList = []
      fileList.forEach(file => {
        this.spuForm.spuImageList.push({
          imgName: file.name,
          imgUrl: file.response
        })
      })
    },

    // 添加销售属性
    addSaleAttr() {
      const saleAttr = {
        saleAttr: null, // id|name 字符串
        saleAttrValue: null, // current input tag
        edit: false,
        spuSaleAttrValueList: [] // [tag1, tag2, tag3]
      }
      this.spuSaleAttrListTemp.push(saleAttr)
    },

    // 根据name删除销售属性
    deleteSaleAttr(saleAttr) {
      const tempList = []
      this.spuForm.spuSaleAttrList.forEach(item => {
        if (item.saleAttr !== saleAttr) {
          tempList.push(item)
        }
      })
      this.spuForm.spuSaleAttrList = tempList
    },

    // 添加销售属性值
    editAttrValue(row) {
      row.edit = true
    },

    // 保存销售属性值
    saveAttrValue(row) {
      if (!row.spuSaleAttrValueList) {
        row.spuSaleAttrValueList = []
      }

      const saleAttrValue = row.saleAttrValue
      if (saleAttrValue) {
        row.spuSaleAttrValueList.push(saleAttrValue)
      }

      row.saleAttrValue = ''
      row.edit = false
    },

    // 删除销售属性值
    handleTagClose(tag, row) {
      const index = row.spuSaleAttrValueList.indexOf(tag)
      row.spuSaleAttrValueList.splice(index, 1)
    }
  }
}
</script>

<style scoped>
.el-tag + .el-tag {
    margin-left: 10px;
  }
  .button-new-tag {
    margin-left: 10px;
    height: 32px;
    line-height: 30px;
    padding-top: 0;
    padding-bottom: 0;
  }
  .input-new-tag {
    width: 90px;
    margin-left: 10px;
    vertical-align: bottom;
  }
</style>


================================================
FILE: gmall-admin/gmall-admin/src/views/product/components/SpuForm.vue.bak
================================================
<template>
  <!--表单-->
  <el-form :model="spuForm" label-width="70px">

    <el-form-item label="spu名称">
      <el-input v-model="spuForm.spuName"/>
    </el-form-item>

    <el-form-item label="spu描述">
      <el-input v-model="spuForm.description" :rows="5" type="textarea"/>
    </el-form-item>

    <el-form-item label="图片上传" >
      <el-upload
        :on-success="onUploadSuccess"
        :before-upload="beforeUpload"
        :on-preview="onUploadPreview"
        :on-remove="onUploadRemove"
        :multiple="true"
        :action="BASE_API+'/fileUpload'"
        class="upload-demo"
        list-type="picture-card">
        <i class="el-icon-plus"/>
        <div slot="tip" class="el-upload__tip">只能上传jpg/png/gif文件,且不超过2MB</div>
      </el-upload>
    </el-form-item>

    <div style="margin-bottom:10px;">
      <el-button type="primary" icon="el-icon-plus" size="mini" @click="addSaleAttr()">添加销售属性</el-button>
    </div>
    <div>
      <el-table
        v-loading="spuSaleAttrListLoading"
        ref="spuSaleAttrTable"
        :data="spuSaleAttrListTemp"
        element-loading-text="数据正在加载......"
        border
        fit
        highlight-current-row>
        <el-table-column align="center" label="序号" width="100">
          <template slot-scope="scope">
            {{ scope.$index + 1 }}
          </template>
        </el-table-column>
        <el-table-column label="销售属性id" width="100">
          <template slot-scope="scope">
            {{ scope.row.saleAttrId }}
          </template>
        </el-table-column>
        <el-table-column label="销售属性名称" width="200">
          <template slot-scope="scope">
            <el-select
              ref="saleAttr"
              v-model="scope.row.saleAttr"
              placeholder="请选择">
              <el-option
                v-for="baseSaleAttr in baseSaleAttrList"
                :key="baseSaleAttr.id"
                :label="baseSaleAttr.name"
                :value="baseSaleAttr.id+'|'+baseSaleAttr.name"/>
            </el-select>
          </template>
        </el-table-column>

        <el-table-column label="销售属性值">
          <template slot-scope="scope">
            <el-tag
              v-for="tag in scope.row.spuSaleAttrValueList"
              :key="tag"
              :disable-transitions="false"
              closable
              @close="handleTagClose(tag, scope.row)">
              {{ tag }}
            </el-tag>

            <el-input
              v-if="scope.row.edit"
              v-model="scope.row.saleAttrValue"
              class="input-new-tag"
              size="small"
              @keyup.enter.native="saveAttrValue(scope.row)"
              @blur="saveAttrValue(scope.row)" />
            <el-button v-else class="button-new-tag" size="small" @click="editAttrValue(scope.row)">+ 添加</el-button>

        </template></el-table-column>

        <el-table-column label="操作" width="200" align="center">
          <template slot-scope="scope">
            <el-button type="danger" size="mini" icon="el-icon-edit" @click="deleteSaleAttr(scope.row.saleAttr)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>

    <!--按钮-->
    <div style="margin-top:22px;">
      <el-button type="primary" size="mini" @click="saveSpuInfo()">保存</el-button>
      <el-button type="default" size="mini" @click="backToSpuList()">返回</el-button>
    </div>

    <!--图片预览-->
    <el-dialog :visible.sync="dialogImageVisible">
      <img :src="dialogImageUrl" width="100%" alt="">
    </el-dialog>
  </el-form>

</template>

<script>
import spu from '@/api/product/spu'
export default {

  props: {
    catalogId: {
      type: String,
      default: null
    }
  },

  data() {
    return {

      // 接口API地址
      BASE_API: process.env.BASE_API,

      // 基本销售属性列表
      baseSaleAttrList: [],

      // Spu表单数据
      spuForm: {
        id: null,
        spuName: null,
        description: null,
        catalog3Id: null,
        // 上传文件列表
        spuImageList: [],
        // 销售属性
        spuSaleAttrList: []
      },
      spuSaleAttrListTemp: [], // 临时数据:格式:saleAttrId|saleAttrName

      // 销售属性列表loading
      spuSaleAttrListLoading: false,

      // 图片预览区域url
      dialogImageUrl: '',
      // 图片预览对话框
      dialogImageVisible: false

    }
  },

  methods: {

    init() {
      // 初始化值
      // Spu表单数据
      this.spuForm = {
        id: null,
        spuName: null,
        description: null,
        catalog3Id: null,
        // 上传文件列表
        spuImageList: [],
        // 销售属性
        spuSaleAttrList: []
      }

      this.getBaseSaleAttrList()
    },

    // 获取基本销售属性列表
    getBaseSaleAttrList() {
      spu.getBaseSaleAttrList().then(response => {
        this.baseSaleAttrList = response.data
      })
    },

    // 保存Spu
    saveSpuInfo() {
      this.spuForm.catalog3Id = this.catalogId
      this.spuForm.spuSaleAttrList = []
      this.spuSaleAttrListTemp.forEach(spuSaleAttr => {
        // 处理销售属性
        const arr = spuSaleAttr.saleAttr.split('|')
        spuSaleAttr.saleAttrId = arr[0]
        spuSaleAttr.saleAttrName = arr[1]
        const saleAttr = {
          saleAttrId: arr[0],
          saleAttrName: arr[1],
          spuSaleAttrValueList: []
        }

        // 处理销售属性值
        spuSaleAttr.spuSaleAttrValueList.forEach(spuSaleAttrValue => {
          const saleAttrValue = {
            saleAttrId: arr[0],
            saleAttrValueName: spuSaleAttrValue
          }
          saleAttr.spuSaleAttrValueList.push(saleAttrValue)
        })

        this.spuForm.spuSaleAttrList.push(saleAttr)
      })

      // console.log(this.spuForm)

      spu.saveSpuInfo(this.spuForm).then(response => {
        // 调用父组件监听函数
        this.$emit('listenOnSave')
      })
    },

    // 返回Spu列表页面
    backToSpuList() {
      this.$emit('listenOnClose')
    },

    // 文件上传限制条件
    beforeUpload(file) {
      const isJPG = file.type === 'image/jpeg'
      const isPNG = file.type === 'image/png'
      const isGIF = file.type === 'image/gif'
      const isLt2M = file.size / 1024 / 1024 < 2

      if (!isJPG && !isPNG && !isGIF) {
        this.$message.error('上传头像图片只能是 JPG、PNG 或 GIF 格式!')
        return false
      }
      if (!isLt2M) {
        this.$message.error('上传头像图片大小不能超过 2MB!')
        return false
      }
      return true
    },

    // 上传图片成功的回调
    onUploadSuccess(res, file) {
      // 填充上传文件列表
      this.spuForm.spuImageList.push({
        imgName: file.name,
        imgUrl: file.response
      })
    },

    // 上传的文件预览
    onUploadPreview(file) {
      this.dialogImageUrl = file.url
      this.dialogImageVisible = true
    },

    // 删除上传的文件
    onUploadRemove(file, fileList) {
      this.spuForm.spuImageList = []
      fileList.forEach(file => {
        this.spuForm.spuImageList.push({
          imgName: file.name,
          imgUrl: file.response
        })
      })
    },

    // 添加销售属性
    addSaleAttr() {
      const saleAttr = {
        saleAttr: null, // id|name 字符串
        saleAttrValue: null, // current input tag
        edit: false,
        spuSaleAttrValueList: [] // [tag1, tag2, tag3]
      }
      this.spuSaleAttrListTemp.push(saleAttr)
    },

    // 根据name删除销售属性
    deleteSaleAttr(saleAttr) {
      const tempList = []
      this.spuForm.spuSaleAttrList.forEach(item => {
        if (item.saleAttr !== saleAttr) {
          tempList.push(item)
        }
      })
      this.spuForm.spuSaleAttrList = tempList
    },

    // 添加销售属性值
    editAttrValue(row) {
      row.edit = true
    },

    // 保存销售属性值
    saveAttrValue(row) {
      if (!row.spuSaleAttrValueList) {
        row.spuSaleAttrValueList = []
      }

      const saleAttrValue = row.saleAttrValue
      if (saleAttrValue) {
        row.spuSaleAttrValueList.push(saleAttrValue)
      }

      row.saleAttrValue = ''
      row.edit = false
    },

    // 删除销售属性值
    handleTagClose(tag, row) {
      const index = row.spuSaleAttrValueList.indexOf(tag)
      row.spuSaleAttrValueList.splice(index, 1)
    }
  }
}
</script>

<style scoped>
.el-tag + .el-tag {
    margin-left: 10px;
  }
  .button-new-tag {
    margin-left: 10px;
    height: 32px;
    line-height: 30px;
    padding-top: 0;
    padding-bottom: 0;
  }
  .input-new-tag {
    width: 90px;
    margin-left: 10px;
    vertical-align: bottom;
  }
</style>


================================================
FILE: gmall-admin/gmall-admin/src/views/product/spu/list.vue
================================================
<template>
  <div class="app-container">

    <!--三级下拉列表-->
    <CatalogSelector v-show="!showSkuForm" @listenOnSelect="getSpuList" />

    <!--spu列表-->
    <div v-show="!showSpuForm && !showSkuForm">
      <div style="margin-bottom:10px;">
        <el-button type="primary" icon="el-icon-plus" size="mini" @click="addSpu()">添加SPU</el-button>
      </div>

      <el-table
        v-loading="spuListLoading"
        :data="spuList"
        element-loading-text="数据正在加载......"
        border
        fit
        highlight-current-row>
        <el-table-column align="center" label="序号" width="100">
          <template slot-scope="scope">
            {{ scope.$index + 1 }}
          </template>
        </el-table-column>
        <el-table-column label="商品id" width="100">
          <template slot-scope="scope">
            {{ scope.row.id }}
          </template>
        </el-table-column>
        <el-table-column label="商品名称">
          <template slot-scope="scope">
            <span>{{ scope.row.productName }}</span>
          </template>
        </el-table-column>
        <el-table-column label="商品描述">
          <template slot-scope="scope">
            <span>{{ scope.row.description }}</span>
          </template>
        </el-table-column>

        <el-table-column label="操作" width="200" align="center">
          <template slot-scope="scope">
            <el-button type="primary" size="mini" icon="el-icon-plus" @click="addSku(scope.row.id, scope.row.productName)">添加SKU</el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>

    <!--spu表单-->
    <SpuForm
      v-show="showSpuForm"
      ref="spuForm"
      :catalog-id="catalogId"
      @listenOnSave="onSpuSave()"
      @listenOnClose="onSpuClose()"/>

    <!--sku表单-->
    <SkuForm
      v-show="showSkuForm"
      ref="skuForm"
      :catalog-id="catalogId"
      :spu-id="selectedSpu.spuId"
      :spu-name="selectedSpu.productName"
      @listenOnSave="onSkuSave()"
      @listenOnClose="onSkuClose()"/>

  </div>
</template>

<script>
import spu from '@/api/product/spu'
import CatalogSelector from '@/views/components/CatalogSelector'
import SpuForm from '@/views/product/components/SpuForm'
import SkuForm from '@/views/product/components/SkuForm'

export default {
  components: { CatalogSelector, SpuForm, SkuForm },

  data() {
    return {

      // spu所属分类
      catalogId: null,

      // spu列表数据
      spuList: null,
      spuListLoading: false,

      // spu表单显示
      showSpuForm: false,

      // sku表单显示
      showSkuForm: false,

      // 选中的spu
      selectedSpu: {
        spuId: null,
        productName: null
      }
    }
  },

  methods: {

    // 获取spu列表
    getSpuList(catalogId) {
      this.catalogId = catalogId
      // 查询数据
      this.spuListLoading = true
      spu.getSpuList(this.catalogId).then(response => {
        this.spuList = response.data
        this.spuListLoading = false
      })
    },

    // 选择三级分类确认
    confirmSelect() {
      if (!this.catalogId) {
        this.$alert('请选择三级分类', '提示', {
          confirmButtonText: '确定',
          type: 'warning'
        })
        return false
      }
      return true
    },

    // 添加spu
    addSpu() {
      if (!this.confirmSelect()) {
        return
      }

      // 初始化表单
      this.$refs.spuForm.init()

      // 显示表单
      this.showSpuForm = true
    },

    // 保存spu后刷新列表
    onSpuSave() {
      // 刷新Spu列表
      this.getSpuList(this.catalogId)

      // 隐藏表单
      this.showSpuForm = false
    },

    // 关闭spu表单
    onSpuClose() {
      // 隐藏表单
      this.showSpuForm = false
    },

    // 添加sku
    addSku(spuId, productName) {
      this.selectedSpu.spuId = spuId
      this.selectedSpu.productName = productName

      // 初始化表单
      this.$refs.skuForm.init(spuId)

      // 显示表单
      this.showSkuForm = true
    },

    // 保存sku
    onSkuSave() {
      // 隐藏表单
      this.showSkuForm = false
    },

    // 关闭sku表单
    onSkuClose() {
      // 隐藏表单
      this.showSkuForm = false
    }

  }
}
</script>


================================================
FILE: gmall-admin/gmall-admin/src/views/product/spu/list.vue.bak
================================================
<template>
  <div class="app-container">

    <!--三级下拉列表-->
    <CatalogSelector v-show="!showSkuForm" @listenOnSelect="getSpuList" />

    <!--spu列表-->
    <div v-show="!showSpuForm && !showSkuForm">
      <div style="margin-bottom:10px;">
        <el-button type="primary" icon="el-icon-plus" size="mini" @click="addSpu()">添加SPU</el-button>
      </div>

      <el-table
        v-loading="spuListLoading"
        :data="spuList"
        element-loading-text="数据正在加载......"
        border
        fit
        highlight-current-row>
        <el-table-column align="center" label="序号" width="100">
          <template slot-scope="scope">
            {{ scope.$index + 1 }}
          </template>
        </el-table-column>
        <el-table-column label="商品id" width="100">
          <template slot-scope="scope">
            {{ scope.row.id }}
          </template>
        </el-table-column>
        <el-table-column label="商品名称">
          <template slot-scope="scope">
            <span>{{ scope.row.spuName }}</span>
          </template>
        </el-table-column>
        <el-table-column label="商品描述">
          <template slot-scope="scope">
            <span>{{ scope.row.description }}</span>
          </template>
        </el-table-column>

        <el-table-column label="操作" width="200" align="center">
          <template slot-scope="scope">
            <el-button type="primary" size="mini" icon="el-icon-plus" @click="addSku(scope.row.id, scope.row.spuName)">添加SKU</el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>

    <!--spu表单-->
    <SpuForm
      v-show="showSpuForm"
      ref="spuForm"
      :catalog-id="catalogId"
      @listenOnSave="onSpuSave()"
      @listenOnClose="onSpuClose()"/>

    <!--sku表单-->
    <SkuForm
      v-show="showSkuForm"
      ref="skuForm"
      :catalog-id="catalogId"
      :spu-id="selectedSpu.spuId"
      :spu-name="selectedSpu.spuName"
      @listenOnSave="onSkuSave()"
      @listenOnClose="onSkuClose()"/>

  </div>
</template>

<script>
import spu from '@/api/product/spu'
import CatalogSelector from '@/views/components/CatalogSelector'
import SpuForm from '@/views/product/components/SpuForm'
import SkuForm from '@/views/product/components/SkuForm'

export default {
  components: { CatalogSelector, SpuForm, SkuForm },

  data() {
    return {

      // spu所属分类
      catalogId: null,

      // spu列表数据
      spuList: null,
      spuListLoading: false,

      // spu表单显示
      showSpuForm: false,

      // sku表单显示
      showSkuForm: false,

      // 选中的spu
      selectedSpu: {
        spuId: null,
        spuName: null
      }
    }
  },

  methods: {

    // 获取spu列表
    getSpuList(catalogId) {
      this.catalogId = catalogId
      // 查询数据
      this.spuListLoading = true
      spu.getSpuList(this.catalogId).then(response => {
        this.spuList = response.data
        this.spuListLoading = false
      })
    },

    // 选择三级分类确认
    confirmSelect() {
      if (!this.catalogId) {
        this.$alert('请选择三级分类', '提示', {
          confirmButtonText: '确定',
          type: 'warning'
        })
        return false
      }
      return true
    },

    // 添加spu
    addSpu() {
      if (!this.confirmSelect()) {
        return
      }

      // 初始化表单
      this.$refs.spuForm.init()

      // 显示表单
      this.showSpuForm = true
    },

    // 保存spu后刷新列表
    onSpuSave() {
      // 刷新Spu列表
      this.getSpuList(this.catalogId)

      // 隐藏表单
      this.showSpuForm = false
    },

    // 关闭spu表单
    onSpuClose() {
      // 隐藏表单
      this.showSpuForm = false
    },

    // 添加sku
    addSku(spuId, spuName) {
      this.selectedSpu.spuId = spuId
      this.selectedSpu.spuName = spuName

      // 初始化表单
      this.$refs.skuForm.init(spuId)

      // 显示表单
      this.showSkuForm = true
    },

    // 保存sku
    onSkuSave() {
      // 隐藏表单
      this.showSkuForm = false
    },

    // 关闭sku表单
    onSkuClose() {
      // 隐藏表单
      this.showSkuForm = false
    }

  }
}
</script>


================================================
FILE: gmall-admin/gmall-admin/src/views/table/index.vue
================================================
<template>
  <div class="app-container">
    <el-table
      v-loading="listLoading"
      :data="list"
      element-loading-text="Loading"
      border
      fit
      highlight-current-row>
      <el-table-column align="center" label="ID" width="95">
        <template slot-scope="scope">
          {{ scope.$index }}
        </template>
      </el-table-column>
      <el-table-column label="Title">
        <template slot-scope="scope">
          {{ scope.row.title }}
        </template>
      </el-table-column>
      <el-table-column label="Author" width="110" align="center">
        <template slot-scope="scope">
          <span>{{ scope.row.author }}</span>
        </template>
      </el-table-column>
      <el-table-column label="Pageviews" width="110" align="center">
        <template slot-scope="scope">
          {{ scope.row.pageviews }}
        </template>
      </el-table-column>
      <el-table-column class-name="status-col" label="Status" width="110" align="center">
        <template slot-scope="scope">
          <el-tag :type="scope.row.status | statusFilter">{{ scope.row.status }}</el-tag>
        </template>
      </el-table-column>
      <el-table-column align="center" prop="created_at" label="Display_time" width="200">
        <template slot-scope="scope">
          <i class="el-icon-time"/>
          <span>{{ scope.row.display_time }}</span>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>

<script>
import { getList } from '@/api/table'

export default {
  filters: {
    statusFilter(status) {
      const statusMap = {
        published: 'success',
        draft: 'gray',
        deleted: 'danger'
      }
      return statusMap[status]
    }
  },
  data() {
    return {
      list: null,
      listLoading: true
    }
  },
  created() {
    this.fetchData()
  },
  methods: {
    fetchData() {
      this.listLoading = true
      getList(this.listQuery).then(response => {
        this.list = response.data.items
        this.listLoading = false
      })
    }
  }
}
</script>


================================================
FILE: gmall-admin/gmall-admin/src/views/tree/index.vue
================================================
<template>
  <div class="app-container">
    <el-input v-model="filterText" placeholder="Filter keyword" style="margin-bottom:30px;" />

    <el-tree
      ref="tree2"
      :data="data2"
      :props="defaultProps"
      :filter-node-method="filterNode"
      class="filter-tree"
      default-expand-all
    />

  </div>
</template>

<script>
export default {

  data() {
    return {
      filterText: '',
      data2: [{
        id: 1,
        label: 'Level one 1',
        children: [{
          id: 4,
          label: 'Level two 1-1',
          children: [{
            id: 9,
            label: 'Level three 1-1-1'
          }, {
            id: 10,
            label: 'Level three 1-1-2'
          }]
        }]
      }, {
        id: 2,
        label: 'Level one 2',
        children: [{
          id: 5,
          label: 'Level two 2-1'
        }, {
          id: 6,
          label: 'Level two 2-2'
        }]
      }, {
        id: 3,
        label: 'Level one 3',
        children: [{
          id: 7,
          label: 'Level two 3-1'
        }, {
          id: 8,
          label: 'Level two 3-2'
        }]
      }],
      defaultProps: {
        children: 'children',
        label: 'label'
      }
    }
  },
  watch: {
    filterText(val) {
      this.$refs.tree2.filter(val)
    }
  },

  methods: {
    filterNode(value, data) {
      if (!value) return true
      return data.label.indexOf(value) !== -1
    }
  }
}
</script>



================================================
FILE: gmall-admin/gmall-admin/static/.gitkeep
================================================


================================================
FILE: gmall-api/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<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>


    <groupId>com.xatu.gmall</groupId>
    <artifactId>gmall-api</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>com.xatu.gmall</groupId>
        <artifactId>gmall-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <properties>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.xatu.gmall</groupId>
            <artifactId>gmall-common-util</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

================================================
FILE: gmall-api/src/main/java/com/xatu/gmall/entity/Member.java
================================================
package com.xatu.gmall.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * <p>
 * 会员表
 * </p>
 *
 * @author LiangHuan
 * @since 2020-04-15
 */
@TableName("ums_member")
public class Member implements Serializable {

    private static final long serialVersionUID=1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    private Long memberLevelId;

    /**
     * 用户名
     */
    private String username;

    /**
     * 密码
     */
    private String password;

    /**
     * 昵称
     */
    private String nickname;

    /**
     * 手机号码
     */
    private String phone;

    /**
     * 帐号启用状态:0->禁用;1->启用
     */
    private Integer status;

    /**
     * 注册时间
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 头像
     */
    private String icon;

    /**
     * 性别:0->未知;1->男;2->女
     */
    private Integer gender;

    /**
     * 生日
     */
    private Date birthday;

    /**
     * 所做城市
     */
    private String city;

    /**
     * 职业
     */
    private String job;

    /**
     * 个性签名
     */
    private String personalizedSignature;

    /**
     * 用户来源
     */
    private Integer sourceType;

    /**
     * 积分
     */
    private Integer integration;

    /**
     * 成长值
     */
    private Integer growth;

    /**
     * 剩余抽奖次数
     */
    private Integer luckeyCount;

    /**
     * 历史积分数量
     */
    private Integer historyIntegration;

    private String accessCode;

    private String sourceUid;

    private String accessToken;

    public String getAccessCode() {
        return accessCode;
    }

    public void setAccessCode(String accessCode) {
        this.accessCode = accessCode;
    }

    public String getSourceUid() {
        return sourceUid;
    }

    public void setSourceUid(String sourceUid) {
        this.sourceUid = sourceUid;
    }

    public String getAccessToken() {
        return accessToken;
    }

    public void setAccessToken(String accessToken) {
        this.accessToken = accessToken;
    }

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getMemberLevelId() {
        return memberLevelId;
    }

    public void setMemberLevelId(Long memberLevelId) {
        this.memberLevelId = memberLevelId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public String getIcon() {
        return icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public String getPersonalizedSignature() {
        return personalizedSignature;
    }

    public void setPersonalizedSignature(String personalizedSignature) {
        this.personalizedSignature = personalizedSignature;
    }

    public Integer getSourceType() {
        return sourceType;
    }

    public void setSourceType(Integer sourceType) {
        this.sourceType = sourceType;
    }

    public Integer getIntegration() {
        return integration;
    }

    public void setIntegration(Integer integration) {
        this.integration = integration;
    }

    public Integer getGrowth() {
        return growth;
    }

    public void setGrowth(Integer growth) {
        this.growth = growth;
    }

    public Integer getLuckeyCount() {
        return luckeyCount;
    }

    public void setLuckeyCount(Integer luckeyCount) {
        this.luckeyCount = luckeyCount;
    }

    public Integer getHistoryIntegration() {
        return historyIntegration;
    }

    public void setHistoryIntegration(Integer historyIntegration) {
        this.historyIntegration = historyIntegration;
    }


    @Override
    public String toString() {
        return "Member{" +
                "id=" + id +
                ", memberLevelId=" + memberLevelId +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", nickname='" + nickname + '\'' +
                ", phone='" + phone + '\'' +
                ", status=" + status +
                ", createTime=" + createTime +
                ", icon='" + icon + '\'' +
                ", gender=" + gender +
                ", birthday=" + birthday +
                ", city='" + city + '\'' +
                ", job='" + job + '\'' +
                ", personalizedSignature='" + personalizedSignature + '\'' +
                ", sourceType=" + sourceType +
                ", integration=" + integration +
                ", growth=" + growth +
                ", luckeyCount=" + luckeyCount +
                ", historyIntegration=" + historyIntegration +
                '}';
    }
}


================================================
FILE: gmall-api/src/main/java/com/xatu/gmall/entity/MemberReceiveAddress.java
================================================
package com.xatu.gmall.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * <p>
 * 会员收货地址表
 * </p>
 *
 * @author LiangHuan
 * @since 2020-04-15
 */
@TableName("ums_member_receive_address")
public class MemberReceiveAddress implements Serializable {

    private static final long serialVersionUID=1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    private Long memberId;

    /**
     * 收货人名称
     */
    private String name;

    private String phoneNumber;

    /**
     * 是否为默认
     */
    private Integer defaultStatus;

    /**
     * 邮政编码
     */
    private String postCode;

    /**
     * 省份/直辖市
     */
    private String province;

    /**
     * 城市
     */
    private String city;

    /**
     * 区
     */
    private String region;

    /**
     * 详细地址(街道)
     */
    private String detailAddress;

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getMemberId() {
        return memberId;
    }

    public void setMemberId(Long memberId) {
        this.memberId = memberId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public Integer getDefaultStatus() {
        return defaultStatus;
    }

    public void setDefaultStatus(Integer defaultStatus) {
        this.defaultStatus = defaultStatus;
    }

    public String getPostCode() {
        return postCode;
    }

    public void setPostCode(String postCode) {
        this.postCode = postCode;
    }

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getRegion() {
        return region;
    }

    public void setRegion(String region) {
        this.region = region;
    }

    public String getDetailAddress() {
        return detailAddress;
    }

    public void setDetailAddress(String detailAddress) {
        this.detailAddress = detailAddress;
    }
}


================================================
FILE: gmall-api/src/main/java/com/xatu/gmall/entity/OmsCartItem.java
================================================
package com.xatu.gmall.entity;

import java.math.BigDecimal;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * <p>
 * 购物车表
 * </p>
 *
 *
 * @author LiangHuan
 * @since 2020-04-30
 */
@TableName("oms_cart_item")
public class OmsCartItem implements Serializable {

    private static final long serialVersionUID=1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    private Long productId;

    private Long productSkuId;

    private Long memberId;

    /**
     * 购买数量
     */
    private Integer quantity;

    /**
     * 添加到购物车的价格
     */
    private BigDecimal price;

    /**
     * 销售属性1
     */
    private String sp1;

    /**
     * 销售属性2
     */
    private String sp2;

    /**
     * 销售属性3
     */
    private String sp3;

    /**
     * 商品主图
     */
    private String productPic;

    /**
     * 商品名称
     */
    private String productName;

    /**
     * 商品副标题(卖点)
     */
    private String productSubTitle;

    /**
     * 商品sku条码
     */
    private String productSkuCode;

    /**
     * 会员昵称
     */
    private String memberNickname;

    /**
     * 创建时间
     */
    private Date createDate;

    /**
     * 修改时间
     */
    private Date modifyDate;

    /**
     * 是否删除
     */
    private Integer deleteStatus;

    /**
     * 商品分类
     */
    private Long productCategoryId;

    private String productBrand;

    private String productSn;

    /**
     * 商品销售属性:[{"key":"颜色","value":"颜色"},{"key":"容量","value":"4G"}]
     */
    private String productAttr;



    /**
     * 是否被选中
     * @param isChecked
     */
    private String isChecked;


    /**
     * 商品总价
     *
     * @return
     */
    @TableField(exist = false)
    private String totalPrice;

    public String getTotalPrice() {
        return totalPrice;
    }

    public void setTotalPrice(String totalPrice) {
        this.totalPrice = totalPrice;
    }

    public String getIsChecked() {
        return isChecked;
    }

    public void setIsChecked(String isChecked) {
        this.isChecked = isChecked;
    }

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getProductId() {
        return productId;
    }

    public void setProductId(Long productId) {
        this.productId = productId;
    }

    public Long getProductSkuId() {
        return productSkuId;
    }

    public void setProductSkuId(Long productSkuId) {
        this.productSkuId = productSkuId;
    }

    public Long getMemberId() {
        return memberId;
    }

    public void setMemberId(Long memberId) {
        this.memberId = memberId;
    }

    public Integer getQuantity() {
        return quantity;
    }

    public void setQuantity(Integer quantity) {
        this.quantity = quantity;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public String getSp1() {
        return sp1;
    }

    public void setSp1(String sp1) {
        this.sp1 = sp1;
    }

    public String getSp2() {
        return sp2;
    }

    public void setSp2(String sp2) {
        this.sp2 = sp2;
    }

    public String getSp3() {
        return sp3;
    }

    public void setSp3(String sp3) {
        this.sp3 = sp3;
    }

    public String getProductPic() {
        return productPic;
    }

    public void setProductPic(String productPic) {
        this.productPic = productPic;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public String getProductSubTitle() {
        return productSubTitle;
    }

    public void setProductSubTitle(String productSubTitle) {
        this.productSubTitle = productSubTitle;
    }

    public String getProductSkuCode() {
        return productSkuCode;
    }

    public void setProductSkuCode(String productSkuCode) {
        this.productSkuCode = productSkuCode;
    }

    public String getMemberNickname() {
        return memberNickname;
    }

    public void setMemberNickname(String memberNickname) {
        this.memberNickname = memberNickname;
    }

    public Date getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }

    public Date getModifyDate() {
        return modifyDate;
    }

    public void setModifyDate(Date modifyDate) {
        this.modifyDate = modifyDate;
    }

    public Integer getDeleteStatus() {
        return deleteStatus;
    }

    public void setDeleteStatus(Integer deleteStatus) {
        this.deleteStatus = deleteStatus;
    }

    public Long getProductCategoryId() {
        return productCategoryId;
    }

    public void setProductCategoryId(Long productCategoryId) {
        this.productCategoryId = productCategoryId;
    }

    public String getProductBrand() {
        return productBrand;
    }

    public void setProductBrand(String productBrand) {
        this.productBrand = productBrand;
    }

    public String getProductSn() {
        return productSn;
    }

    public void setProductSn(String productSn) {
        this.productSn = productSn;
    }

    public String getProductAttr() {
        return productAttr;
    }

    public void setProductAttr(String productAttr) {
        this.productAttr = productAttr;
    }

    @Override
    public String toString() {
        return "OmsCartItem{" +
                "id=" + id +
                ", productId=" + productId +
                ", productSkuId=" + productSkuId +
                ", memberId=" + memberId +
                ", quantity=" + quantity +
                ", price=" + price +
                ", sp1='" + sp1 + '\'' +
                ", sp2='" + sp2 + '\'' +
                ", sp3='" + sp3 + '\'' +
                ", productPic='" + productPic + '\'' +
                ", productName='" + productName + '\'' +
                ", productSubTitle='" + productSubTitle + '\'' +
                ", productSkuCode='" + productSkuCode + '\'' +
                ", memberNickname='" + memberNickname + '\'' +
                ", createDate=" + createDate +
                ", modifyDate=" + modifyDate +
                ", deleteStatus=" + deleteStatus +
                ", productCategoryId=" + productCategoryId +
                ", productBrand='" + productBrand + '\'' +
                ", productSn='" + productSn + '\'' +
                ", productAttr='" + productAttr + '\'' +
                '}';
    }
}


================================================
FILE: gmall-api/src/main/java/com/xatu/gmall/entity/OmsCompanyAddress.java
================================================
package com.xatu.gmall.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * <p>
 * 公司收发货地址表
 * </p>
 *
 * @author LiangHuan
 * @since 2020-05-07
 */
@TableName("oms_company_address")
public class OmsCompanyAddress implements Serializable {

    private static final long serialVersionUID=1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 地址名称
     */
    private String addressName;

    /**
     * 默认发货地址:0->否;1->是
     */
    private Integer sendStatus;

    /**
     * 是否默认收货地址:0->否;1->是
     */
    private Integer receiveStatus;

    /**
     * 收发货人姓名
     */
    private String name;

    /**
     * 收货人电话
     */
    private String phone;

    /**
     * 省/直辖市
     */
    private String province;

    /**
     * 市
     */
    private String city;

    /**
     * 区
     */
    private String region;

    /**
     * 详细地址
     */
    private String detailAddress;

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getAddressName() {
        return addressName;
    }

    public void setAddressName(String addressName) {
        this.addressName = addressName;
    }

    public Integer getSendStatus() {
        return sendStatus;
    }

    public void setSendStatus(Integer sendStatus) {
        this.sendStatus = sendStatus;
    }

    public Integer getReceiveStatus() {
        return receiveStatus;
    }

    public void setReceiveStatus(Integer receiveStatus) {
        this.receiveStatus = receiveStatus;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getRegion() {
        return region;
    }

    public void setRegion(String region) {
        this.region = region;
    }

    public String getDetailAddress() {
        return detailAddress;
    }

    public void setDetailAddress(String detailAddress) {
        this.detailAddress = detailAddress;
    }
}


================================================
FILE: gmall-api/src/main/java/com/xatu/gmall/entity/OmsOrder.java
================================================
package com.xatu.gmall.entity;

import java.math.BigDecimal;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.util.List;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * <p>
 * 订单表
 * </p>
 *
 * @author LiangHuan
 * @since 2020-05-07
 */

@TableName("oms_order")
public class OmsOrder implements Serializable {

    private static final long serialVersionUID=1L;

    /**
     * 订单id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    private Long memberId;

    private Long couponId;

    /**
     * 订单编号
     */
    private String orderSn;

    /**
     * 提交时间
     */
    private Date createTime;

    /**
     * 用户帐号
     */
    private String memberUsername;

    /**
     * 订单总金额
     */
    private BigDecimal totalAmount;

    /**
     * 应付金额(实际支付金额)
     */
    private BigDecimal payAmount;

    /**
     * 运费金额
     */
    private BigDecimal freightAmount;

    /**
     * 促销优化金额(促销价、满减、阶梯价)
     */
    private BigDecimal promotionAmount;

    /**
     * 积分抵扣金额
     */
    private BigDecimal integrationAmount;

    /**
     * 优惠券抵扣金额
     */
    private BigDecimal couponAmount;

    /**
     * 管理员后台调整订单使用的折扣金额
     */
    private BigDecimal discountAmount;

    /**
     * 支付方式:0->未支付;1->支付宝;2->微信
     */
    private Integer payType;

    /**
     * 订单来源:0->PC订单;1->app订单
     */
    private Integer sourceType;

    /**
     * 订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单
     */
    private Integer status;

    /**
     * 订单类型:0->正常订单;1->秒杀订单
     */
    private Integer orderType;

    /**
     * 物流公司(配送方式)
     */
    private String deliveryCompany;

    /**
     * 物流单号
     */
    private String deliverySn;

    /**
     * 自动确认时间(天)
     */
    private Integer autoConfirmDay;

    /**
     * 可以获得的积分
     */
    private Integer integration;

    /**
     * 可以活动的成长值
     */
    private Integer growth;

    /**
     * 活动信息
     */
    private String promotionInfo;

    /**
     * 发票类型:0->不开发票;1->电子发票;2->纸质发票
     */
    private Integer billType;

    /**
     * 发票抬头
     */
    private String billHeader;

    /**
     * 发票内容
     */
    private String billContent;

    /**
     * 收票人电话
     */
    private String billReceiverPhone;

    /**
     * 收票人邮箱
     */
    private String billReceiverEmail;

    /**
     * 收货人姓名
     */
    private String receiverName;

    /**
     * 收货人电话
     */
    private String receiverPhone;

    /**
     * 收货人邮编
     */
    private String receiverPostCode;

    /**
     * 省份/直辖市
     */
    private String receiverProvince;

    /**
     * 城市
     */
    private String receiverCity;

    /**
     * 区
     */
    private String receiverRegion;

    /**
     * 详细地址
     */
    private String receiverDetailAddress;

    /**
     * 订单备注
     */
    private String note;

    /**
     * 确认收货状态:0->未确认;1->已确认
     */
    private Integer confirmStatus;

    /**
     * 删除状态:0->未删除;1->已删除
     */
    private Integer deleteStatus;

    /**
     * 下单时使用的积分
     */
    private Integer useIntegration;

    /**
     * 支付时间
     */
    private Date paymentTime;

    /**
     * 发货时间
     */
    private Date deliveryTime;

    /**
     * 确认收货时间
     */
    private Date receiveTime;

    /**
     * 评价时间
     */
    private Date commentTime;

    /**
     * 修改时间
     */
    private Date modifyTime;

    @TableField(exist = false)
    private List<OmsOrderItem> omsOrderItems;

    public List<OmsOrderItem> getOmsOrderItems() {
        return omsOrderItems;
    }

    public void setOmsOrderItems(List<OmsOrderItem> omsOrderItems) {
        this.omsOrderItems = omsOrderItems;
    }

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getMemberId() {
        return memberId;
    }

    public void setMemberId(Long memberId) {
        this.memberId = memberId;
    }

    public Long getCouponId() {
        return couponId;
    }

    public void setCouponId(Long couponId) {
        this.couponId = couponId;
    }

    public String getOrderSn() {
        return orderSn;
    }

    public void setOrderSn(String orderSn) {
        this.orderSn = orderSn;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public String getMemberUsername() {
        return memberUsername;
    }

    public void setMemberUsername(String memberUsername) {
        this.memberUsername = memberUsername;
    }

    public BigDecimal getTotalAmount() {
        return totalAmount;
    }

    public void setTotalAmount(BigDecimal totalAmount) {
        this.totalAmount = totalAmount;
    }

    public BigDecimal getPayAmount() {
        return payAmount;
    }

    public void setPayAmount(BigDecimal payAmount) {
        this.payAmount = payAmount;
    }

    public BigDecimal getFreightAmount() {
        return freightAmount;
    }

    public void setFreightAmount(BigDecimal freightAmount) {
        this.freightAmount = freightAmount;
    }

    public BigDecimal getPromotionAmount() {
        return promotionAmount;
    }

    public void setPromotionAmount(BigDecimal promotionAmount) {
        this.promotionAmount = promotionAmount;
    }

    public BigDecimal getIntegrationAmount() {
        return integrationAmount;
    }

    public void setIntegrationAmount(BigDecimal integrationAmount) {
        this.integrationAmount = integrationAmount;
    }

    public BigDecimal getCouponAmount() {
        return couponAmount;
    }

    public void setCouponAmount(BigDecimal couponAmount) {
        this.couponAmount = couponAmount;
    }

    public BigDecimal getDiscountAmount() {
        return discountAmount;
    }

    public void setDiscountAmount(BigDecimal discountAmount) {
        this.discountAmount = discountAmount;
    }

    public Integer getPayType() {
        return payType;
    }

    public void setPayType(Integer payType) {
        this.payType = payType;
    }

    public Integer getSourceType() {
        return sourceType;
    }

    public void setSourceType(Integer sourceType) {
        this.sourceType = sourceType;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Integer getOrderType() {
        return orderType;
    }

    public void setOrderType(Integer orderType) {
        this.orderType = orderType;
    }

    public String getDeliveryCompany() {
        return deliveryCompany;
    }

    public void setDeliveryCompany(String deliveryCompany) {
        this.deliveryCompany = deliveryCompany;
    }

    public String getDeliverySn() {
        return deliverySn;
    }

    public void setDeliverySn(String deliverySn) {
        this.deliverySn = deliverySn;
    }

    public Integer getAutoConfirmDay() {
        return autoConfirmDay;
    }

    public void setAutoConfirmDay(Integer autoConfirmDay) {
        this.autoConfirmDay = autoConfirmDay;
    }

    public Integer getIntegration() {
        return integration;
    }

    public void setIntegration(Integer integration) {
        this.integration = integration;
    }

    public Integer getGrowth() {
        return growth;
    }

    public void setGrowth(Integer growth) {
        this.growth = growth;
    }

    public String getPromotionInfo() {
        return promotionInfo;
    }

    public void setPromotionInfo(String promotionInfo) {
        this.promotionInfo = promotionInfo;
    }

    public Integer getBillType() {
        return billType;
    }

    public void setBillType(Integer billType) {
        this.billType = billType;
    }

    public String getBillHeader() {
        return billHeader;
    }

    public void setBillHeader(String billHeader) {
        this.billHeader = billHeader;
    }

    public String getBillContent() {
        return billContent;
    }

    public void setBillContent(String billContent) {
        this.billContent = billContent;
    }

    public String getBillReceiverPhone() {
        return billReceiverPhone;
    }

    public void setBillReceiverPhone(String billReceiverPhone) {
        this.billReceiverPhone = billReceiverPhone;
    }

    public String getBillReceiverEmail() {
        return billReceiverEmail;
    }

    public void setBillReceiverEmail(String billReceiverEmail) {
        this.billReceiverEmail = billReceiverEmail;
    }

    public String getReceiverName() {
        return receiverName;
    }

    public void setReceiverName(String receiverName) {
        this.receiverName = receiverName;
    }

    public String getReceiverPhone() {
        return receiverPhone;
    }

    public void setReceiverPhone(String receiverPhone) {
        this.receiverPhone = receiverPhone;
    }

    public String getReceiverPostCode() {
        return receiverPostCode;
    }

    public void setReceiverPostCode(String receiverPostCode) {
        this.receiverPostCode = receiverPostCode;
    }

    public String getReceiverProvince() {
        return receiverProvince;
    }

    public void setReceiverProvince(String receiverProvince) {
        this.receiverProvince = receiverProvince;
    }

    public String getReceiverCity() {
        return receiverCity;
    }

    public void setReceiverCity(String receiverCity) {
        this.receiverCity = receiverCity;
    }

    public String getReceiverRegion() {
        return receiverRegion;
    }

    public void setReceiverRegion(String receiverRegion) {
        this.receiverRegion = receiverRegion;
    }

    public String getReceiverDetailAddress() {
        return receiverDetailAddress;
    }

    public void setReceiverDetailAddress(String receiverDetailAddress) {
        this.receiverDetailAddress = receiverDetailAddress;
    }

    public String getNote() {
        return note;
    }

    public void setNote(String note) {
        this.note = note;
    }

    public Integer getConfirmStatus() {
        return confirmStatus;
    }

    public void setConfirmStatus(Integer confirmStatus) {
        this.confirmStatus = confirmStatus;
    }

    public Integer getDeleteStatus() {
        return deleteStatus;
    }

    public void setDeleteStatus(Integer deleteStatus) {
        this.deleteStatus = deleteStatus;
    }

    public Integer getUseIntegration() {
        return useIntegration;
    }

    public void setUseIntegration(Integer useIntegration) {
        this.useIntegration = useIntegration;
    }

    public Date getPaymentTime() {
        return paymentTime;
    }

    public void setPaymentTime(Date paymentTime) {
        this.paymentTime = paymentTime;
    }

    public Date getDeliveryTime() {
        return deliveryTime;
    }

    public void setDeliveryTime(Date deliveryTime) {
        this.deliveryTime = deliveryTime;
    }

    public Date getReceiveTime() {
        return receiveTime;
    }

    public void setReceiveTime(Date receiveTime) {
        this.receiveTime = receiveTime;
    }

    public Date getCommentTime() {
        return commentTime;
    }

    public void setCommentTime(Date commentTime) {
        this.commentTime = commentTime;
    }

    public Date getModifyTime() {
        return modifyTime;
    }

    public void setModifyTime(Date modifyTime) {
        this.modifyTime = modifyTime;
    }
}


================================================
FILE: gmall-api/src/main/java/com/xatu/gmall/entity/OmsOrderItem.java
================================================
package com.xatu.gmall.entity;

import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * <p>
 * 订单中所包含的商品
 * </p>
 *
 * @author LiangHuan
 * @since 2020-05-07
 */
@TableName("oms_order_item")
public class OmsOrderItem implements Serializable {

    private static final long serialVersionUID=1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 订单id
     */
    private Long orderId;

    /**
     * 订单编号
     */
    private String orderSn;

    private Long productId;

    private String productPic;

    private String productName;

    private String productBrand;

    private String productSn;

    /**
     * 销售价格
     */
    private BigDecimal productPrice;

    /**
     * 购买数量
     */
    private Integer productQuantity;

    /**
     * 商品sku编号
     */
    private Long productSkuId;

    /**
     * 商品sku条码
     */
    private String productSkuCode;

    /**
     * 商品分类id
     */
    private Long productCategoryId;

    /**
     * 商品的销售属性
     */
    private String sp1;

    private String sp2;

    private String sp3;

    /**
     * 商品促销名称
     */
    private String promotionName;

    /**
     * 商品促销分解金额
     */
    private BigDecimal promotionAmount;

    /**
     * 优惠券优惠分解金额
     */
    private BigDecimal couponAmount;

    /**
     * 积分优惠分解金额
     */
    private BigDecimal integrationAmount;

    /**
     * 该商品经过优惠后的分解金额
     */
    private BigDecimal realAmount;

    private Integer giftIntegration;

    private Integer giftGrowth;

    /**
     * 商品销售属性:[{"key":"颜色","value":"颜色"},{"key":"容量","value":"4G"}]
     */
    private String productAttr;

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getOrderId() {
        return orderId;
    }

    public void setOrderId(Long orderId) {
        this.orderId = orderId;
    }

    public String getOrderSn() {
        return orderSn;
    }

    public void setOrderSn(String orderSn) {
        this.orderSn = orderSn;
    }

    public Long getProductId() {
        return productId;
    }

    public void setProductId(Long productId) {
        this.productId = productId;
    }

    public String getProductPic() {
        return productPic;
    }

    public void setProductPic(String productPic) {
        this.productPic = productPic;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public String getProductBrand() {
        return productBrand;
    }

    public void setProductBrand(String productBrand) {
        this.productBrand = productBrand;
    }

    public String getProductSn() {
        return productSn;
    }

    public void setProductSn(String productSn) {
        this.productSn = productSn;
    }

    public BigDecimal getProductPrice() {
        return productPrice;
    }

    public void setProductPrice(BigDecimal productPrice) {
        this.productPrice = productPrice;
    }

    public Integer getProductQuantity() {
        return productQuantity;
    }

    public void setProductQuantity(Integer productQuantity) {
        this.productQuantity = productQuantity;
    }

    public Long getProductSkuId() {
        return productSkuId;
    }

    public void setProductSkuId(Long productSkuId) {
        this.productSkuId = productSkuId;
    }

    public String getProductSkuCode() {
        return productSkuCode;
    }

    public void setProductSkuCode(String productSkuCode) {
        this.productSkuCode = productSkuCode;
    }

    public Long getProductCategoryId() {
        return productCategoryId;
    }

    public void setProductCategoryId(Long productCategoryId) {
        this.productCategoryId = productCategoryId;
    }

    public String getSp1() {
        return sp1;
    }

    public void setSp1(String sp1) {
        this.sp1 = sp1;
    }

    public String getSp2() {
        return sp2;
    }

    public void setSp2(String sp2) {
        this.sp2 = sp2;
    }

    public String getSp3() {
        return sp3;
    }

    public void setSp3(String sp3) {
        this.sp3 = sp3;
    }

    public String getPromotionName() {
        return promotionName;
    }

    public void setPromotionName(String promotionName) {
        this.promotionName = promotionName;
    }

    public BigDecimal getPromotionAmount() {
        return promotionAmount;
    }

    public void setPromotionAmount(BigDecimal promotionAmount) {
        this.promotionAmount = promotionAmount;
    }

    public BigDecimal getCouponAmount() {
        return couponAmount;
    }

    public void setCouponAmount(BigDecimal couponAmount) {
        this.couponAmount = couponAmount;
    }

    public BigDecimal getIntegrationAmount() {
        return integrationAmount;
    }

    public void setIntegrationAmount(BigDecimal integrationAmount) {
        this.integrationAmount = integrationAmount;
    }

    public BigDecimal getRealAmount() {
        return realAmount;
    }

    public void setRealAmount(BigDecimal realAmount) {
        this.realAmount = realAmount;
    }

    public Integer getGiftIntegration() {
        return giftIntegration;
    }

    public void setGiftIntegration(Integer giftIntegration) {
        this.giftIntegration = giftIntegration;
    }

    public Integer getGiftGrowth() {
        return giftGrowth;
    }

    public void setGiftGrowth(Integer giftGrowth) {
        this.giftGrowth = giftGrowth;
    }

    public String getProductAttr() {
        return productAttr;
    }

    public void setProductAttr(String productAttr) {
        this.productAttr = productAttr;
    }
}


================================================
FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PaymentInfo.java
================================================
package com.xatu.gmall.entity;

import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * <p>
 * 支付信息表
 * </p>
 *
 * @author LiangHuan
 * @since 2020-05-10
 */
@TableName("payment_info")
public class PaymentInfo implements Serializable {

    private static final long serialVersionUID=1L;

    /**
     * 编号
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 对外业务编号
     */
    private String orderSn;

    /**
     * 订单编号
     */
    private String orderId;

    /**
     * 支付宝交易编号
     */
    private String alipayTradeNo;

    /**
     * 支付金额
     */
    private BigDecimal totalAmount;

    /**
     * 交易内容
     */
    private String subject;

    /**
     * 支付状态
     */
    private String paymentStatus;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 创建时间
     */
    private Date confirmTime;

    /**
     * 回调信息
     */
    private String callbackContent;

    private Date callbackTime;

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getOrderSn() {
        return orderSn;
    }

    public void setOrderSn(String orderSn) {
        this.orderSn = orderSn;
    }

    public String getOrderId() {
        return orderId;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }

    public String getAlipayTradeNo() {
        return alipayTradeNo;
    }

    public void setAlipayTradeNo(String alipayTradeNo) {
        this.alipayTradeNo = alipayTradeNo;
    }

    public BigDecimal getTotalAmount() {
        return totalAmount;
    }

    public void setTotalAmount(BigDecimal totalAmount) {
        this.totalAmount = totalAmount;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getPaymentStatus() {
        return paymentStatus;
    }

    public void setPaymentStatus(String paymentStatus) {
        this.paymentStatus = paymentStatus;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getConfirmTime() {
        return confirmTime;
    }

    public void setConfirmTime(Date confirmTime) {
        this.confirmTime = confirmTime;
    }

    public String getCallbackContent() {
        return callbackContent;
    }

    public void setCallbackContent(String callbackContent) {
        this.callbackContent = callbackContent;
    }

    public Date getCallbackTime() {
        return callbackTime;
    }

    public void setCallbackTime(Date callbackTime) {
        this.callbackTime = callbackTime;
    }
}


================================================
FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsBaseAttrInfo.java
================================================
package com.xatu.gmall.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;

import java.beans.Transient;
import java.io.Serializable;
import java.util.List;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * <p>
 * 属性表
 * </p>
 *
 * @author LiangHuan
 * @since 2020-04-19
 */
@TableName("pms_base_attr_info")
public class PmsBaseAttrInfo implements Serializable {

    private static final long serialVersionUID=1L;

    /**
     * 编号
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 属性名称
     */
    private String attrName;

    private Long catalog3Id;

    /**
     * 启用:1 停用:0
     */
    private String isEnabled;

    @TableField(exist = false)
    private  List<PmsBaseAttrValue> attrValueList;

    public List<PmsBaseAttrValue> getAttrValueList() {
        return attrValueList;
    }

    public void setAttrValueList(List<PmsBaseAttrValue> attrValueList) {
        this.attrValueList = attrValueList;
    }

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getAttrName() {
        return attrName;
    }

    public void setAttrName(String attrName) {
        this.attrName = attrName;
    }

    public Long getCatalog3Id() {
        return catalog3Id;
    }

    public void setCatalog3Id(Long catalog3Id) {
        this.catalog3Id = catalog3Id;
    }

    public String getIsEnabled() {
        return isEnabled;
    }

    public void setIsEnabled(String isEnabled) {
        this.isEnabled = isEnabled;
    }

    @Override
    public String toString() {
        return "PmsBaseAttrInfo{" +
                "id=" + id +
                ", attrName='" + attrName + '\'' +
                ", catalog3Id=" + catalog3Id +
                ", isEnabled='" + isEnabled + '\'' +
                '}';
    }
}


================================================
FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsBaseAttrValue.java
================================================
package com.xatu.gmall.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * <p>
 * 属性值表
 * </p>
 *
 * @author LiangHuan
 * @since 2020-04-19
 */
@TableName("pms_base_attr_value")
public class PmsBaseAttrValue implements Serializable {

    private static final long serialVersionUID=1L;

    /**
     * 编号
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 属性值名称
     */
    private String valueName;

    /**
     * 属性id
     */
    private Long attrId;

    /**
     * 启用:1 停用:0 1
     */
    private String isEnabled;

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getValueName() {
        return valueName;
    }

    public void setValueName(String valueName) {
        this.valueName = valueName;
    }

    public Long getAttrId() {
        return attrId;
    }

    public void setAttrId(Long attrId) {
        this.attrId = attrId;
    }

    public String getIsEnabled() {
        return isEnabled;
    }

    public void setIsEnabled(String isEnabled) {
        this.isEnabled = isEnabled;
    }

    @Override
    public String toString() {
        return "PmsBaseAttrValue{" +
                "id=" + id +
                ", valueName='" + valueName + '\'' +
                ", attrId=" + attrId +
                ", isEnabled='" + isEnabled + '\'' +
                '}';
    }
}


================================================
FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsBaseCatalog1.java
================================================
package com.xatu.gmall.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;

import java.beans.Transient;
import java.io.Serializable;
import java.util.List;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.apache.catalina.LifecycleState;

/**
 * <p>
 * 一级分类表
 * </p>
 *
 * @author LiangHuan
 * @since 2020-04-18
 */
@TableName("pms_base_catalog1")
public class PmsBaseCatalog1 implements Serializable {

    private static final long serialVersionUID=1L;

    /**
     * 编号
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 分类名称
     */
    private String name;

    /**
     * 一级分类下所包含的二级分类
     */
    @TableField(exist = false)
    private  List<PmsBaseCatalog2> catalog2List;

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<PmsBaseCatalog2> getCatalog2List() {
        return catalog2List;
    }

    public void setCatalog2List(List<PmsBaseCatalog2> catalog2List) {
        this.catalog2List = catalog2List;
    }

    @Override
    public String toString() {
        return "PmsBaseCatalog1{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", catalog2List=" + catalog2List +
                '}';
    }
}


================================================
FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsBaseCatalog2.java
================================================
package com.xatu.gmall.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.util.List;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * <p>
 * 
 * </p>
 *
 * @author LiangHuan
 * @since 2020-04-18
 */
@TableName("pms_base_catalog2")
public class PmsBaseCatalog2 implements Serializable {

    private static final long serialVersionUID=1L;

    /**
     * 编号
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 二级分类名称
     */
    private String name;

    /**
     * 一级分类编号
     */
    private Integer catalog1Id;

    /**
     * 二级分类编号下所包含的三级分类
     */
    @TableField(exist = false)
    private  List<PmsBaseCatalog3>catalog3List;


    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getCatalog1Id() {
        return catalog1Id;
    }

    public void setCatalog1Id(Integer catalog1Id) {
        this.catalog1Id = catalog1Id;
    }

    public List<PmsBaseCatalog3> getCatalog3List() {
        return catalog3List;
    }

    public void setCatalog3List(List<PmsBaseCatalog3> catalog3List) {
        this.catalog3List = catalog3List;
    }

    @Override
    public String toString() {
        return "PmsBaseCatalog2{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", catalog1Id=" + catalog1Id +
                ", catalog3List=" + catalog3List +
                '}';
    }
}


================================================
FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsBaseCatalog3.java
================================================
package com.xatu.gmall.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * <p>
 * 
 * </p>
 *
 * @author LiangHuan
 * @since 2020-04-18
 */
@TableN
Download .txt
gitextract_t0grgfaf/

├── .gitattributes
├── README.md
├── gmall-admin/
│   └── gmall-admin/
│       ├── .babelrc
│       ├── .editorconfig
│       ├── .eslintignore
│       ├── .eslintrc.js
│       ├── .gitignore
│       ├── .postcssrc.js
│       ├── .travis.yml
│       ├── LICENSE
│       ├── README-zh.md
│       ├── README.md
│       ├── build/
│       │   ├── build.js
│       │   ├── check-versions.js
│       │   ├── utils.js
│       │   ├── vue-loader.conf.js
│       │   ├── webpack.base.conf.js
│       │   ├── webpack.dev.conf.js
│       │   └── webpack.prod.conf.js
│       ├── config/
│       │   ├── dev.env.js
│       │   ├── dev.env.js.bak
│       │   ├── index.js
│       │   ├── index.js.bak
│       │   └── prod.env.js
│       ├── index.html
│       ├── package.json
│       ├── src/
│       │   ├── App.vue
│       │   ├── api/
│       │   │   ├── baseinfo/
│       │   │   │   └── prop.js
│       │   │   ├── components/
│       │   │   │   └── CatalogSelector.js
│       │   │   ├── login.js
│       │   │   ├── product/
│       │   │   │   ├── sku.js
│       │   │   │   └── spu.js
│       │   │   └── table.js
│       │   ├── components/
│       │   │   ├── Breadcrumb/
│       │   │   │   └── index.vue
│       │   │   ├── Hamburger/
│       │   │   │   └── index.vue
│       │   │   └── SvgIcon/
│       │   │       └── index.vue
│       │   ├── icons/
│       │   │   ├── index.js
│       │   │   └── svgo.yml
│       │   ├── main.js
│       │   ├── permission.js
│       │   ├── router/
│       │   │   └── index.js
│       │   ├── store/
│       │   │   ├── getters.js
│       │   │   ├── index.js
│       │   │   └── modules/
│       │   │       ├── app.js
│       │   │       └── user.js
│       │   ├── styles/
│       │   │   ├── element-ui.scss
│       │   │   ├── index.scss
│       │   │   ├── mixin.scss
│       │   │   ├── sidebar.scss
│       │   │   ├── transition.scss
│       │   │   └── variables.scss
│       │   ├── utils/
│       │   │   ├── auth.js
│       │   │   ├── index.js
│       │   │   ├── request.js
│       │   │   └── validate.js
│       │   └── views/
│       │       ├── 404.vue
│       │       ├── baseinfo/
│       │       │   └── prop/
│       │       │       └── list.vue
│       │       ├── components/
│       │       │   └── CatalogSelector.vue
│       │       ├── dashboard/
│       │       │   └── index.vue
│       │       ├── form/
│       │       │   └── index.vue
│       │       ├── layout/
│       │       │   ├── Layout.vue
│       │       │   ├── components/
│       │       │   │   ├── AppMain.vue
│       │       │   │   ├── Navbar.vue
│       │       │   │   ├── Sidebar/
│       │       │   │   │   ├── Item.vue
│       │       │   │   │   ├── Link.vue
│       │       │   │   │   ├── SidebarItem.vue
│       │       │   │   │   └── index.vue
│       │       │   │   └── index.js
│       │       │   └── mixin/
│       │       │       └── ResizeHandler.js
│       │       ├── login/
│       │       │   └── index.vue
│       │       ├── nested/
│       │       │   ├── menu1/
│       │       │   │   ├── index.vue
│       │       │   │   ├── menu1-1/
│       │       │   │   │   └── index.vue
│       │       │   │   ├── menu1-2/
│       │       │   │   │   ├── index.vue
│       │       │   │   │   ├── menu1-2-1/
│       │       │   │   │   │   └── index.vue
│       │       │   │   │   └── menu1-2-2/
│       │       │   │   │       └── index.vue
│       │       │   │   └── menu1-3/
│       │       │   │       └── index.vue
│       │       │   └── menu2/
│       │       │       └── index.vue
│       │       ├── product/
│       │       │   ├── components/
│       │       │   │   ├── SkuForm.vue
│       │       │   │   ├── SpuForm.vue
│       │       │   │   └── SpuForm.vue.bak
│       │       │   └── spu/
│       │       │       ├── list.vue
│       │       │       └── list.vue.bak
│       │       ├── table/
│       │       │   └── index.vue
│       │       └── tree/
│       │           └── index.vue
│       └── static/
│           └── .gitkeep
├── gmall-api/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           ├── entity/
│                           │   ├── Member.java
│                           │   ├── MemberReceiveAddress.java
│                           │   ├── OmsCartItem.java
│                           │   ├── OmsCompanyAddress.java
│                           │   ├── OmsOrder.java
│                           │   ├── OmsOrderItem.java
│                           │   ├── PaymentInfo.java
│                           │   ├── PmsBaseAttrInfo.java
│                           │   ├── PmsBaseAttrValue.java
│                           │   ├── PmsBaseCatalog1.java
│                           │   ├── PmsBaseCatalog2.java
│                           │   ├── PmsBaseCatalog3.java
│                           │   ├── PmsBaseSaleAttr.java
│                           │   ├── PmsProductImage.java
│                           │   ├── PmsProductInfo.java
│                           │   ├── PmsProductSaleAttr.java
│                           │   ├── PmsProductSaleAttrValue.java
│                           │   ├── PmsSearchCrumb.java
│                           │   ├── PmsSearchParam.java
│                           │   ├── PmsSearchSkuInfo.java
│                           │   ├── PmsSkuAttrValue.java
│                           │   ├── PmsSkuImage.java
│                           │   ├── PmsSkuInfo.java
│                           │   ├── PmsSkuSaleAttrValue.java
│                           │   └── UmsMemberLevel.java
│                           └── service/
│                               ├── AttrService.java
│                               ├── CartService.java
│                               ├── CataLogService.java
│                               ├── MemberReceiveAddressService.java
│                               ├── OrderItemService.java
│                               ├── OrderService.java
│                               ├── PaymentService.java
│                               ├── SearchService.java
│                               ├── SkuService.java
│                               ├── SpuService.java
│                               └── UserService.java
├── gmall-cart-service/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallCartServiceApplication.java
│       │   │               ├── mapper/
│       │   │               │   └── CartMapper.java
│       │   │               └── service/
│       │   │                   └── impl/
│       │   │                       └── CartServiceImpl.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       └── mapper/
│       │           └── CartMapper.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallCartServiceApplicationTests.java
├── gmall-cart-web/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallCartWebApplication.java
│       │   │               └── controller/
│       │   │                   └── CartController.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       ├── static/
│       │       │   ├── bootstrap/
│       │       │   │   ├── css/
│       │       │   │   │   └── bootstrap.css
│       │       │   │   └── js/
│       │       │   │       └── bootstrap.js
│       │       │   ├── css/
│       │       │   │   ├── One_bdyStyle.css
│       │       │   │   ├── One_mainFoot.css
│       │       │   │   ├── font-awesome-4.7.0/
│       │       │   │   │   ├── HELP-US-OUT.txt
│       │       │   │   │   ├── css/
│       │       │   │   │   │   └── font-awesome.css
│       │       │   │   │   ├── fonts/
│       │       │   │   │   │   └── FontAwesome.otf
│       │       │   │   │   ├── less/
│       │       │   │   │   │   ├── animated.less
│       │       │   │   │   │   ├── bordered-pulled.less
│       │       │   │   │   │   ├── core.less
│       │       │   │   │   │   ├── fixed-width.less
│       │       │   │   │   │   ├── font-awesome.less
│       │       │   │   │   │   ├── icons.less
│       │       │   │   │   │   ├── larger.less
│       │       │   │   │   │   ├── list.less
│       │       │   │   │   │   ├── mixins.less
│       │       │   │   │   │   ├── path.less
│       │       │   │   │   │   ├── rotated-flipped.less
│       │       │   │   │   │   ├── screen-reader.less
│       │       │   │   │   │   ├── stacked.less
│       │       │   │   │   │   └── variables.less
│       │       │   │   │   └── scss/
│       │       │   │   │       ├── _animated.scss
│       │       │   │   │       ├── _bordered-pulled.scss
│       │       │   │   │       ├── _core.scss
│       │       │   │   │       ├── _fixed-width.scss
│       │       │   │   │       ├── _icons.scss
│       │       │   │   │       ├── _larger.scss
│       │       │   │   │       ├── _list.scss
│       │       │   │   │       ├── _mixins.scss
│       │       │   │   │       ├── _path.scss
│       │       │   │   │       ├── _rotated-flipped.scss
│       │       │   │   │       ├── _screen-reader.scss
│       │       │   │   │       ├── _stacked.scss
│       │       │   │   │       ├── _variables.scss
│       │       │   │   │       └── font-awesome.scss
│       │       │   │   ├── index.css
│       │       │   │   └── success.css
│       │       │   ├── js/
│       │       │   │   ├── index.js
│       │       │   │   └── success.js
│       │       │   └── success.html
│       │       └── templates/
│       │           ├── One_JDshop.html
│       │           ├── cartList.html
│       │           ├── cartListInner.html
│       │           └── success.html
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallCartWebApplicationTests.java
├── gmall-common-util/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── util/
│                               └── HttpclientUtil.java
├── gmall-item-web/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallItemWebApplication.java
│       │   │               └── controller/
│       │   │                   └── ItemController.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       ├── static/
│       │       │   ├── bootstrap/
│       │       │   │   ├── css/
│       │       │   │   │   └── bootstrap.css
│       │       │   │   └── js/
│       │       │   │       └── bootstrap.js
│       │       │   ├── js/
│       │       │   │   ├── index.js
│       │       │   │   ├── jquery1.9.js
│       │       │   │   ├── js.js
│       │       │   │   └── spuId_66.js
│       │       │   └── scss/
│       │       │       ├── SHOUhou.css
│       │       │       ├── header.css
│       │       │       ├── main.css
│       │       │       └── shop.css
│       │       └── templates/
│       │           └── item.html
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallItemWebApplicationTests.java
├── gmall-manage-service/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallManageServiceApplication.java
│       │   │               ├── mapper/
│       │   │               │   ├── AttrInfoMapper.java
│       │   │               │   ├── AttrValueMapper.java
│       │   │               │   ├── BaseSaleAttrMapper.java
│       │   │               │   ├── CataLog1Mapper.java
│       │   │               │   ├── CataLog2Mapper.java
│       │   │               │   ├── CataLog3Mapper.java
│       │   │               │   ├── ImageMapper.java
│       │   │               │   ├── SaleAttrMapper.java
│       │   │               │   ├── SaleAttrValueMapper.java
│       │   │               │   ├── SkuAttrValueMapper.java
│       │   │               │   ├── SkuImageMapper.java
│       │   │               │   ├── SkuInfoMapper.java
│       │   │               │   ├── SkuSaleAttrValueMapper.java
│       │   │               │   └── SpuMapper.java
│       │   │               └── service/
│       │   │                   └── impl/
│       │   │                       ├── AttrServiceImpl.java
│       │   │                       ├── CataLogServiceImpl.java
│       │   │                       ├── SkuServiceImpl.java
│       │   │                       └── SpuServiceImpl.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       └── mapper/
│       │           ├── AttrInfoMapper.xml
│       │           ├── AttrValueMapper.xml
│       │           ├── CataLog1Mapper.xml
│       │           ├── CataLog2Mapper.xml
│       │           ├── CataLog3Mapper.xml
│       │           ├── SaleAttrMapper.xml
│       │           ├── SkuInfoMapper.xml
│       │           └── SpuMapper.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           ├── CodeGenerator.java
│                           └── GmallManageServiceApplicationTests.java
├── gmall-manage-web/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallManageWebApplication.java
│       │   │               ├── controller/
│       │   │               │   ├── AttrController.java
│       │   │               │   ├── CataLogController.java
│       │   │               │   ├── SkuController.java
│       │   │               │   └── SpuController.java
│       │   │               └── util/
│       │   │                   └── PmsUploadUtil.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       └── tracker.conf
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           ├── GmallManageWebApplicationTests.java
│                           └── UrlCrawBoke.java
├── gmall-order-service/
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallOrderServiceApplication.java
│       │   │               ├── OrderServiceMqListener.java
│       │   │               ├── mapper/
│       │   │               │   ├── OrderItemMapper.java
│       │   │               │   └── OrderMapper.java
│       │   │               └── service/
│       │   │                   └── impl/
│       │   │                       ├── OrderItemServiceImpl.java
│       │   │                       └── OrderServiceImpl.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       └── mapper/
│       │           ├── OrderItemMapper.xml
│       │           └── OrderMapper.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallOrderServiceApplicationTests.java
├── gmall-order-web/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallOrderWebApplication.java
│       │   │               └── controller/
│       │   │                   └── OrderController.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       ├── static/
│       │       │   ├── css/
│       │       │   │   ├── JD2.css
│       │       │   │   ├── index.css
│       │       │   │   ├── list.css
│       │       │   │   └── style.css
│       │       │   └── js/
│       │       │       └── list.js
│       │       └── templates/
│       │           ├── list.html
│       │           ├── trade.html
│       │           └── tradeFail.html
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallOrderWebApplicationTests.java
├── gmall-parent/
│   └── pom.xml
├── gmall-passport-web/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallPassportWebApplication.java
│       │   │               └── controller/
│       │   │                   └── PassportController.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       ├── static/
│       │       │   ├── css/
│       │       │   │   ├── gm1.css
│       │       │   │   └── gm1.css.bak
│       │       │   └── js/
│       │       │       └── zepto.js
│       │       └── templates/
│       │           └── index.html
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallPassportWebApplicationTests.java
├── gmall-payment/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallPaymentApplication.java
│       │   │               ├── PaymentServiceMqListener.java
│       │   │               ├── config/
│       │   │               │   └── AlipayConfig.java
│       │   │               ├── controller/
│       │   │               │   └── PaymentController.java
│       │   │               ├── mapper/
│       │   │               │   └── PaymentMapper.java
│       │   │               └── service/
│       │   │                   └── impl/
│       │   │                       └── PaymentServiceImpl.java
│       │   └── resources/
│       │       ├── alipay.properties
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       ├── static/
│       │       │   └── css/
│       │       │       └── style.css
│       │       └── templates/
│       │           ├── finish.html
│       │           ├── index.html
│       │           └── paymentindex.html
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallPaymentApplicationTests.java
├── gmall-search-service/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallSearchServiceApplication.java
│       │   │               └── service/
│       │   │                   └── impl/
│       │   │                       └── SearchServiceImpl.java
│       │   └── resources/
│       │       ├── application.properties
│       │       └── log4j.properties
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallSearchServiceApplicationTests.java
├── gmall-search-web/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallSearchWebApplication.java
│       │   │               └── controller/
│       │   │                   └── SearchController.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       ├── static/
│       │       │   ├── index/
│       │       │   │   ├── css/
│       │       │   │   │   └── GL.css
│       │       │   │   ├── img/
│       │       │   │   │   ├── 58171918N852b09d5.jpg!q90
│       │       │   │   │   ├── 5852299fN1840f35a.jpg!q90
│       │       │   │   │   ├── 585229bdNc20796ec.jpg!q90
│       │       │   │   │   ├── 58522b1bN916da74b.jpg!q90
│       │       │   │   │   ├── 58522b9dNf06d6f3d.jpg!q90
│       │       │   │   │   ├── 59251deeN5daf7ec3.jpg!q90
│       │       │   │   │   ├── 5927ef42Nc91cffc7.jpg!cc_200x140
│       │       │   │   │   ├── 5948b387N1e3bff83.jpg!q90
│       │       │   │   │   ├── 5948bb23N6da9eb71.jpg!q90
│       │       │   │   │   ├── 5950ca4bN6ab3d2f8.jpg!q90
│       │       │   │   │   ├── 5950ca84N9509b283.jpg!q90
│       │       │   │   │   ├── 5950cb54N467732a3.jpg!q90
│       │       │   │   │   ├── 595493f7Nacab54de.jpg!q90
│       │       │   │   │   ├── 597944aeNd644dbd8.jpg!q90
│       │       │   │   │   ├── 59b26e7dN59707ce1.jpg!q90
│       │       │   │   │   ├── 59c1c15dNff3351e4.jpg!q90
│       │       │   │   │   ├── 59e56045N56ae92f1.jpg!q90
│       │       │   │   │   ├── 59ed51ddN8eefe457.jpg!q90
│       │       │   │   │   ├── 5a02d06cN1e37012f.jpg!q90
│       │       │   │   │   ├── 5a0502a0Nf18e2c44.jpg!q90
│       │       │   │   │   ├── 5a086aadNdd4a2d3d.jpg!q90
│       │       │   │   │   ├── 5a086b2cN0353b2df.png!q90
│       │       │   │   │   ├── 5a095387N0626036b.jpg!q90
│       │       │   │   │   ├── 5a097363Nf5fb64a6.jpg!q90
│       │       │   │   │   ├── 5a0bae3dNd70d9115.jpg!q90
│       │       │   │   │   ├── 5a0ce692N1a6c1453.jpg!q90
│       │       │   │   │   ├── 5a0cf69eN35720550.jpg!q90
│       │       │   │   │   ├── 5a0e3ab4N84732c2b.jpg!q90
│       │       │   │   │   ├── 5a0e64f0N68973e71.jpg!q90
│       │       │   │   │   ├── 5a0e9e4eN3d592b05.jpg!q90
│       │       │   │   │   ├── 5a122e02Nff6d7d36 (1).jpg!q90
│       │       │   │   │   ├── 5a122e02Nff6d7d36.jpg!q90
│       │       │   │   │   ├── 5a1233b5Nb10b9cbc (1).jpg!q90
│       │       │   │   │   ├── 5a1233b5Nb10b9cbc.jpg!q90
│       │       │   │   │   ├── 5a123702Nd17543ed.jpg!q90
│       │       │   │   │   ├── 5a124b62Na95768ed.jpg!q90
│       │       │   │   │   ├── 5a1273dbN740798e9.jpg!q90
│       │       │   │   │   ├── 5a12a25fN96769d3c.jpg!q90
│       │       │   │   │   ├── 5a138438N19d98566.jpg!q90
│       │       │   │   │   ├── 5a13bf0bNe1606e58.jpg!q90
│       │       │   │   │   ├── 5a13c218N7c86dc71.jpg!cc_200x140
│       │       │   │   │   ├── 5a13f30fN5ed4a260.jpg!q90
│       │       │   │   │   ├── 5a14d244N753235ee.jpg!q90
│       │       │   │   │   ├── 5a153de2Nf8b4fd68.jpg!q90
│       │       │   │   │   ├── 5a154759N5385d5d6.jpg!q90
│       │       │   │   │   ├── 5a154c8dN4135f0ca.jpg!q90
│       │       │   │   │   ├── 5a15541bNb9c925af.jpg!cc_200x140
│       │       │   │   │   ├── 5a155909Nfaeaff7d.jpg!q90
│       │       │   │   │   ├── 5a162e07N716d0432.jpg!q90
│       │       │   │   │   ├── 5a1645d7Nb450ea8f.jpg!q90
│       │       │   │   │   ├── 5a166870N0df26ef0.jpg!q90
│       │       │   │   │   ├── 5a16712eN5b12d2a1.jpg!q90
│       │       │   │   │   ├── 5a168352N61f45409.jpg!q90
│       │       │   │   │   ├── 5a1683e0N115c3304.jpg!q90
│       │       │   │   │   ├── 5a168d1eN8d09a8b8.jpg!q90
│       │       │   │   │   ├── 5a169882Nd454bf29.jpg!q90
│       │       │   │   │   ├── 5a1698b7Nd63c86ed.jpg!q90
│       │       │   │   │   ├── 5a16a84fN6dc1786f.jpg!q90
│       │       │   │   │   ├── 5a176f84N5e5df987.jpg!q90
│       │       │   │   │   ├── 5a1775a6N2f1b3538.jpg!q90
│       │       │   │   │   ├── 5a177937N733d5884.jpg!q90
│       │       │   │   │   ├── 5a177c43N7a83454e.jpg!q90
│       │       │   │   │   ├── 5a177d99Nd0347bf1.jpg!cc_200x140
│       │       │   │   │   ├── 5a1783a8N7d7f6988.jpg!q90
│       │       │   │   │   ├── 5a17b2c2Na8f437b9.jpg!cc_200x140
│       │       │   │   │   ├── 5a17b56fNd535f5ec.jpg!q90
│       │       │   │   │   ├── 5a17c3feN9cd403e8.jpg!q90
│       │       │   │   │   ├── 5a17ced0Nc020e244 (1).jpg!q90
│       │       │   │   │   ├── 5a17ced0Nc020e244.jpg!q90
│       │       │   │   │   ├── 5a17d1d0Nd648ae8b.jpg!q90
│       │       │   │   │   ├── 5a17d1d2Nac4c7ead.jpg!q90
│       │       │   │   │   ├── 5a17d5e7N220f95a8.jpg!q90
│       │       │   │   │   ├── 5a17e3abNfc2ae745.jpg!q90
│       │       │   │   │   ├── 5a17e4a2N3e7d7612.jpg!q90
│       │       │   │   │   ├── 5a17ec77Nd92f9470.jpg!q90
│       │       │   │   │   ├── 5a1b6757N8a831b02.jpg!q90
│       │       │   │   │   ├── 5a1b677bNe5a0a902.jpg!q90
│       │       │   │   │   ├── 5a1b83c7Nded9c556.jpg!q90
│       │       │   │   │   ├── n1.jpg!q90
│       │       │   │   │   ├── n14.jpg!q90
│       │       │   │   │   ├── n15.jpg!q90
│       │       │   │   │   ├── n16.jpg!q90
│       │       │   │   │   ├── n6.jpg!q90
│       │       │   │   │   ├── n7.jpg!q90
│       │       │   │   │   ├── n8.jpg!q90
│       │       │   │   │   ├── n9.jpg!q90
│       │       │   │   │   ├── s1.jpg!q90
│       │       │   │   │   ├── s10.jpg!q90
│       │       │   │   │   ├── s14.jpg!q90
│       │       │   │   │   ├── s15.jpg!q90
│       │       │   │   │   ├── s16.jpg!q90
│       │       │   │   │   ├── s6.jpg!q90
│       │       │   │   │   ├── s7.jpg!q90
│       │       │   │   │   ├── s8.jpg!q90
│       │       │   │   │   ├── s9.jpg!q90
│       │       │   │   │   ├── saved_resource
│       │       │   │   │   ├── saved_resource(1)
│       │       │   │   │   ├── w1.jpg!q90
│       │       │   │   │   ├── w6.jpg!q90
│       │       │   │   │   ├── w7.jpg!q90
│       │       │   │   │   ├── w8.jpg!q90
│       │       │   │   │   ├── wl.js.下载
│       │       │   │   │   ├── y1.jpg!q90
│       │       │   │   │   ├── y6.jpg!q90
│       │       │   │   │   ├── y7.jpg!q90
│       │       │   │   │   └── y8.jpg!q90
│       │       │   │   ├── js/
│       │       │   │   │   ├── catalogLoader.js
│       │       │   │   │   ├── header.js
│       │       │   │   │   ├── index.js
│       │       │   │   │   ├── left,top.js
│       │       │   │   │   ├── secend.js
│       │       │   │   │   ├── text.js
│       │       │   │   │   └── zz.js
│       │       │   │   └── json/
│       │       │   │       └── catalog.json
│       │       │   └── list/
│       │       │       ├── css/
│       │       │       │   └── index.css
│       │       │       ├── font/
│       │       │       │   ├── demo.css
│       │       │       │   ├── demo_fontclass.html
│       │       │       │   ├── demo_symbol.html
│       │       │       │   ├── demo_unicode.html
│       │       │       │   ├── iconfont.css
│       │       │       │   └── iconfont.js
│       │       │       ├── img/
│       │       │       │   └── 5716981.html
│       │       │       └── js/
│       │       │           ├── index.js
│       │       │           └── jquery-1.12.4.js
│       │       └── templates/
│       │           ├── index.html
│       │           └── list.html
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallSearchWebApplicationTests.java
├── gmall-service-util/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           ├── config/
│                           │   ├── ActiveMQConfig.java
│                           │   ├── RedisConfig.java
│                           │   └── RedissonConfig.java
│                           └── util/
│                               ├── ActiveMQUtil.java
│                               └── RedisUtil.java
├── gmall-user-service/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallUserServiceApplication.java
│       │   │               ├── mapper/
│       │   │               │   ├── MemberReceiveAddressMapper.java
│       │   │               │   ├── UserMapper.java
│       │   │               │   └── UserReceiveAddressMapper.java
│       │   │               └── service/
│       │   │                   └── impl/
│       │   │                       ├── MemberReceiveAddressServiceImpl.java
│       │   │                       └── UserServiceImpl.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── log4j.properties
│       │       └── mapper/
│       │           └── UserMapper.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallUserServiceApplicationTests.java
├── gmall-user-web/
│   ├── mvnw.cmd
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           └── gmall/
│       │   │               ├── GmallUserWebApplication.java
│       │   │               └── controller/
│       │   │                   ├── MemberReceiveAddressController.java
│       │   │                   └── UserController.java
│       │   └── resources/
│       │       ├── application.properties
│       │       └── log4j.properties
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           └── GmallUserWebApplicationTests.java
├── gmall-web-util/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gmall/
│                           ├── annotations/
│                           │   └── LoginRequired.java
│                           ├── config/
│                           │   └── WebMvcConfiguration.java
│                           ├── interceptors/
│                           │   └── AuthInterceptor.java
│                           └── util/
│                               ├── CookieUtil.java
│                               └── JwtUtil.java
├── gware-manage/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── xatu/
│       │   │           ├── GwareManageApplication.java
│       │   │           └── gware/
│       │   │               ├── bean/
│       │   │               │   ├── OmsOrder.java
│       │   │               │   ├── OmsOrderItem.java
│       │   │               │   ├── WareInfo.java
│       │   │               │   ├── WareOrderTask.java
│       │   │               │   ├── WareOrderTaskDetail.java
│       │   │               │   ├── WareSku.java
│       │   │               │   └── enums/
│       │   │               │       ├── OrderStatus.java
│       │   │               │       ├── PaymentStatus.java
│       │   │               │       ├── PaymentWay.java
│       │   │               │       └── ProcessStatus.java
│       │   │               ├── config/
│       │   │               │   ├── ActiveMQConfig.java
│       │   │               │   ├── GwareConst.java
│       │   │               │   └── JsonpController.java
│       │   │               ├── controller/
│       │   │               │   └── GwareController.java
│       │   │               ├── enums/
│       │   │               │   └── TaskStatus.java
│       │   │               ├── mapper/
│       │   │               │   ├── WareInfoMapper.java
│       │   │               │   ├── WareOrderTaskDetailMapper.java
│       │   │               │   ├── WareOrderTaskMapper.java
│       │   │               │   └── WareSkuMapper.java
│       │   │               ├── mq/
│       │   │               │   └── WareConsumer.java
│       │   │               ├── service/
│       │   │               │   ├── GwareService.java
│       │   │               │   └── impl/
│       │   │               │       └── GwareServiceImpl.java
│       │   │               └── util/
│       │   │                   ├── ActiveMQUtil.java
│       │   │                   └── HttpclientUtil.java
│       │   └── resources/
│       │       ├── application.properties
│       │       ├── mapper/
│       │       │   ├── WareInfoMapper.xml
│       │       │   └── WareSkuMapper.xml
│       │       ├── static/
│       │       │   └── easyui/
│       │       │       ├── datagrid-detailview.js
│       │       │       ├── easyloader.js
│       │       │       ├── plugins/
│       │       │       │   ├── jquery.accordion.js
│       │       │       │   ├── jquery.calendar.js
│       │       │       │   ├── jquery.combo.js
│       │       │       │   ├── jquery.combobox.js
│       │       │       │   ├── jquery.combogrid.js
│       │       │       │   ├── jquery.combotree.js
│       │       │       │   ├── jquery.combotreegrid.js
│       │       │       │   ├── jquery.datagrid.js
│       │       │       │   ├── jquery.datalist.js
│       │       │       │   ├── jquery.datebox.js
│       │       │       │   ├── jquery.datetimebox.js
│       │       │       │   ├── jquery.datetimespinner.js
│       │       │       │   ├── jquery.dialog.js
│       │       │       │   ├── jquery.draggable.js
│       │       │       │   ├── jquery.droppable.js
│       │       │       │   ├── jquery.filebox.js
│       │       │       │   ├── jquery.form.js
│       │       │       │   ├── jquery.layout.js
│       │       │       │   ├── jquery.linkbutton.js
│       │       │       │   ├── jquery.menu.js
│       │       │       │   ├── jquery.menubutton.js
│       │       │       │   ├── jquery.messager.js
│       │       │       │   ├── jquery.mobile.js
│       │       │       │   ├── jquery.numberbox.js
│       │       │       │   ├── jquery.numberspinner.js
│       │       │       │   ├── jquery.pagination.js
│       │       │       │   ├── jquery.panel.js
│       │       │       │   ├── jquery.parser.js
│       │       │       │   ├── jquery.passwordbox.js
│       │       │       │   ├── jquery.progressbar.js
│       │       │       │   ├── jquery.propertygrid.js
│       │       │       │   ├── jquery.resizable.js
│       │       │       │   ├── jquery.searchbox.js
│       │       │       │   ├── jquery.slider.js
│       │       │       │   ├── jquery.spinner.js
│       │       │       │   ├── jquery.splitbutton.js
│       │       │       │   ├── jquery.switchbutton.js
│       │       │       │   ├── jquery.tabs.js
│       │       │       │   ├── jquery.tagbox.js
│       │       │       │   ├── jquery.textbox.js
│       │       │       │   ├── jquery.timespinner.js
│       │       │       │   ├── jquery.tooltip.js
│       │       │       │   ├── jquery.tree.js
│       │       │       │   ├── jquery.treegrid.js
│       │       │       │   ├── jquery.validatebox.js
│       │       │       │   └── jquery.window.js
│       │       │       └── themes/
│       │       │           ├── angular.css
│       │       │           ├── black/
│       │       │           │   ├── accordion.css
│       │       │           │   ├── calendar.css
│       │       │           │   ├── checkbox.css
│       │       │           │   ├── combo.css
│       │       │           │   ├── combobox.css
│       │       │           │   ├── datagrid.css
│       │       │           │   ├── datalist.css
│       │       │           │   ├── datebox.css
│       │       │           │   ├── dialog.css
│       │       │           │   ├── easyui.css
│       │       │           │   ├── filebox.css
│       │       │           │   ├── layout.css
│       │       │           │   ├── linkbutton.css
│       │       │           │   ├── menu.css
│       │       │           │   ├── menubutton.css
│       │       │           │   ├── messager.css
│       │       │           │   ├── numberbox.css
│       │       │           │   ├── pagination.css
│       │       │           │   ├── panel.css
│       │       │           │   ├── passwordbox.css
│       │       │           │   ├── progressbar.css
│       │       │           │   ├── propertygrid.css
│       │       │           │   ├── radiobutton.css
│       │       │           │   ├── searchbox.css
│       │       │           │   ├── slider.css
│       │       │           │   ├── spinner.css
│       │       │           │   ├── splitbutton.css
│       │       │           │   ├── switchbutton.css
│       │       │           │   ├── tabs.css
│       │       │           │   ├── tagbox.css
│       │       │           │   ├── textbox.css
│       │       │           │   ├── tooltip.css
│       │       │           │   ├── tree.css
│       │       │           │   ├── validatebox.css
│       │       │           │   └── window.css
│       │       │           ├── bootstrap/
│       │       │           │   ├── accordion.css
│       │       │           │   ├── calendar.css
│       │       │           │   ├── checkbox.css
│       │       │           │   ├── combo.css
│       │       │           │   ├── combobox.css
│       │       │           │   ├── datagrid.css
│       │       │           │   ├── datalist.css
│       │       │           │   ├── datebox.css
│       │       │           │   ├── dialog.css
│       │       │           │   ├── easyui.css
│       │       │           │   ├── filebox.css
│       │       │           │   ├── layout.css
│       │       │           │   ├── linkbutton.css
│       │       │           │   ├── menu.css
│       │       │           │   ├── menubutton.css
│       │       │           │   ├── messager.css
│       │       │           │   ├── numberbox.css
│       │       │           │   ├── pagination.css
│       │       │           │   ├── panel.css
│       │       │           │   ├── passwordbox.css
│       │       │           │   ├── progressbar.css
│       │       │           │   ├── propertygrid.css
│       │       │           │   ├── radiobutton.css
│       │       │           │   ├── searchbox.css
│       │       │           │   ├── slider.css
│       │       │           │   ├── spinner.css
│       │       │           │   ├── splitbutton.css
│       │       │           │   ├── switchbutton.css
│       │       │           │   ├── tabs.css
│       │       │           │   ├── tagbox.css
│       │       │           │   ├── textbox.css
│       │       │           │   ├── tooltip.css
│       │       │           │   ├── tree.css
│       │       │           │   ├── validatebox.css
│       │       │           │   └── window.css
│       │       │           ├── color.css
│       │       │           ├── default/
│       │       │           │   ├── accordion.css
│       │       │           │   ├── calendar.css
│       │       │           │   ├── checkbox.css
│       │       │           │   ├── combo.css
│       │       │           │   ├── combobox.css
│       │       │           │   ├── datagrid.css
│       │       │           │   ├── datalist.css
│       │       │           │   ├── datebox.css
│       │       │           │   ├── dialog.css
│       │       │           │   ├── easyui.css
│       │       │           │   ├── filebox.css
│       │       │           │   ├── layout.css
│       │       │           │   ├── linkbutton.css
│       │       │           │   ├── menu.css
│       │       │           │   ├── menubutton.css
│       │       │           │   ├── messager.css
│       │       │           │   ├── numberbox.css
│       │       │           │   ├── pagination.css
│       │       │           │   ├── panel.css
│       │       │           │   ├── passwordbox.css
│       │       │           │   ├── progressbar.css
│       │       │           │   ├── propertygrid.css
│       │       │           │   ├── radiobutton.css
│       │       │           │   ├── searchbox.css
│       │       │           │   ├── slider.css
│       │       │           │   ├── spinner.css
│       │       │           │   ├── splitbutton.css
│       │       │           │   ├── switchbutton.css
│       │       │           │   ├── tabs.css
│       │       │           │   ├── tagbox.css
│       │       │           │   ├── textbox.css
│       │       │           │   ├── tooltip.css
│       │       │           │   ├── tree.css
│       │       │           │   ├── validatebox.css
│       │       │           │   └── window.css
│       │       │           ├── gray/
│       │       │           │   ├── accordion.css
│       │       │           │   ├── calendar.css
│       │       │           │   ├── checkbox.css
│       │       │           │   ├── combo.css
│       │       │           │   ├── combobox.css
│       │       │           │   ├── datagrid.css
│       │       │           │   ├── datalist.css
│       │       │           │   ├── datebox.css
│       │       │           │   ├── dialog.css
│       │       │           │   ├── easyui.css
│       │       │           │   ├── filebox.css
│       │       │           │   ├── layout.css
│       │       │           │   ├── linkbutton.css
│       │       │           │   ├── menu.css
│       │       │           │   ├── menubutton.css
│       │       │           │   ├── messager.css
│       │       │           │   ├── numberbox.css
│       │       │           │   ├── pagination.css
│       │       │           │   ├── panel.css
│       │       │           │   ├── passwordbox.css
│       │       │           │   ├── progressbar.css
│       │       │           │   ├── propertygrid.css
│       │       │           │   ├── radiobutton.css
│       │       │           │   ├── searchbox.css
│       │       │           │   ├── slider.css
│       │       │           │   ├── spinner.css
│       │       │           │   ├── splitbutton.css
│       │       │           │   ├── switchbutton.css
│       │       │           │   ├── tabs.css
│       │       │           │   ├── tagbox.css
│       │       │           │   ├── textbox.css
│       │       │           │   ├── tooltip.css
│       │       │           │   ├── tree.css
│       │       │           │   ├── validatebox.css
│       │       │           │   └── window.css
│       │       │           ├── icon.css
│       │       │           ├── material/
│       │       │           │   ├── accordion.css
│       │       │           │   ├── calendar.css
│       │       │           │   ├── checkbox.css
│       │       │           │   ├── combo.css
│       │       │           │   ├── combobox.css
│       │       │           │   ├── datagrid.css
│       │       │           │   ├── datalist.css
│       │       │           │   ├── datebox.css
│       │       │           │   ├── dialog.css
│       │       │           │   ├── easyui.css
│       │       │           │   ├── filebox.css
│       │       │           │   ├── layout.css
│       │       │           │   ├── linkbutton.css
│       │       │           │   ├── menu.css
│       │       │           │   ├── menubutton.css
│       │       │           │   ├── messager.css
│       │       │           │   ├── numberbox.css
│       │       │           │   ├── pagination.css
│       │       │           │   ├── panel.css
│       │       │           │   ├── passwordbox.css
│       │       │           │   ├── progressbar.css
│       │       │           │   ├── propertygrid.css
│       │       │           │   ├── radiobutton.css
│       │       │           │   ├── searchbox.css
│       │       │           │   ├── slider.css
│       │       │           │   ├── spinner.css
│       │       │           │   ├── splitbutton.css
│       │       │           │   ├── switchbutton.css
│       │       │           │   ├── tabs.css
│       │       │           │   ├── tagbox.css
│       │       │           │   ├── textbox.css
│       │       │           │   ├── tooltip.css
│       │       │           │   ├── tree.css
│       │       │           │   ├── validatebox.css
│       │       │           │   └── window.css
│       │       │           ├── metro/
│       │       │           │   ├── accordion.css
│       │       │           │   ├── calendar.css
│       │       │           │   ├── checkbox.css
│       │       │           │   ├── combo.css
│       │       │           │   ├── combobox.css
│       │       │           │   ├── datagrid.css
│       │       │           │   ├── datalist.css
│       │       │           │   ├── datebox.css
│       │       │           │   ├── dialog.css
│       │       │           │   ├── easyui.css
│       │       │           │   ├── filebox.css
│       │       │           │   ├── layout.css
│       │       │           │   ├── linkbutton.css
│       │       │           │   ├── menu.css
│       │       │           │   ├── menubutton.css
│       │       │           │   ├── messager.css
│       │       │           │   ├── numberbox.css
│       │       │           │   ├── pagination.css
│       │       │           │   ├── panel.css
│       │       │           │   ├── passwordbox.css
│       │       │           │   ├── progressbar.css
│       │       │           │   ├── propertygrid.css
│       │       │           │   ├── radiobutton.css
│       │       │           │   ├── searchbox.css
│       │       │           │   ├── slider.css
│       │       │           │   ├── spinner.css
│       │       │           │   ├── splitbutton.css
│       │       │           │   ├── switchbutton.css
│       │       │           │   ├── tabs.css
│       │       │           │   ├── tagbox.css
│       │       │           │   ├── textbox.css
│       │       │           │   ├── tooltip.css
│       │       │           │   ├── tree.css
│       │       │           │   ├── validatebox.css
│       │       │           │   └── window.css
│       │       │           └── mobile.css
│       │       └── templates/
│       │           ├── index.html
│       │           ├── main.html
│       │           ├── orderTaskList.html
│       │           └── wareSkuListPage.html
│       └── test/
│           └── java/
│               └── com/
│                   └── xatu/
│                       └── gware/
│                           └── controller/
│                               └── GwareManageApplicationTests.java
└── seckill/
    ├── pom.xml
    └── src/
        ├── main/
        │   ├── java/
        │   │   └── com/
        │   │       └── xatu/
        │   │           └── gmall/
        │   │               ├── SeckillApplication.java
        │   │               └── controller/
        │   │                   └── SeckillController.java
        │   └── resources/
        │       └── application.properties
        └── test/
            └── java/
                └── com/
                    └── xatu/
                        └── gmall/
                            └── SeckillApplicationTests.java
Download .txt
SYMBOL INDEX (1828 symbols across 223 files)

FILE: gmall-admin/gmall-admin/build/check-versions.js
  function exec (line 7) | function exec(cmd) {

FILE: gmall-admin/gmall-admin/build/utils.js
  function generateLoaders (line 34) | function generateLoaders(loader, loaderOptions) {

FILE: gmall-admin/gmall-admin/build/webpack.base.conf.js
  function resolve (line 8) | function resolve(dir) {

FILE: gmall-admin/gmall-admin/build/webpack.dev.conf.js
  function resolve (line 12) | function resolve(dir) {
  constant HOST (line 16) | const HOST = process.env.HOST
  constant PORT (line 17) | const PORT = process.env.PORT && Number(process.env.PORT)

FILE: gmall-admin/gmall-admin/build/webpack.prod.conf.js
  function resolve (line 15) | function resolve(dir) {

FILE: gmall-admin/gmall-admin/src/api/baseinfo/prop.js
  method getCatalog1 (line 6) | getCatalog1() {
  method getCatalog2 (line 14) | getCatalog2(catalog1Id) {
  method getCatalog3 (line 22) | getCatalog3(catalog2Id) {
  method getAttrInfoList (line 30) | getAttrInfoList(catalog3Id) {
  method getAttrValueList (line 38) | getAttrValueList(attrId) {
  method saveAttrInfo (line 46) | saveAttrInfo(attrForm) {

FILE: gmall-admin/gmall-admin/src/api/components/CatalogSelector.js
  method getCatalog1 (line 6) | getCatalog1() {
  method getCatalog2 (line 14) | getCatalog2(catalog1Id) {
  method getCatalog3 (line 22) | getCatalog3(catalog2Id) {

FILE: gmall-admin/gmall-admin/src/api/login.js
  function login (line 3) | function login(username, password) {
  function getInfo (line 14) | function getInfo(token) {
  function logout (line 22) | function logout() {

FILE: gmall-admin/gmall-admin/src/api/product/sku.js
  method saveSkuInfo (line 6) | saveSkuInfo(skuForm) {

FILE: gmall-admin/gmall-admin/src/api/product/spu.js
  method getSpuList (line 6) | getSpuList(catalog3Id) {
  method saveSpuInfo (line 14) | saveSpuInfo(spuForm) {
  method getBaseSaleAttrList (line 23) | getBaseSaleAttrList() {
  method getSpuSaleAttrList (line 31) | getSpuSaleAttrList(spuId) {
  method getSpuImageList (line 39) | getSpuImageList(spuId) {

FILE: gmall-admin/gmall-admin/src/api/table.js
  function getList (line 3) | function getList(params) {

FILE: gmall-admin/gmall-admin/src/store/modules/app.js
  method CloseSideBar (line 34) | CloseSideBar({ commit }, { withoutAnimation }) {
  method ToggleDevice (line 37) | ToggleDevice({ commit }, device) {

FILE: gmall-admin/gmall-admin/src/store/modules/user.js
  method Login (line 42) | Login({ commit }, userInfo) {
  method GetInfo (line 68) | GetInfo({ commit, state }) {
  method LogOut (line 94) | LogOut({ commit, state }) {
  method FedLogOut (line 101) | FedLogOut({ commit }) {

FILE: gmall-admin/gmall-admin/src/utils/auth.js
  function getToken (line 5) | function getToken() {
  function setToken (line 9) | function setToken(token) {
  function removeToken (line 13) | function removeToken() {

FILE: gmall-admin/gmall-admin/src/utils/index.js
  function parseTime (line 5) | function parseTime(time, cFormat) {
  function formatTime (line 38) | function formatTime(time, option) {
  function isExternal (line 72) | function isExternal(path) {

FILE: gmall-admin/gmall-admin/src/utils/validate.js
  function isvalidUsername (line 5) | function isvalidUsername(str) {
  function validateURL (line 11) | function validateURL(textval) {
  function validateLowerCase (line 17) | function validateLowerCase(str) {
  function validateUpperCase (line 23) | function validateUpperCase(str) {
  function validatAlphabets (line 29) | function validatAlphabets(str) {

FILE: gmall-admin/gmall-admin/src/views/layout/mixin/ResizeHandler.js
  constant WIDTH (line 4) | const WIDTH = 1024
  constant RATIO (line 5) | const RATIO = 3
  method $route (line 9) | $route(route) {
  method beforeMount (line 15) | beforeMount() {
  method mounted (line 18) | mounted() {
  method isMobile (line 26) | isMobile() {
  method resizeHandler (line 30) | resizeHandler() {

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/Member.java
  class Member (line 22) | @TableName("ums_member")
    method getAccessCode (line 124) | public String getAccessCode() {
    method setAccessCode (line 128) | public void setAccessCode(String accessCode) {
    method getSourceUid (line 132) | public String getSourceUid() {
    method setSourceUid (line 136) | public void setSourceUid(String sourceUid) {
    method getAccessToken (line 140) | public String getAccessToken() {
    method setAccessToken (line 144) | public void setAccessToken(String accessToken) {
    method getSerialVersionUID (line 148) | public static long getSerialVersionUID() {
    method getId (line 152) | public Long getId() {
    method setId (line 156) | public void setId(Long id) {
    method getMemberLevelId (line 160) | public Long getMemberLevelId() {
    method setMemberLevelId (line 164) | public void setMemberLevelId(Long memberLevelId) {
    method getUsername (line 168) | public String getUsername() {
    method setUsername (line 172) | public void setUsername(String username) {
    method getPassword (line 176) | public String getPassword() {
    method setPassword (line 180) | public void setPassword(String password) {
    method getNickname (line 184) | public String getNickname() {
    method setNickname (line 188) | public void setNickname(String nickname) {
    method getPhone (line 192) | public String getPhone() {
    method setPhone (line 196) | public void setPhone(String phone) {
    method getStatus (line 200) | public Integer getStatus() {
    method setStatus (line 204) | public void setStatus(Integer status) {
    method getCreateTime (line 208) | public Date getCreateTime() {
    method setCreateTime (line 212) | public void setCreateTime(Date createTime) {
    method getIcon (line 216) | public String getIcon() {
    method setIcon (line 220) | public void setIcon(String icon) {
    method getGender (line 224) | public Integer getGender() {
    method setGender (line 228) | public void setGender(Integer gender) {
    method getBirthday (line 232) | public Date getBirthday() {
    method setBirthday (line 236) | public void setBirthday(Date birthday) {
    method getCity (line 240) | public String getCity() {
    method setCity (line 244) | public void setCity(String city) {
    method getJob (line 248) | public String getJob() {
    method setJob (line 252) | public void setJob(String job) {
    method getPersonalizedSignature (line 256) | public String getPersonalizedSignature() {
    method setPersonalizedSignature (line 260) | public void setPersonalizedSignature(String personalizedSignature) {
    method getSourceType (line 264) | public Integer getSourceType() {
    method setSourceType (line 268) | public void setSourceType(Integer sourceType) {
    method getIntegration (line 272) | public Integer getIntegration() {
    method setIntegration (line 276) | public void setIntegration(Integer integration) {
    method getGrowth (line 280) | public Integer getGrowth() {
    method setGrowth (line 284) | public void setGrowth(Integer growth) {
    method getLuckeyCount (line 288) | public Integer getLuckeyCount() {
    method setLuckeyCount (line 292) | public void setLuckeyCount(Integer luckeyCount) {
    method getHistoryIntegration (line 296) | public Integer getHistoryIntegration() {
    method setHistoryIntegration (line 300) | public void setHistoryIntegration(Integer historyIntegration) {
    method toString (line 305) | @Override

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/MemberReceiveAddress.java
  class MemberReceiveAddress (line 19) | @TableName("ums_member_receive_address")
    method getSerialVersionUID (line 66) | public static long getSerialVersionUID() {
    method getId (line 70) | public Long getId() {
    method setId (line 74) | public void setId(Long id) {
    method getMemberId (line 78) | public Long getMemberId() {
    method setMemberId (line 82) | public void setMemberId(Long memberId) {
    method getName (line 86) | public String getName() {
    method setName (line 90) | public void setName(String name) {
    method getPhoneNumber (line 94) | public String getPhoneNumber() {
    method setPhoneNumber (line 98) | public void setPhoneNumber(String phoneNumber) {
    method getDefaultStatus (line 102) | public Integer getDefaultStatus() {
    method setDefaultStatus (line 106) | public void setDefaultStatus(Integer defaultStatus) {
    method getPostCode (line 110) | public String getPostCode() {
    method setPostCode (line 114) | public void setPostCode(String postCode) {
    method getProvince (line 118) | public String getProvince() {
    method setProvince (line 122) | public void setProvince(String province) {
    method getCity (line 126) | public String getCity() {
    method setCity (line 130) | public void setCity(String city) {
    method getRegion (line 134) | public String getRegion() {
    method setRegion (line 138) | public void setRegion(String region) {
    method getDetailAddress (line 142) | public String getDetailAddress() {
    method setDetailAddress (line 146) | public void setDetailAddress(String detailAddress) {

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/OmsCartItem.java
  class OmsCartItem (line 24) | @TableName("oms_cart_item")
    method getTotalPrice (line 134) | public String getTotalPrice() {
    method setTotalPrice (line 138) | public void setTotalPrice(String totalPrice) {
    method getIsChecked (line 142) | public String getIsChecked() {
    method setIsChecked (line 146) | public void setIsChecked(String isChecked) {
    method getSerialVersionUID (line 150) | public static long getSerialVersionUID() {
    method getId (line 154) | public Long getId() {
    method setId (line 158) | public void setId(Long id) {
    method getProductId (line 162) | public Long getProductId() {
    method setProductId (line 166) | public void setProductId(Long productId) {
    method getProductSkuId (line 170) | public Long getProductSkuId() {
    method setProductSkuId (line 174) | public void setProductSkuId(Long productSkuId) {
    method getMemberId (line 178) | public Long getMemberId() {
    method setMemberId (line 182) | public void setMemberId(Long memberId) {
    method getQuantity (line 186) | public Integer getQuantity() {
    method setQuantity (line 190) | public void setQuantity(Integer quantity) {
    method getPrice (line 194) | public BigDecimal getPrice() {
    method setPrice (line 198) | public void setPrice(BigDecimal price) {
    method getSp1 (line 202) | public String getSp1() {
    method setSp1 (line 206) | public void setSp1(String sp1) {
    method getSp2 (line 210) | public String getSp2() {
    method setSp2 (line 214) | public void setSp2(String sp2) {
    method getSp3 (line 218) | public String getSp3() {
    method setSp3 (line 222) | public void setSp3(String sp3) {
    method getProductPic (line 226) | public String getProductPic() {
    method setProductPic (line 230) | public void setProductPic(String productPic) {
    method getProductName (line 234) | public String getProductName() {
    method setProductName (line 238) | public void setProductName(String productName) {
    method getProductSubTitle (line 242) | public String getProductSubTitle() {
    method setProductSubTitle (line 246) | public void setProductSubTitle(String productSubTitle) {
    method getProductSkuCode (line 250) | public String getProductSkuCode() {
    method setProductSkuCode (line 254) | public void setProductSkuCode(String productSkuCode) {
    method getMemberNickname (line 258) | public String getMemberNickname() {
    method setMemberNickname (line 262) | public void setMemberNickname(String memberNickname) {
    method getCreateDate (line 266) | public Date getCreateDate() {
    method setCreateDate (line 270) | public void setCreateDate(Date createDate) {
    method getModifyDate (line 274) | public Date getModifyDate() {
    method setModifyDate (line 278) | public void setModifyDate(Date modifyDate) {
    method getDeleteStatus (line 282) | public Integer getDeleteStatus() {
    method setDeleteStatus (line 286) | public void setDeleteStatus(Integer deleteStatus) {
    method getProductCategoryId (line 290) | public Long getProductCategoryId() {
    method setProductCategoryId (line 294) | public void setProductCategoryId(Long productCategoryId) {
    method getProductBrand (line 298) | public String getProductBrand() {
    method setProductBrand (line 302) | public void setProductBrand(String productBrand) {
    method getProductSn (line 306) | public String getProductSn() {
    method setProductSn (line 310) | public void setProductSn(String productSn) {
    method getProductAttr (line 314) | public String getProductAttr() {
    method setProductAttr (line 318) | public void setProductAttr(String productAttr) {
    method toString (line 322) | @Override

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/OmsCompanyAddress.java
  class OmsCompanyAddress (line 19) | @TableName("oms_company_address")
    method getSerialVersionUID (line 72) | public static long getSerialVersionUID() {
    method getId (line 76) | public Long getId() {
    method setId (line 80) | public void setId(Long id) {
    method getAddressName (line 84) | public String getAddressName() {
    method setAddressName (line 88) | public void setAddressName(String addressName) {
    method getSendStatus (line 92) | public Integer getSendStatus() {
    method setSendStatus (line 96) | public void setSendStatus(Integer sendStatus) {
    method getReceiveStatus (line 100) | public Integer getReceiveStatus() {
    method setReceiveStatus (line 104) | public void setReceiveStatus(Integer receiveStatus) {
    method getName (line 108) | public String getName() {
    method setName (line 112) | public void setName(String name) {
    method getPhone (line 116) | public String getPhone() {
    method setPhone (line 120) | public void setPhone(String phone) {
    method getProvince (line 124) | public String getProvince() {
    method setProvince (line 128) | public void setProvince(String province) {
    method getCity (line 132) | public String getCity() {
    method setCity (line 136) | public void setCity(String city) {
    method getRegion (line 140) | public String getRegion() {
    method setRegion (line 144) | public void setRegion(String region) {
    method getDetailAddress (line 148) | public String getDetailAddress() {
    method setDetailAddress (line 152) | public void setDetailAddress(String detailAddress) {

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/OmsOrder.java
  class OmsOrder (line 26) | @TableName("oms_order")
    method getOmsOrderItems (line 249) | public List<OmsOrderItem> getOmsOrderItems() {
    method setOmsOrderItems (line 253) | public void setOmsOrderItems(List<OmsOrderItem> omsOrderItems) {
    method getSerialVersionUID (line 257) | public static long getSerialVersionUID() {
    method getId (line 261) | public Long getId() {
    method setId (line 265) | public void setId(Long id) {
    method getMemberId (line 269) | public Long getMemberId() {
    method setMemberId (line 273) | public void setMemberId(Long memberId) {
    method getCouponId (line 277) | public Long getCouponId() {
    method setCouponId (line 281) | public void setCouponId(Long couponId) {
    method getOrderSn (line 285) | public String getOrderSn() {
    method setOrderSn (line 289) | public void setOrderSn(String orderSn) {
    method getCreateTime (line 293) | public Date getCreateTime() {
    method setCreateTime (line 297) | public void setCreateTime(Date createTime) {
    method getMemberUsername (line 301) | public String getMemberUsername() {
    method setMemberUsername (line 305) | public void setMemberUsername(String memberUsername) {
    method getTotalAmount (line 309) | public BigDecimal getTotalAmount() {
    method setTotalAmount (line 313) | public void setTotalAmount(BigDecimal totalAmount) {
    method getPayAmount (line 317) | public BigDecimal getPayAmount() {
    method setPayAmount (line 321) | public void setPayAmount(BigDecimal payAmount) {
    method getFreightAmount (line 325) | public BigDecimal getFreightAmount() {
    method setFreightAmount (line 329) | public void setFreightAmount(BigDecimal freightAmount) {
    method getPromotionAmount (line 333) | public BigDecimal getPromotionAmount() {
    method setPromotionAmount (line 337) | public void setPromotionAmount(BigDecimal promotionAmount) {
    method getIntegrationAmount (line 341) | public BigDecimal getIntegrationAmount() {
    method setIntegrationAmount (line 345) | public void setIntegrationAmount(BigDecimal integrationAmount) {
    method getCouponAmount (line 349) | public BigDecimal getCouponAmount() {
    method setCouponAmount (line 353) | public void setCouponAmount(BigDecimal couponAmount) {
    method getDiscountAmount (line 357) | public BigDecimal getDiscountAmount() {
    method setDiscountAmount (line 361) | public void setDiscountAmount(BigDecimal discountAmount) {
    method getPayType (line 365) | public Integer getPayType() {
    method setPayType (line 369) | public void setPayType(Integer payType) {
    method getSourceType (line 373) | public Integer getSourceType() {
    method setSourceType (line 377) | public void setSourceType(Integer sourceType) {
    method getStatus (line 381) | public Integer getStatus() {
    method setStatus (line 385) | public void setStatus(Integer status) {
    method getOrderType (line 389) | public Integer getOrderType() {
    method setOrderType (line 393) | public void setOrderType(Integer orderType) {
    method getDeliveryCompany (line 397) | public String getDeliveryCompany() {
    method setDeliveryCompany (line 401) | public void setDeliveryCompany(String deliveryCompany) {
    method getDeliverySn (line 405) | public String getDeliverySn() {
    method setDeliverySn (line 409) | public void setDeliverySn(String deliverySn) {
    method getAutoConfirmDay (line 413) | public Integer getAutoConfirmDay() {
    method setAutoConfirmDay (line 417) | public void setAutoConfirmDay(Integer autoConfirmDay) {
    method getIntegration (line 421) | public Integer getIntegration() {
    method setIntegration (line 425) | public void setIntegration(Integer integration) {
    method getGrowth (line 429) | public Integer getGrowth() {
    method setGrowth (line 433) | public void setGrowth(Integer growth) {
    method getPromotionInfo (line 437) | public String getPromotionInfo() {
    method setPromotionInfo (line 441) | public void setPromotionInfo(String promotionInfo) {
    method getBillType (line 445) | public Integer getBillType() {
    method setBillType (line 449) | public void setBillType(Integer billType) {
    method getBillHeader (line 453) | public String getBillHeader() {
    method setBillHeader (line 457) | public void setBillHeader(String billHeader) {
    method getBillContent (line 461) | public String getBillContent() {
    method setBillContent (line 465) | public void setBillContent(String billContent) {
    method getBillReceiverPhone (line 469) | public String getBillReceiverPhone() {
    method setBillReceiverPhone (line 473) | public void setBillReceiverPhone(String billReceiverPhone) {
    method getBillReceiverEmail (line 477) | public String getBillReceiverEmail() {
    method setBillReceiverEmail (line 481) | public void setBillReceiverEmail(String billReceiverEmail) {
    method getReceiverName (line 485) | public String getReceiverName() {
    method setReceiverName (line 489) | public void setReceiverName(String receiverName) {
    method getReceiverPhone (line 493) | public String getReceiverPhone() {
    method setReceiverPhone (line 497) | public void setReceiverPhone(String receiverPhone) {
    method getReceiverPostCode (line 501) | public String getReceiverPostCode() {
    method setReceiverPostCode (line 505) | public void setReceiverPostCode(String receiverPostCode) {
    method getReceiverProvince (line 509) | public String getReceiverProvince() {
    method setReceiverProvince (line 513) | public void setReceiverProvince(String receiverProvince) {
    method getReceiverCity (line 517) | public String getReceiverCity() {
    method setReceiverCity (line 521) | public void setReceiverCity(String receiverCity) {
    method getReceiverRegion (line 525) | public String getReceiverRegion() {
    method setReceiverRegion (line 529) | public void setReceiverRegion(String receiverRegion) {
    method getReceiverDetailAddress (line 533) | public String getReceiverDetailAddress() {
    method setReceiverDetailAddress (line 537) | public void setReceiverDetailAddress(String receiverDetailAddress) {
    method getNote (line 541) | public String getNote() {
    method setNote (line 545) | public void setNote(String note) {
    method getConfirmStatus (line 549) | public Integer getConfirmStatus() {
    method setConfirmStatus (line 553) | public void setConfirmStatus(Integer confirmStatus) {
    method getDeleteStatus (line 557) | public Integer getDeleteStatus() {
    method setDeleteStatus (line 561) | public void setDeleteStatus(Integer deleteStatus) {
    method getUseIntegration (line 565) | public Integer getUseIntegration() {
    method setUseIntegration (line 569) | public void setUseIntegration(Integer useIntegration) {
    method getPaymentTime (line 573) | public Date getPaymentTime() {
    method setPaymentTime (line 577) | public void setPaymentTime(Date paymentTime) {
    method getDeliveryTime (line 581) | public Date getDeliveryTime() {
    method setDeliveryTime (line 585) | public void setDeliveryTime(Date deliveryTime) {
    method getReceiveTime (line 589) | public Date getReceiveTime() {
    method setReceiveTime (line 593) | public void setReceiveTime(Date receiveTime) {
    method getCommentTime (line 597) | public Date getCommentTime() {
    method setCommentTime (line 601) | public void setCommentTime(Date commentTime) {
    method getModifyTime (line 605) | public Date getModifyTime() {
    method setModifyTime (line 609) | public void setModifyTime(Date modifyTime) {

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/OmsOrderItem.java
  class OmsOrderItem (line 20) | @TableName("oms_order_item")
    method getSerialVersionUID (line 116) | public static long getSerialVersionUID() {
    method getId (line 120) | public Long getId() {
    method setId (line 124) | public void setId(Long id) {
    method getOrderId (line 128) | public Long getOrderId() {
    method setOrderId (line 132) | public void setOrderId(Long orderId) {
    method getOrderSn (line 136) | public String getOrderSn() {
    method setOrderSn (line 140) | public void setOrderSn(String orderSn) {
    method getProductId (line 144) | public Long getProductId() {
    method setProductId (line 148) | public void setProductId(Long productId) {
    method getProductPic (line 152) | public String getProductPic() {
    method setProductPic (line 156) | public void setProductPic(String productPic) {
    method getProductName (line 160) | public String getProductName() {
    method setProductName (line 164) | public void setProductName(String productName) {
    method getProductBrand (line 168) | public String getProductBrand() {
    method setProductBrand (line 172) | public void setProductBrand(String productBrand) {
    method getProductSn (line 176) | public String getProductSn() {
    method setProductSn (line 180) | public void setProductSn(String productSn) {
    method getProductPrice (line 184) | public BigDecimal getProductPrice() {
    method setProductPrice (line 188) | public void setProductPrice(BigDecimal productPrice) {
    method getProductQuantity (line 192) | public Integer getProductQuantity() {
    method setProductQuantity (line 196) | public void setProductQuantity(Integer productQuantity) {
    method getProductSkuId (line 200) | public Long getProductSkuId() {
    method setProductSkuId (line 204) | public void setProductSkuId(Long productSkuId) {
    method getProductSkuCode (line 208) | public String getProductSkuCode() {
    method setProductSkuCode (line 212) | public void setProductSkuCode(String productSkuCode) {
    method getProductCategoryId (line 216) | public Long getProductCategoryId() {
    method setProductCategoryId (line 220) | public void setProductCategoryId(Long productCategoryId) {
    method getSp1 (line 224) | public String getSp1() {
    method setSp1 (line 228) | public void setSp1(String sp1) {
    method getSp2 (line 232) | public String getSp2() {
    method setSp2 (line 236) | public void setSp2(String sp2) {
    method getSp3 (line 240) | public String getSp3() {
    method setSp3 (line 244) | public void setSp3(String sp3) {
    method getPromotionName (line 248) | public String getPromotionName() {
    method setPromotionName (line 252) | public void setPromotionName(String promotionName) {
    method getPromotionAmount (line 256) | public BigDecimal getPromotionAmount() {
    method setPromotionAmount (line 260) | public void setPromotionAmount(BigDecimal promotionAmount) {
    method getCouponAmount (line 264) | public BigDecimal getCouponAmount() {
    method setCouponAmount (line 268) | public void setCouponAmount(BigDecimal couponAmount) {
    method getIntegrationAmount (line 272) | public BigDecimal getIntegrationAmount() {
    method setIntegrationAmount (line 276) | public void setIntegrationAmount(BigDecimal integrationAmount) {
    method getRealAmount (line 280) | public BigDecimal getRealAmount() {
    method setRealAmount (line 284) | public void setRealAmount(BigDecimal realAmount) {
    method getGiftIntegration (line 288) | public Integer getGiftIntegration() {
    method setGiftIntegration (line 292) | public void setGiftIntegration(Integer giftIntegration) {
    method getGiftGrowth (line 296) | public Integer getGiftGrowth() {
    method setGiftGrowth (line 300) | public void setGiftGrowth(Integer giftGrowth) {
    method getProductAttr (line 304) | public String getProductAttr() {
    method setProductAttr (line 308) | public void setProductAttr(String productAttr) {

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PaymentInfo.java
  class PaymentInfo (line 21) | @TableName("payment_info")
    method getSerialVersionUID (line 79) | public static long getSerialVersionUID() {
    method getId (line 83) | public Long getId() {
    method setId (line 87) | public void setId(Long id) {
    method getOrderSn (line 91) | public String getOrderSn() {
    method setOrderSn (line 95) | public void setOrderSn(String orderSn) {
    method getOrderId (line 99) | public String getOrderId() {
    method setOrderId (line 103) | public void setOrderId(String orderId) {
    method getAlipayTradeNo (line 107) | public String getAlipayTradeNo() {
    method setAlipayTradeNo (line 111) | public void setAlipayTradeNo(String alipayTradeNo) {
    method getTotalAmount (line 115) | public BigDecimal getTotalAmount() {
    method setTotalAmount (line 119) | public void setTotalAmount(BigDecimal totalAmount) {
    method getSubject (line 123) | public String getSubject() {
    method setSubject (line 127) | public void setSubject(String subject) {
    method getPaymentStatus (line 131) | public String getPaymentStatus() {
    method setPaymentStatus (line 135) | public void setPaymentStatus(String paymentStatus) {
    method getCreateTime (line 139) | public Date getCreateTime() {
    method setCreateTime (line 143) | public void setCreateTime(Date createTime) {
    method getConfirmTime (line 147) | public Date getConfirmTime() {
    method setConfirmTime (line 151) | public void setConfirmTime(Date confirmTime) {
    method getCallbackContent (line 155) | public String getCallbackContent() {
    method setCallbackContent (line 159) | public void setCallbackContent(String callbackContent) {
    method getCallbackTime (line 163) | public Date getCallbackTime() {
    method setCallbackTime (line 167) | public void setCallbackTime(Date callbackTime) {

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsBaseAttrInfo.java
  class PmsBaseAttrInfo (line 24) | @TableName("pms_base_attr_info")
    method getAttrValueList (line 50) | public List<PmsBaseAttrValue> getAttrValueList() {
    method setAttrValueList (line 54) | public void setAttrValueList(List<PmsBaseAttrValue> attrValueList) {
    method getSerialVersionUID (line 58) | public static long getSerialVersionUID() {
    method getId (line 62) | public Long getId() {
    method setId (line 66) | public void setId(Long id) {
    method getAttrName (line 70) | public String getAttrName() {
    method setAttrName (line 74) | public void setAttrName(String attrName) {
    method getCatalog3Id (line 78) | public Long getCatalog3Id() {
    method setCatalog3Id (line 82) | public void setCatalog3Id(Long catalog3Id) {
    method getIsEnabled (line 86) | public String getIsEnabled() {
    method setIsEnabled (line 90) | public void setIsEnabled(String isEnabled) {
    method toString (line 94) | @Override

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsBaseAttrValue.java
  class PmsBaseAttrValue (line 19) | @TableName("pms_base_attr_value")
    method getSerialVersionUID (line 45) | public static long getSerialVersionUID() {
    method getId (line 49) | public Long getId() {
    method setId (line 53) | public void setId(Long id) {
    method getValueName (line 57) | public String getValueName() {
    method setValueName (line 61) | public void setValueName(String valueName) {
    method getAttrId (line 65) | public Long getAttrId() {
    method setAttrId (line 69) | public void setAttrId(Long attrId) {
    method getIsEnabled (line 73) | public String getIsEnabled() {
    method setIsEnabled (line 77) | public void setIsEnabled(String isEnabled) {
    method toString (line 81) | @Override

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsBaseCatalog1.java
  class PmsBaseCatalog1 (line 25) | @TableName("pms_base_catalog1")
    method getSerialVersionUID (line 47) | public static long getSerialVersionUID() {
    method getId (line 51) | public Integer getId() {
    method setId (line 55) | public void setId(Integer id) {
    method getName (line 59) | public String getName() {
    method setName (line 63) | public void setName(String name) {
    method getCatalog2List (line 67) | public List<PmsBaseCatalog2> getCatalog2List() {
    method setCatalog2List (line 71) | public void setCatalog2List(List<PmsBaseCatalog2> catalog2List) {
    method toString (line 75) | @Override

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsBaseCatalog2.java
  class PmsBaseCatalog2 (line 22) | @TableName("pms_base_catalog2")
    method getSerialVersionUID (line 50) | public static long getSerialVersionUID() {
    method getId (line 54) | public Integer getId() {
    method setId (line 58) | public void setId(Integer id) {
    method getName (line 62) | public String getName() {
    method setName (line 66) | public void setName(String name) {
    method getCatalog1Id (line 70) | public Integer getCatalog1Id() {
    method setCatalog1Id (line 74) | public void setCatalog1Id(Integer catalog1Id) {
    method getCatalog3List (line 78) | public List<PmsBaseCatalog3> getCatalog3List() {
    method setCatalog3List (line 82) | public void setCatalog3List(List<PmsBaseCatalog3> catalog3List) {
    method toString (line 86) | @Override

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsBaseCatalog3.java
  class PmsBaseCatalog3 (line 19) | @TableName("pms_base_catalog3")

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsBaseSaleAttr.java
  class PmsBaseSaleAttr (line 19) | @TableName("pms_base_sale_attr")

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsProductImage.java
  class PmsProductImage (line 19) | @TableName("pms_product_image")
    method getSerialVersionUID (line 46) | public static long getSerialVersionUID() {
    method getId (line 50) | public Long getId() {
    method setId (line 54) | public void setId(Long id) {
    method getProductId (line 58) | public Long getProductId() {
    method setProductId (line 62) | public void setProductId(Long productId) {
    method getImgName (line 66) | public String getImgName() {
    method setImgName (line 70) | public void setImgName(String imgName) {
    method getImgUrl (line 74) | public String getImgUrl() {
    method setImgUrl (line 78) | public void setImgUrl(String imgUrl) {
    method toString (line 82) | @Override

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsProductInfo.java
  class PmsProductInfo (line 22) | @TableName("pms_product_info")
    method getSpuImageList (line 59) | public List<PmsProductImage> getSpuImageList() {
    method setSpuImageList (line 63) | public void setSpuImageList(List<PmsProductImage> spuImageList) {
    method getSpuSaleAttrList (line 67) | public List<PmsProductSaleAttr> getSpuSaleAttrList() {
    method setSpuSaleAttrList (line 71) | public void setSpuSaleAttrList(List<PmsProductSaleAttr> spuSaleAttrLis...
    method getSerialVersionUID (line 75) | public static long getSerialVersionUID() {
    method getId (line 79) | public Long getId() {
    method setId (line 83) | public void setId(Long id) {
    method getProductName (line 87) | public String getProductName() {
    method setProductName (line 91) | public void setProductName(String productName) {
    method getDescription (line 95) | public String getDescription() {
    method setDescription (line 99) | public void setDescription(String description) {
    method getCatalog3Id (line 103) | public Long getCatalog3Id() {
    method setCatalog3Id (line 107) | public void setCatalog3Id(Long catalog3Id) {
    method getTmId (line 111) | public Long getTmId() {
    method setTmId (line 115) | public void setTmId(Long tmId) {
    method toString (line 119) | @Override

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsProductSaleAttr.java
  class PmsProductSaleAttr (line 22) | @TableName("pms_product_sale_attr")
    method getSpuSaleAttrValueList (line 51) | public List<PmsProductSaleAttrValue> getSpuSaleAttrValueList() {
    method setSpuSaleAttrValueList (line 55) | public void setSpuSaleAttrValueList(List<PmsProductSaleAttrValue> spuS...
    method getSerialVersionUID (line 59) | public static long getSerialVersionUID() {
    method getId (line 63) | public Long getId() {
    method setId (line 67) | public void setId(Long id) {
    method getProductId (line 71) | public Long getProductId() {
    method setProductId (line 75) | public void setProductId(Long productId) {
    method getSaleAttrId (line 79) | public Long getSaleAttrId() {
    method setSaleAttrId (line 83) | public void setSaleAttrId(Long saleAttrId) {
    method getSaleAttrName (line 87) | public String getSaleAttrName() {
    method setSaleAttrName (line 91) | public void setSaleAttrName(String saleAttrName) {
    method toString (line 95) | @Override

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsProductSaleAttrValue.java
  class PmsProductSaleAttrValue (line 20) | @TableName("pms_product_sale_attr_value")
    method getSerialVersionUID (line 54) | public static long getSerialVersionUID() {
    method getId (line 58) | public Long getId() {
    method setId (line 62) | public void setId(Long id) {
    method getProductId (line 66) | public Long getProductId() {
    method setProductId (line 70) | public void setProductId(Long productId) {
    method getSaleAttrId (line 74) | public Long getSaleAttrId() {
    method setSaleAttrId (line 78) | public void setSaleAttrId(Long saleAttrId) {
    method getSaleAttrValueName (line 82) | public String getSaleAttrValueName() {
    method setSaleAttrValueName (line 86) | public void setSaleAttrValueName(String saleAttrValueName) {
    method getIsChecked (line 90) | public String getIsChecked() {
    method setIsChecked (line 94) | public void setIsChecked(String isChecked) {
    method toString (line 98) | @Override

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsSearchCrumb.java
  class PmsSearchCrumb (line 6) | public class PmsSearchCrumb {
    method getValueId (line 10) | public String getValueId() {
    method setValueId (line 14) | public void setValueId(String valueId) {
    method getValueName (line 18) | public String getValueName() {
    method setValueName (line 22) | public void setValueName(String valueName) {
    method getUrlParam (line 26) | public String getUrlParam() {
    method setUrlParam (line 30) | public void setUrlParam(String urlParam) {

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsSearchParam.java
  class PmsSearchParam (line 8) | public class PmsSearchParam implements Serializable
    method getCatalog3Id (line 14) | public String getCatalog3Id() {
    method setCatalog3Id (line 18) | public void setCatalog3Id(String catalog3Id) {
    method getKeyword (line 22) | public String getKeyword() {
    method setKeyword (line 26) | public void setKeyword(String keyword) {
    method getValueId (line 30) | public List<String> getValueId() {
    method setValueId (line 34) | public void setValueId(List<String> valueId) {

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsSearchSkuInfo.java
  class PmsSearchSkuInfo (line 8) | public class PmsSearchSkuInfo implements Serializable {
    method getId (line 21) | public Long getId() {
    method getPrice (line 25) | public double getPrice() {
    method setPrice (line 29) | public void setPrice(double price) {
    method getCatalog3Id (line 33) | public Long getCatalog3Id() {
    method setCatalog3Id (line 37) | public void setCatalog3Id(Long catalog3Id) {
    method setId (line 41) | public void setId(Long id) {
    method getSkuName (line 46) | public String getSkuName() {
    method setSkuName (line 50) | public void setSkuName(String skuName) {
    method getSkuDesc (line 54) | public String getSkuDesc() {
    method setSkuDesc (line 58) | public void setSkuDesc(String skuDesc) {
    method getSkuDefaultImg (line 64) | public String getSkuDefaultImg() {
    method setSkuDefaultImg (line 68) | public void setSkuDefaultImg(String skuDefaultImg) {
    method getHotscore (line 72) | public double getHotscore() {
    method setHotscore (line 76) | public void setHotscore(double hotscore) {
    method getProductId (line 80) | public String getProductId() {
    method setProductId (line 84) | public void setProductId(String productId) {
    method getSkuAttrValueList (line 88) | public List<PmsSkuAttrValue> getSkuAttrValueList() {
    method setSkuAttrValueList (line 92) | public void setSkuAttrValueList(List<PmsSkuAttrValue> skuAttrValueList) {

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsSkuAttrValue.java
  class PmsSkuAttrValue (line 20) | @TableName("pms_sku_attr_value")
    method getSerialVersionUID (line 46) | public static long getSerialVersionUID() {
    method getId (line 50) | public Long getId() {
    method setId (line 54) | public void setId(Long id) {
    method getAttrId (line 58) | public Long getAttrId() {
    method setAttrId (line 62) | public void setAttrId(Long attrId) {
    method getValueId (line 66) | public Long getValueId() {
    method setValueId (line 70) | public void setValueId(Long valueId) {
    method getSkuId (line 74) | public Long getSkuId() {
    method setSkuId (line 78) | public void setSkuId(Long skuId) {

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsSkuImage.java
  class PmsSkuImage (line 20) | @TableName("pms_sku_image")
    method getSerialVersionUID (line 57) | public static long getSerialVersionUID() {
    method getId (line 61) | public Long getId() {
    method setId (line 65) | public void setId(Long id) {
    method getSkuId (line 69) | public Long getSkuId() {
    method setSkuId (line 73) | public void setSkuId(Long skuId) {
    method getImgName (line 77) | public String getImgName() {
    method setImgName (line 81) | public void setImgName(String imgName) {
    method getImgUrl (line 85) | public String getImgUrl() {
    method setImgUrl (line 89) | public void setImgUrl(String imgUrl) {
    method getSpuImgId (line 93) | public Long getSpuImgId(){
    method setSpuImgId (line 97) | public void setSpuImgId(Long spuImgId) {
    method getIsDefault (line 101) | public String getIsDefault() {
    method setIsDefault (line 105) | public void setIsDefault(String isDefault) {

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsSkuInfo.java
  class PmsSkuInfo (line 22) | @TableName("pms_sku_info")
    method getSerialVersionUID (line 87) | public static long getSerialVersionUID() {
    method getId (line 91) | public Long getId() {
    method setId (line 95) | public void setId(Long id) {
    method getPrice (line 101) | public Double getPrice() {
    method setPrice (line 105) | public void setPrice(Double price) {
    method getSkuName (line 109) | public String getSkuName() {
    method setSkuName (line 113) | public void setSkuName(String skuName) {
    method getSkuDesc (line 117) | public String getSkuDesc() {
    method setSkuDesc (line 121) | public void setSkuDesc(String skuDesc) {
    method getWeight (line 125) | public Double getWeight() {
    method setWeight (line 129) | public void setWeight(Double weight) {
    method getTmId (line 133) | public Long getTmId() {
    method setTmId (line 137) | public void setTmId(Long tmId) {
    method getCatalog3Id (line 141) | public Long getCatalog3Id() {
    method setCatalog3Id (line 145) | public void setCatalog3Id(Long catalog3Id) {
    method getSkuDefaultImg (line 149) | public String getSkuDefaultImg() {
    method setSkuDefaultImg (line 153) | public void setSkuDefaultImg(String skuDefaultImg) {
    method getSpuId (line 158) | public String getSpuId() {
    method setSpuId (line 162) | public void setSpuId(String spuId) {
    method getSkuImageList (line 166) | public List<PmsSkuImage> getSkuImageList() {
    method setSkuImageList (line 170) | public void setSkuImageList(List<PmsSkuImage> skuImageList) {
    method getSkuAttrValueList (line 174) | public List<PmsSkuAttrValue> getSkuAttrValueList() {
    method setSkuAttrValueList (line 178) | public void setSkuAttrValueList(List<PmsSkuAttrValue> skuAttrValueList) {
    method getSkuSaleAttrValueList (line 182) | public List<PmsSkuSaleAttrValue> getSkuSaleAttrValueList() {
    method setSkuSaleAttrValueList (line 186) | public void setSkuSaleAttrValueList(List<PmsSkuSaleAttrValue> skuSaleA...
    method toString (line 190) | @Override

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/PmsSkuSaleAttrValue.java
  class PmsSkuSaleAttrValue (line 19) | @TableName("pms_sku_sale_attr_value")
    method getSerialVersionUID (line 55) | public static long getSerialVersionUID() {
    method getId (line 59) | public Long getId() {
    method setId (line 63) | public void setId(Long id) {
    method getSkuId (line 67) | public Long getSkuId() {
    method setSkuId (line 71) | public void setSkuId(Long skuId) {
    method getSaleAttrId (line 75) | public Long getSaleAttrId() {
    method setSaleAttrId (line 79) | public void setSaleAttrId(Long saleAttrId) {
    method getSaleAttrValueId (line 83) | public Long getSaleAttrValueId() {
    method setSaleAttrValueId (line 87) | public void setSaleAttrValueId(Long saleAttrValueId) {
    method getSaleAttrName (line 91) | public String getSaleAttrName() {
    method setSaleAttrName (line 95) | public void setSaleAttrName(String saleAttrName) {
    method getSaleAttrValueName (line 99) | public String getSaleAttrValueName() {
    method setSaleAttrValueName (line 103) | public void setSaleAttrValueName(String saleAttrValueName) {

FILE: gmall-api/src/main/java/com/xatu/gmall/entity/UmsMemberLevel.java
  class UmsMemberLevel (line 20) | @TableName("ums_member_level")

FILE: gmall-api/src/main/java/com/xatu/gmall/service/AttrService.java
  type AttrService (line 19) | public interface AttrService extends IService<PmsBaseAttrInfo> {
    method attrInfoList (line 26) | List<PmsBaseAttrInfo> attrInfoList(String catalog3Id);
    method saveAttrInfo (line 32) | String saveAttrInfo(PmsBaseAttrInfo pmsBaseAttrInfo);
    method getAttrValueList (line 38) | List<PmsBaseAttrValue> getAttrValueList(String attrId);
    method baseSaleAttrList (line 45) | List<PmsBaseSaleAttr> baseSaleAttrList();
    method getAttrValueListByValueId (line 52) | List<PmsBaseAttrInfo> getAttrValueListByValueId(Set<String> attrValueI...

FILE: gmall-api/src/main/java/com/xatu/gmall/service/CartService.java
  type CartService (line 16) | public interface CartService extends IService<OmsCartItem> {
    method getCartExistByUser (line 24) | OmsCartItem getCartExistByUser(String memberId, String skuId);
    method addCartIterm (line 30) | void addCartIterm(OmsCartItem omsCartItem);
    method updateCarItem (line 36) | void updateCarItem(OmsCartItem omsCartItemFromDB);
    method flushCache (line 43) | void flushCache(String memberId);
    method carList (line 50) | List<OmsCartItem> carList(String userId);
    method checkCart (line 52) | void checkCart(String skuId,String memberId, String isChecked);

FILE: gmall-api/src/main/java/com/xatu/gmall/service/CataLogService.java
  type CataLogService (line 18) | public interface CataLogService   {
    method getCatalog1 (line 24) | List<PmsBaseCatalog1> getCatalog1();
    method getCatalog2 (line 30) | List<PmsBaseCatalog2> getCatalog2(String catalog1Id);
    method getCatalog3 (line 38) | List<PmsBaseCatalog3> getCatalog3(String catalog2Id);

FILE: gmall-api/src/main/java/com/xatu/gmall/service/MemberReceiveAddressService.java
  type MemberReceiveAddressService (line 15) | public interface MemberReceiveAddressService extends IService<MemberRece...

FILE: gmall-api/src/main/java/com/xatu/gmall/service/OrderItemService.java
  type OrderItemService (line 3) | public interface OrderItemService {

FILE: gmall-api/src/main/java/com/xatu/gmall/service/OrderService.java
  type OrderService (line 8) | public interface OrderService {
    method genTradeCode (line 9) | String genTradeCode(String memberId);
    method checkTradeCode (line 11) | String checkTradeCode(String memberId,String tradeCode);
    method saveOrder (line 14) | void saveOrder(OmsOrder omsOrder);
    method getOrderByOutTradeNo (line 16) | OmsOrder getOrderByOutTradeNo(String outTradeNo);
    method updateOrderStatus (line 18) | void updateOrderStatus(String out_trade_no);

FILE: gmall-api/src/main/java/com/xatu/gmall/service/PaymentService.java
  type PaymentService (line 16) | public interface PaymentService extends IService<PaymentInfo> {
    method savePaymentInfo (line 18) | void savePaymentInfo(PaymentInfo paymentInfo);
    method updatePaymentInfo (line 20) | void updatePaymentInfo(PaymentInfo paymentInfo);
    method sendDelayPaymentCheckQueue (line 22) | void sendDelayPaymentCheckQueue(String outTradeNo,int count);
    method checkAlipayPayment (line 24) | Map<String,String> checkAlipayPayment(String out_trade_no);

FILE: gmall-api/src/main/java/com/xatu/gmall/service/SearchService.java
  type SearchService (line 8) | public interface SearchService
    method list (line 11) | List<PmsSearchSkuInfo> list(PmsSearchParam pmsSearchParam);

FILE: gmall-api/src/main/java/com/xatu/gmall/service/SkuService.java
  type SkuService (line 19) | public interface SkuService extends IService<PmsSkuInfo> {
    method saveSkuInfo (line 25) | void saveSkuInfo(PmsSkuInfo pmsSkuInfo);
    method getSkuById (line 32) | PmsSkuInfo getSkuById(String skuId);
    method getSkuSaleAttrValueListBySpu (line 39) | List<PmsSkuInfo> getSkuSaleAttrValueListBySpu(String spuId);
    method selectAllSku (line 45) | List<PmsSkuInfo> selectAllSku(String catalog3Id);
    method getSkuPriceBySkuId (line 48) | String getSkuPriceBySkuId(Long productSkuId);
    method checkPrice (line 50) | boolean checkPrice(Long productSkuId, BigDecimal price);

FILE: gmall-api/src/main/java/com/xatu/gmall/service/SpuService.java
  type SpuService (line 18) | public interface SpuService extends IService<PmsProductInfo> {
    method spuList (line 25) | List<PmsProductInfo> spuList(String catalog3Id);
    method saveSpuInfo (line 31) | void saveSpuInfo(PmsProductInfo pmsProductInfo);
    method spuSaleAttrList (line 38) | List<PmsProductSaleAttr> spuSaleAttrList(String spuId);
    method spuImageList (line 45) | List<PmsProductImage> spuImageList(String spuId);
    method spuSaleAttrListCheckBySku (line 51) | List<PmsProductSaleAttr> spuSaleAttrListCheckBySku(String productId,Lo...

FILE: gmall-api/src/main/java/com/xatu/gmall/service/UserService.java
  type UserService (line 18) | public interface UserService extends IService<Member> {
    method selectUserById (line 20) | List<Member> selectUserById(Integer i);
    method getReceiveAddressByMemberId (line 22) | List<MemberReceiveAddress> getReceiveAddressByMemberId(String memberId);
    method login (line 24) | Member login(Member loginMember);
    method addToken (line 26) | void addToken(String token, Long memberId);
    method addOauthUser (line 28) | Member addOauthUser(Member member);
    method checkOauthUser (line 30) | Member checkOauthUser(Member umsCheck);
    method getReceiveAddressByReceiveAddressId (line 32) | MemberReceiveAddress getReceiveAddressByReceiveAddressId(String receiv...

FILE: gmall-cart-service/src/main/java/com/xatu/gmall/GmallCartServiceApplication.java
  class GmallCartServiceApplication (line 6) | @SpringBootApplication
    method main (line 9) | public static void main(String[] args) {

FILE: gmall-cart-service/src/main/java/com/xatu/gmall/mapper/CartMapper.java
  type CartMapper (line 16) | @Mapper
    method updateIsChecked (line 19) | void updateIsChecked(@Param("skuId") String skuId, @Param("memberId") ...

FILE: gmall-cart-service/src/main/java/com/xatu/gmall/service/impl/CartServiceImpl.java
  class CartServiceImpl (line 29) | @Service
    method getCartExistByUser (line 41) | @Override
    method addCartIterm (line 46) | @Override
    method updateCarItem (line 51) | @Override
    method flushCache (line 56) | @Override
    method carList (line 75) | @Override
    method checkCart (line 100) | @Override

FILE: gmall-cart-service/src/test/java/com/xatu/gmall/GmallCartServiceApplicationTests.java
  class GmallCartServiceApplicationTests (line 6) | @SpringBootTest
    method contextLoads (line 9) | @Test

FILE: gmall-cart-web/src/main/java/com/xatu/gmall/GmallCartWebApplication.java
  class GmallCartWebApplication (line 7) | @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
    method main (line 10) | public static void main(String[] args) {

FILE: gmall-cart-web/src/main/java/com/xatu/gmall/controller/CartController.java
  class CartController (line 25) | @Controller
    method toTrade (line 33) | @LoginRequired(loginSuccess = true)
    method addToCart (line 41) | @LoginRequired(loginSuccess = false)
    method cartList (line 117) | @LoginRequired(loginSuccess = false)
    method checkCart (line 144) | @LoginRequired(loginSuccess = false)
    method if_cart_exist (line 161) | private boolean if_cart_exist(List<OmsCartItem> omsCartItems, OmsCartI...
    method getTotalAmount (line 173) | private BigDecimal getTotalAmount(List<OmsCartItem> omsCartItems){

FILE: gmall-cart-web/src/main/resources/static/bootstrap/js/bootstrap.js
  function transitionEnd (line 34) | function transitionEnd() {
  function removeElement (line 126) | function removeElement() {
  function Plugin (line 142) | function Plugin(option) {
  function Plugin (line 251) | function Plugin(option) {
  function Plugin (line 475) | function Plugin(option) {
  function getTargetFromTrigger (line 695) | function getTargetFromTrigger($trigger) {
  function Plugin (line 707) | function Plugin(option) {
  function getParent (line 774) | function getParent($this) {
  function clearMenus (line 787) | function clearMenus(e) {
  function Plugin (line 880) | function Plugin(option) {
  function Plugin (line 1208) | function Plugin(option, _relatedTarget) {
  function complete (line 1574) | function complete() {
  function Plugin (line 1750) | function Plugin(option) {
  function Plugin (line 1859) | function Plugin(option) {
  function ScrollSpy (line 1902) | function ScrollSpy(element, options) {
  function Plugin (line 2022) | function Plugin(option) {
  function next (line 2131) | function next() {
  function Plugin (line 2177) | function Plugin(option) {
  function Plugin (line 2334) | function Plugin(option) {

FILE: gmall-cart-web/src/test/java/com/xatu/gmall/GmallCartWebApplicationTests.java
  class GmallCartWebApplicationTests (line 7) | @SpringBootTest
    method contextLoads (line 10) | @Test

FILE: gmall-common-util/src/main/java/com/xatu/gmall/util/HttpclientUtil.java
  class HttpclientUtil (line 19) | public class HttpclientUtil {
    method doGet (line 21) | public static String doGet(String url)   {
    method doPost (line 48) | public static String doPost(String url, Map<String,String> paramMap)   {

FILE: gmall-item-web/src/main/java/com/xatu/gmall/GmallItemWebApplication.java
  class GmallItemWebApplication (line 7) | @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
    method main (line 10) | public static void main(String[] args) {

FILE: gmall-item-web/src/main/java/com/xatu/gmall/controller/ItemController.java
  class ItemController (line 22) | @Controller
    method item (line 32) | @RequestMapping("{skuId}.html")

FILE: gmall-item-web/src/main/resources/static/bootstrap/js/bootstrap.js
  function transitionEnd (line 34) | function transitionEnd() {
  function removeElement (line 126) | function removeElement() {
  function Plugin (line 142) | function Plugin(option) {
  function Plugin (line 251) | function Plugin(option) {
  function Plugin (line 475) | function Plugin(option) {
  function getTargetFromTrigger (line 695) | function getTargetFromTrigger($trigger) {
  function Plugin (line 707) | function Plugin(option) {
  function getParent (line 774) | function getParent($this) {
  function clearMenus (line 787) | function clearMenus(e) {
  function Plugin (line 880) | function Plugin(option) {
  function Plugin (line 1208) | function Plugin(option, _relatedTarget) {
  function complete (line 1574) | function complete() {
  function Plugin (line 1750) | function Plugin(option) {
  function Plugin (line 1859) | function Plugin(option) {
  function ScrollSpy (line 1902) | function ScrollSpy(element, options) {
  function Plugin (line 2022) | function Plugin(option) {
  function next (line 2131) | function next() {
  function Plugin (line 2177) | function Plugin(option) {
  function Plugin (line 2334) | function Plugin(option) {

FILE: gmall-item-web/src/main/resources/static/js/jquery1.9.js
  function M (line 3) | function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.n...
  function F (line 3) | function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t...
  function P (line 3) | function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==...
  function R (line 3) | function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache...
  function W (line 3) | function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-...
  function $ (line 3) | function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&...
  function it (line 3) | function it(){return!0}
  function ot (line 3) | function ot(){return!1}
  function rt (line 4) | function rt(e){return Y.test(e+"")}
  function it (line 4) | function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i....
  function ot (line 4) | function ot(e){return e[x]=!0,e}
  function at (line 4) | function at(e){var t=p.createElement("div");try{return e(t)}catch(n){ret...
  function st (line 4) | function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)...
  function ut (line 4) | function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j)...
  function lt (line 4) | function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"...
  function ct (line 4) | function ct(e){return function(t){var n=t.nodeName.toLowerCase();return(...
  function pt (line 4) | function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,...
  function ft (line 4) | function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0)...
  function dt (line 4) | function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}
  function ht (line 4) | function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.firs...
  function gt (line 4) | function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i-...
  function mt (line 4) | function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)...
  function yt (line 4) | function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)...
  function vt (line 4) | function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relat...
  function bt (line 4) | function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d)...
  function xt (line 4) | function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}
  function wt (line 4) | function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0...
  function Tt (line 4) | function Tt(){}
  function pt (line 4) | function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}
  function ft (line 4) | function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,...
  function dt (line 4) | function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.cre...
  function Lt (line 4) | function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ow...
  function Ht (line 4) | function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.spec...
  function qt (line 4) | function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttrib...
  function Mt (line 4) | function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval...
  function _t (line 4) | function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e)...
  function Ft (line 4) | function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCas...
  function Ot (line 4) | function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getEl...
  function Bt (line 4) | function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}
  function tn (line 5) | function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.sl...
  function nn (line 5) | function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(...
  function rn (line 5) | function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.sty...
  function on (line 5) | function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[...
  function an (line 5) | function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:...
  function sn (line 5) | function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o...
  function un (line 5) | function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(...
  function ln (line 5) | function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[...
  function gn (line 5) | function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn....
  function Hn (line 5) | function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var ...
  function qn (line 5) | function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!...
  function Mn (line 5) | function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i...
  function k (line 5) | function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t...
  function _n (line 5) | function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFi...
  function Fn (line 5) | function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e....
  function In (line 5) | function In(){try{return new e.XMLHttpRequest}catch(t){}}
  function zn (line 5) | function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(...
  function Kn (line 5) | function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}
  function Zn (line 5) | function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]...
  function er (line 5) | function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(functio...
  function tr (line 5) | function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e...
  function nr (line 5) | function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e....
  function rr (line 5) | function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}
  function ir (line 5) | function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r...
  function or (line 5) | function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.pa...

FILE: gmall-item-web/src/main/resources/static/js/js.js
  function Zoom (line 199) | function Zoom(imgbox, hoverbox, l, t, x, y, h_w, h_h, showbox) {
  function Zoomhover (line 233) | function Zoomhover(imgbox, hoverbox, showbox) {

FILE: gmall-item-web/src/test/java/com/xatu/gmall/GmallItemWebApplicationTests.java
  class GmallItemWebApplicationTests (line 7) | @SpringBootTest()
    method contextLoads (line 10) | @Test

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/GmallManageServiceApplication.java
  class GmallManageServiceApplication (line 7) | @SpringBootApplication()
    method main (line 11) | public static void main(String[] args) {

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/mapper/AttrInfoMapper.java
  type AttrInfoMapper (line 17) | @Mapper
    method selectAttrValueListByValueId (line 20) | List<PmsBaseAttrInfo> selectAttrValueListByValueId(String attrValueIdS...

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/mapper/AttrValueMapper.java
  type AttrValueMapper (line 10) | @Mapper

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/mapper/BaseSaleAttrMapper.java
  type BaseSaleAttrMapper (line 7) | @Mapper

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/mapper/CataLog1Mapper.java
  type CataLog1Mapper (line 16) | @Mapper

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/mapper/CataLog2Mapper.java
  type CataLog2Mapper (line 16) | @Mapper

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/mapper/CataLog3Mapper.java
  type CataLog3Mapper (line 16) | @Mapper

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/mapper/ImageMapper.java
  type ImageMapper (line 7) | @Mapper

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/mapper/SaleAttrMapper.java
  type SaleAttrMapper (line 13) | @Mapper
    method selectSpuSaleAttrListCheckBySku (line 16) | List<PmsProductSaleAttr> selectSpuSaleAttrListCheckBySku(@Param("produ...

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/mapper/SaleAttrValueMapper.java
  type SaleAttrValueMapper (line 10) | @Mapper

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/mapper/SkuAttrValueMapper.java
  type SkuAttrValueMapper (line 7) | @Mapper

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/mapper/SkuImageMapper.java
  type SkuImageMapper (line 7) | @Mapper

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/mapper/SkuInfoMapper.java
  type SkuInfoMapper (line 9) | @Mapper
    method selectSkuSaleAttrValueListBySpu (line 12) | List<PmsSkuInfo> selectSkuSaleAttrValueListBySpu(String spuId);

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/mapper/SkuSaleAttrValueMapper.java
  type SkuSaleAttrValueMapper (line 9) | @Mapper

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/mapper/SpuMapper.java
  type SpuMapper (line 15) | @Mapper

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/service/impl/AttrServiceImpl.java
  class AttrServiceImpl (line 29) | @Service
    method attrInfoList (line 39) | public List<PmsBaseAttrInfo> attrInfoList(String catalog3Id) {
    method saveAttrInfo (line 57) | public String saveAttrInfo(PmsBaseAttrInfo pmsBaseAttrInfo) {
    method getAttrValueList (line 83) | public List<PmsBaseAttrValue> getAttrValueList(String attrId) {
    method baseSaleAttrList (line 87) | public List<PmsBaseSaleAttr> baseSaleAttrList() {
    method getAttrValueListByValueId (line 91) | @Override

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/service/impl/CataLogServiceImpl.java
  class CataLogServiceImpl (line 24) | @Service
    method getCatalog1 (line 35) | public List<PmsBaseCatalog1> getCatalog1() {
    method getCatalog2 (line 39) | public List<PmsBaseCatalog2> getCatalog2(String catalog1Id) {
    method getCatalog3 (line 43) | public List<PmsBaseCatalog3> getCatalog3(String catalog2Id) {

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/service/impl/SkuServiceImpl.java
  class SkuServiceImpl (line 28) | @Service
    method saveSkuInfo (line 44) | public void saveSkuInfo(PmsSkuInfo pmsSkuInfo) {
    method getSkuById (line 69) | public PmsSkuInfo getSkuById(String skuId) {
    method getSkuSaleAttrValueListBySpu (line 184) | public List<PmsSkuInfo> getSkuSaleAttrValueListBySpu(String spuId) {
    method selectAllSku (line 190) | public List<PmsSkuInfo> selectAllSku(String catalog3Id) {
    method getSkuPriceBySkuId (line 200) | @Override
    method selectAll (line 208) | public List<PmsSkuInfo> selectAll(String catalog3Id) {
    method checkPrice (line 211) | @Override

FILE: gmall-manage-service/src/main/java/com/xatu/gmall/service/impl/SpuServiceImpl.java
  class SpuServiceImpl (line 27) | @Service
    method spuList (line 39) | public List<PmsProductInfo> spuList(String catalog3Id) {
    method saveSpuInfo (line 43) | public void saveSpuInfo(PmsProductInfo pmsProductInfo) {
    method spuSaleAttrList (line 66) | public List<PmsProductSaleAttr> spuSaleAttrList(String spuId) {
    method spuImageList (line 76) | public List<PmsProductImage> spuImageList(String spuId) {
    method spuSaleAttrListCheckBySku (line 82) | public List<PmsProductSaleAttr> spuSaleAttrListCheckBySku(String produ...

FILE: gmall-manage-service/src/test/java/com/xatu/gmall/CodeGenerator.java
  class CodeGenerator (line 23) | public class CodeGenerator {
    method main (line 31) | public static void main(String[] args) {

FILE: gmall-manage-service/src/test/java/com/xatu/gmall/GmallManageServiceApplicationTests.java
  class GmallManageServiceApplicationTests (line 6) | @SpringBootTest
    method contextLoads (line 9) | @Test

FILE: gmall-manage-web/src/main/java/com/xatu/gmall/GmallManageWebApplication.java
  class GmallManageWebApplication (line 7) | @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
    method main (line 10) | public static void main(String[] args) {

FILE: gmall-manage-web/src/main/java/com/xatu/gmall/controller/AttrController.java
  class AttrController (line 23) | @Controller
    method attrInfoList (line 30) | @RequestMapping("/attrInfoList")
    method saveAttrInfo (line 37) | @RequestMapping("/saveAttrInfo")
    method getAttrValueList (line 44) | @RequestMapping("/getAttrValueList")
    method baseSaleAttrList (line 53) | @RequestMapping("/baseSaleAttrList")

FILE: gmall-manage-web/src/main/java/com/xatu/gmall/controller/CataLogController.java
  class CataLogController (line 25) | @Controller
    method getCatalog1 (line 32) | @RequestMapping("/getCatalog1")
    method getCatalog2 (line 40) | @RequestMapping("/getCatalog2")
    method getCatalog3 (line 47) | @RequestMapping("/getCatalog3")

FILE: gmall-manage-web/src/main/java/com/xatu/gmall/controller/SkuController.java
  class SkuController (line 21) | @Controller
    method saveSkuInfo (line 28) | @RequestMapping("/saveSkuInfo")

FILE: gmall-manage-web/src/main/java/com/xatu/gmall/controller/SpuController.java
  class SpuController (line 29) | @Controller
    method spuList (line 37) | @RequestMapping("/spuList")
    method fileUpload (line 44) | @RequestMapping("/fileUpload")
    method saveSpuInfo (line 54) | @RequestMapping("/saveSpuInfo")
    method spuSaleAttrList (line 60) | @RequestMapping("/spuSaleAttrList")
    method spuImageList (line 67) | @RequestMapping("/spuImageList")

FILE: gmall-manage-web/src/main/java/com/xatu/gmall/util/PmsUploadUtil.java
  class PmsUploadUtil (line 12) | public class PmsUploadUtil
    method uploadImage (line 14) | public static String uploadImage(MultipartFile multipartFile){

FILE: gmall-manage-web/src/test/java/com/xatu/gmall/GmallManageWebApplicationTests.java
  class GmallManageWebApplicationTests (line 7) | @SpringBootTest
    method contextLoads (line 10) | @Test

FILE: gmall-manage-web/src/test/java/com/xatu/gmall/UrlCrawBoke.java
  class UrlCrawBoke (line 15) | public class UrlCrawBoke {
    method main (line 20) | public static void main(String urlstr[]) throws IOException, Interrupt...
    method doGet (line 93) | public static InputStream doGet(String urlstr) throws IOException {
    method inputStreamToString (line 102) | public static String inputStreamToString(InputStream is, String charse...
    method getMatherSubstrs (line 113) | public static List<String> getMatherSubstrs(String str, String regex) {

FILE: gmall-order-service/src/main/java/com/xatu/gmall/GmallOrderServiceApplication.java
  class GmallOrderServiceApplication (line 5) | @SpringBootApplication
    method main (line 8) | public static void main(String[] args) {

FILE: gmall-order-service/src/main/java/com/xatu/gmall/OrderServiceMqListener.java
  class OrderServiceMqListener (line 12) | @Component
    method consumePaymentResult (line 18) | @JmsListener(destination = "PAYMENT_SUCCESS_QUENE",containerFactory = ...

FILE: gmall-order-service/src/main/java/com/xatu/gmall/mapper/OrderItemMapper.java
  type OrderItemMapper (line 9) | @Mapper

FILE: gmall-order-service/src/main/java/com/xatu/gmall/mapper/OrderMapper.java
  type OrderMapper (line 7) | @Mapper

FILE: gmall-order-service/src/main/java/com/xatu/gmall/service/impl/OrderItemServiceImpl.java
  class OrderItemServiceImpl (line 8) | @Service

FILE: gmall-order-service/src/main/java/com/xatu/gmall/service/impl/OrderServiceImpl.java
  class OrderServiceImpl (line 29) | @Service
    method genTradeCode (line 46) | @Override
    method checkTradeCode (line 59) | @Override
    method saveOrder (line 91) | @Override
    method getOrderByOutTradeNo (line 106) | @Override
    method updateOrderStatus (line 112) | @Override

FILE: gmall-order-service/src/test/java/com/xatu/gmall/GmallOrderServiceApplicationTests.java
  class GmallOrderServiceApplicationTests (line 7) | @SpringBootTest
    method contextLoads (line 10) | @Test

FILE: gmall-order-web/src/main/java/com/xatu/gmall/GmallOrderWebApplication.java
  class GmallOrderWebApplication (line 7) | @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
    method main (line 10) | public static void main(String[] args) {

FILE: gmall-order-web/src/main/java/com/xatu/gmall/controller/OrderController.java
  class OrderController (line 30) | @Controller
    method toTrade (line 46) | @LoginRequired(loginSuccess = true)
    method submitOrder (line 84) | @RequestMapping("/submitOrder")
    method getTotalAmount (line 168) | private BigDecimal getTotalAmount(List<OmsOrderItem> omsOrderItems){

FILE: gmall-order-web/src/test/java/com/xatu/gmall/GmallOrderWebApplicationTests.java
  class GmallOrderWebApplicationTests (line 7) | @SpringBootTest
    method contextLoads (line 10) | @Test

FILE: gmall-passport-web/src/main/java/com/xatu/gmall/GmallPassportWebApplication.java
  class GmallPassportWebApplication (line 7) | @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
    method main (line 11) | public static void main(String[] args) {

FILE: gmall-passport-web/src/main/java/com/xatu/gmall/controller/PassportController.java
  class PassportController (line 21) | @Controller
    method index (line 27) | @RequestMapping("/index")
    method login (line 34) | @ResponseBody
    method verify (line 69) | @RequestMapping("/verify")
    method vlogin (line 94) | @RequestMapping("vlogin")

FILE: gmall-passport-web/src/main/resources/static/js/zepto.js
  function type (line 85) | function type(obj) {
  function isFunction (line 90) | function isFunction(value) { return type(value) == "function" }
  function isWindow (line 91) | function isWindow(obj)     { return obj != null && obj == obj.window }
  function isDocument (line 92) | function isDocument(obj)   { return obj != null && obj.nodeType == obj.D...
  function isObject (line 93) | function isObject(obj)     { return type(obj) == "object" }
  function isPlainObject (line 94) | function isPlainObject(obj) {
  function isArray (line 97) | function isArray(value) { return value instanceof Array }
  function likeArray (line 98) | function likeArray(obj) { return typeof obj.length == 'number' }
  function compact (line 100) | function compact(array) { return filter.call(array, function(item){ retu...
  function flatten (line 101) | function flatten(array) { return array.length > 0 ? $.fn.concat.apply([]...
  function dasherize (line 103) | function dasherize(str) {
  function classRE (line 112) | function classRE(name) {
  function maybeAddPx (line 117) | function maybeAddPx(name, value) {
  function defaultDisplay (line 121) | function defaultDisplay(nodeName) {
  function children (line 134) | function children(element) {
  function extend (line 221) | function extend(target, source, deep) {
  function filtered (line 260) | function filtered(nodes, selector) {
  function funcArg (line 268) | function funcArg(context, arg, idx, payload) {
  function setAttribute (line 272) | function setAttribute(node, name, value) {
  function className (line 277) | function className(node, value){
  function deserializeValue (line 292) | function deserializeValue(value) {
  function traverseNode (line 761) | function traverseNode(node, fun) {
  function detect (line 832) | function detect(ua){
  function zid (line 893) | function zid(element) {
  function findHandlers (line 896) | function findHandlers(element, event, fn, selector) {
  function parse (line 907) | function parse(event) {
  function matcherFor (line 911) | function matcherFor(ns) {
  function eachEvent (line 915) | function eachEvent(events, fn, iterator){
  function eventCapture (line 920) | function eventCapture(handler, captureSetting) {
  function realEvent (line 926) | function realEvent(type) {
  function add (line 930) | function add(element, events, fn, selector, getDelegate, capture){
  function remove (line 954) | function remove(element, events, fn, selector, capture){
  function createProxy (line 1008) | function createProxy(event) {
  function fix (line 1024) | function fix(event) {
  function triggerAndReturn (line 1149) | function triggerAndReturn(context, eventName, data) {
  function triggerGlobal (line 1156) | function triggerGlobal(settings, context, eventName, data) {
  function ajaxStart (line 1163) | function ajaxStart(settings) {
  function ajaxStop (line 1166) | function ajaxStop(settings) {
  function ajaxBeforeSend (line 1171) | function ajaxBeforeSend(xhr, settings) {
  function ajaxSuccess (line 1179) | function ajaxSuccess(data, xhr, settings) {
  function ajaxError (line 1186) | function ajaxError(error, type, xhr, settings) {
  function ajaxComplete (line 1193) | function ajaxComplete(status, xhr, settings) {
  function empty (line 1201) | function empty() {}
  function mimeToDataType (line 1281) | function mimeToDataType(mime) {
  function appendQuery (line 1289) | function appendQuery(url, query) {
  function serializeData (line 1294) | function serializeData(options) {
  function parseArguments (line 1381) | function parseArguments(url, data, success, dataType) {
  function serialize (line 1425) | function serialize(params, obj, traditional, scope){
  function dasherize (line 1502) | function dasherize(str) { return downcase(str.replace(/([a-z])([A-Z])/, ...
  function downcase (line 1503) | function downcase(str) { return str.toLowerCase() }
  function normalizeEvent (line 1504) | function normalizeEvent(name) { return eventPrefix ? eventPrefix + name ...
  function anim (line 1599) | function anim(el, speed, opacity, scale, callback) {
  function hide (line 1609) | function hide(el, speed, scale, callback) {
  function getData (line 1677) | function getData(node, name) {
  function setData (line 1691) | function setData(node, name, value) {
  function attributeData (line 1699) | function attributeData(node) {
  function visible (line 1756) | function visible(elem){
  function process (line 1789) | function process(sel, fn) {
  function parentIfText (line 1844) | function parentIfText(node) {
  function swipeDirection (line 1848) | function swipeDirection(x1, x2, y1, y2) {
  function longTap (line 1853) | function longTap() {
  function cancelLongTap (line 1861) | function cancelLongTap() {
  function cancelAll (line 1866) | function cancelAll() {

FILE: gmall-passport-web/src/test/java/com/xatu/gmall/GmallPassportWebApplicationTests.java
  class GmallPassportWebApplicationTests (line 7) | @SpringBootTest
    method contextLoads (line 10) | @Test

FILE: gmall-payment/src/main/java/com/xatu/gmall/GmallPaymentApplication.java
  class GmallPaymentApplication (line 6) | @SpringBootApplication
    method main (line 9) | public static void main(String[] args) {

FILE: gmall-payment/src/main/java/com/xatu/gmall/PaymentServiceMqListener.java
  class PaymentServiceMqListener (line 14) | @Component
    method consumePaymentCheckResult (line 20) | @JmsListener(destination = "DELAYPAYMENT_CHECK_QUENE",containerFactory...

FILE: gmall-payment/src/main/java/com/xatu/gmall/config/AlipayConfig.java
  class AlipayConfig (line 10) | @Configuration
    method setAlipay_public_key (line 27) | @Value("${alipay_public_key}")
    method setReturn_url (line 32) | @Value("${return_payment_url}")
    method setNotify_url (line 37) | @Value("${notify_payment_url}")
    method setReturn_order_url (line 42) | @Value("${return_order_url}")
    method alipayClient (line 47) | @Bean

FILE: gmall-payment/src/main/java/com/xatu/gmall/controller/PaymentController.java
  class PaymentController (line 29) | @Controller
    method index (line 40) | @RequestMapping("/index")
    method alipay (line 54) | @RequestMapping("/alipay/submit")
    method aliPayCallBackReturn (line 100) | @RequestMapping("alipay/callback/return")

FILE: gmall-payment/src/main/java/com/xatu/gmall/mapper/PaymentMapper.java
  type PaymentMapper (line 14) | public interface PaymentMapper extends BaseMapper<PaymentInfo> {

FILE: gmall-payment/src/main/java/com/xatu/gmall/service/impl/PaymentServiceImpl.java
  class PaymentServiceImpl (line 38) | @Service
    method savePaymentInfo (line 51) | @Override
    method updatePaymentInfo (line 56) | @Override
    method sendDelayPaymentCheckQueue (line 110) | @Override
    method checkAlipayPayment (line 149) | @Override

FILE: gmall-payment/src/test/java/com/xatu/gmall/GmallPaymentApplicationTests.java
  class GmallPaymentApplicationTests (line 7) | @SpringBootTest
    method contextLoads (line 10) | @Test

FILE: gmall-search-service/src/main/java/com/xatu/gmall/GmallSearchServiceApplication.java
  class GmallSearchServiceApplication (line 7) | @SpringBootApplication
    method main (line 10) | public static void main(String[] args) {

FILE: gmall-search-service/src/main/java/com/xatu/gmall/service/impl/SearchServiceImpl.java
  class SearchServiceImpl (line 26) | @Service
    method list (line 33) | @Override
    method getSearchDsl (line 67) | public String getSearchDsl(PmsSearchParam pmsSearchParam){

FILE: gmall-search-service/src/test/java/com/xatu/gmall/GmallSearchServiceApplicationTests.java
  class GmallSearchServiceApplicationTests (line 19) | @RunWith(SpringRunner.class)
    method contextLoads (line 26) | @Test

FILE: gmall-search-web/src/main/java/com/xatu/gmall/GmallSearchWebApplication.java
  class GmallSearchWebApplication (line 9) | @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
    method main (line 13) | public static void main(String[] args) {

FILE: gmall-search-web/src/main/java/com/xatu/gmall/controller/SearchController.java
  class SearchController (line 16) | @Controller
    method index (line 24) | @RequestMapping("/index")
    method list (line 30) | @RequestMapping("/list.html")
    method getUrlParam (line 87) | private String getUrlParam(PmsSearchParam pmsSearchParam) {
    method getUrlParamForCrumb (line 122) | private String getUrlParamForCrumb(PmsSearchParam pmsSearchParam,Strin...

FILE: gmall-search-web/src/main/resources/static/index/js/secend.js
  function time (line 31) | function time() {

FILE: gmall-search-web/src/main/resources/static/list/font/iconfont.js
  function IEContentLoaded (line 1) | function IEContentLoaded(w,fn){var d=w.document,done=false,init=function...
  function appendSvg (line 1) | function appendSvg(){var div,svg;div=document.createElement("div");div.i...

FILE: gmall-search-web/src/main/resources/static/list/js/jquery-1.12.4.js
  function isArrayLike (line 563) | function isArrayLike( obj ) {
  function Sizzle (line 772) | function Sizzle( selector, context, results, seed ) {
  function createCache (line 912) | function createCache() {
  function markFunction (line 930) | function markFunction( fn ) {
  function assert (line 939) | function assert( fn ) {
  function addHandle (line 961) | function addHandle( attrs, handler ) {
  function siblingCheck (line 976) | function siblingCheck( a, b ) {
  function createInputPseudo (line 1003) | function createInputPseudo( type ) {
  function createButtonPseudo (line 1014) | function createButtonPseudo( type ) {
  function createPositionalPseudo (line 1025) | function createPositionalPseudo( fn ) {
  function testContext (line 1048) | function testContext( context ) {
  function setFilters (line 2093) | function setFilters() {}
  function toSelector (line 2164) | function toSelector( tokens ) {
  function addCombinator (line 2174) | function addCombinator( matcher, combinator, base ) {
  function elementMatcher (line 2232) | function elementMatcher( matchers ) {
  function multipleContexts (line 2246) | function multipleContexts( selector, contexts, results ) {
  function condense (line 2255) | function condense( unmatched, map, filter, context, xml ) {
  function setMatcher (line 2276) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
  function matcherFromTokens (line 2369) | function matcherFromTokens( tokens ) {
  function matcherFromGroupMatchers (line 2427) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  function winnow (line 2765) | function winnow( elements, qualifier, not ) {
  function sibling (line 3078) | function sibling( cur, dir ) {
  function createOptions (line 3159) | function createOptions( options ) {
  function detach (line 3595) | function detach() {
  function completed (line 3609) | function completed() {
  function dataAttr (line 3779) | function dataAttr( elem, key, data ) {
  function isEmptyDataObject (line 3813) | function isEmptyDataObject( obj ) {
  function internalData (line 3829) | function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
  function internalRemoveData (line 3921) | function internalRemoveData( elem, name, pvt ) {
  function adjustCSS (line 4314) | function adjustCSS( elem, prop, valueParts, tween ) {
  function createSafeFragment (line 4444) | function createSafeFragment( document ) {
  function getAll (line 4548) | function getAll( context, tag ) {
  function setGlobalEval (line 4577) | function setGlobalEval( elems, refElements ) {
  function fixDefaultChecked (line 4593) | function fixDefaultChecked( elem ) {
  function buildFragment (line 4599) | function buildFragment( elems, context, scripts, selection, ignored ) {
  function returnTrue (line 4759) | function returnTrue() {
  function returnFalse (line 4763) | function returnFalse() {
  function safeActiveElement (line 4769) | function safeActiveElement() {
  function on (line 4775) | function on( elem, types, selector, data, fn, one ) {
  function manipulationTarget (line 5890) | function manipulationTarget( elem, content ) {
  function disableScript (line 5900) | function disableScript( elem ) {
  function restoreScript (line 5904) | function restoreScript( elem ) {
  function cloneCopyEvent (line 5914) | function cloneCopyEvent( src, dest ) {
  function fixCloneNodeIssues (line 5941) | function fixCloneNodeIssues( src, dest ) {
  function domManip (line 6009) | function domManip( collection, args, callback, ignored ) {
  function remove (line 6106) | function remove( elem, selector, keepData ) {
  function actualDisplay (line 6442) | function actualDisplay( name, doc ) {
  function defaultDisplay (line 6458) | function defaultDisplay( nodeName ) {
  function computeStyleTests (line 6607) | function computeStyleTests() {
  function addGetHookIf (line 6819) | function addGetHookIf( conditionFn, hookFn ) {
  function vendorPropName (line 6862) | function vendorPropName( name ) {
  function showHide (line 6881) | function showHide( elements, show ) {
  function setPositiveNumber (line 6938) | function setPositiveNumber( elem, value, subtract ) {
  function augmentWidthOrHeight (line 6947) | function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
  function getWidthOrHeight (line 6991) | function getWidthOrHeight( elem, name, extra ) {
  function Tween (line 7374) | function Tween( elem, options, prop, end, easing ) {
  function createFxNow (line 7498) | function createFxNow() {
  function genFx (line 7506) | function genFx( type, includeWidth ) {
  function createTween (line 7526) | function createTween( value, prop, animation ) {
  function defaultPrefilter (line 7540) | function defaultPrefilter( elem, props, opts ) {
  function propFilter (line 7685) | function propFilter( props, specialEasing ) {
  function Animation (line 7722) | function Animation( elem, properties, options ) {
  function getClass (line 8803) | function getClass( elem ) {
  function addToPrefiltersOrTransports (line 9115) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 9149) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 9178) | function ajaxExtend( target, src ) {
  function ajaxHandleResponses (line 9198) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 9255) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
  function done (line 9753) | function done( status, nativeStatusText, responses, headers ) {
  function getDisplay (line 9985) | function getDisplay( elem ) {
  function filterHidden (line 9989) | function filterHidden( elem ) {
  function buildParams (line 10027) | function buildParams( prefix, obj, traditional, add ) {
  function createStandardXHR (line 10346) | function createStandardXHR() {
  function createActiveXHR (line 10352) | function createActiveXHR() {
  function getWindow (line 10682) | function getWindow( elem ) {

FILE: gmall-search-web/src/test/java/com/xatu/gmall/GmallSearchWebApplicationTests.java
  class GmallSearchWebApplicationTests (line 14) | @RunWith(SpringRunner.class)
    method contextLoads (line 18) | @Test

FILE: gmall-service-util/src/main/java/com/xatu/gmall/config/ActiveMQConfig.java
  class ActiveMQConfig (line 13) | @Configuration
    method getActiveMQUtil (line 22) | @Bean
    method jmsQueueListenerContainerFactory (line 33) | @Bean(name = "jmsQueueListener")
    method activeMQConnectionFactory (line 53) | @Bean

FILE: gmall-service-util/src/main/java/com/xatu/gmall/config/RedisConfig.java
  class RedisConfig (line 9) | @Configuration
    method getRedisUtil (line 22) | @Bean

FILE: gmall-service-util/src/main/java/com/xatu/gmall/config/RedissonConfig.java
  class RedissonConfig (line 10) | @Configuration
    method redissonClient (line 19) | @Bean

FILE: gmall-service-util/src/main/java/com/xatu/gmall/util/ActiveMQUtil.java
  class ActiveMQUtil (line 8) | public class ActiveMQUtil {
    method init (line 11) | public ConnectionFactory init(String brokerUrl) {
    method getConnectionFactory (line 25) | public ConnectionFactory getConnectionFactory(){

FILE: gmall-service-util/src/main/java/com/xatu/gmall/util/RedisUtil.java
  class RedisUtil (line 7) | public class RedisUtil {
    method initPool (line 11) | public void initPool(String host,int port ,int database){
    method getJedis (line 21) | public  Jedis getJedis(){

FILE: gmall-user-service/src/main/java/com/xatu/gmall/GmallUserServiceApplication.java
  class GmallUserServiceApplication (line 7) | @SpringBootApplication
    method main (line 11) | public static void main(String[] args) {

FILE: gmall-user-service/src/main/java/com/xatu/gmall/mapper/MemberReceiveAddressMapper.java
  type MemberReceiveAddressMapper (line 16) | @Mapper

FILE: gmall-user-service/src/main/java/com/xatu/gmall/mapper/UserMapper.java
  type UserMapper (line 18) | @Mapper
    method SelectUserById (line 21) | List<Member> SelectUserById(Integer i);

FILE: gmall-user-service/src/main/java/com/xatu/gmall/mapper/UserReceiveAddressMapper.java
  type UserReceiveAddressMapper (line 7) | public interface UserReceiveAddressMapper extends BaseMapper<MemberRecei...

FILE: gmall-user-service/src/main/java/com/xatu/gmall/service/impl/MemberReceiveAddressServiceImpl.java
  class MemberReceiveAddressServiceImpl (line 18) | @Service

FILE: gmall-user-service/src/main/java/com/xatu/gmall/service/impl/UserServiceImpl.java
  class UserServiceImpl (line 29) | @Service
    method selectUserById (line 40) | public List<Member> selectUserById(Integer i) {
    method getReceiveAddressByMemberId (line 45) | public List<MemberReceiveAddress> getReceiveAddressByMemberId(String m...
    method login (line 49) | @Override
    method addToken (line 85) | @Override
    method addOauthUser (line 92) | @Override
    method checkOauthUser (line 98) | @Override
    method getReceiveAddressByReceiveAddressId (line 103) | @Override
    method loginFromDB (line 108) | private Member loginFromDB(Member loginMember) {

FILE: gmall-user-service/src/test/java/com/xatu/gmall/GmallUserServiceApplicationTests.java
  class GmallUserServiceApplicationTests (line 7) | @SpringBootTest
    method contextLoads (line 10) | @Test

FILE: gmall-user-web/src/main/java/com/xatu/gmall/GmallUserWebApplication.java
  class GmallUserWebApplication (line 7) | @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
    method main (line 10) | public static void main(String[] args) {

FILE: gmall-user-web/src/main/java/com/xatu/gmall/controller/MemberReceiveAddressController.java
  class MemberReceiveAddressController (line 20) | @RestController

FILE: gmall-user-web/src/main/java/com/xatu/gmall/controller/UserController.java
  class UserController (line 25) | @RestController
    method selectAllUser (line 35) | @RequestMapping("/selectAllUser")
    method getMemberReceiveAddressByMemberId (line 47) | @RequestMapping("/getAllUser")

FILE: gmall-user-web/src/test/java/com/xatu/gmall/GmallUserWebApplicationTests.java
  class GmallUserWebApplicationTests (line 7) | @SpringBootTest
    method contextLoads (line 10) | @Test

FILE: gmall-web-util/src/main/java/com/xatu/gmall/config/WebMvcConfiguration.java
  class WebMvcConfiguration (line 10) | @Configuration
    method addInterceptors (line 14) | @Override

FILE: gmall-web-util/src/main/java/com/xatu/gmall/interceptors/AuthInterceptor.java
  class AuthInterceptor (line 18) | @Component
    method preHandle (line 20) | public boolean preHandle(HttpServletRequest request, HttpServletRespon...

FILE: gmall-web-util/src/main/java/com/xatu/gmall/util/CookieUtil.java
  class CookieUtil (line 10) | public class CookieUtil
    method getCookieValue (line 19) | public static String getCookieValue(HttpServletRequest request, String...
    method setCookie (line 50) | public static   void setCookie(HttpServletRequest request, HttpServlet...
    method getDomainName (line 74) | private static final String getDomainName(HttpServletRequest request) {
    method deleteCookie (line 109) | public static void deleteCookie(HttpServletRequest request, HttpServle...

FILE: gmall-web-util/src/main/java/com/xatu/gmall/util/JwtUtil.java
  class JwtUtil (line 7) | public class JwtUtil {
    method encode (line 9) | public static String encode(String key,Map<String,Object> param,String...
    method decode (line 23) | public  static Map<String,Object> decode(String token , String key, St...

FILE: gware-manage/src/main/java/com/xatu/GwareManageApplication.java
  class GwareManageApplication (line 8) | @SpringBootApplication
    method main (line 13) | public static void main(String[] args) {

FILE: gware-manage/src/main/java/com/xatu/gware/bean/OmsOrder.java
  class OmsOrder (line 9) | public class OmsOrder implements Serializable {
    method getOmsOrderItems (line 60) | public List<OmsOrderItem> getOmsOrderItems() {
    method setOmsOrderItems (line 64) | public void setOmsOrderItems(List<OmsOrderItem> omsOrderItems) {
    method getId (line 68) | public String getId() {
    method setId (line 72) | public void setId(String id) {
    method getMemberId (line 76) | public String getMemberId() {
    method setMemberId (line 80) | public void setMemberId(String memberId) {
    method getCouponId (line 84) | public String getCouponId() {
    method setCouponId (line 88) | public void setCouponId(String couponId) {
    method getOrderSn (line 92) | public String getOrderSn() {
    method setOrderSn (line 96) | public void setOrderSn(String orderSn) {
    method getCreateTime (line 100) | public Date getCreateTime() {
    method setCreateTime (line 104) | public void setCreateTime(Date createTime) {
    method getMemberUsername (line 108) | public String getMemberUsername() {
    method setMemberUsername (line 112) | public void setMemberUsername(String memberUsername) {
    method getTotalAmount (line 116) | public BigDecimal getTotalAmount() {
    method setTotalAmount (line 120) | public void setTotalAmount(BigDecimal totalAmount) {
    method getPayAmount (line 124) | public BigDecimal getPayAmount() {
    method setPayAmount (line 128) | public void setPayAmount(BigDecimal payAmount) {
    method getFreightAmount (line 132) | public BigDecimal getFreightAmount() {
    method setFreightAmount (line 136) | public void setFreightAmount(BigDecimal freightAmount) {
    method getPromotionAmount (line 140) | public BigDecimal getPromotionAmount() {
    method setPromotionAmount (line 144) | public void setPromotionAmount(BigDecimal promotionAmount) {
    method getIntegrationAmount (line 148) | public BigDecimal getIntegrationAmount() {
    method setIntegrationAmount (line 152) | public void setIntegrationAmount(BigDecimal integrationAmount) {
    method getCouponAmount (line 156) | public BigDecimal getCouponAmount() {
    method setCouponAmount (line 160) | public void setCouponAmount(BigDecimal couponAmount) {
    method getDiscountAmount (line 164) | public BigDecimal getDiscountAmount() {
    method setDiscountAmount (line 168) | public void setDiscountAmount(BigDecimal discountAmount) {
    method getPayType (line 172) | public int getPayType() {
    method setPayType (line 176) | public void setPayType(int payType) {
    method getSourceType (line 180) | public int getSourceType() {
    method setSourceType (line 184) | public void setSourceType(int sourceType) {
    method getStatus (line 188) | public int getStatus() {
    method setStatus (line 192) | public void setStatus(int status) {
    method getOrderType (line 196) | public int getOrderType() {
    method setOrderType (line 200) | public void setOrderType(int orderType) {
    method getDeliveryCompany (line 204) | public String getDeliveryCompany() {
    method setDeliveryCompany (line 208) | public void setDeliveryCompany(String deliveryCompany) {
    method getDeliverySn (line 212) | public String getDeliverySn() {
    method setDeliverySn (line 216) | public void setDeliverySn(String deliverySn) {
    method getAutoConfirmDay (line 220) | public int getAutoConfirmDay() {
    method setAutoConfirmDay (line 224) | public void setAutoConfirmDay(int autoConfirmDay) {
    method getIntegration (line 228) | public int getIntegration() {
    method setIntegration (line 232) | public void setIntegration(int integration) {
    method getGrowth (line 236) | public int getGrowth() {
    method setGrowth (line 240) | public void setGrowth(int growth) {
    method getPromotionInfo (line 244) | public String getPromotionInfo() {
    method setPromotionInfo (line 248) | public void setPromotionInfo(String promotionInfo) {
    method getBillType (line 252) | public int getBillType() {
    method setBillType (line 256) | public void setBillType(int billType) {
    method getBillHeader (line 260) | public String getBillHeader() {
    method setBillHeader (line 264) | public void setBillHeader(String billHeader) {
    method getBillContent (line 268) | public String getBillContent() {
    method setBillContent (line 272) | public void setBillContent(String billContent) {
    method getBillReceiverPhone (line 276) | public String getBillReceiverPhone() {
    method setBillReceiverPhone (line 280) | public void setBillReceiverPhone(String billReceiverPhone) {
    method getBillReceiverEmail (line 284) | public String getBillReceiverEmail() {
    method setBillReceiverEmail (line 288) | public void setBillReceiverEmail(String billReceiverEmail) {
    method getReceiverName (line 292) | public String getReceiverName() {
    method setReceiverName (line 296) | public void setReceiverName(String receiverName) {
    method getReceiverPhone (line 300) | public String getReceiverPhone() {
    method setReceiverPhone (line 304) | public void setReceiverPhone(String receiverPhone) {
    method getReceiverPostCode (line 308) | public String getReceiverPostCode() {
    method setReceiverPostCode (line 312) | public void setReceiverPostCode(String receiverPostCode) {
    method getReceiverProvince (line 316) | public String getReceiverProvince() {
    method setReceiverProvince (line 320) | public void setReceiverProvince(String receiverProvince) {
    method getReceiverCity (line 324) | public String getReceiverCity() {
    method setReceiverCity (line 328) | public void setReceiverCity(String receiverCity) {
    method getReceiverRegion (line 332) | public String getReceiverRegion() {
    method setReceiverRegion (line 336) | public void setReceiverRegion(String receiverRegion) {
    method getReceiverDetailAddress (line 340) | public String getReceiverDetailAddress() {
    method setReceiverDetailAddress (line 344) | public void setReceiverDetailAddress(String receiverDetailAddress) {
    method getNote (line 348) | public String getNote() {
    method setNote (line 352) | public void setNote(String note) {
    method getConfirmStatus (line 356) | public int getConfirmStatus() {
    method setConfirmStatus (line 360) | public void setConfirmStatus(int confirmStatus) {
    method getDeleteStatus (line 364) | public int getDeleteStatus() {
    method setDeleteStatus (line 368) | public void setDeleteStatus(int deleteStatus) {
    method getUseIntegration (line 372) | public int getUseIntegration() {
    method setUseIntegration (line 376) | public void setUseIntegration(int useIntegration) {
    method getPaymentTime (line 380) | public Date getPaymentTime() {
    method setPaymentTime (line 384) | public void setPaymentTime(Date paymentTime) {
    method getDeliveryTime (line 388) | public Date getDeliveryTime() {
    method setDeliveryTime (line 392) | public void setDeliveryTime(Date deliveryTime) {
    method getReceiveTime (line 396) | public Date getReceiveTime() {
    method setReceiveTime (line 400) | public void setReceiveTime(Date receiveTime) {
    method getCommentTime (line 404) | public Date getCommentTime() {
    method setCommentTime (line 408) | public void setCommentTime(Date commentTime) {
    method getModifyTime (line 412) | public Date getModifyTime() {
    method setModifyTime (line 416) | public void setModifyTime(Date modifyTime) {

FILE: gware-manage/src/main/java/com/xatu/gware/bean/OmsOrderItem.java
  class OmsOrderItem (line 6) | public class OmsOrderItem implements Serializable {
    method getId (line 34) | public String getId() {
    method setId (line 38) | public void setId(String id) {
    method getOrderId (line 42) | public String getOrderId() {
    method setOrderId (line 46) | public void setOrderId(String orderId) {
    method getOrderSn (line 50) | public String getOrderSn() {
    method setOrderSn (line 54) | public void setOrderSn(String orderSn) {
    method getProductId (line 58) | public String getProductId() {
    method setProductId (line 62) | public void setProductId(String productId) {
    method getProductPic (line 66) | public String getProductPic() {
    method setProductPic (line 70) | public void setProductPic(String productPic) {
    method getProductName (line 74) | public String getProductName() {
    method setProductName (line 78) | public void setProductName(String productName) {
    method getProductBrand (line 82) | public String getProductBrand() {
    method setProductBrand (line 86) | public void setProductBrand(String productBrand) {
    method getProductSn (line 90) | public String getProductSn() {
    method setProductSn (line 94) | public void setProductSn(String productSn) {
    method getProductPrice (line 98) | public String getProductPrice() {
    method setProductPrice (line 102) | public void setProductPrice(String productPrice) {
    method getProductQuantity (line 106) | public int getProductQuantity() {
    method setProductQuantity (line 110) | public void setProductQuantity(int productQuantity) {
    method getProductSkuId (line 114) | public String getProductSkuId() {
    method setProductSkuId (line 118) | public void setProductSkuId(String productSkuId) {
    method getProductSkuCode (line 122) | public String getProductSkuCode() {
    method setProductSkuCode (line 126) | public void setProductSkuCode(String productSkuCode) {
    method getProductCategoryId (line 130) | public String getProductCategoryId() {
    method setProductCategoryId (line 134) | public void setProductCategoryId(String productCategoryId) {
    method getSp1 (line 138) | public String getSp1() {
    method setSp1 (line 142) | public void setSp1(String sp1) {
    method getSp2 (line 146) | public String getSp2() {
    method setSp2 (line 150) | public void setSp2(String sp2) {
    method getSp3 (line 154) | public String getSp3() {
    method setSp3 (line 158) | public void setSp3(String sp3) {
    method getPromotionName (line 162) | public String getPromotionName() {
    method setPromotionName (line 166) | public void setPromotionName(String promotionName) {
    method getPromotionAmount (line 170) | public BigDecimal getPromotionAmount() {
    method setPromotionAmount (line 174) | public void setPromotionAmount(BigDecimal promotionAmount) {
    method getCouponAmount (line 178) | public BigDecimal getCouponAmount() {
    method setCouponAmount (line 182) | public void setCouponAmount(BigDecimal couponAmount) {
    method getIntegrationAmount (line 186) | public BigDecimal getIntegrationAmount() {
    method setIntegrationAmount (line 190) | public void setIntegrationAmount(BigDecimal integrationAmount) {
    method getRealAmount (line 194) | public String getRealAmount() {
    method setRealAmount (line 198) | public void setRealAmount(String realAmount) {
    method getGiftIntegration (line 202) | public int getGiftIntegration() {
    method setGiftIntegration (line 206) | public void setGiftIntegration(int giftIntegration) {
    method getGiftGrowth (line 210) | public int getGiftGrowth() {
    method setGiftGrowth (line 214) | public void setGiftGrowth(int giftGrowth) {
    method getProductAttr (line 218) | public String getProductAttr() {
    method setProductAttr (line 222) | public void setProductAttr(String productAttr) {

FILE: gware-manage/src/main/java/com/xatu/gware/bean/WareInfo.java
  class WareInfo (line 12) | public class WareInfo {
    method getId (line 29) | public String getId() {
    method setId (line 33) | public void setId(String id) {
    method getName (line 37) | public String getName() {
    method setName (line 41) | public void setName(String name) {
    method getAddress (line 45) | public String getAddress() {
    method setAddress (line 49) | public void setAddress(String address) {
    method getAreacode (line 53) | public String getAreacode() {
    method setAreacode (line 57) | public void setAreacode(String areacode) {

FILE: gware-manage/src/main/java/com/xatu/gware/bean/WareOrderTask.java
  class WareOrderTask (line 15) | public class WareOrderTask {
    method getId (line 62) | public String getId() {
    method setId (line 66) | public void setId(String id) {
    method getOrderId (line 70) | public String getOrderId() {
    method setOrderId (line 74) | public void setOrderId(String orderId) {
    method getConsignee (line 78) | public String getConsignee() {
    method setConsignee (line 82) | public void setConsignee(String consignee) {
    method getConsigneeTel (line 86) | public String getConsigneeTel() {
    method setConsigneeTel (line 90) | public void setConsigneeTel(String consigneeTel) {
    method getDeliveryAddress (line 94) | public String getDeliveryAddress() {
    method setDeliveryAddress (line 98) | public void setDeliveryAddress(String deliveryAddress) {
    method getOrderComment (line 102) | public String getOrderComment() {
    method setOrderComment (line 106) | public void setOrderComment(String orderComment) {
    method getPaymentWay (line 110) | public String getPaymentWay() {
    method setPaymentWay (line 114) | public void setPaymentWay(String paymentWay) {
    method getTaskStatus (line 118) | public TaskStatus getTaskStatus() {
    method setTaskStatus (line 122) | public void setTaskStatus(TaskStatus taskStatus) {
    method getOrderBody (line 126) | public String getOrderBody() {
    method setOrderBody (line 130) | public void setOrderBody(String orderBody) {
    method getTrackingNo (line 134) | public String getTrackingNo() {
    method setTrackingNo (line 138) | public void setTrackingNo(String trackingNo) {
    method getCreateTime (line 142) | public Date getCreateTime() {
    method setCreateTime (line 146) | public void setCreateTime(Date createTime) {
    method getDetails (line 150) | public List<WareOrderTaskDetail> getDetails() {
    method setDetails (line 156) | public void setDetails(List<WareOrderTaskDetail> details) {
    method getWareId (line 160) | public String getWareId() {
    method setWareId (line 164) | public void setWareId(String wareId) {
    method getTaskComment (line 168) | public String getTaskComment() {
    method setTaskComment (line 172) | public void setTaskComment(String taskComment) {

FILE: gware-manage/src/main/java/com/xatu/gware/bean/WareOrderTaskDetail.java
  class WareOrderTaskDetail (line 12) | public class WareOrderTaskDetail {
    method getId (line 32) | public String getId() {
    method setId (line 36) | public void setId(String id) {
    method getSkuId (line 40) | public String getSkuId() {
    method setSkuId (line 44) | public void setSkuId(String skuId) {
    method getSkuName (line 48) | public String getSkuName() {
    method setSkuName (line 52) | public void setSkuName(String skuName) {
    method getSkuNum (line 56) | public Integer getSkuNum() {
    method setSkuNum (line 60) | public void setSkuNum(Integer skuNum) {
    method getTaskId (line 64) | public String getTaskId() {
    method setTaskId (line 68) | public void setTaskId(String taskId) {

FILE: gware-manage/src/main/java/com/xatu/gware/bean/WareSku.java
  class WareSku (line 9) | public class WareSku {
    method getId (line 34) | public String getId() {
    method setId (line 38) | public void setId(String id) {
    method getSkuId (line 42) | public String getSkuId() {
    method setSkuId (line 46) | public void setSkuId(String skuId) {
    method getWarehouseId (line 50) | public String getWarehouseId() {
    method setWarehouseId (line 54) | public void setWarehouseId(String warehouseId) {
    method getStock (line 58) | public Integer getStock() {
    method setStock (line 62) | public void setStock(Integer stock) {
    method getStockName (line 66) | public String getStockName() {
    method setStockName (line 70) | public void setStockName(String stockName) {
    method getStockLocked (line 74) | public Integer getStockLocked() {
    method setStockLocked (line 78) | public void setStockLocked(Integer stockLocked) {
    method getWarehouseName (line 82) | public String getWarehouseName() {
    method setWarehouseName (line 86) | public void setWarehouseName(String warehouseName) {

FILE: gware-manage/src/main/java/com/xatu/gware/bean/enums/OrderStatus.java
  type OrderStatus (line 7) | public enum OrderStatus {
    method OrderStatus (line 19) | OrderStatus(String comment ){
    method getComment (line 23) | public String getComment() {
    method setComment (line 27) | public void setComment(String comment) {

FILE: gware-manage/src/main/java/com/xatu/gware/bean/enums/PaymentStatus.java
  type PaymentStatus (line 7) | public enum PaymentStatus {
    method PaymentStatus (line 16) | PaymentStatus(String name) {

FILE: gware-manage/src/main/java/com/xatu/gware/bean/enums/PaymentWay.java
  type PaymentWay (line 7) | public enum PaymentWay {
    method PaymentWay (line 14) | PaymentWay(String comment ){
    method getComment (line 18) | public String getComment() {
    method setComment (line 22) | public void setComment(String comment) {

FILE: gware-manage/src/main/java/com/xatu/gware/bean/enums/ProcessStatus.java
  type ProcessStatus (line 7) | public enum ProcessStatus {
    method ProcessStatus (line 22) | ProcessStatus(String comment, OrderStatus orderStatus){
    method getComment (line 27) | public String getComment() {
    method setComment (line 31) | public void setComment(String comment) {
    method getOrderStatus (line 35) | public OrderStatus getOrderStatus() {
    method setOrderStatus (line 39) | public void setOrderStatus(OrderStatus orderStatus) {

FILE: gware-manage/src/main/java/com/xatu/gware/config/ActiveMQConfig.java
  class ActiveMQConfig (line 19) | @Configuration
    method getActiveMQUtil (line 32) | @Bean
    method jmsQueueListenerContainerFactory (line 44) | @Bean(name = "jmsQueueListener")
    method redeliveryPolicy (line 67) | @Bean
    method activeMQConnectionFactory (line 86) | @Bean

FILE: gware-manage/src/main/java/com/xatu/gware/config/GwareConst.java
  class GwareConst (line 10) | @Configuration

FILE: gware-manage/src/main/java/com/xatu/gware/config/JsonpController.java
  class JsonpController (line 12) | @ControllerAdvice(basePackages = {"com.xatu.gware"})
    method JsonpController (line 14) | public JsonpController(){

FILE: gware-manage/src/main/java/com/xatu/gware/controller/GwareController.java
  class GwareController (line 26) | @Controller
    method index (line 32) | @RequestMapping("index")
    method wareSkuListPage (line 36) | @RequestMapping("wareSkuListPage")
    method hasStock (line 42) | @RequestMapping("hasStock")
    method getWareInfoBySkuid (line 57) | @RequestMapping(value = "skuWareInfo")
    method addWareInfo (line 69) | @RequestMapping(value = "wareInfo")
    method getWareSkuMap (line 76) | @RequestMapping(value = "wareSkuMap"  )
    method addWareSku (line 87) | @RequestMapping(value = "saveWareSku" ,method = RequestMethod.POST)
    method getWareSkuList (line 95) | @RequestMapping(value = "wareSkuList" ,method = RequestMethod.GET,prod...
    method getWareInfoList (line 102) | @RequestMapping(value = "wareInfoList" ,method = RequestMethod.GET,pro...
    method deliveryStock (line 115) | @RequestMapping(value="delivery",method = RequestMethod.POST)
    method getWareOrderTaskList (line 128) | @RequestMapping(value="taskList",method = RequestMethod.GET)

FILE: gware-manage/src/main/java/com/xatu/gware/enums/TaskStatus.java
  type TaskStatus (line 7) | public enum TaskStatus {
    method TaskStatus (line 19) | TaskStatus(String comment) {
    method getComment (line 25) | public String getComment() {
    method setComment (line 29) | public void setComment(String comment) {

FILE: gware-manage/src/main/java/com/xatu/gware/mapper/WareInfoMapper.java
  type WareInfoMapper (line 14) | public interface WareInfoMapper extends Mapper<WareInfo> {
    method selectWareInfoBySkuid (line 17) | public List<WareInfo> selectWareInfoBySkuid(String skuid);

FILE: gware-manage/src/main/java/com/xatu/gware/mapper/WareOrderTaskDetailMapper.java
  type WareOrderTaskDetailMapper (line 12) | public interface WareOrderTaskDetailMapper extends Mapper<WareOrderTaskD...

FILE: gware-manage/src/main/java/com/xatu/gware/mapper/WareOrderTaskMapper.java
  type WareOrderTaskMapper (line 12) | public interface WareOrderTaskMapper extends Mapper<WareOrderTask> {

FILE: gware-manage/src/main/java/com/xatu/gware/mapper/WareSkuMapper.java
  type WareSkuMapper (line 13) | public interface WareSkuMapper extends Mapper<WareSku> {
    method selectStockBySkuid (line 16) | public Integer selectStockBySkuid(String skuid);
    method incrStockLocked (line 18) | public int incrStockLocked(WareSku wareSku);
    method selectStockBySkuidForUpdate (line 20) | public int selectStockBySkuidForUpdate(WareSku wareSku);
    method deliveryStock (line 22) | public int  deliveryStock(WareSku wareSku);
    method selectWareSkuAll (line 24) | public List<WareSku> selectWareSkuAll();

FILE: gware-manage/src/main/java/com/xatu/gware/mq/WareConsumer.java
  class WareConsumer (line 30) | @Component
    method receiveOrder (line 51) | @JmsListener(destination = "PAYMENT_SUCCESS_QUEUE", containerFactory =...

FILE: gware-manage/src/main/java/com/xatu/gware/service/GwareService.java
  type GwareService (line 14) | public interface GwareService {
    method getStockBySkuId (line 15) | public Integer  getStockBySkuId(String skuid);
    method hasStockBySkuId (line 17) | public boolean  hasStockBySkuId(String skuid,Integer num);
    method getWareInfoBySkuid (line 19) | public List<WareInfo> getWareInfoBySkuid(String skuid);
    method addWareInfo (line 21) | public void addWareInfo();
    method getWareSkuMap (line 23) | public Map<String,List<String>> getWareSkuMap(List<String> skuIdlist);
    method addWareSku (line 25) | public void addWareSku(WareSku wareSku);
    method deliveryStock (line 27) | public void deliveryStock(WareOrderTask taskExample) ;
    method saveWareOrderTask (line 29) | public WareOrderTask saveWareOrderTask(WareOrderTask wareOrderTask );
    method checkOrderSplit (line 31) | public  List<WareOrderTask>   checkOrderSplit(WareOrderTask wareOrderT...
    method lockStock (line 33) | public void lockStock(WareOrderTask wareOrderTask);
    method getWareOrderTaskList (line 35) | public List<WareOrderTask> getWareOrderTaskList(WareOrderTask wareOrde...
    method getWareSkuList (line 37) | public List<WareSku> getWareSkuList();
    method getWareInfoList (line 39) | public List<WareInfo> getWareInfoList();

FILE: gware-manage/src/main/java/com/xatu/gware/service/impl/GwareServiceImpl.java
  class GwareServiceImpl (line 32) | @Service
    method getStockBySkuId (line 53) | public Integer  getStockBySkuId(String skuid){
    method hasStockBySkuId (line 60) | public boolean  hasStockBySkuId(String skuid,Integer num){
    method getWareInfoBySkuid (line 70) | public List<WareInfo> getWareInfoBySkuid(String skuid){
    method getWareInfoList (line 75) | public List<WareInfo> getWareInfoList(){
    method addWareInfo (line 81) | public void addWareInfo(){
    method getWareSkuMap (line 96) | public   Map<String,List<String>>  getWareSkuMap(List<String> skuIdlist){
    method convertWareSkuMapList (line 117) | public  List<Map<String,Object>>  convertWareSkuMapList( Map<String,Li...
    method addWareSku (line 133) | public void addWareSku(WareSku wareSku){
    method getWareSkuList (line 137) | public List<WareSku> getWareSkuList(){
    method getWareOrderTask (line 142) | public WareOrderTask getWareOrderTask(String taskId){
    method deliveryStock (line 160) | @Transactional
    method sendToOrder (line 185) | public void sendToOrder(WareOrderTask wareOrderTask) throws JMSException{
    method checkOrderSplit (line 201) | @Transactional(propagation = Propagation.REQUIRES_NEW)
    method saveWareOrderTask (line 264) | public WareOrderTask saveWareOrderTask(WareOrderTask wareOrderTask ){
    method updateStatusWareOrderTaskByOrderId (line 286) | public void updateStatusWareOrderTaskByOrderId(String orderId,TaskStat...
    method sendSkuDeductMQ (line 300) | public void sendSkuDeductMQ(WareOrderTask wareOrderTask) throws JMSExc...
    method lockStock (line 313) | @Transactional
    method getWareOrderTaskList (line 362) | public List<WareOrderTask> getWareOrderTaskList(WareOrderTask wareOrde...

FILE: gware-manage/src/main/java/com/xatu/gware/util/ActiveMQUtil.java
  class ActiveMQUtil (line 13) | public class ActiveMQUtil {
    method init (line 18) | public  void init(String brokerUrl){
    method getConnection (line 29) | public Connection getConnection(){

FILE: gware-manage/src/main/java/com/xatu/gware/util/HttpclientUtil.java
  class HttpclientUtil (line 23) | public class HttpclientUtil {
    method doGet (line 25) | public static String doGet(String url)   {
    method doPost (line 55) | public static String doPost(String url, Map<String,String> paramMap)   {

FILE: gware-manage/src/main/resources/static/easyui/datagrid-detailview.js
  function _insert (line 154) | function _insert(frozen){
  function setBodyTableWidth (line 275) | function setBodyTableWidth(){

FILE: gware-manage/src/main/resources/static/easyui/easyloader.js
  function _4 (line 14) | function _4(_5,_6){
  function _9 (line 31) | function _9(_a,_b){
  function _c (line 39) | function _c(_d,_e){
  function _10 (line 50) | function _10(_11,_12){
  function _17 (line 87) | function _17(_18,_19){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.accordion.js
  function _1 (line 11) | function _1(_2,_3){
  function _10 (line 65) | function _10(_11,_12,_13,all){
  function _15 (line 86) | function _15(_16){
  function _17 (line 89) | function _17(_18){
  function _19 (line 93) | function _19(_1a,_1b){
  function _1c (line 96) | function _1c(_1d,_1e){
  function _20 (line 107) | function _20(_21){
  function _23 (line 116) | function _23(_24){
  function _28 (line 134) | function _28(_29,pp,_2a){
  function _33 (line 206) | function _33(_35,_36){
  function _34 (line 215) | function _34(_39,_3a){
  function _3c (line 224) | function _3c(_3d){
  function _37 (line 240) | function _37(_42){
  function add (line 246) | function add(_44,_45){
  function _49 (line 263) | function _49(_4a,_4b){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.calendar.js
  function _1 (line 11) | function _1(_2,_3){
  function _6 (line 23) | function _6(_7){
  function _9 (line 32) | function _9(_a){
  function _5 (line 147) | function _5(_1a){
  function _20 (line 172) | function _20(_21,_22,_23){
  function _19 (line 231) | function _19(_2f){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.combo.js
  function _2 (line 21) | function _2(_3){
  function _c (line 58) | function _c(_d){
  function _10 (line 70) | function _10(_11){
  function _1 (line 85) | function _1(_15){
  function _16 (line 93) | function _16(e){
  function _1b (line 109) | function _1b(e){
  function _1f (line 153) | function _1f(_20){
  function _14 (line 196) | function _14(_29){
  function _2b (line 200) | function _2b(_2c,_2d){
  function _30 (line 208) | function _30(_31){
  function _36 (line 222) | function _36(_37,_38){
  function _42 (line 270) | function _42(_43){
  function _45 (line 274) | function _45(_46,_47){
  function _48 (line 277) | function _48(_49){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.combobox.js
  function _1 (line 11) | function _1(_2,_3){
  function _5 (line 15) | function _5(_6,_7){
  function _b (line 32) | function _b(_c,_d){
  function _13 (line 68) | function _13(_14,_15,_16){
  function _1a (line 80) | function _1a(_1b,_1c){
  function _19 (line 89) | function _19(_20,_21,_22){
  function _2a (line 156) | function _2a(_2b,_2c,_2d){
  function _30 (line 174) | function _30(_31,url,_32,_33){
  function _36 (line 189) | function _36(_37,q){
  function _41 (line 241) | function _41(_42){
  function _47 (line 271) | function _47(_48){
  function _4b (line 282) | function _4b(e){
  function _4d (line 290) | function _4d(e){
  function _4e (line 294) | function _4e(e){
  function _53 (line 325) | function _53(e){
  function _71 (line 469) | function _71(el,_72){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.combogrid.js
  function _1 (line 11) | function _1(_2){
  function nav (line 83) | function nav(_21,dir){
  function _20 (line 114) | function _20(_27,_28,_29){
  function _3b (line 172) | function _3b(_3c,q){
  function _46 (line 224) | function _46(_47){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.combotree.js
  function _1 (line 11) | function _1(_2){
  function _e (line 51) | function _e(_f){
  function _15 (line 69) | function _15(_16,_17,_18){
  function _29 (line 133) | function _29(_2a,q){
  function _2e (line 140) | function _2e(_2f){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.combotreegrid.js
  function _1 (line 11) | function _1(_2){
  function _11 (line 55) | function _11(_12){
  function _16 (line 73) | function _16(_17,_18){
  function _23 (line 138) | function _23(_24,q){
  function _2a (line 196) | function _2a(_2b){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.datagrid.js
  function _2 (line 12) | function _2(a,o){
  function _3 (line 15) | function _3(a,o,id){
  function _4 (line 18) | function _4(a,o,r){
  function _5 (line 21) | function _5(_6,aa){
  function _7 (line 24) | function _7(_8){
  function _1a (line 91) | function _1a(_1b,_1c){
  function _20 (line 105) | function _20(_21){
  function _34 (line 145) | function _34(_35,_36,_37){
  function _45 (line 206) | function _45(_46,_47){
  function _4d (line 222) | function _4d(_4e,_4f){
  function _58 (line 260) | function _58(_59){
  function _75 (line 433) | function _75(_76){
  function _82 (line 520) | function _82(_83){
  function _86 (line 533) | function _86(e){
  function _8d (line 558) | function _8d(e){
  function _93 (line 577) | function _93(e){
  function _96 (line 583) | function _96(_97){
  function _9e (line 602) | function _9e(e){
  function _a9 (line 666) | function _a9(e){
  function _ae (line 682) | function _ae(e){
  function _85 (line 699) | function _85(t){
  function _98 (line 702) | function _98(t,_b3){
  function _9b (line 710) | function _9b(tr){
  function _8c (line 717) | function _8c(_b4,_b5){
  function _c1 (line 777) | function _c1(_c2,_c3,_c4){
  function _cc (line 800) | function _cc(_cd){
  function _e0 (line 894) | function _e0(_e1,_e2){
  function _ef (line 953) | function _ef(_f0,_f1){
  function _f5 (line 978) | function _f5(_f8,tds){
  function _f6 (line 996) | function _f6(_fb){
  function _74 (line 1009) | function _74(_fe,_ff){
  function _c7 (line 1031) | function _c7(_101,_102){
  function _73 (line 1070) | function _73(_10b,_10c){
  function _c0 (line 1074) | function _c0(_10d,data){
  function _114 (line 1137) | function _114(_115){
  function _11c (line 1172) | function _11c(_11d,row){
  function _11f (line 1187) | function _11f(_120){
  function _122 (line 1201) | function _122(_123){
  function _125 (line 1214) | function _125(_126,_127){
  function _9c (line 1240) | function _9c(_12d,_12e){
  function _a5 (line 1247) | function _a5(_130,_131,_132,_133){
  function _a6 (line 1273) | function _a6(_136,_137,_138){
  function _13a (line 1293) | function _13a(_13b,_13c){
  function _135 (line 1309) | function _135(_140,_141){
  function _a2 (line 1325) | function _a2(_145,_146,_147){
  function _a3 (line 1354) | function _a3(_149,_14a,_14b){
  function _89 (line 1377) | function _89(_14e,_14f){
  function _8a (line 1395) | function _8a(_151,_152){
  function _154 (line 1413) | function _154(_155,_156){
  function _15a (line 1434) | function _15a(_15b,_15c,_15d){
  function _167 (line 1483) | function _167(_168,_169){
  function _16b (line 1496) | function _16b(_16c,_16d){
  function _157 (line 1505) | function _157(_16f,_170){
  function _166 (line 1536) | function _166(_177,_178){
  function _159 (line 1553) | function _159(_179,_17a){
  function _17c (line 1564) | function _17c(_17d,_17e){
  function _182 (line 1589) | function _182(_183,_184){
  function _188 (line 1610) | function _188(_189,_18a){
  function _18c (line 1618) | function _18c(_18d,row){
  function _18f (line 1626) | function _18f(_190,_191){
  function _195 (line 1647) | function _195(_196){
  function _199 (line 1660) | function _199(_19a){
  function _19b (line 1674) | function _19b(_19c){
  function _bf (line 1712) | function _bf(_1a9,_1aa,cb){
  function _1ad (line 1744) | function _1ad(_1ae,_1af){
  function _1b6 (line 1817) | function _1b6(_1b7){
  function _22e (line 2333) | function _22e(_230){
  function _231 (line 2337) | function _231(_232){
  function _239 (line 2365) | function _239(_23a){
  function _23d (line 2383) | function _23d(_23e){
  function _245 (line 2411) | function _245(_246){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.datalist.js
  function _1 (line 11) | function _1(_2){
  function _1c (line 69) | function _1c(_1e){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.datebox.js
  function _1 (line 11) | function _1(_2){
  function _16 (line 94) | function _16(_17,q){
  function _19 (line 97) | function _19(_1a){
  function _18 (line 106) | function _18(_1e,_1f,_20){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.datetimebox.js
  function _1 (line 11) | function _1(_2){
  function _8 (line 31) | function _8(_9){
  function _b (line 37) | function _b(_c,q){
  function _e (line 40) | function _e(_f){
  function _d (line 46) | function _d(_12,_13,_14){
  function _2f (line 153) | function _2f(_30){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.datetimespinner.js
  function _1 (line 11) | function _1(_2){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.dialog.js
  function _1 (line 11) | function _1(_2){
  function _b (line 72) | function _b(_c,_d){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.draggable.js
  function _1 (line 11) | function _1(e){
  function _8 (line 54) | function _8(e){
  function _c (line 64) | function _c(e){
  function _12 (line 102) | function _12(e){
  function _16 (line 133) | function _16(e){
  function _17 (line 203) | function _17(){
  function _26 (line 267) | function _26(e){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.droppable.js
  function _1 (line 11) | function _1(_2){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.filebox.js
  function _2 (line 12) | function _2(_3){
  function _7 (line 30) | function _7(_9){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.form.js
  function _1 (line 11) | function _1(_2,_3){
  function _8 (line 55) | function _8(_a,_b){
  function _9 (line 136) | function _9(_18,_19){
  function _20 (line 159) | function _20(_21,_22){
  function _32 (line 238) | function _32(_33){
  function _3a (line 283) | function _3a(_3b){
  function _40 (line 296) | function _40(_41){
  function _44 (line 323) | function _44(_45,_46){
  function _48 (line 332) | function _48(_49){
  function _43 (line 342) | function _43(_4b,_4c){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.layout.js
  function _2 (line 12) | function _2(_3,_4){
  function _12 (line 70) | function _12(_13){
  function _19 (line 95) | function _19(_1a,_1b,el){
  function _34 (line 213) | function _34(_35,_36){
  function _39 (line 226) | function _39(_3a,_3b,_3c){
  function _4f (line 352) | function _4f(_50,_51){
  function _a (line 391) | function _a(pp){
  function _58 (line 401) | function _58(_59){
  function _60 (line 420) | function _60(_61,_62,_63){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.linkbutton.js
  function _1 (line 11) | function _1(_2,_3){
  function _b (line 37) | function _b(_c){
  function _f (line 84) | function _f(_11,_12){
  function _10 (line 105) | function _10(_14,_15){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.menu.js
  function _2 (line 21) | function _2(_3){
  function _b (line 53) | function _b(_c,_d){
  function _f (line 70) | function _f(_12,div,_13){
  function _10 (line 102) | function _10(_17,_18){
  function _11 (line 148) | function _11(_20,_21){
  function _25 (line 156) | function _25(e){
  function _28 (line 164) | function _28(e){
  function _2c (line 173) | function _2c(e){
  function _30 (line 194) | function _30(e){
  function _33 (line 210) | function _33(e){
  function _2b (line 229) | function _2b(_38,_39){
  function _3b (line 243) | function _3b(_3c,_3d){
  function _1 (line 301) | function _1(_44){
  function _46 (line 319) | function _46(_47,_48){
  function _16 (line 339) | function _16(_4d,_4e,_4f){
  function _51 (line 353) | function _51(_52,_53){
  function _57 (line 368) | function _57(_58,_59){
  function _5c (line 384) | function _5c(_5d,_5e,_5f){
  function _61 (line 393) | function _61(_62){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.menubutton.js
  function _1 (line 11) | function _1(_2){
  function _f (line 43) | function _f(_10){
  function _14 (line 74) | function _14(_15){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.messager.js
  function _1 (line 11) | function _1(){
  function _7 (line 42) | function _7(){
  function _8 (line 45) | function _8(_9){
  function _d (line 86) | function _d(_e){
  function _6 (line 100) | function _6(dlg,_10){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.numberbox.js
  function _1 (line 11) | function _1(_2){
  function _7 (line 23) | function _7(_8,_9){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.numberspinner.js
  function _1 (line 11) | function _1(_2){
  function _4 (line 17) | function _4(_5,_6){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.pagination.js
  function _1 (line 11) | function _1(_2){
  function _10 (line 135) | function _10(_11,_12){
  function _14 (line 140) | function _14(_15,_16){
  function _1d (line 213) | function _1d(_1e,_1f){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.panel.js
  function _1 (line 21) | function _1(_2){
  function _3 (line 24) | function _3(_4,_5){
  function _15 (line 84) | function _15(_16,_17){
  function _1b (line 102) | function _1b(_1c){
  function _1f (line 114) | function _1f(_20){
  function _2f (line 228) | function _2f(_30,_31){
  function _37 (line 259) | function _37(_38){
  function _39 (line 278) | function _39(_3a){
  function _3b (line 281) | function _3b(_3c,_3d){
  function _44 (line 338) | function _44(_45,_46){
  function _4a (line 375) | function _4a(_4b,_4c){
  function _43 (line 388) | function _43(_50,_51){
  function _57 (line 424) | function _57(_58,_59){
  function _42 (line 462) | function _42(_5e){
  function _62 (line 481) | function _62(_63){
  function _66 (line 490) | function _66(_67){
  function _6b (line 506) | function _6b(_6c,_6d){
  function _7c (line 608) | function _7c(_7d,_7e){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.parser.js
  function _20 (line 238) | function _20(_23,_24,fit){
  function _22 (line 269) | function _22(_26,_27,_28,_29){
  function _21 (line 292) | function _21(_2b,_2c,_2d){
  function _32 (line 330) | function _32(e){
  function _34 (line 352) | function _34(e){
  function _35 (line 364) | function _35(e){
  function _33 (line 373) | function _33(e,_36,_37){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.passwordbox.js
  function _1 (line 11) | function _1(_2){
  function _7 (line 24) | function _7(_8,_9,_a){
  function _6 (line 55) | function _6(_e,_f){
  function _13 (line 65) | function _13(e){
  function _18 (line 91) | function _18(e){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.progressbar.js
  function _1 (line 11) | function _1(_2){
  function _4 (line 22) | function _4(_5,_6){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.propertygrid.js
  function _3 (line 20) | function _3(_4){
  function _2 (line 56) | function _2(_f){
  function _38 (line 198) | function _38(_3c){
  function _35 (line 207) | function _35(){
  function _56 (line 297) | function _56(_57,_58){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.resizable.js
  function _1 (line 11) | function _1(e){
  function _6 (line 37) | function _6(e){
  function _8 (line 48) | function _8(e){
  function _9 (line 53) | function _9(e){
  function _a (line 60) | function _a(e){
  function _b (line 69) | function _b(e){
  function _18 (line 136) | function _18(css){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.searchbox.js
  function _1 (line 11) | function _1(_2){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.slider.js
  function _1 (line 11) | function _1(_2){
  function _6 (line 28) | function _6(_7,_8){
  function _d (line 51) | function _d(_e){
  function _17 (line 81) | function _17(_18){
  function _24 (line 161) | function _24(_25,_26){
  function _c (line 211) | function _c(_32){
  function _30 (line 219) | function _30(_34,_35){
  function _22 (line 233) | function _22(_3a,pos){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.spinner.js
  function _1 (line 11) | function _1(_2){
  function _13 (line 91) | function _13(_14,_15){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.splitbutton.js
  function _1 (line 11) | function _1(_2){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.switchbutton.js
  function _1 (line 11) | function _1(_2){
  function _6 (line 28) | function _6(_7,_8){
  function _10 (line 56) | function _10(_11){
  function _f (line 78) | function _f(_18,_19,_1a){
  function _21 (line 96) | function _21(_22,_23){
  function _17 (line 111) | function _17(_28,_29){
  function _2c (line 117) | function _2c(_2d){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.tabs.js
  function _1 (line 11) | function _1(c){
  function _2 (line 18) | function _2(_3){
  function _d (line 55) | function _d(_e){
  function _13 (line 78) | function _13(_14,_15){
  function _21 (line 147) | function _21(_22){
  function _28 (line 157) | function _28(_29){
  function _2e (line 183) | function _2e(_2f){
  function _36 (line 234) | function _36(_37){
  function _3c (line 278) | function _3c(_3d,_3e,pp){
  function _4c (line 366) | function _4c(_4d,_4e){
  function _52 (line 378) | function _52(_53,_54){
  function _5b (line 455) | function _5b(_5c,_5d){
  function _63 (line 488) | function _63(_68,_69,_6a){
  function _4b (line 518) | function _4b(_6d,tab){
  function _24 (line 527) | function _24(_6f){
  function _71 (line 537) | function _71(_72){
  function _51 (line 549) | function _51(_76,_77){
  function _79 (line 558) | function _79(_7a,_7b){
  function _78 (line 565) | function _78(_7c){
  function _62 (line 570) | function _62(_7d,_7e){
  function _7f (line 573) | function _7f(_80,_81){
  function _83 (line 578) | function _83(_84,_85){
  function _9a (line 682) | function _9a(){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.tagbox.js
  function _1 (line 11) | function _1(_2){
  function _12 (line 56) | function _12(_13,_14){
  function _1c (line 70) | function _1c(_1d){
  function _23 (line 107) | function _23(_24){
  function _2c (line 126) | function _2c(_2d){
  function _33 (line 148) | function _33(_34,_35){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.textbox.js
  function _2 (line 12) | function _2(_3){
  function _6 (line 22) | function _6(_7){
  function _f (line 78) | function _f(_10){
  function _12 (line 86) | function _12(_13,_14){
  function _c (line 169) | function _c(_22){
  function _28 (line 200) | function _28(_29){
  function _d (line 273) | function _d(_36,_37){
  function _e (line 293) | function _e(_3b,_3c){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.timespinner.js
  function _1 (line 11) | function _1(_2){
  function _5 (line 17) | function _5(e){
  function _a (line 29) | function _a(_b,_c){
  function _f (line 41) | function _f(_10,_11){
  function _14 (line 47) | function _14(_15,_16){
  function _25 (line 121) | function _25(_26){
  function _29 (line 138) | function _29(s){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.tooltip.js
  function _1 (line 11) | function _1(_2){
  function _3 (line 14) | function _3(_4){
  function _6 (line 28) | function _6(_7){
  function _9 (line 39) | function _9(_a){
  function _15 (line 113) | function _15(_16,e){
  function _1c (line 135) | function _1c(_1d,e){
  function _19 (line 145) | function _19(_1f,_20){
  function _23 (line 158) | function _23(_24){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.tree.js
  function _1 (line 11) | function _1(_2){
  function _4 (line 16) | function _4(_5){
  function _d (line 84) | function _d(_e){
  function _11 (line 91) | function _11(_12){
  function _34 (line 237) | function _34(_35,_36,_37,_38){
  function _3c (line 287) | function _3c(_3f,_40,_41){
  function _3e (line 314) | function _3e(_47,_48,_49){
  function _3d (line 328) | function _3d(_4b,_4c){
  function _46 (line 335) | function _46(row){
  function _4f (line 366) | function _4f(_50,_51){
  function _56 (line 402) | function _56(_57,ul,_58,_59,_5a){
  function _61 (line 436) | function _61(_62,ul,_63){
  function _6f (line 482) | function _6f(_70,ul,_71,_72){
  function _79 (line 512) | function _79(_7a,_7b,_7c){
  function _80 (line 570) | function _80(_81,_82){
  function _85 (line 597) | function _85(_86,_87){
  function _88 (line 608) | function _88(_89,_8a){
  function _8d (line 617) | function _8d(_8e,_8f){
  function _91 (line 628) | function _91(_92,_93){
  function _96 (line 648) | function _96(_97,_98){
  function _9a (line 657) | function _9a(_9b,_9c){
  function _a1 (line 686) | function _a1(_a2,_a3){
  function _a7 (line 718) | function _a7(_a8,_a9){
  function _60 (line 745) | function _60(_ae,_af){
  function _b3 (line 759) | function _b3(_b4,_b5){
  function _b7 (line 772) | function _b7(_b8){
  function _8c (line 779) | function _8c(_bb,_bc){
  function _4d (line 788) | function _4d(_c0,_c1){
  function _c2 (line 792) | function _c2(_c3,_c4){
  function _c6 (line 805) | function _c6(_c7){
  function _c9 (line 809) | function _c9(_ca,_cb){
  function _c (line 818) | function _c(_ce,_cf){
  function _d0 (line 821) | function _d0(_d1,id){
  function _5f (line 824) | function _5f(_d2,_d3,_d4){
  function _ba (line 835) | function _ba(_d8){
  function _d9 (line 839) | function _d9(_da,_db){
  function _9f (line 849) | function _9f(_de,_df){
  function _e0 (line 852) | function _e0(_e1,_e2){
  function _e7 (line 887) | function _e7(_e8,_e9){
  function _ed (line 898) | function _ed(_ee,_ef){
  function _f2 (line 906) | function _f2(_f3,q){
  function _11b (line 1090) | function _11b(aa,tree){
  function _124 (line 1116) | function _124(_125,_126){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.treegrid.js
  function _1 (line 11) | function _1(_2){
  function _16 (line 57) | function _16(_17,_18){
  function _1f (line 79) | function _1f(_20){
  function _22 (line 89) | function _22(_23){
  function _24 (line 99) | function _24(e){
  function _27 (line 137) | function _27(t){
  function _29 (line 140) | function _29(_30,_31,_32,_33){
  function _3a (line 192) | function _3a(_3b,row,_3c){
  function _38 (line 214) | function _38(_40,row,_41){
  function _39 (line 221) | function _39(_43,row){
  function _47 (line 229) | function _47(row){
  function _49 (line 260) | function _49(_4a,_4b){
  function _4e (line 296) | function _4e(_4f,_50){
  function _56 (line 308) | function _56(_57,_58,_59,_5a,_5b){
  function _15 (line 361) | function _15(_63,_64,_65,_66,_67){
  function _6e (line 404) | function _6e(_6f){
  function _71 (line 408) | function _71(_72){
  function _46 (line 411) | function _46(_73,_74){
  function _1b (line 419) | function _1b(_75,_76){
  function _7b (line 431) | function _7b(_7c,_7d){
  function _37 (line 437) | function _37(_80,_81){
  function _86 (line 449) | function _86(_87,_88){
  function _8a (line 481) | function _8a(_8b,_8c){
  function _28 (line 532) | function _28(_91,_92){
  function _94 (line 542) | function _94(_95,_96){
  function _99 (line 552) | function _99(_9a,_9b){
  function _9e (line 562) | function _9e(_9f,_a0){
  function _a2 (line 575) | function _a2(_a3,_a4){
  function _a9 (line 595) | function _a9(_aa,_ab){
  function _b5 (line 628) | function _b5(_b6,_b7){
  function _bb (line 642) | function _bb(_bc){
  function _ee (line 937) | function _ee(_ef,_f0,_f1){
  function _10d (line 1111) | function _10d(_10e){
  function del (line 1147) | function del(id){
  function _118 (line 1182) | function _118(_119,_11a){
  function _11e (line 1213) | function _11e(rows){
  function _124 (line 1255) | function _124(_126,rows){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.validatebox.js
  function _1 (line 11) | function _1(_2){
  function _3 (line 14) | function _3(_4){
  function _6 (line 27) | function _6(_7){
  function _a (line 37) | function _a(e){
  function _f (line 69) | function _f(e){
  function _13 (line 89) | function _13(e){
  function _16 (line 94) | function _16(e){
  function _19 (line 101) | function _19(_1a,_1b,_1c){
  function _1f (line 113) | function _1f(_20){
  function _30 (line 187) | function _30(_31,_32){
  function _34 (line 198) | function _34(_35,_36){

FILE: gware-manage/src/main/resources/static/easyui/plugins/jquery.window.js
  function _1 (line 11) | function _1(_2,_3){
  function _5 (line 26) | function _5(_6,_7){
  function _b (line 40) | function _b(_c,_d){
  function _11 (line 54) | function _11(_12){
  function _19 (line 137) | function _19(_1a,top,_1b,_1c){
  function _21 (line 171) | function _21(_22){

FILE: gware-manage/src/test/java/com/xatu/gware/controller/GwareManageApplicationTests.java
  class GwareManageApplicationTests (line 8) | @RunWith(SpringRunner.class)
    method contextLoads (line 12) | @Test

FILE: seckill/src/main/java/com/xatu/gmall/SeckillApplication.java
  class SeckillApplication (line 6) | @SpringBootApplication
    method main (line 9) | public static void main(String[] args) {

FILE: seckill/src/main/java/com/xatu/gmall/controller/SeckillController.java
  class SeckillController (line 19) | @Controller
    method kill (line 26) | @RequestMapping("/kill")
    method kill2 (line 53) | @RequestMapping("/kill2")

FILE: seckill/src/test/java/com/xatu/gmall/SeckillApplicationTests.java
  class SeckillApplicationTests (line 6) | @SpringBootTest
    method contextLoads (line 9) | @Test
Condensed preview — 765 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,181K chars).
[
  {
    "path": ".gitattributes",
    "chars": 87,
    "preview": "*.js linguist-language=java\n*.css linguist-language=java\n*.html linguist-language=java\n"
  },
  {
    "path": "README.md",
    "chars": 3427,
    "preview": "# GMall\n\n#### 仿天猫、京东类似的B2C电商项目:\n     基于springboot、dubbo、zookeeper的微服务\n\n- gmall-user-service用户服务的service层8070\n* gmall-use"
  },
  {
    "path": "gmall-admin/gmall-admin/.babelrc",
    "chars": 229,
    "preview": "{\n  \"presets\": [\n    [\"env\", {\n      \"modules\": false,\n      \"targets\": {\n        \"browsers\": [\"> 1%\", \"last 2 versions\""
  },
  {
    "path": "gmall-admin/gmall-admin/.editorconfig",
    "chars": 243,
    "preview": "# http://editorconfig.org\nroot = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\nend_of_line = lf\ninsert_"
  },
  {
    "path": "gmall-admin/gmall-admin/.eslintignore",
    "chars": 34,
    "preview": "build/*.js\nconfig/*.js\nsrc/assets\n"
  },
  {
    "path": "gmall-admin/gmall-admin/.eslintrc.js",
    "chars": 4957,
    "preview": "module.exports = {\n  root: true,\n  parserOptions: {\n    parser: 'babel-eslint',\n    sourceType: 'module'\n  },\n  env: {\n "
  },
  {
    "path": "gmall-admin/gmall-admin/.gitignore",
    "chars": 171,
    "preview": ".DS_Store\nnode_modules/\ndist/\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npackage-lock.json\n\n# Editor directories and"
  },
  {
    "path": "gmall-admin/gmall-admin/.postcssrc.js",
    "chars": 246,
    "preview": "// https://github.com/michael-ciniawsky/postcss-load-config\n\nmodule.exports = {\n  \"plugins\": {\n    \"postcss-import\": {},"
  },
  {
    "path": "gmall-admin/gmall-admin/.travis.yml",
    "chars": 85,
    "preview": "language: node_js\nnode_js: stable\nscript: npm run test\nnotifications:\n  email: false\n"
  },
  {
    "path": "gmall-admin/gmall-admin/LICENSE",
    "chars": 1075,
    "preview": "MIT License\n\nCopyright (c) 2017-present PanJiaChen\n\nPermission is hereby granted, free of charge, to any person obtainin"
  },
  {
    "path": "gmall-admin/gmall-admin/README-zh.md",
    "chars": 3926,
    "preview": "# vue-admin-template\n\n> 这是一个 极简的 vue admin 管理后台 它只包含了 Element UI & axios & iconfont & permission control & lint,这些搭建后台必要"
  },
  {
    "path": "gmall-admin/gmall-admin/README.md",
    "chars": 3761,
    "preview": "# vue-admin-template\n\n> A minimal vue admin template with Element UI & axios & iconfont & permission control & lint\n\n**L"
  },
  {
    "path": "gmall-admin/gmall-admin/build/build.js",
    "chars": 1139,
    "preview": "'use strict'\nrequire('./check-versions')()\n\nprocess.env.NODE_ENV = 'production'\n\nconst ora = require('ora')\nconst rm = r"
  },
  {
    "path": "gmall-admin/gmall-admin/build/check-versions.js",
    "chars": 1364,
    "preview": "'use strict'\nconst chalk = require('chalk')\nconst semver = require('semver')\nconst packageConfig = require('../package.j"
  },
  {
    "path": "gmall-admin/gmall-admin/build/utils.js",
    "chars": 2588,
    "preview": "'use strict'\nconst path = require('path')\nconst config = require('../config')\nconst MiniCssExtractPlugin = require('mini"
  },
  {
    "path": "gmall-admin/gmall-admin/build/vue-loader.conf.js",
    "chars": 93,
    "preview": "'use strict'\n\nmodule.exports = {\n  //You can set the vue-loader configuration by yourself.\n}\n"
  },
  {
    "path": "gmall-admin/gmall-admin/build/webpack.base.conf.js",
    "chars": 2705,
    "preview": "'use strict'\nconst path = require('path')\nconst utils = require('./utils')\nconst config = require('../config')\nconst { V"
  },
  {
    "path": "gmall-admin/gmall-admin/build/webpack.dev.conf.js",
    "chars": 2708,
    "preview": "'use strict'\nconst path = require('path')\nconst utils = require('./utils')\nconst webpack = require('webpack')\nconst conf"
  },
  {
    "path": "gmall-admin/gmall-admin/build/webpack.prod.conf.js",
    "chars": 5446,
    "preview": "'use strict'\nconst path = require('path')\nconst utils = require('./utils')\nconst webpack = require('webpack')\nconst conf"
  },
  {
    "path": "gmall-admin/gmall-admin/config/dev.env.js",
    "chars": 204,
    "preview": "'use strict'\nconst merge = require('webpack-merge')\nconst prodEnv = require('./prod.env')\n// 后端接口地址\nmodule.exports = mer"
  },
  {
    "path": "gmall-admin/gmall-admin/config/dev.env.js.bak",
    "chars": 207,
    "preview": "'use strict'\nconst merge = require('webpack-merge')\nconst prodEnv = require('./prod.env')\n// 后端接口地址\nmodule.exports = mer"
  },
  {
    "path": "gmall-admin/gmall-admin/config/index.js",
    "chars": 2882,
    "preview": "'use strict'\n// Template version: 1.2.6\n// see http://vuejs-templates.github.io/webpack for documentation.\n\nconst path ="
  },
  {
    "path": "gmall-admin/gmall-admin/config/index.js.bak",
    "chars": 2885,
    "preview": "'use strict'\n// Template version: 1.2.6\n// see http://vuejs-templates.github.io/webpack for documentation.\n\nconst path ="
  },
  {
    "path": "gmall-admin/gmall-admin/config/prod.env.js",
    "chars": 141,
    "preview": "'use strict'\nmodule.exports = {\n  NODE_ENV: '\"production\"',\n  BASE_API: '\"https://easy-mock.com/mock/5950a2419adc231f356"
  },
  {
    "path": "gmall-admin/gmall-admin/index.html",
    "chars": 272,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width,initial"
  },
  {
    "path": "gmall-admin/gmall-admin/package.json",
    "chars": 2470,
    "preview": "{\n  \"name\": \"gmall-admin\",\n  \"version\": \"1.0.0\",\n  \"license\": \"MIT\",\n  \"description\": \"谷粒商城后台管理系统\",\n  \"author\": \"atguigu"
  },
  {
    "path": "gmall-admin/gmall-admin/src/App.vue",
    "chars": 121,
    "preview": "<template>\n  <div id=\"app\">\n    <router-view/>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: 'App'\n}\n</script>"
  },
  {
    "path": "gmall-admin/gmall-admin/src/api/baseinfo/prop.js",
    "chars": 910,
    "preview": "import request from '@/utils/request'\n\nexport default {\n\n  // 查找一级分类\n  getCatalog1() {\n    return request({\n      url: '"
  },
  {
    "path": "gmall-admin/gmall-admin/src/api/components/CatalogSelector.js",
    "chars": 461,
    "preview": "import request from '@/utils/request'\n\nexport default {\n\n  // 查找一级分类\n  getCatalog1() {\n    return request({\n      url: '"
  },
  {
    "path": "gmall-admin/gmall-admin/src/api/login.js",
    "chars": 424,
    "preview": "import request from '@/utils/request'\n\nexport function login(username, password) {\n  return request({\n    url: '/user/lo"
  },
  {
    "path": "gmall-admin/gmall-admin/src/api/product/sku.js",
    "chars": 195,
    "preview": "import request from '@/utils/request'\n\nexport default {\n\n  // 保存Sku\n  saveSkuInfo(skuForm) {\n    return request({\n      "
  },
  {
    "path": "gmall-admin/gmall-admin/src/api/product/spu.js",
    "chars": 763,
    "preview": "import request from '@/utils/request'\n\nexport default {\n\n  // 根据三级分类id获取属性列表\n  getSpuList(catalog3Id) {\n    return reque"
  },
  {
    "path": "gmall-admin/gmall-admin/src/api/table.js",
    "chars": 153,
    "preview": "import request from '@/utils/request'\n\nexport function getList(params) {\n  return request({\n    url: '/table/list',\n    "
  },
  {
    "path": "gmall-admin/gmall-admin/src/components/Breadcrumb/index.vue",
    "chars": 1797,
    "preview": "<template>\n  <el-breadcrumb class=\"app-breadcrumb\" separator=\"/\">\n    <transition-group name=\"breadcrumb\">\n      <el-bre"
  },
  {
    "path": "gmall-admin/gmall-admin/src/components/Hamburger/index.vue",
    "chars": 1819,
    "preview": "<template>\n  <div>\n    <svg\n      :class=\"{'is-active':isActive}\"\n      t=\"1492500959545\"\n      class=\"hamburger\"\n      "
  },
  {
    "path": "gmall-admin/gmall-admin/src/components/SvgIcon/index.vue",
    "chars": 673,
    "preview": "<template>\n  <svg :class=\"svgClass\" aria-hidden=\"true\">\n    <use :xlink:href=\"iconName\"/>\n  </svg>\n</template>\n\n<script>"
  },
  {
    "path": "gmall-admin/gmall-admin/src/icons/index.js",
    "chars": 281,
    "preview": "import Vue from 'vue'\nimport SvgIcon from '@/components/SvgIcon' // svg组件\n\n// register globally\nVue.component('svg-icon'"
  },
  {
    "path": "gmall-admin/gmall-admin/src/icons/svgo.yml",
    "chars": 248,
    "preview": "# replace default config\n\n# multipass: true\n# full: true\n\nplugins:\n\n  # - name\n  #\n  # or:\n  # - name: false\n  # - name:"
  },
  {
    "path": "gmall-admin/gmall-admin/src/main.js",
    "chars": 579,
    "preview": "import Vue from 'vue'\n\nimport 'normalize.css/normalize.css' // A modern alternative to CSS resets\n\nimport ElementUI from"
  },
  {
    "path": "gmall-admin/gmall-admin/src/permission.js",
    "chars": 1155,
    "preview": "import router from './router'\nimport store from './store'\nimport NProgress from 'nprogress' // Progress 进度条\nimport 'npro"
  },
  {
    "path": "gmall-admin/gmall-admin/src/router/index.js",
    "chars": 2539,
    "preview": "import Vue from 'vue'\nimport Router from 'vue-router'\n\n// in development-env not use lazy-loading, because lazy-loading "
  },
  {
    "path": "gmall-admin/gmall-admin/src/store/getters.js",
    "chars": 262,
    "preview": "const getters = {\n  sidebar: state => state.app.sidebar,\n  device: state => state.app.device,\n  token: state => state.us"
  },
  {
    "path": "gmall-admin/gmall-admin/src/store/index.js",
    "chars": 262,
    "preview": "import Vue from 'vue'\nimport Vuex from 'vuex'\nimport app from './modules/app'\nimport user from './modules/user'\nimport g"
  },
  {
    "path": "gmall-admin/gmall-admin/src/store/modules/app.js",
    "chars": 1039,
    "preview": "import Cookies from 'js-cookie'\n\nconst app = {\n  state: {\n    sidebar: {\n      opened: !+Cookies.get('sidebarStatus'),\n "
  },
  {
    "path": "gmall-admin/gmall-admin/src/store/modules/user.js",
    "chars": 2738,
    "preview": "// import { login, logout, getInfo } from '@/api/login'\nimport { getToken, setToken, removeToken } from '@/utils/auth'\n\n"
  },
  {
    "path": "gmall-admin/gmall-admin/src/styles/element-ui.scss",
    "chars": 447,
    "preview": " //to reset element-ui default css\n.el-upload {\n  input[type=\"file\"] {\n    display: none !important;\n  }\n}\n\n.el-upload__"
  },
  {
    "path": "gmall-admin/gmall-admin/src/styles/index.scss",
    "chars": 1040,
    "preview": "@import './variables.scss';\n@import './mixin.scss';\n@import './transition.scss';\n@import './element-ui.scss';\n@import '."
  },
  {
    "path": "gmall-admin/gmall-admin/src/styles/mixin.scss",
    "chars": 383,
    "preview": "@mixin clearfix {\n  &:after {\n    content: \"\";\n    display: table;\n    clear: both;\n  }\n}\n\n@mixin scrollBar {\n  &::-webk"
  },
  {
    "path": "gmall-admin/gmall-admin/src/styles/sidebar.scss",
    "chars": 2701,
    "preview": "#app {\n  // 主体区域\n  .main-container {\n    min-height: 100%;\n    transition: margin-left .28s;\n    margin-left: 180px;\n   "
  },
  {
    "path": "gmall-admin/gmall-admin/src/styles/transition.scss",
    "chars": 687,
    "preview": "//globl transition css\n\n/*fade*/\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 0.28s;\n}\n\n.fade-enter,\n."
  },
  {
    "path": "gmall-admin/gmall-admin/src/styles/variables.scss",
    "chars": 67,
    "preview": "//sidebar\n$menuBg:#304156;\n$subMenuBg:#1f2d3d;\n$menuHover:#001528;\n"
  },
  {
    "path": "gmall-admin/gmall-admin/src/utils/auth.js",
    "chars": 271,
    "preview": "import Cookies from 'js-cookie'\n\nconst TokenKey = 'Admin-Token'\n\nexport function getToken() {\n  return Cookies.get(Token"
  },
  {
    "path": "gmall-admin/gmall-admin/src/utils/index.js",
    "chars": 1629,
    "preview": "/**\n * Created by jiachenpan on 16/11/18.\n */\n\nexport function parseTime(time, cFormat) {\n  if (arguments.length === 0) "
  },
  {
    "path": "gmall-admin/gmall-admin/src/utils/request.js",
    "chars": 175,
    "preview": "import axios from 'axios'\n\n// 创建axios实例\nconst service = axios.create({\n  baseURL: process.env.BASE_API, // api 的 base_ur"
  },
  {
    "path": "gmall-admin/gmall-admin/src/utils/validate.js",
    "chars": 902,
    "preview": "/**\n * Created by jiachenpan on 16/11/18.\n */\n\nexport function isvalidUsername(str) {\n  const valid_map = ['admin', 'edi"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/404.vue",
    "chars": 5109,
    "preview": "<template>\n  <div class=\"wscn-http404-container\">\n    <div class=\"wscn-http404\">\n      <div class=\"pic-404\">\n        <im"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/baseinfo/prop/list.vue",
    "chars": 6579,
    "preview": "<template>\n  <div class=\"app-container\">\n\n    <!--三级下拉列表-->\n    <CatalogSelector @listenOnSelect=\"getAttrInfoList\" />\n\n "
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/components/CatalogSelector.vue",
    "chars": 2152,
    "preview": "<template>\n  <!--查询表单-->\n  <el-form :inline=\"true\" class=\"demo-form-inline\">\n\n    <!-- 一级分类 -->\n    <el-form-item label="
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/dashboard/index.vue",
    "chars": 558,
    "preview": "<template>\n  <div class=\"dashboard-container\">\n    <div class=\"dashboard-text\">欢迎:{{ name }}</div>\n    <div class=\"dashb"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/form/index.vue",
    "chars": 2454,
    "preview": "<template>\n  <div class=\"app-container\">\n    <el-form ref=\"form\" :model=\"form\" label-width=\"120px\">\n      <el-form-item "
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/layout/Layout.vue",
    "chars": 1454,
    "preview": "<template>\n  <div :class=\"classObj\" class=\"app-wrapper\">\n    <div v-if=\"device==='mobile'&&sidebar.opened\" class=\"drawer"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/layout/components/AppMain.vue",
    "chars": 584,
    "preview": "<template>\n  <section class=\"app-main\">\n    <transition name=\"fade-transform\" mode=\"out-in\">\n      <!-- or name=\"fade\" -"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/layout/components/Navbar.vue",
    "chars": 2147,
    "preview": "<template>\n  <el-menu class=\"navbar\" mode=\"horizontal\">\n    <hamburger :toggle-click=\"toggleSideBar\" :is-active=\"sidebar"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/layout/components/Sidebar/Item.vue",
    "chars": 468,
    "preview": "<script>\nexport default {\n  name: 'MenuItem',\n  functional: true,\n  props: {\n    icon: {\n      type: String,\n      defau"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/layout/components/Sidebar/Link.vue",
    "chars": 639,
    "preview": "\n<template>\n  <!-- eslint-disable vue/require-component-is-->\n  <component v-bind=\"linkProps(to)\">\n    <slot/>\n  </compo"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/layout/components/Sidebar/SidebarItem.vue",
    "chars": 2826,
    "preview": "<template>\n  <div v-if=\"!item.hidden&&item.children\" class=\"menu-wrapper\">\n\n    <template v-if=\"hasOneShowingChild(item."
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/layout/components/Sidebar/index.vue",
    "chars": 761,
    "preview": "<template>\n  <el-scrollbar wrap-class=\"scrollbar-wrapper\">\n    <el-menu\n      :show-timeout=\"200\"\n      :default-active="
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/layout/components/index.js",
    "chars": 139,
    "preview": "export { default as Navbar } from './Navbar'\nexport { default as Sidebar } from './Sidebar'\nexport { default as AppMain "
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/layout/mixin/ResizeHandler.js",
    "chars": 976,
    "preview": "import store from '@/store'\n\nconst { body } = document\nconst WIDTH = 1024\nconst RATIO = 3\n\nexport default {\n  watch: {\n "
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/login/index.vue",
    "chars": 4541,
    "preview": "<template>\n  <div class=\"login-container\">\n    <el-form ref=\"loginForm\" :model=\"loginForm\" :rules=\"loginRules\" class=\"lo"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/nested/menu1/index.vue",
    "chars": 149,
    "preview": "<template >\n  <div style=\"padding:30px;\">\n    <el-alert :closable=\"false\" title=\"menu 1\">\n      <router-view />\n    </el"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/nested/menu1/menu1-1/index.vue",
    "chars": 166,
    "preview": "<template >\n  <div style=\"padding:30px;\">\n    <el-alert :closable=\"false\" title=\"menu 1-1\" type=\"success\">\n      <router"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/nested/menu1/menu1-2/index.vue",
    "chars": 165,
    "preview": "<template>\n  <div style=\"padding:30px;\">\n    <el-alert :closable=\"false\" title=\"menu 1-2\" type=\"success\">\n      <router-"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue",
    "chars": 142,
    "preview": "<template functional>\n  <div style=\"padding:30px;\">\n    <el-alert :closable=\"false\" title=\"menu 1-2-1\" type=\"warning\" />"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue",
    "chars": 142,
    "preview": "<template functional>\n  <div style=\"padding:30px;\">\n    <el-alert :closable=\"false\" title=\"menu 1-2-2\" type=\"warning\" />"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/nested/menu1/menu1-3/index.vue",
    "chars": 140,
    "preview": "<template functional>\n  <div style=\"padding:30px;\">\n    <el-alert :closable=\"false\" title=\"menu 1-3\" type=\"success\" />\n "
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/nested/menu2/index.vue",
    "chars": 112,
    "preview": "<template>\n  <div style=\"padding:30px;\">\n    <el-alert :closable=\"false\" title=\"menu 2\" />\n  </div>\n</template>\n"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/product/components/SkuForm.vue",
    "chars": 7529,
    "preview": "<template>\n  <div>\n\n    <!--基本表单-->\n    <el-form :model=\"skuForm\" label-width=\"150px\">\n\n      <el-form-item label=\"spu名称"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/product/components/SpuForm.vue",
    "chars": 8296,
    "preview": "<template>\n  <!--表单-->\n  <el-form :model=\"spuForm\" label-width=\"70px\">\n\n    <el-form-item label=\"spu名称\">\n      <el-input"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/product/components/SpuForm.vue.bak",
    "chars": 8284,
    "preview": "<template>\n  <!--表单-->\n  <el-form :model=\"spuForm\" label-width=\"70px\">\n\n    <el-form-item label=\"spu名称\">\n      <el-input"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/product/spu/list.vue",
    "chars": 4019,
    "preview": "<template>\n  <div class=\"app-container\">\n\n    <!--三级下拉列表-->\n    <CatalogSelector v-show=\"!showSkuForm\" @listenOnSelect=\""
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/product/spu/list.vue.bak",
    "chars": 3991,
    "preview": "<template>\n  <div class=\"app-container\">\n\n    <!--三级下拉列表-->\n    <CatalogSelector v-show=\"!showSkuForm\" @listenOnSelect=\""
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/table/index.vue",
    "chars": 2055,
    "preview": "<template>\n  <div class=\"app-container\">\n    <el-table\n      v-loading=\"listLoading\"\n      :data=\"list\"\n      element-lo"
  },
  {
    "path": "gmall-admin/gmall-admin/src/views/tree/index.vue",
    "chars": 1449,
    "preview": "<template>\n  <div class=\"app-container\">\n    <el-input v-model=\"filterText\" placeholder=\"Filter keyword\" style=\"margin-b"
  },
  {
    "path": "gmall-admin/gmall-admin/static/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "gmall-api/pom.xml",
    "chars": 844,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/Member.java",
    "chars": 6468,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.an"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/MemberReceiveAddress.java",
    "chars": 2687,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.an"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/OmsCartItem.java",
    "chars": 6986,
    "preview": "package com.xatu.gmall.entity;\n\nimport java.math.BigDecimal;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimp"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/OmsCompanyAddress.java",
    "chars": 2757,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.an"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/OmsOrder.java",
    "chars": 11693,
    "preview": "package com.xatu.gmall.entity;\n\nimport java.math.BigDecimal;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimp"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/OmsOrderItem.java",
    "chars": 6026,
    "preview": "package com.xatu.gmall.entity;\n\nimport java.math.BigDecimal;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimpor"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PaymentInfo.java",
    "chars": 3140,
    "preview": "package com.xatu.gmall.entity;\n\nimport java.math.BigDecimal;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimpor"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PmsBaseAttrInfo.java",
    "chars": 2148,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.a"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PmsBaseAttrValue.java",
    "chars": 1748,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.an"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PmsBaseCatalog1.java",
    "chars": 1727,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.a"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PmsBaseCatalog2.java",
    "chars": 1931,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.a"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PmsBaseCatalog3.java",
    "chars": 736,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.an"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PmsBaseSaleAttr.java",
    "chars": 677,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.an"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PmsProductImage.java",
    "chars": 1720,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.an"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PmsProductInfo.java",
    "chars": 2709,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.a"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PmsProductSaleAttr.java",
    "chars": 2246,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.a"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PmsProductSaleAttrValue.java",
    "chars": 2190,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.a"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PmsSearchCrumb.java",
    "chars": 627,
    "preview": "package com.xatu.gmall.entity;\n\n/**\n * 面包屑\n */\npublic class PmsSearchCrumb {\n    private String valueId;\n    private Str"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PmsSearchParam.java",
    "chars": 752,
    "preview": "package com.xatu.gmall.entity;\n\nimport org.apache.catalina.LifecycleState;\n\nimport java.io.Serializable;\nimport java.uti"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PmsSearchSkuInfo.java",
    "chars": 1926,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableId;\n\nimport java.io.Serializable;\nimport"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PmsSkuAttrValue.java",
    "chars": 1414,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.an"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PmsSkuImage.java",
    "chars": 1929,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.a"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PmsSkuInfo.java",
    "chars": 4255,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.a"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/PmsSkuSaleAttrValue.java",
    "chars": 2036,
    "preview": "package com.xatu.gmall.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.an"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/entity/UmsMemberLevel.java",
    "chars": 1379,
    "preview": "package com.xatu.gmall.entity;\n\nimport java.math.BigDecimal;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimpor"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/service/AttrService.java",
    "chars": 1049,
    "preview": "package com.xatu.gmall.service;\n\nimport com.xatu.gmall.entity.PmsBaseAttrInfo;\nimport com.baomidou.mybatisplus.extension"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/service/CartService.java",
    "chars": 980,
    "preview": "package com.xatu.gmall.service;\n\nimport com.xatu.gmall.entity.OmsCartItem;\nimport com.baomidou.mybatisplus.extension.ser"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/service/CataLogService.java",
    "chars": 700,
    "preview": "package com.xatu.gmall.service;\n\nimport com.xatu.gmall.entity.PmsBaseCatalog1;\nimport com.baomidou.mybatisplus.extension"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/service/MemberReceiveAddressService.java",
    "chars": 364,
    "preview": "package com.xatu.gmall.service;\n\nimport com.xatu.gmall.entity.MemberReceiveAddress;\nimport com.baomidou.mybatisplus.exte"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/service/OrderItemService.java",
    "chars": 71,
    "preview": "package com.xatu.gmall.service;\n\npublic interface OrderItemService {\n}\n"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/service/OrderService.java",
    "chars": 447,
    "preview": "package com.xatu.gmall.service;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com.xatu.gmall.entit"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/service/PaymentService.java",
    "chars": 544,
    "preview": "package com.xatu.gmall.service;\n\nimport com.xatu.gmall.entity.PaymentInfo;\nimport com.baomidou.mybatisplus.extension.ser"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/service/SearchService.java",
    "chars": 250,
    "preview": "package com.xatu.gmall.service;\n\nimport com.xatu.gmall.entity.PmsSearchParam;\nimport com.xatu.gmall.entity.PmsSearchSkuI"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/service/SkuService.java",
    "chars": 959,
    "preview": "package com.xatu.gmall.service;\n\nimport com.xatu.gmall.entity.PmsSkuAttrValue;\nimport com.baomidou.mybatisplus.extension"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/service/SpuService.java",
    "chars": 1040,
    "preview": "package com.xatu.gmall.service;\n\nimport com.xatu.gmall.entity.PmsProductImage;\nimport com.xatu.gmall.entity.PmsProductIn"
  },
  {
    "path": "gmall-api/src/main/java/com/xatu/gmall/service/UserService.java",
    "chars": 775,
    "preview": "package com.xatu.gmall.service;\n\nimport com.xatu.gmall.entity.Member;\nimport com.baomidou.mybatisplus.extension.service."
  },
  {
    "path": "gmall-cart-service/pom.xml",
    "chars": 1400,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "gmall-cart-service/src/main/java/com/xatu/gmall/GmallCartServiceApplication.java",
    "chars": 339,
    "preview": "package com.xatu.gmall;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigur"
  },
  {
    "path": "gmall-cart-service/src/main/java/com/xatu/gmall/mapper/CartMapper.java",
    "chars": 509,
    "preview": "package com.xatu.gmall.mapper;\n\nimport com.xatu.gmall.entity.OmsCartItem;\nimport com.baomidou.mybatisplus.core.mapper.Ba"
  },
  {
    "path": "gmall-cart-service/src/main/java/com/xatu/gmall/service/impl/CartServiceImpl.java",
    "chars": 3371,
    "preview": "package com.xatu.gmall.service.impl;\n\nimport com.alibaba.dubbo.config.annotation.Service;\nimport com.alibaba.fastjson.JS"
  },
  {
    "path": "gmall-cart-service/src/main/resources/application.properties",
    "chars": 975,
    "preview": "\nserver.port=8074\n\n# jdbc\nspring.datasource.username=root\nspring.datasource.password=123456\nspring.datasource.url=jdbc:m"
  },
  {
    "path": "gmall-cart-service/src/main/resources/log4j.properties",
    "chars": 959,
    "preview": "\n# Set root category priority to INFO and its only appender to CONSOLE.\n#log4j.rootCategory=INFO, CONSOLE            deb"
  },
  {
    "path": "gmall-cart-service/src/main/resources/mapper/CartMapper.xml",
    "chars": 395,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
  },
  {
    "path": "gmall-cart-service/src/test/java/com/xatu/gmall/GmallCartServiceApplicationTests.java",
    "chars": 213,
    "preview": "package com.xatu.gmall;\n\nimport org.junit.Test;\nimport org.springframework.boot.test.context.SpringBootTest;\n\n@SpringBoo"
  },
  {
    "path": "gmall-cart-web/pom.xml",
    "chars": 1387,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "gmall-cart-web/src/main/java/com/xatu/gmall/GmallCartWebApplication.java",
    "chars": 456,
    "preview": "package com.xatu.gmall;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigur"
  },
  {
    "path": "gmall-cart-web/src/main/java/com/xatu/gmall/controller/CartController.java",
    "chars": 7701,
    "preview": "package com.xatu.gmall.controller;\n\n\nimport com.alibaba.dubbo.config.annotation.Reference;\nimport com.alibaba.fastjson.J"
  },
  {
    "path": "gmall-cart-web/src/main/resources/application.properties",
    "chars": 487,
    "preview": "\nserver.port=8084\n\n# ־\nlogging.level.root=info\n\n# dubbo\n# dubboеķ\nspring.dubbo.application=cart-web\n# dubboͨѶЭ\nspring.du"
  },
  {
    "path": "gmall-cart-web/src/main/resources/log4j.properties",
    "chars": 959,
    "preview": "\n# Set root category priority to INFO and its only appender to CONSOLE.\n#log4j.rootCategory=INFO, CONSOLE            deb"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/bootstrap/css/bootstrap.css",
    "chars": 147430,
    "preview": "/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://gi"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/bootstrap/js/bootstrap.js",
    "chars": 69707,
    "preview": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under the MIT license"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/One_bdyStyle.css",
    "chars": 18513,
    "preview": "*{\n  margin:0;\n  padding:0;\n  font-size:12px;\n  box-sizing: border-box;\n}\nbody{\n   user-select: none;\n}\nul,li{\n  list-st"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/One_mainFoot.css",
    "chars": 5140,
    "preview": "* {\n\tmargin: 0;\n\tpadding: 0;\n\tbox-sizing: border-box;\n\tfont-size: 12px;\n}\n\nul,\nli {\n\tlist-style: none;\n}\n\n.one_main {\n\tw"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/HELP-US-OUT.txt",
    "chars": 323,
    "preview": "I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project,\nFort Awes"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/css/font-awesome.css",
    "chars": 37414,
    "preview": "/*!\n *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/lice"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/less/animated.less",
    "chars": 713,
    "preview": "// Animated Icons\n// --------------------------\n\n.@{fa-css-prefix}-spin {\n  -webkit-animation: fa-spin 2s infinite linea"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/less/bordered-pulled.less",
    "chars": 585,
    "preview": "// Bordered & Pulled\n// -------------------------\n\n.@{fa-css-prefix}-border {\n  padding: .2em .25em .15em;\n  border: sol"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/less/core.less",
    "chars": 452,
    "preview": "// Base Class Definition\n// -------------------------\n\n.@{fa-css-prefix} {\n  display: inline-block;\n  font: normal norma"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/less/fixed-width.less",
    "chars": 119,
    "preview": "// Fixed Width Icons\n// -------------------------\n.@{fa-css-prefix}-fw {\n  width: (18em / 14);\n  text-align: center;\n}\n"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/less/font-awesome.less",
    "chars": 495,
    "preview": "/*!\n *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/lice"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/less/icons.less",
    "chars": 49712,
    "preview": "/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters th"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/less/larger.less",
    "chars": 370,
    "preview": "// Icon Sizes\n// -------------------------\n\n/* makes the font 33% larger relative to the icon container */\n.@{fa-css-pre"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/less/list.less",
    "chars": 377,
    "preview": "// List Icons\n// -------------------------\n\n.@{fa-css-prefix}-ul {\n  padding-left: 0;\n  margin-left: @fa-li-width;\n  lis"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/less/mixins.less",
    "chars": 1603,
    "preview": "// Mixins\n// --------------------------\n\n.fa-icon() {\n  display: inline-block;\n  font: normal normal normal @fa-font-siz"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/less/path.less",
    "chars": 771,
    "preview": "/* FONT PATH\n * -------------------------- */\n\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('@{fa-font-path}/fo"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/less/rotated-flipped.less",
    "chars": 622,
    "preview": "// Rotated & Flipped Icons\n// -------------------------\n\n.@{fa-css-prefix}-rotate-90  { .fa-icon-rotate(90deg, 1);  }\n.@"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/less/screen-reader.less",
    "chars": 118,
    "preview": "// Screen Readers\n// -------------------------\n\n.sr-only { .sr-only(); }\n.sr-only-focusable { .sr-only-focusable(); }\n"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/less/stacked.less",
    "chars": 476,
    "preview": "// Stacked Icons\n// -------------------------\n\n.@{fa-css-prefix}-stack {\n  position: relative;\n  display: inline-block;\n"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/less/variables.less",
    "chars": 22563,
    "preview": "// Variables\n// --------------------------\n\n@fa-font-path:        \"../fonts\";\n@fa-font-size-base:   14px;\n@fa-line-heigh"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/scss/_animated.scss",
    "chars": 715,
    "preview": "// Spinning Icons\n// --------------------------\n\n.#{$fa-css-prefix}-spin {\n  -webkit-animation: fa-spin 2s infinite line"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/scss/_bordered-pulled.scss",
    "chars": 592,
    "preview": "// Bordered & Pulled\n// -------------------------\n\n.#{$fa-css-prefix}-border {\n  padding: .2em .25em .15em;\n  border: so"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/scss/_core.scss",
    "chars": 459,
    "preview": "// Base Class Definition\n// -------------------------\n\n.#{$fa-css-prefix} {\n  display: inline-block;\n  font: normal norm"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/scss/_fixed-width.scss",
    "chars": 120,
    "preview": "// Fixed Width Icons\n// -------------------------\n.#{$fa-css-prefix}-fw {\n  width: (18em / 14);\n  text-align: center;\n}\n"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/scss/_icons.scss",
    "chars": 50498,
    "preview": "/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters th"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/scss/_larger.scss",
    "chars": 375,
    "preview": "// Icon Sizes\n// -------------------------\n\n/* makes the font 33% larger relative to the icon container */\n.#{$fa-css-pr"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/scss/_list.scss",
    "chars": 378,
    "preview": "// List Icons\n// -------------------------\n\n.#{$fa-css-prefix}-ul {\n  padding-left: 0;\n  margin-left: $fa-li-width;\n  li"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/scss/_mixins.scss",
    "chars": 1637,
    "preview": "// Mixins\n// --------------------------\n\n@mixin fa-icon() {\n  display: inline-block;\n  font: normal normal normal #{$fa-"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/scss/_path.scss",
    "chars": 783,
    "preview": "/* FONT PATH\n * -------------------------- */\n\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('#{$fa-font-path}/f"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/scss/_rotated-flipped.scss",
    "chars": 672,
    "preview": "// Rotated & Flipped Icons\n// -------------------------\n\n.#{$fa-css-prefix}-rotate-90  { @include fa-icon-rotate(90deg, "
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/scss/_screen-reader.scss",
    "chars": 134,
    "preview": "// Screen Readers\n// -------------------------\n\n.sr-only { @include sr-only(); }\n.sr-only-focusable { @include sr-only-f"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/scss/_stacked.scss",
    "chars": 482,
    "preview": "// Stacked Icons\n// -------------------------\n\n.#{$fa-css-prefix}-stack {\n  position: relative;\n  display: inline-block;"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/scss/_variables.scss",
    "chars": 22644,
    "preview": "// Variables\n// --------------------------\n\n$fa-font-path:        \"../fonts\" !default;\n$fa-font-size-base:   14px !defau"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/font-awesome-4.7.0/scss/font-awesome.scss",
    "chars": 430,
    "preview": "/*!\n *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/lice"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/index.css",
    "chars": 3683,
    "preview": "*{\n\tmargin: 0;\n\tpadding: 0;\n\tbox-sizing: border-box;\n}\nul{\n\tlist-style: none;\n\n}\n.header-left>li:first-child img{\n\tmargi"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/css/success.css",
    "chars": 63712,
    "preview": "* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n  text-decoration: none; }\n\nol,\nul {\n  list-style: none; }\n\na {"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/js/index.js",
    "chars": 724,
    "preview": "$('.header-right li:nth-of-type(6)').hover(function(){\n\t$('.header-r-11').css('display','block')\t\n},function(){\n\t$('.hea"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/js/success.js",
    "chars": 3423,
    "preview": "//下拉菜单\n$(function(){\n\t$(\".hd_wrap_left>.dorpdown\").mouseover(function(){\n\t\t$(this).children(\".dd\").show();\n\t\t$(this).css"
  },
  {
    "path": "gmall-cart-web/src/main/resources/static/success.html",
    "chars": 3058,
    "preview": "<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <meta charset"
  },
  {
    "path": "gmall-cart-web/src/main/resources/templates/One_JDshop.html",
    "chars": 49853,
    "preview": "<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<meta charset=\"UTF-8\">\n\t\t<title>我的购物车-京东商城</title>\n\t\t<link rel=\"icon\" href=\"img/心04.png"
  },
  {
    "path": "gmall-cart-web/src/main/resources/templates/cartList.html",
    "chars": 22173,
    "preview": "<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <meta charset"
  },
  {
    "path": "gmall-cart-web/src/main/resources/templates/cartListInner.html",
    "chars": 2404,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Title<"
  },
  {
    "path": "gmall-cart-web/src/main/resources/templates/success.html",
    "chars": 3058,
    "preview": "<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n    <meta charset"
  },
  {
    "path": "gmall-cart-web/src/test/java/com/xatu/gmall/GmallCartWebApplicationTests.java",
    "chars": 210,
    "preview": "package com.xatu.gmall;\n\n\nimport org.junit.Test;\nimport org.springframework.boot.test.context.SpringBootTest;\n\n@SpringBo"
  },
  {
    "path": "gmall-common-util/pom.xml",
    "chars": 3553,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www"
  },
  {
    "path": "gmall-common-util/src/main/java/com/xatu/gmall/util/HttpclientUtil.java",
    "chars": 2773,
    "preview": "package com.xatu.gmall.util;\n\nimport org.apache.http.HttpEntity;\nimport org.apache.http.HttpStatus;\nimport org.apache.ht"
  },
  {
    "path": "gmall-item-web/pom.xml",
    "chars": 1386,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "gmall-item-web/src/main/java/com/xatu/gmall/GmallItemWebApplication.java",
    "chars": 456,
    "preview": "package com.xatu.gmall;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigur"
  },
  {
    "path": "gmall-item-web/src/main/java/com/xatu/gmall/controller/ItemController.java",
    "chars": 2163,
    "preview": "package com.xatu.gmall.controller;\n\nimport com.alibaba.dubbo.config.annotation.Reference;\nimport com.alibaba.fastjson.JS"
  },
  {
    "path": "gmall-item-web/src/main/resources/application.properties",
    "chars": 488,
    "preview": "\n\n\nserver.port=8082\n\n# ־\nlogging.level.root=info\n\n# dubbo\n# dubboеķ\nspring.dubbo.application=item-web\n# dubboͨѶЭ\nspring."
  },
  {
    "path": "gmall-item-web/src/main/resources/log4j.properties",
    "chars": 959,
    "preview": "\n# Set root category priority to INFO and its only appender to CONSOLE.\n#log4j.rootCategory=INFO, CONSOLE            deb"
  },
  {
    "path": "gmall-item-web/src/main/resources/static/bootstrap/css/bootstrap.css",
    "chars": 145894,
    "preview": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://gi"
  },
  {
    "path": "gmall-item-web/src/main/resources/static/bootstrap/js/bootstrap.js",
    "chars": 69707,
    "preview": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under the MIT license"
  },
  {
    "path": "gmall-item-web/src/main/resources/static/js/index.js",
    "chars": 649,
    "preview": "$(\".header_ul_left>.glyphicon-map-marker\").mouseover(function(){\n\t$(this).children(\"#beijing\").show();\n}).mouseout(funct"
  },
  {
    "path": "gmall-item-web/src/main/resources/static/js/jquery1.9.js",
    "chars": 92630,
    "preview": "/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license\n//@ sourceMappingURL=jquery.min.map\n*/(f"
  },
  {
    "path": "gmall-item-web/src/main/resources/static/js/js.js",
    "chars": 7273,
    "preview": "$(function(){\n        //1.楼梯什么时候显示,800px scroll--->scrollTop\n        $(window).on('scroll',function(){\n            var $"
  },
  {
    "path": "gmall-item-web/src/main/resources/static/js/spuId_66.js",
    "chars": 54,
    "preview": "[{\"240|245|\":\"108\",\"239|243|\":\"106\",\"239|244|\":\"107\"}]"
  },
  {
    "path": "gmall-item-web/src/main/resources/static/scss/SHOUhou.css",
    "chars": 5874,
    "preview": "* {\n  margin: 0;\n  padding: 0;\n  list-style: none; }\n\nhtml {\n  width: 990px; }\n\n.oBox {\n  width: 990px; }\n  .oBox .shuoH"
  },
  {
    "path": "gmall-item-web/src/main/resources/static/scss/header.css",
    "chars": 41048,
    "preview": "* {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  text-decoration: none; }\n\na {\n  text-decoration: none; }\n\n#max {\n  "
  },
  {
    "path": "gmall-item-web/src/main/resources/static/scss/main.css",
    "chars": 4394,
    "preview": "* {\n  margin: 0;\n  padding: 0;\n  text-decoration: none; }\n\nul li {\n  list-style: none; }\n\n.header {\n  z-index: 10; }\n\n.h"
  },
  {
    "path": "gmall-item-web/src/main/resources/static/scss/shop.css",
    "chars": 32032,
    "preview": "* {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  text-decoration: none; }\n\na {\n  text-decoration: none;\n  color: #66"
  },
  {
    "path": "gmall-item-web/src/main/resources/templates/item.html",
    "chars": 29676,
    "preview": "<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:th=\"http://www.thymeleaf.org\">\n\n\t<head>\n\t\t<meta charset"
  },
  {
    "path": "gmall-item-web/src/test/java/com/xatu/gmall/GmallItemWebApplicationTests.java",
    "chars": 212,
    "preview": "package com.xatu.gmall;\n\n\nimport org.junit.Test;\nimport org.springframework.boot.test.context.SpringBootTest;\n\n@SpringBo"
  },
  {
    "path": "gmall-manage-service/pom.xml",
    "chars": 1553,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "gmall-manage-service/src/main/java/com/xatu/gmall/GmallManageServiceApplication.java",
    "chars": 446,
    "preview": "package com.xatu.gmall;\n\nimport org.mybatis.spring.annotation.MapperScan;\nimport org.springframework.boot.SpringApplicat"
  }
]

// ... and 565 more files (download for full content)

About this extraction

This page contains the full source code of the 18391713434/GMall GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 765 files (4.6 MB), approximately 1.2M tokens, and a symbol index with 1828 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.

Copied to clipboard!