gitextract_gl0yirf4/ ├── .gitbook.yaml ├── .github/ │ └── workflows/ │ └── main.yml ├── .gitignore ├── .workflow/ │ ├── BranchPipeline.yml │ ├── MasterPipeline.yml │ └── PRPipeline.yml ├── CHANGELOG.md ├── CONTRIBUTE.md ├── LICENSE ├── README.md ├── SECURITY.md ├── deploy/ │ ├── .gitignore │ ├── README.md │ ├── bin/ │ │ ├── deploy.sh │ │ ├── reset.sh │ │ └── stop.sh │ ├── db/ │ │ └── .gitkeep │ ├── litemall/ │ │ └── application.yml │ └── util/ │ ├── lazy.sh │ └── package.sh ├── doc/ │ ├── FAQ.md │ ├── README.md │ ├── admin.md │ ├── api.md │ ├── conf/ │ │ └── nginx.conf │ ├── database.md │ ├── how to implement best admin.md │ ├── mobmall.md │ ├── note.md │ ├── performance.md │ ├── platform.md │ ├── project.md │ └── wxmall.md ├── docker/ │ ├── .gitignore │ ├── README.md │ ├── bin/ │ │ ├── deploy.sh │ │ └── reset.sh │ ├── db/ │ │ ├── conf.d/ │ │ │ └── my.cnf │ │ ├── data/ │ │ │ └── .gitkeep │ │ └── init-sql/ │ │ └── .gitkeep │ ├── docker-compose.yml │ ├── litemall/ │ │ ├── .gitkeep │ │ ├── Dockerfile │ │ └── application.yml │ └── util/ │ ├── lazy.sh │ └── package.sh ├── litemall-admin/ │ ├── .editorconfig │ ├── .eslintignore │ ├── .eslintrc.js │ ├── .gitignore │ ├── babel.config.js │ ├── build/ │ │ └── index.js │ ├── jest.config.js │ ├── jsconfig.json │ ├── package.json │ ├── postcss.config.js │ ├── public/ │ │ ├── index.html │ │ └── tinymce4.7.5/ │ │ ├── langs/ │ │ │ └── zh_CN.js │ │ └── plugins/ │ │ ├── codesample/ │ │ │ └── css/ │ │ │ └── prism.css │ │ └── visualblocks/ │ │ └── css/ │ │ └── visualblocks.css │ ├── src/ │ │ ├── App.vue │ │ ├── api/ │ │ │ ├── ad.js │ │ │ ├── admin.js │ │ │ ├── aftersale.js │ │ │ ├── brand.js │ │ │ ├── category.js │ │ │ ├── comment.js │ │ │ ├── config.js │ │ │ ├── coupon.js │ │ │ ├── dashboard.js │ │ │ ├── goods.js │ │ │ ├── groupon.js │ │ │ ├── issue.js │ │ │ ├── keyword.js │ │ │ ├── log.js │ │ │ ├── login.js │ │ │ ├── notice.js │ │ │ ├── order.js │ │ │ ├── profile.js │ │ │ ├── region.js │ │ │ ├── role.js │ │ │ ├── stat.js │ │ │ ├── storage.js │ │ │ ├── topic.js │ │ │ └── user.js │ │ ├── components/ │ │ │ ├── BackToTop/ │ │ │ │ └── index.vue │ │ │ ├── Breadcrumb/ │ │ │ │ └── index.vue │ │ │ ├── Hamburger/ │ │ │ │ └── index.vue │ │ │ ├── LocaleChanger/ │ │ │ │ └── index.vue │ │ │ ├── Notice/ │ │ │ │ └── index.vue │ │ │ ├── Pagination/ │ │ │ │ └── index.vue │ │ │ ├── Screenfull/ │ │ │ │ └── index.vue │ │ │ ├── ScrollPane/ │ │ │ │ └── index.vue │ │ │ ├── SizeSelect/ │ │ │ │ └── index.vue │ │ │ └── SvgIcon/ │ │ │ └── index.vue │ │ ├── directive/ │ │ │ ├── clipboard/ │ │ │ │ ├── clipboard.js │ │ │ │ └── index.js │ │ │ └── permission/ │ │ │ ├── index.js │ │ │ └── permission.js │ │ ├── filters/ │ │ │ └── index.js │ │ ├── icons/ │ │ │ ├── index.js │ │ │ └── svgo.yml │ │ ├── locales/ │ │ │ ├── en.js │ │ │ └── zh-Hans.js │ │ ├── main.js │ │ ├── permission.js │ │ ├── router/ │ │ │ └── index.js │ │ ├── store/ │ │ │ ├── getters.js │ │ │ ├── index.js │ │ │ └── modules/ │ │ │ ├── app.js │ │ │ ├── permission.js │ │ │ ├── tagsView.js │ │ │ └── user.js │ │ ├── styles/ │ │ │ ├── btn.scss │ │ │ ├── element-ui.scss │ │ │ ├── element-variables.scss │ │ │ ├── index.scss │ │ │ ├── mixin.scss │ │ │ ├── sidebar.scss │ │ │ ├── transition.scss │ │ │ └── variables.scss │ │ ├── utils/ │ │ │ ├── auth.js │ │ │ ├── clipboard.js │ │ │ ├── index.js │ │ │ ├── openWindow.js │ │ │ ├── permission.js │ │ │ ├── print.js │ │ │ ├── request.js │ │ │ ├── scrollTo.js │ │ │ └── validate.js │ │ ├── vendor/ │ │ │ └── Export2Excel.js │ │ └── views/ │ │ ├── config/ │ │ │ ├── express.vue │ │ │ ├── mall.vue │ │ │ ├── order.vue │ │ │ └── wx.vue │ │ ├── dashboard/ │ │ │ └── index.vue │ │ ├── errorPage/ │ │ │ ├── 401.vue │ │ │ └── 404.vue │ │ ├── goods/ │ │ │ ├── comment.vue │ │ │ ├── create.vue │ │ │ ├── edit.vue │ │ │ └── list.vue │ │ ├── layout/ │ │ │ ├── Layout.vue │ │ │ ├── components/ │ │ │ │ ├── AppMain.vue │ │ │ │ ├── Navbar.vue │ │ │ │ ├── Sidebar/ │ │ │ │ │ ├── FixiOSBug.js │ │ │ │ │ ├── Item.vue │ │ │ │ │ ├── Link.vue │ │ │ │ │ ├── SidebarItem.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── TagsView/ │ │ │ │ │ ├── ScrollPane.vue │ │ │ │ │ └── index.vue │ │ │ │ └── index.js │ │ │ └── mixin/ │ │ │ └── ResizeHandler.js │ │ ├── login/ │ │ │ ├── authredirect.vue │ │ │ └── index.vue │ │ ├── mall/ │ │ │ ├── aftersale.vue │ │ │ ├── brand.vue │ │ │ ├── category.vue │ │ │ ├── issue.vue │ │ │ ├── keyword.vue │ │ │ ├── order.vue │ │ │ └── region.vue │ │ ├── profile/ │ │ │ ├── notice.vue │ │ │ └── password.vue │ │ ├── promotion/ │ │ │ ├── ad.vue │ │ │ ├── coupon.vue │ │ │ ├── couponDetail.vue │ │ │ ├── grouponActivity.vue │ │ │ ├── grouponRule.vue │ │ │ ├── topic.vue │ │ │ ├── topicCreate.vue │ │ │ └── topicEdit.vue │ │ ├── redirect/ │ │ │ └── index.vue │ │ ├── stat/ │ │ │ ├── goods.vue │ │ │ ├── order.vue │ │ │ └── user.vue │ │ ├── sys/ │ │ │ ├── admin.vue │ │ │ ├── log.vue │ │ │ ├── notice.vue │ │ │ ├── os.vue │ │ │ └── role.vue │ │ └── user/ │ │ ├── address.vue │ │ ├── collect.vue │ │ ├── feedback.vue │ │ ├── footprint.vue │ │ ├── history.vue │ │ └── user.vue │ └── vue.config.js ├── litemall-admin-api/ │ ├── .gitignore │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── linlinjava/ │ │ │ └── litemall/ │ │ │ └── admin/ │ │ │ ├── Application.java │ │ │ ├── annotation/ │ │ │ │ └── RequiresPermissionsDesc.java │ │ │ ├── config/ │ │ │ │ ├── AdminSwagger2Configuration.java │ │ │ │ ├── KaptchaConfig.java │ │ │ │ ├── ShiroConfig.java │ │ │ │ └── ShiroExceptionHandler.java │ │ │ ├── dto/ │ │ │ │ └── GoodsAllinone.java │ │ │ ├── job/ │ │ │ │ ├── CouponJob.java │ │ │ │ ├── DbJob.java │ │ │ │ └── OrderJob.java │ │ │ ├── service/ │ │ │ │ ├── AdminGoodsService.java │ │ │ │ ├── AdminOrderService.java │ │ │ │ └── LogHelper.java │ │ │ ├── shiro/ │ │ │ │ ├── AdminAuthorizingRealm.java │ │ │ │ └── AdminWebSessionManager.java │ │ │ ├── task/ │ │ │ │ ├── AdminTaskStartupRunner.java │ │ │ │ └── GrouponRuleExpiredTask.java │ │ │ ├── util/ │ │ │ │ ├── AdminResponseCode.java │ │ │ │ ├── Permission.java │ │ │ │ └── PermissionUtil.java │ │ │ ├── vo/ │ │ │ │ ├── CatVo.java │ │ │ │ ├── CategoryVo.java │ │ │ │ ├── PermVo.java │ │ │ │ ├── RegionVo.java │ │ │ │ └── StatVo.java │ │ │ └── web/ │ │ │ ├── AdminAdController.java │ │ │ ├── AdminAddressController.java │ │ │ ├── AdminAdminController.java │ │ │ ├── AdminAftersaleController.java │ │ │ ├── AdminAuthController.java │ │ │ ├── AdminBrandController.java │ │ │ ├── AdminCategoryController.java │ │ │ ├── AdminCollectController.java │ │ │ ├── AdminCommentController.java │ │ │ ├── AdminConfigController.java │ │ │ ├── AdminCouponController.java │ │ │ ├── AdminDashbordController.java │ │ │ ├── AdminFeedbackController.java │ │ │ ├── AdminFootprintController.java │ │ │ ├── AdminGoodsController.java │ │ │ ├── AdminGrouponController.java │ │ │ ├── AdminHistoryController.java │ │ │ ├── AdminIndexController.java │ │ │ ├── AdminIssueController.java │ │ │ ├── AdminKeywordController.java │ │ │ ├── AdminLogController.java │ │ │ ├── AdminNoticeController.java │ │ │ ├── AdminOrderController.java │ │ │ ├── AdminProfileController.java │ │ │ ├── AdminRegionController.java │ │ │ ├── AdminRoleController.java │ │ │ ├── AdminStatController.java │ │ │ ├── AdminStorageController.java │ │ │ ├── AdminTopicController.java │ │ │ └── AdminUserController.java │ │ └── resources/ │ │ ├── application-admin.yml │ │ └── application.yml │ └── test/ │ └── java/ │ └── org/ │ └── linlinjava/ │ └── litemall/ │ └── admin/ │ ├── AdminConfigTest.java │ ├── BcryptTest.java │ ├── CreateShareImageTest.java │ ├── DbTest.java │ └── PermissionTest.java ├── litemall-all/ │ ├── .gitignore │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── linlinjava/ │ │ │ └── litemall/ │ │ │ └── Application.java │ │ └── resources/ │ │ ├── application.yml │ │ └── logback-spring.xml │ └── test/ │ └── java/ │ └── org/ │ └── linlinjava/ │ └── litemall/ │ └── allinone/ │ └── AllinoneConfigTest.java ├── litemall-all-war/ │ ├── .gitignore │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── linlinjava/ │ │ └── litemall/ │ │ └── Application.java │ └── resources/ │ ├── application.yml │ └── logback-spring.xml ├── litemall-core/ │ ├── .gitignore │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── linlinjava/ │ │ │ └── litemall/ │ │ │ └── core/ │ │ │ ├── config/ │ │ │ │ ├── AsyncConfig.java │ │ │ │ ├── CorsConfig.java │ │ │ │ ├── GlobalExceptionHandler.java │ │ │ │ ├── JacksonConfig.java │ │ │ │ ├── ValidatorConfiguration.java │ │ │ │ ├── WxConfig.java │ │ │ │ └── WxProperties.java │ │ │ ├── express/ │ │ │ │ ├── ExpressService.java │ │ │ │ ├── config/ │ │ │ │ │ ├── ExpressAutoConfiguration.java │ │ │ │ │ └── ExpressProperties.java │ │ │ │ └── dao/ │ │ │ │ ├── ExpressInfo.java │ │ │ │ └── Traces.java │ │ │ ├── notify/ │ │ │ │ ├── AliyunSmsSender.java │ │ │ │ ├── NotifyService.java │ │ │ │ ├── NotifyType.java │ │ │ │ ├── SmsResult.java │ │ │ │ ├── SmsSender.java │ │ │ │ ├── TencentSmsSender.java │ │ │ │ └── config/ │ │ │ │ ├── NotifyAutoConfiguration.java │ │ │ │ └── NotifyProperties.java │ │ │ ├── qcode/ │ │ │ │ └── QCodeService.java │ │ │ ├── storage/ │ │ │ │ ├── AliyunStorage.java │ │ │ │ ├── LocalStorage.java │ │ │ │ ├── QiniuStorage.java │ │ │ │ ├── Storage.java │ │ │ │ ├── StorageService.java │ │ │ │ ├── TencentStorage.java │ │ │ │ └── config/ │ │ │ │ ├── StorageAutoConfiguration.java │ │ │ │ └── StorageProperties.java │ │ │ ├── system/ │ │ │ │ ├── SystemConfig.java │ │ │ │ └── SystemInistService.java │ │ │ ├── task/ │ │ │ │ ├── Task.java │ │ │ │ └── TaskService.java │ │ │ ├── util/ │ │ │ │ ├── BeanUtil.java │ │ │ │ ├── CharUtil.java │ │ │ │ ├── DateTimeUtil.java │ │ │ │ ├── HttpUtil.java │ │ │ │ ├── IpUtil.java │ │ │ │ ├── JacksonUtil.java │ │ │ │ ├── RegexUtil.java │ │ │ │ ├── ResponseUtil.java │ │ │ │ ├── SystemInfoPrinter.java │ │ │ │ └── bcrypt/ │ │ │ │ ├── BCrypt.java │ │ │ │ └── BCryptPasswordEncoder.java │ │ │ └── validator/ │ │ │ ├── Order.java │ │ │ ├── OrderValidator.java │ │ │ ├── Sort.java │ │ │ └── SortValidator.java │ │ └── resources/ │ │ ├── application-core.yml │ │ └── application.yml │ └── test/ │ └── java/ │ └── org/ │ └── linlinjava/ │ └── litemall/ │ └── core/ │ ├── AliyunStorageTest.java │ ├── Application.java │ ├── AsyncTask.java │ ├── AsyncTest.java │ ├── CoreConfigTest.java │ ├── ExpressTest.java │ ├── IntegerTest.java │ ├── LocalStorageTest.java │ ├── MailTest.java │ ├── QiniuStorageTest.java │ ├── SmsTest.java │ ├── TaskTest.java │ ├── TencentStorageTest.java │ └── util/ │ └── bcrypt/ │ └── BCryptTest.java ├── litemall-db/ │ ├── .gitignore │ ├── mybatis-generator/ │ │ └── generatorConfig.xml │ ├── pom.xml │ ├── sql/ │ │ ├── README.md │ │ ├── litemall_data.sql │ │ ├── litemall_schema.sql │ │ └── litemall_table.sql │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── linlinjava/ │ │ │ └── litemall/ │ │ │ └── db/ │ │ │ ├── dao/ │ │ │ │ ├── GoodsProductMapper.java │ │ │ │ ├── LitemallAdMapper.java │ │ │ │ ├── LitemallAddressMapper.java │ │ │ │ ├── LitemallAdminMapper.java │ │ │ │ ├── LitemallAftersaleMapper.java │ │ │ │ ├── LitemallBrandMapper.java │ │ │ │ ├── LitemallCartMapper.java │ │ │ │ ├── LitemallCategoryMapper.java │ │ │ │ ├── LitemallCollectMapper.java │ │ │ │ ├── LitemallCommentMapper.java │ │ │ │ ├── LitemallCouponMapper.java │ │ │ │ ├── LitemallCouponUserMapper.java │ │ │ │ ├── LitemallFeedbackMapper.java │ │ │ │ ├── LitemallFootprintMapper.java │ │ │ │ ├── LitemallGoodsAttributeMapper.java │ │ │ │ ├── LitemallGoodsMapper.java │ │ │ │ ├── LitemallGoodsProductMapper.java │ │ │ │ ├── LitemallGoodsSpecificationMapper.java │ │ │ │ ├── LitemallGrouponMapper.java │ │ │ │ ├── LitemallGrouponRulesMapper.java │ │ │ │ ├── LitemallIssueMapper.java │ │ │ │ ├── LitemallKeywordMapper.java │ │ │ │ ├── LitemallLogMapper.java │ │ │ │ ├── LitemallNoticeAdminMapper.java │ │ │ │ ├── LitemallNoticeMapper.java │ │ │ │ ├── LitemallOrderGoodsMapper.java │ │ │ │ ├── LitemallOrderMapper.java │ │ │ │ ├── LitemallPermissionMapper.java │ │ │ │ ├── LitemallRegionMapper.java │ │ │ │ ├── LitemallRoleMapper.java │ │ │ │ ├── LitemallSearchHistoryMapper.java │ │ │ │ ├── LitemallStorageMapper.java │ │ │ │ ├── LitemallSystemMapper.java │ │ │ │ ├── LitemallTopicMapper.java │ │ │ │ ├── LitemallUserMapper.java │ │ │ │ ├── OrderMapper.java │ │ │ │ └── StatMapper.java │ │ │ ├── domain/ │ │ │ │ ├── LitemallAd.java │ │ │ │ ├── LitemallAdExample.java │ │ │ │ ├── LitemallAddress.java │ │ │ │ ├── LitemallAddressExample.java │ │ │ │ ├── LitemallAdmin.java │ │ │ │ ├── LitemallAdminExample.java │ │ │ │ ├── LitemallAftersale.java │ │ │ │ ├── LitemallAftersaleExample.java │ │ │ │ ├── LitemallBrand.java │ │ │ │ ├── LitemallBrandExample.java │ │ │ │ ├── LitemallCart.java │ │ │ │ ├── LitemallCartExample.java │ │ │ │ ├── LitemallCategory.java │ │ │ │ ├── LitemallCategoryExample.java │ │ │ │ ├── LitemallCollect.java │ │ │ │ ├── LitemallCollectExample.java │ │ │ │ ├── LitemallComment.java │ │ │ │ ├── LitemallCommentExample.java │ │ │ │ ├── LitemallCoupon.java │ │ │ │ ├── LitemallCouponExample.java │ │ │ │ ├── LitemallCouponUser.java │ │ │ │ ├── LitemallCouponUserExample.java │ │ │ │ ├── LitemallFeedback.java │ │ │ │ ├── LitemallFeedbackExample.java │ │ │ │ ├── LitemallFootprint.java │ │ │ │ ├── LitemallFootprintExample.java │ │ │ │ ├── LitemallGoods.java │ │ │ │ ├── LitemallGoodsAttribute.java │ │ │ │ ├── LitemallGoodsAttributeExample.java │ │ │ │ ├── LitemallGoodsExample.java │ │ │ │ ├── LitemallGoodsProduct.java │ │ │ │ ├── LitemallGoodsProductExample.java │ │ │ │ ├── LitemallGoodsSpecification.java │ │ │ │ ├── LitemallGoodsSpecificationExample.java │ │ │ │ ├── LitemallGroupon.java │ │ │ │ ├── LitemallGrouponExample.java │ │ │ │ ├── LitemallGrouponRules.java │ │ │ │ ├── LitemallGrouponRulesExample.java │ │ │ │ ├── LitemallIssue.java │ │ │ │ ├── LitemallIssueExample.java │ │ │ │ ├── LitemallKeyword.java │ │ │ │ ├── LitemallKeywordExample.java │ │ │ │ ├── LitemallLog.java │ │ │ │ ├── LitemallLogExample.java │ │ │ │ ├── LitemallNotice.java │ │ │ │ ├── LitemallNoticeAdmin.java │ │ │ │ ├── LitemallNoticeAdminExample.java │ │ │ │ ├── LitemallNoticeExample.java │ │ │ │ ├── LitemallOrder.java │ │ │ │ ├── LitemallOrderExample.java │ │ │ │ ├── LitemallOrderGoods.java │ │ │ │ ├── LitemallOrderGoodsExample.java │ │ │ │ ├── LitemallPermission.java │ │ │ │ ├── LitemallPermissionExample.java │ │ │ │ ├── LitemallRegion.java │ │ │ │ ├── LitemallRegionExample.java │ │ │ │ ├── LitemallRole.java │ │ │ │ ├── LitemallRoleExample.java │ │ │ │ ├── LitemallSearchHistory.java │ │ │ │ ├── LitemallSearchHistoryExample.java │ │ │ │ ├── LitemallStorage.java │ │ │ │ ├── LitemallStorageExample.java │ │ │ │ ├── LitemallSystem.java │ │ │ │ ├── LitemallSystemExample.java │ │ │ │ ├── LitemallTopic.java │ │ │ │ ├── LitemallTopicExample.java │ │ │ │ ├── LitemallUser.java │ │ │ │ ├── LitemallUserExample.java │ │ │ │ ├── OrderGoodsVo.java │ │ │ │ ├── OrderVo.java │ │ │ │ └── UserVo.java │ │ │ ├── mybatis/ │ │ │ │ ├── JsonIntegerArrayTypeHandler.java │ │ │ │ ├── JsonNodeTypeHandler.java │ │ │ │ └── JsonStringArrayTypeHandler.java │ │ │ ├── service/ │ │ │ │ ├── CouponAssignService.java │ │ │ │ ├── CouponVerifyService.java │ │ │ │ ├── LitemallAdService.java │ │ │ │ ├── LitemallAddressService.java │ │ │ │ ├── LitemallAdminService.java │ │ │ │ ├── LitemallAftersaleService.java │ │ │ │ ├── LitemallBrandService.java │ │ │ │ ├── LitemallCartService.java │ │ │ │ ├── LitemallCategoryService.java │ │ │ │ ├── LitemallCollectService.java │ │ │ │ ├── LitemallCommentService.java │ │ │ │ ├── LitemallCouponService.java │ │ │ │ ├── LitemallCouponUserService.java │ │ │ │ ├── LitemallFeedbackService.java │ │ │ │ ├── LitemallFootprintService.java │ │ │ │ ├── LitemallGoodsAttributeService.java │ │ │ │ ├── LitemallGoodsProductService.java │ │ │ │ ├── LitemallGoodsService.java │ │ │ │ ├── LitemallGoodsSpecificationService.java │ │ │ │ ├── LitemallGrouponRulesService.java │ │ │ │ ├── LitemallGrouponService.java │ │ │ │ ├── LitemallIssueService.java │ │ │ │ ├── LitemallKeywordService.java │ │ │ │ ├── LitemallLogService.java │ │ │ │ ├── LitemallNoticeAdminService.java │ │ │ │ ├── LitemallNoticeService.java │ │ │ │ ├── LitemallOrderGoodsService.java │ │ │ │ ├── LitemallOrderService.java │ │ │ │ ├── LitemallPermissionService.java │ │ │ │ ├── LitemallRegionService.java │ │ │ │ ├── LitemallRoleService.java │ │ │ │ ├── LitemallSearchHistoryService.java │ │ │ │ ├── LitemallStorageService.java │ │ │ │ ├── LitemallSystemConfigService.java │ │ │ │ ├── LitemallTopicService.java │ │ │ │ ├── LitemallUserService.java │ │ │ │ └── StatService.java │ │ │ └── util/ │ │ │ ├── AftersaleConstant.java │ │ │ ├── CouponConstant.java │ │ │ ├── CouponUserConstant.java │ │ │ ├── DbUtil.java │ │ │ ├── GrouponConstant.java │ │ │ ├── OrderHandleOption.java │ │ │ └── OrderUtil.java │ │ └── resources/ │ │ ├── application-db.yml │ │ ├── application.yml │ │ └── org/ │ │ └── linlinjava/ │ │ └── litemall/ │ │ └── db/ │ │ └── dao/ │ │ ├── GoodsProductMapper.xml │ │ ├── LitemallAdMapper.xml │ │ ├── LitemallAddressMapper.xml │ │ ├── LitemallAdminMapper.xml │ │ ├── LitemallAftersaleMapper.xml │ │ ├── LitemallBrandMapper.xml │ │ ├── LitemallCartMapper.xml │ │ ├── LitemallCategoryMapper.xml │ │ ├── LitemallCollectMapper.xml │ │ ├── LitemallCommentMapper.xml │ │ ├── LitemallCouponMapper.xml │ │ ├── LitemallCouponUserMapper.xml │ │ ├── LitemallFeedbackMapper.xml │ │ ├── LitemallFootprintMapper.xml │ │ ├── LitemallGoodsAttributeMapper.xml │ │ ├── LitemallGoodsMapper.xml │ │ ├── LitemallGoodsProductMapper.xml │ │ ├── LitemallGoodsSpecificationMapper.xml │ │ ├── LitemallGrouponMapper.xml │ │ ├── LitemallGrouponRulesMapper.xml │ │ ├── LitemallIssueMapper.xml │ │ ├── LitemallKeywordMapper.xml │ │ ├── LitemallLogMapper.xml │ │ ├── LitemallNoticeAdminMapper.xml │ │ ├── LitemallNoticeMapper.xml │ │ ├── LitemallOrderGoodsMapper.xml │ │ ├── LitemallOrderMapper.xml │ │ ├── LitemallPermissionMapper.xml │ │ ├── LitemallRegionMapper.xml │ │ ├── LitemallRoleMapper.xml │ │ ├── LitemallSearchHistoryMapper.xml │ │ ├── LitemallStorageMapper.xml │ │ ├── LitemallSystemMapper.xml │ │ ├── LitemallTopicMapper.xml │ │ ├── LitemallUserMapper.xml │ │ ├── OrderMapper.xml │ │ └── StatMapper.xml │ └── test/ │ └── java/ │ └── org/ │ └── linlinjava/ │ └── litemall/ │ └── db/ │ ├── Application.java │ ├── DbConfigTest.java │ ├── DbTest.java │ ├── DbUtilTest.java │ ├── MapperReturnTest.java │ ├── StatMapperTest.java │ └── StockTest.java ├── litemall-vue/ │ ├── .eslintrc.js │ ├── .gitignore │ ├── .postcssrc.js │ ├── .prettierrc.js │ ├── babel.config.js │ ├── package.json │ ├── public/ │ │ └── index.html │ ├── src/ │ │ ├── App.vue │ │ ├── api/ │ │ │ └── api.js │ │ ├── assets/ │ │ │ └── scss/ │ │ │ ├── _mixin.scss │ │ │ ├── _vant-theme.scss │ │ │ ├── _var.scss │ │ │ ├── common.scss │ │ │ ├── global.scss │ │ │ ├── iconfont/ │ │ │ │ └── iconfont.css │ │ │ └── mixin/ │ │ │ └── _one-border.scss │ │ ├── components/ │ │ │ ├── Header/ │ │ │ │ └── index.vue │ │ │ ├── Tabbar/ │ │ │ │ └── index.vue │ │ │ ├── field/ │ │ │ │ └── index.vue │ │ │ ├── field-group/ │ │ │ │ └── index.vue │ │ │ └── is-empty/ │ │ │ └── index.vue │ │ ├── filter/ │ │ │ └── index.js │ │ ├── main.js │ │ ├── mixin/ │ │ │ └── scroll-fixed.js │ │ ├── router/ │ │ │ ├── home.js │ │ │ ├── index.js │ │ │ ├── items.js │ │ │ ├── login.js │ │ │ ├── order.js │ │ │ └── user.js │ │ ├── store/ │ │ │ ├── getters.js │ │ │ ├── index.js │ │ │ ├── mutation-types.js │ │ │ └── mutations.js │ │ ├── utils/ │ │ │ ├── auth.js │ │ │ ├── local-storage.js │ │ │ ├── location-param.js │ │ │ ├── request.js │ │ │ ├── scroll.js │ │ │ └── validate.js │ │ └── views/ │ │ ├── home/ │ │ │ └── tabbar-home.vue │ │ ├── items/ │ │ │ ├── brand/ │ │ │ │ └── index.vue │ │ │ ├── brand-list/ │ │ │ │ └── index.vue │ │ │ ├── category/ │ │ │ │ └── index.vue │ │ │ ├── detail/ │ │ │ │ ├── index.vue │ │ │ │ └── popup-props.vue │ │ │ ├── groupon/ │ │ │ │ └── index.vue │ │ │ ├── hot/ │ │ │ │ └── index.vue │ │ │ ├── new/ │ │ │ │ └── index.vue │ │ │ ├── search/ │ │ │ │ └── index.vue │ │ │ ├── tabbar-catalog.vue │ │ │ ├── topic/ │ │ │ │ └── index.vue │ │ │ └── topic-list/ │ │ │ └── index.vue │ │ ├── login/ │ │ │ ├── forget/ │ │ │ │ └── index.vue │ │ │ ├── forget-reset/ │ │ │ │ └── index.vue │ │ │ ├── forget-status/ │ │ │ │ └── index.vue │ │ │ ├── login.vue │ │ │ ├── register-getCode/ │ │ │ │ └── index.vue │ │ │ ├── register-status/ │ │ │ │ └── index.vue │ │ │ └── register-submit/ │ │ │ └── index.vue │ │ ├── order/ │ │ │ ├── checkout.vue │ │ │ ├── order-detail/ │ │ │ │ └── index.vue │ │ │ ├── payment/ │ │ │ │ └── index.vue │ │ │ ├── payment-status/ │ │ │ │ └── index.vue │ │ │ └── tabbar-cart.vue │ │ └── user/ │ │ ├── coupon-list/ │ │ │ └── index.vue │ │ ├── module-address/ │ │ │ └── index.vue │ │ ├── module-address-edit/ │ │ │ ├── area.json │ │ │ └── index.vue │ │ ├── module-collect/ │ │ │ └── index.vue │ │ ├── module-feedback/ │ │ │ └── index.vue │ │ ├── module-help/ │ │ │ └── index.vue │ │ ├── module-server/ │ │ │ └── index.vue │ │ ├── order-list/ │ │ │ └── index.vue │ │ ├── refund-list/ │ │ │ └── index.vue │ │ ├── tabbar-user-coupon.vue │ │ ├── tabbar-user-header.vue │ │ ├── tabbar-user-module.vue │ │ ├── tabbar-user-order.vue │ │ ├── tabbar-user.vue │ │ └── user-information-set/ │ │ ├── index.vue │ │ ├── set-mobile/ │ │ │ └── index.vue │ │ ├── set-nickname/ │ │ │ └── index.vue │ │ └── set-password/ │ │ └── index.vue │ └── vue.config.js ├── litemall-wx/ │ ├── app.js │ ├── app.json │ ├── app.wxss │ ├── config/ │ │ └── api.js │ ├── lib/ │ │ ├── vant-weapp/ │ │ │ ├── action-sheet/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── area/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── button/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── card/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── cell/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── cell-group/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── checkbox/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── checkbox-group/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── circle/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── col/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── collapse/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── collapse-item/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── common/ │ │ │ │ ├── color.d.ts │ │ │ │ ├── color.js │ │ │ │ ├── component.d.ts │ │ │ │ ├── component.js │ │ │ │ ├── index.wxss │ │ │ │ ├── style/ │ │ │ │ │ ├── clearfix.wxss │ │ │ │ │ ├── ellipsis.wxss │ │ │ │ │ ├── hairline.wxss │ │ │ │ │ ├── mixins/ │ │ │ │ │ │ ├── clearfix.wxss │ │ │ │ │ │ ├── ellipsis.wxss │ │ │ │ │ │ └── hairline.wxss │ │ │ │ │ ├── theme.wxss │ │ │ │ │ └── var.wxss │ │ │ │ ├── utils.d.ts │ │ │ │ └── utils.js │ │ │ ├── count-down/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ ├── index.wxss │ │ │ │ ├── utils.d.ts │ │ │ │ └── utils.js │ │ │ ├── datetime-picker/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── definitions/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── weapp.d.ts │ │ │ │ └── weapp.js │ │ │ ├── dialog/ │ │ │ │ ├── dialog.d.ts │ │ │ │ ├── dialog.js │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── divider/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── dropdown-item/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── dropdown-menu/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ ├── index.wxs │ │ │ │ └── index.wxss │ │ │ ├── field/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── goods-action/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── goods-action-button/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── goods-action-icon/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── grid/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── grid-item/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── icon/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── image/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── index-anchor/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── index-bar/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── info/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── loading/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── mixins/ │ │ │ │ ├── basic.d.ts │ │ │ │ ├── basic.js │ │ │ │ ├── button.d.ts │ │ │ │ ├── button.js │ │ │ │ ├── link.d.ts │ │ │ │ ├── link.js │ │ │ │ ├── observer/ │ │ │ │ │ ├── behavior.d.ts │ │ │ │ │ ├── behavior.js │ │ │ │ │ ├── index.d.ts │ │ │ │ │ └── index.js │ │ │ │ ├── open-type.d.ts │ │ │ │ ├── open-type.js │ │ │ │ ├── touch.d.ts │ │ │ │ ├── touch.js │ │ │ │ ├── transition.d.ts │ │ │ │ └── transition.js │ │ │ ├── nav-bar/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── notice-bar/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── notify/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ ├── index.wxss │ │ │ │ ├── notify.d.ts │ │ │ │ └── notify.js │ │ │ ├── overlay/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── panel/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── picker/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ ├── index.wxss │ │ │ │ ├── shared.d.ts │ │ │ │ └── shared.js │ │ │ ├── picker-column/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ ├── index.wxs │ │ │ │ └── index.wxss │ │ │ ├── popup/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── progress/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ ├── index.wxs │ │ │ │ └── index.wxss │ │ │ ├── radio/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── radio-group/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── rate/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── row/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── search/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── sidebar/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── sidebar-item/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── skeleton/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── slider/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── stepper/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── steps/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── sticky/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── submit-bar/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── swipe-cell/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── switch/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── tab/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── tabbar/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── tabbar-item/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── tabs/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ ├── index.wxs │ │ │ │ └── index.wxss │ │ │ ├── tag/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── toast/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ ├── index.wxss │ │ │ │ ├── toast.d.ts │ │ │ │ └── toast.js │ │ │ ├── transition/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ └── index.wxss │ │ │ ├── tree-select/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ ├── index.wxs │ │ │ │ └── index.wxss │ │ │ ├── uploader/ │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.wxml │ │ │ │ ├── index.wxss │ │ │ │ ├── utils.d.ts │ │ │ │ └── utils.js │ │ │ └── wxs/ │ │ │ ├── array.wxs │ │ │ ├── bem.wxs │ │ │ ├── memoize.wxs │ │ │ ├── object.wxs │ │ │ └── utils.wxs │ │ └── wxParse/ │ │ ├── html2json.js │ │ ├── htmlparser.js │ │ ├── showdown.js │ │ ├── wxDiscode.js │ │ ├── wxParse.js │ │ ├── wxParse.wxml │ │ └── wxParse.wxss │ ├── pages/ │ │ ├── about/ │ │ │ ├── about.js │ │ │ ├── about.json │ │ │ ├── about.wxml │ │ │ └── about.wxss │ │ ├── auth/ │ │ │ ├── accountLogin/ │ │ │ │ ├── accountLogin.js │ │ │ │ ├── accountLogin.json │ │ │ │ ├── accountLogin.wxml │ │ │ │ └── accountLogin.wxss │ │ │ ├── login/ │ │ │ │ ├── login.js │ │ │ │ ├── login.json │ │ │ │ ├── login.wxml │ │ │ │ └── login.wxss │ │ │ ├── register/ │ │ │ │ ├── register.js │ │ │ │ ├── register.json │ │ │ │ ├── register.wxml │ │ │ │ └── register.wxss │ │ │ └── reset/ │ │ │ ├── reset.js │ │ │ ├── reset.json │ │ │ ├── reset.wxml │ │ │ └── reset.wxss │ │ ├── brand/ │ │ │ ├── brand.js │ │ │ ├── brand.json │ │ │ ├── brand.wxml │ │ │ └── brand.wxss │ │ ├── brandDetail/ │ │ │ ├── brandDetail.js │ │ │ ├── brandDetail.json │ │ │ ├── brandDetail.wxml │ │ │ └── brandDetail.wxss │ │ ├── cart/ │ │ │ ├── cart.js │ │ │ ├── cart.json │ │ │ ├── cart.wxml │ │ │ └── cart.wxss │ │ ├── catalog/ │ │ │ ├── catalog.js │ │ │ ├── catalog.json │ │ │ ├── catalog.wxml │ │ │ └── catalog.wxss │ │ ├── category/ │ │ │ ├── category.js │ │ │ ├── category.json │ │ │ ├── category.wxml │ │ │ └── category.wxss │ │ ├── checkout/ │ │ │ ├── checkout.js │ │ │ ├── checkout.json │ │ │ ├── checkout.wxml │ │ │ └── checkout.wxss │ │ ├── comment/ │ │ │ ├── comment.js │ │ │ ├── comment.json │ │ │ ├── comment.wxml │ │ │ └── comment.wxss │ │ ├── commentPost/ │ │ │ ├── commentPost.js │ │ │ ├── commentPost.json │ │ │ ├── commentPost.wxml │ │ │ └── commentPost.wxss │ │ ├── coupon/ │ │ │ ├── coupon.js │ │ │ ├── coupon.json │ │ │ ├── coupon.wxml │ │ │ └── coupon.wxss │ │ ├── goods/ │ │ │ ├── goods.js │ │ │ ├── goods.json │ │ │ ├── goods.wxml │ │ │ └── goods.wxss │ │ ├── groupon/ │ │ │ ├── grouponDetail/ │ │ │ │ ├── grouponDetail.js │ │ │ │ ├── grouponDetail.json │ │ │ │ ├── grouponDetail.wxml │ │ │ │ └── grouponDetail.wxss │ │ │ ├── grouponList/ │ │ │ │ ├── grouponList.js │ │ │ │ ├── grouponList.json │ │ │ │ ├── grouponList.wxml │ │ │ │ └── grouponList.wxss │ │ │ └── myGroupon/ │ │ │ ├── myGroupon.js │ │ │ ├── myGroupon.json │ │ │ ├── myGroupon.wxml │ │ │ └── myGroupon.wxss │ │ ├── help/ │ │ │ ├── help.js │ │ │ ├── help.json │ │ │ ├── help.wxml │ │ │ └── help.wxss │ │ ├── hotGoods/ │ │ │ ├── hotGoods.js │ │ │ ├── hotGoods.json │ │ │ ├── hotGoods.wxml │ │ │ └── hotGoods.wxss │ │ ├── index/ │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.wxml │ │ │ └── index.wxss │ │ ├── newGoods/ │ │ │ ├── newGoods.js │ │ │ ├── newGoods.json │ │ │ ├── newGoods.wxml │ │ │ └── newGoods.wxss │ │ ├── payResult/ │ │ │ ├── payResult.js │ │ │ ├── payResult.json │ │ │ ├── payResult.wxml │ │ │ └── payResult.wxss │ │ ├── search/ │ │ │ ├── search.js │ │ │ ├── search.json │ │ │ ├── search.wxml │ │ │ └── search.wxss │ │ ├── topic/ │ │ │ ├── topic.js │ │ │ ├── topic.json │ │ │ ├── topic.wxml │ │ │ └── topic.wxss │ │ ├── topicComment/ │ │ │ ├── topicComment.js │ │ │ ├── topicComment.json │ │ │ ├── topicComment.wxml │ │ │ └── topicComment.wxss │ │ ├── topicCommentPost/ │ │ │ ├── topicCommentPost.js │ │ │ ├── topicCommentPost.json │ │ │ ├── topicCommentPost.wxml │ │ │ └── topicCommentPost.wxss │ │ ├── topicDetail/ │ │ │ ├── topicDetail.js │ │ │ ├── topicDetail.json │ │ │ ├── topicDetail.wxml │ │ │ └── topicDetail.wxss │ │ └── ucenter/ │ │ ├── address/ │ │ │ ├── address.js │ │ │ ├── address.json │ │ │ ├── address.wxml │ │ │ └── address.wxss │ │ ├── addressAdd/ │ │ │ ├── addressAdd.js │ │ │ ├── addressAdd.json │ │ │ ├── addressAdd.wxml │ │ │ └── addressAdd.wxss │ │ ├── aftersale/ │ │ │ ├── aftersale.js │ │ │ ├── aftersale.json │ │ │ ├── aftersale.wxml │ │ │ └── aftersale.wxss │ │ ├── aftersaleDetail/ │ │ │ ├── aftersaleDetail.js │ │ │ ├── aftersaleDetail.json │ │ │ ├── aftersaleDetail.wxml │ │ │ └── aftersaleDetail.wxss │ │ ├── aftersaleList/ │ │ │ ├── aftersaleList.js │ │ │ ├── aftersaleList.json │ │ │ ├── aftersaleList.wxml │ │ │ └── aftersaleList.wxss │ │ ├── collect/ │ │ │ ├── collect.js │ │ │ ├── collect.json │ │ │ ├── collect.wxml │ │ │ └── collect.wxss │ │ ├── couponList/ │ │ │ ├── couponList.js │ │ │ ├── couponList.json │ │ │ ├── couponList.wxml │ │ │ └── couponList.wxss │ │ ├── couponSelect/ │ │ │ ├── couponSelect.js │ │ │ ├── couponSelect.json │ │ │ ├── couponSelect.wxml │ │ │ └── couponSelect.wxss │ │ ├── feedback/ │ │ │ ├── feedback.js │ │ │ ├── feedback.json │ │ │ ├── feedback.wxml │ │ │ └── feedback.wxss │ │ ├── footprint/ │ │ │ ├── footprint.js │ │ │ ├── footprint.json │ │ │ ├── footprint.wxml │ │ │ └── footprint.wxss │ │ ├── index/ │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.wxml │ │ │ └── index.wxss │ │ ├── order/ │ │ │ ├── order.js │ │ │ ├── order.json │ │ │ ├── order.wxml │ │ │ └── order.wxss │ │ └── orderDetail/ │ │ ├── orderDetail.js │ │ ├── orderDetail.json │ │ ├── orderDetail.wxml │ │ └── orderDetail.wxss │ ├── project.config.json │ ├── project.private.config.json │ ├── sitemap.json │ └── utils/ │ ├── area.js │ ├── check.js │ ├── user.js │ └── util.js ├── litemall-wx-api/ │ ├── .gitignore │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── linlinjava/ │ │ │ └── litemall/ │ │ │ └── wx/ │ │ │ ├── Application.java │ │ │ ├── annotation/ │ │ │ │ ├── LoginUser.java │ │ │ │ └── support/ │ │ │ │ └── LoginUserHandlerMethodArgumentResolver.java │ │ │ ├── config/ │ │ │ │ ├── WxSwagger2Configuration.java │ │ │ │ └── WxWebMvcConfiguration.java │ │ │ ├── dto/ │ │ │ │ ├── CaptchaItem.java │ │ │ │ ├── UserInfo.java │ │ │ │ ├── UserToken.java │ │ │ │ └── WxLoginInfo.java │ │ │ ├── service/ │ │ │ │ ├── CaptchaCodeManager.java │ │ │ │ ├── GetRegionService.java │ │ │ │ ├── HomeCacheManager.java │ │ │ │ ├── UserInfoService.java │ │ │ │ ├── UserTokenManager.java │ │ │ │ ├── WxGrouponRuleService.java │ │ │ │ └── WxOrderService.java │ │ │ ├── task/ │ │ │ │ ├── OrderUnpaidTask.java │ │ │ │ └── TaskStartupRunner.java │ │ │ ├── util/ │ │ │ │ ├── JwtHelper.java │ │ │ │ └── WxResponseCode.java │ │ │ ├── vo/ │ │ │ │ ├── CouponVo.java │ │ │ │ └── GrouponRuleVo.java │ │ │ └── web/ │ │ │ ├── WxAddressController.java │ │ │ ├── WxAftersaleController.java │ │ │ ├── WxAuthController.java │ │ │ ├── WxBrandController.java │ │ │ ├── WxCartController.java │ │ │ ├── WxCatalogController.java │ │ │ ├── WxCollectController.java │ │ │ ├── WxCommentController.java │ │ │ ├── WxCouponController.java │ │ │ ├── WxFeedbackController.java │ │ │ ├── WxFootprintController.java │ │ │ ├── WxGoodsController.java │ │ │ ├── WxGrouponController.java │ │ │ ├── WxHomeController.java │ │ │ ├── WxIndexController.java │ │ │ ├── WxIssueController.java │ │ │ ├── WxMsgController.java │ │ │ ├── WxOrderController.java │ │ │ ├── WxSearchController.java │ │ │ ├── WxStorageController.java │ │ │ ├── WxTopicController.java │ │ │ └── WxUserController.java │ │ └── resources/ │ │ ├── application-wx.yml │ │ └── application.yml │ └── test/ │ └── java/ │ └── org/ │ └── linlinjava/ │ └── litemall/ │ └── wx/ │ ├── BigDecimalTest.java │ └── WxConfigTest.java ├── pom.xml └── renard-wx/ ├── app.js ├── app.json ├── app.wxss ├── components/ │ ├── capsule/ │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── good/ │ │ ├── good.js │ │ ├── good.json │ │ ├── good.wxml │ │ └── good.wxss │ ├── goodList/ │ │ ├── goodList.js │ │ ├── goodList.json │ │ ├── goodList.wxml │ │ └── goodList.wxss │ ├── icon/ │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── notice-bar/ │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── notify/ │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ └── sharePop/ │ ├── sharePop.js │ ├── sharePop.json │ ├── sharePop.wxml │ └── sharePop.wxss ├── config/ │ └── api.js ├── lib/ │ └── wxParse/ │ ├── html2json.js │ ├── htmlparser.js │ ├── showdown.js │ ├── wxDiscode.js │ ├── wxParse.js │ ├── wxParse.wxml │ └── wxParse.wxss ├── pages/ │ ├── auth/ │ │ └── login/ │ │ ├── login.js │ │ ├── login.json │ │ ├── login.wxml │ │ └── login.wxss │ ├── brand/ │ │ ├── brand.js │ │ ├── brand.json │ │ ├── brand.wxml │ │ └── brand.wxss │ ├── brandDetail/ │ │ ├── brandDetail.js │ │ ├── brandDetail.json │ │ ├── brandDetail.wxml │ │ └── brandDetail.wxss │ ├── cart/ │ │ ├── cart.js │ │ ├── cart.json │ │ ├── cart.wxml │ │ └── cart.wxss │ ├── catalog/ │ │ ├── catalog.js │ │ ├── catalog.json │ │ ├── catalog.wxml │ │ └── catalog.wxss │ ├── category/ │ │ ├── category.js │ │ ├── category.json │ │ ├── category.wxml │ │ └── category.wxss │ ├── commentPost/ │ │ ├── commentPost.js │ │ ├── commentPost.json │ │ ├── commentPost.wxml │ │ └── commentPost.wxss │ ├── goods/ │ │ ├── goods.js │ │ ├── goods.json │ │ ├── goods.wxml │ │ └── goods.wxss │ ├── groupon/ │ │ ├── grouponDetail/ │ │ │ ├── grouponDetail.js │ │ │ ├── grouponDetail.json │ │ │ ├── grouponDetail.wxml │ │ │ └── grouponDetail.wxss │ │ ├── grouponList/ │ │ │ ├── grouponList.js │ │ │ ├── grouponList.json │ │ │ ├── grouponList.wxml │ │ │ └── grouponList.wxss │ │ └── myGroupon/ │ │ ├── myGroupon.js │ │ ├── myGroupon.json │ │ ├── myGroupon.wxml │ │ └── myGroupon.wxss │ ├── hotGoods/ │ │ ├── hotGoods.js │ │ ├── hotGoods.json │ │ ├── hotGoods.wxml │ │ └── hotGoods.wxss │ ├── index/ │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── newGoods/ │ │ ├── newGoods.js │ │ ├── newGoods.json │ │ ├── newGoods.wxml │ │ └── newGoods.wxss │ ├── payResult/ │ │ ├── payResult.js │ │ ├── payResult.json │ │ ├── payResult.wxml │ │ └── payResult.wxss │ ├── search/ │ │ ├── search.js │ │ ├── search.json │ │ ├── search.wxml │ │ └── search.wxss │ ├── shopping/ │ │ └── checkout/ │ │ ├── checkout.js │ │ ├── checkout.json │ │ ├── checkout.wxml │ │ └── checkout.wxss │ ├── topic/ │ │ ├── topic.js │ │ ├── topic.json │ │ ├── topic.wxml │ │ └── topic.wxss │ ├── topicDetail/ │ │ ├── topicDetail.js │ │ ├── topicDetail.json │ │ ├── topicDetail.wxml │ │ └── topicDetail.wxss │ └── ucenter/ │ ├── address/ │ │ ├── address.js │ │ ├── address.json │ │ ├── address.wxml │ │ └── address.wxss │ ├── addressAdd/ │ │ ├── addressAdd.js │ │ ├── addressAdd.json │ │ ├── addressAdd.wxml │ │ └── addressAdd.wxss │ ├── coupon/ │ │ ├── coupon.js │ │ ├── coupon.json │ │ ├── coupon.wxml │ │ └── coupon.wxss │ ├── index/ │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ ├── order/ │ │ ├── order.js │ │ ├── order.json │ │ ├── order.wxml │ │ └── order.wxss │ └── orderDetail/ │ ├── orderDetail.js │ ├── orderDetail.json │ ├── orderDetail.wxml │ └── orderDetail.wxss ├── project.config.json ├── sitemap.json └── utils/ ├── area.js ├── check.js ├── user.js └── util.js