From 77b4e8ad22006a84cfdef1f4de22fb395df8c631 Mon Sep 17 00:00:00 2001 From: zhangshengli <18103773227@163.com> Date: Wed, 24 Jul 2024 16:14:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A1=86=E6=9E=B6=E4=BB=A3=E7=A0=81=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=961?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 8 + .idea/misc.xml | 6 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + .idea/yshi.iml | 9 + fuintAdmin/.editorconfig | 22 + fuintAdmin/.env.development | 14 + fuintAdmin/.env.production | 14 + fuintAdmin/.env.staging | 14 + fuintAdmin/.eslintignore | 10 + fuintAdmin/.eslintrc.js | 199 + fuintAdmin/.gitignore | 23 + fuintAdmin/README.md | 28 + fuintAdmin/babel.config.js | 13 + fuintAdmin/bin/build.bat | 12 + fuintAdmin/bin/package.bat | 12 + fuintAdmin/bin/run-web.bat | 12 + fuintAdmin/build/index.js | 35 + fuintAdmin/package.json | 91 + fuintAdmin/public/favicon.ico | Bin 0 -> 1237 bytes fuintAdmin/public/html/ie.html | 46 + fuintAdmin/public/index.html | 202 + fuintAdmin/public/robots.txt | 2 + fuintAdmin/src/App.vue | 19 + fuintAdmin/src/api/article.js | 40 + fuintAdmin/src/api/balance.js | 67 + fuintAdmin/src/api/banner.js | 40 + fuintAdmin/src/api/cashier.js | 123 + fuintAdmin/src/api/commission/cash.js | 45 + fuintAdmin/src/api/commission/log.js | 45 + fuintAdmin/src/api/commission/rule.js | 46 + fuintAdmin/src/api/common.js | 11 + fuintAdmin/src/api/coupon/confirmLog.js | 18 + fuintAdmin/src/api/coupon/coupon.js | 75 + fuintAdmin/src/api/coupon/give.js | 18 + fuintAdmin/src/api/coupon/group.js | 57 + fuintAdmin/src/api/coupon/sendLog.js | 18 + fuintAdmin/src/api/coupon/userCoupon.js | 19 + fuintAdmin/src/api/goods.js | 85 + fuintAdmin/src/api/goodsCate.js | 40 + fuintAdmin/src/api/home.js | 18 + fuintAdmin/src/api/login.js | 43 + fuintAdmin/src/api/member.js | 92 + fuintAdmin/src/api/memberGroup.js | 57 + fuintAdmin/src/api/menu.js | 9 + fuintAdmin/src/api/merchant.js | 49 + fuintAdmin/src/api/openGift.js | 48 + fuintAdmin/src/api/order.js | 83 + fuintAdmin/src/api/point.js | 58 + fuintAdmin/src/api/refund.js | 44 + fuintAdmin/src/api/settlement.js | 39 + fuintAdmin/src/api/smsManager.js | 19 + fuintAdmin/src/api/smsTemplate.js | 48 + fuintAdmin/src/api/staff.js | 56 + fuintAdmin/src/api/statistic.js | 27 + fuintAdmin/src/api/stock.js | 40 + fuintAdmin/src/api/store.js | 49 + fuintAdmin/src/api/subMessage.js | 48 + fuintAdmin/src/api/system/account.js | 127 + fuintAdmin/src/api/system/config.js | 60 + fuintAdmin/src/api/system/dict/data.js | 52 + fuintAdmin/src/api/system/dict/type.js | 60 + fuintAdmin/src/api/system/genCode.js | 48 + fuintAdmin/src/api/system/logs.js | 18 + fuintAdmin/src/api/system/menu.js | 60 + fuintAdmin/src/api/system/notice.js | 44 + fuintAdmin/src/api/system/role.js | 111 + fuintAdmin/src/api/tool/gen.js | 76 + fuintAdmin/src/api/userGrade.js | 48 + fuintAdmin/src/assets/401_images/401.gif | Bin 0 -> 164227 bytes fuintAdmin/src/assets/404_images/404.png | Bin 0 -> 98071 bytes .../src/assets/404_images/404_cloud.png | Bin 0 -> 4766 bytes fuintAdmin/src/assets/icons/index.js | 9 + fuintAdmin/src/assets/icons/svg/404.svg | 1 + fuintAdmin/src/assets/icons/svg/bug.svg | 1 + fuintAdmin/src/assets/icons/svg/build.svg | 1 + fuintAdmin/src/assets/icons/svg/button.svg | 1 + fuintAdmin/src/assets/icons/svg/cascader.svg | 1 + fuintAdmin/src/assets/icons/svg/chart.svg | 1 + fuintAdmin/src/assets/icons/svg/checkbox.svg | 1 + fuintAdmin/src/assets/icons/svg/clipboard.svg | 1 + fuintAdmin/src/assets/icons/svg/code.svg | 1 + fuintAdmin/src/assets/icons/svg/color.svg | 1 + fuintAdmin/src/assets/icons/svg/component.svg | 1 + fuintAdmin/src/assets/icons/svg/dashboard.svg | 1 + .../src/assets/icons/svg/date-range.svg | 1 + fuintAdmin/src/assets/icons/svg/date.svg | 1 + fuintAdmin/src/assets/icons/svg/dict.svg | 1 + .../src/assets/icons/svg/documentation.svg | 1 + fuintAdmin/src/assets/icons/svg/download.svg | 1 + fuintAdmin/src/assets/icons/svg/drag.svg | 1 + fuintAdmin/src/assets/icons/svg/druid.svg | 1 + fuintAdmin/src/assets/icons/svg/edit.svg | 1 + fuintAdmin/src/assets/icons/svg/education.svg | 1 + fuintAdmin/src/assets/icons/svg/email.svg | 1 + fuintAdmin/src/assets/icons/svg/example.svg | 1 + fuintAdmin/src/assets/icons/svg/excel.svg | 1 + .../src/assets/icons/svg/exit-fullscreen.svg | 1 + fuintAdmin/src/assets/icons/svg/eye-open.svg | 1 + fuintAdmin/src/assets/icons/svg/eye.svg | 1 + fuintAdmin/src/assets/icons/svg/form.svg | 1 + .../src/assets/icons/svg/fullscreen.svg | 1 + fuintAdmin/src/assets/icons/svg/github.svg | 1 + fuintAdmin/src/assets/icons/svg/guide.svg | 1 + fuintAdmin/src/assets/icons/svg/icon.svg | 1 + fuintAdmin/src/assets/icons/svg/input.svg | 1 + .../src/assets/icons/svg/international.svg | 1 + fuintAdmin/src/assets/icons/svg/job.svg | 1 + fuintAdmin/src/assets/icons/svg/language.svg | 1 + fuintAdmin/src/assets/icons/svg/link.svg | 1 + fuintAdmin/src/assets/icons/svg/list.svg | 1 + fuintAdmin/src/assets/icons/svg/lock.svg | 1 + fuintAdmin/src/assets/icons/svg/log.svg | 1 + .../src/assets/icons/svg/logininfor.svg | 1 + fuintAdmin/src/assets/icons/svg/message.svg | 1 + fuintAdmin/src/assets/icons/svg/money.svg | 1 + fuintAdmin/src/assets/icons/svg/monitor.svg | 2 + fuintAdmin/src/assets/icons/svg/nested.svg | 1 + fuintAdmin/src/assets/icons/svg/number.svg | 1 + fuintAdmin/src/assets/icons/svg/online.svg | 1 + fuintAdmin/src/assets/icons/svg/password.svg | 1 + fuintAdmin/src/assets/icons/svg/pdf.svg | 1 + fuintAdmin/src/assets/icons/svg/people.svg | 1 + fuintAdmin/src/assets/icons/svg/peoples.svg | 1 + fuintAdmin/src/assets/icons/svg/phone.svg | 1 + fuintAdmin/src/assets/icons/svg/post.svg | 1 + fuintAdmin/src/assets/icons/svg/qq.svg | 1 + fuintAdmin/src/assets/icons/svg/question.svg | 1 + fuintAdmin/src/assets/icons/svg/radio.svg | 1 + fuintAdmin/src/assets/icons/svg/rate.svg | 1 + fuintAdmin/src/assets/icons/svg/redis.svg | 1 + fuintAdmin/src/assets/icons/svg/row.svg | 1 + fuintAdmin/src/assets/icons/svg/search.svg | 1 + fuintAdmin/src/assets/icons/svg/select.svg | 1 + fuintAdmin/src/assets/icons/svg/server.svg | 1 + fuintAdmin/src/assets/icons/svg/shopping.svg | 1 + fuintAdmin/src/assets/icons/svg/size.svg | 1 + fuintAdmin/src/assets/icons/svg/skill.svg | 1 + fuintAdmin/src/assets/icons/svg/slider.svg | 1 + fuintAdmin/src/assets/icons/svg/star.svg | 1 + fuintAdmin/src/assets/icons/svg/swagger.svg | 1 + fuintAdmin/src/assets/icons/svg/switch.svg | 1 + fuintAdmin/src/assets/icons/svg/system.svg | 2 + fuintAdmin/src/assets/icons/svg/tab.svg | 1 + fuintAdmin/src/assets/icons/svg/table.svg | 1 + fuintAdmin/src/assets/icons/svg/textarea.svg | 1 + fuintAdmin/src/assets/icons/svg/theme.svg | 1 + .../src/assets/icons/svg/time-range.svg | 1 + fuintAdmin/src/assets/icons/svg/time.svg | 1 + fuintAdmin/src/assets/icons/svg/tool.svg | 1 + .../src/assets/icons/svg/tree-table.svg | 1 + fuintAdmin/src/assets/icons/svg/tree.svg | 1 + fuintAdmin/src/assets/icons/svg/upload.svg | 1 + fuintAdmin/src/assets/icons/svg/user.svg | 1 + fuintAdmin/src/assets/icons/svg/validCode.svg | 1 + fuintAdmin/src/assets/icons/svg/wechat.svg | 1 + fuintAdmin/src/assets/icons/svg/zip.svg | 1 + fuintAdmin/src/assets/icons/svgo.yml | 22 + fuintAdmin/src/assets/images/all-cate.svg | 2 + fuintAdmin/src/assets/images/avatar.png | Bin 0 -> 1754 bytes fuintAdmin/src/assets/images/cashier.png | Bin 0 -> 1892 bytes fuintAdmin/src/assets/images/cashier.svg | 1 + fuintAdmin/src/assets/images/dark.svg | 39 + fuintAdmin/src/assets/images/goods.png | Bin 0 -> 1955 bytes fuintAdmin/src/assets/images/home/card.png | Bin 0 -> 1522 bytes fuintAdmin/src/assets/images/home/coupon.png | Bin 0 -> 1587 bytes fuintAdmin/src/assets/images/home/goods.png | Bin 0 -> 920 bytes fuintAdmin/src/assets/images/home/member.png | Bin 0 -> 1288 bytes fuintAdmin/src/assets/images/home/order.png | Bin 0 -> 434 bytes fuintAdmin/src/assets/images/home/pay.png | Bin 0 -> 755 bytes fuintAdmin/src/assets/images/hot.png | Bin 0 -> 2198 bytes fuintAdmin/src/assets/images/icon-cart.svg | 2 + fuintAdmin/src/assets/images/life.png | Bin 0 -> 1924 bytes fuintAdmin/src/assets/images/light.svg | 39 + fuintAdmin/src/assets/images/login-bg.png | Bin 0 -> 137648 bytes fuintAdmin/src/assets/images/love.png | Bin 0 -> 1303 bytes fuintAdmin/src/assets/images/office.png | Bin 0 -> 504 bytes fuintAdmin/src/assets/images/order.png | Bin 0 -> 1600 bytes fuintAdmin/src/assets/logo/logo.png | Bin 0 -> 3416 bytes fuintAdmin/src/assets/styles/btn.scss | 99 + fuintAdmin/src/assets/styles/element-ui.scss | 116 + .../src/assets/styles/element-variables.scss | 31 + fuintAdmin/src/assets/styles/fuint.scss | 404 ++ fuintAdmin/src/assets/styles/index.scss | 191 + fuintAdmin/src/assets/styles/mixin.scss | 66 + fuintAdmin/src/assets/styles/sidebar.scss | 228 + fuintAdmin/src/assets/styles/transition.scss | 48 + fuintAdmin/src/assets/styles/variables.scss | 39 + .../src/components/Breadcrumb/index.vue | 74 + fuintAdmin/src/components/Crontab/day.vue | 161 + fuintAdmin/src/components/Crontab/hour.vue | 114 + fuintAdmin/src/components/Crontab/index.vue | 430 ++ fuintAdmin/src/components/Crontab/min.vue | 116 + fuintAdmin/src/components/Crontab/month.vue | 114 + fuintAdmin/src/components/Crontab/result.vue | 559 ++ fuintAdmin/src/components/Crontab/second.vue | 117 + fuintAdmin/src/components/Crontab/week.vue | 202 + fuintAdmin/src/components/Crontab/year.vue | 131 + fuintAdmin/src/components/DictData/index.js | 21 + fuintAdmin/src/components/DictTag/index.vue | 52 + fuintAdmin/src/components/Editor/index.vue | 272 + .../src/components/FileUpload/index.vue | 209 + .../src/components/Fuint/Cashier/index.vue | 23 + fuintAdmin/src/components/Fuint/Doc/index.vue | 21 + fuintAdmin/src/components/Fuint/Git/index.vue | 21 + .../src/components/Fuint/QrCode/index.vue | 70 + fuintAdmin/src/components/Hamburger/index.vue | 44 + .../src/components/HeaderSearch/index.vue | 188 + .../src/components/IconSelect/index.vue | 68 + .../src/components/IconSelect/requireIcons.js | 11 + .../src/components/ImagePreview/index.vue | 84 + .../src/components/ImageUpload/index.vue | 212 + .../src/components/Pagination/index.vue | 114 + fuintAdmin/src/components/PanThumb/index.vue | 142 + .../src/components/ParentView/index.vue | 3 + .../src/components/RightPanel/index.vue | 149 + .../src/components/RightToolbar/index.vue | 87 + .../src/components/Screenfull/index.vue | 57 + .../src/components/SizeSelect/index.vue | 56 + fuintAdmin/src/components/SvgIcon/index.vue | 61 + .../src/components/ThemePicker/index.vue | 173 + fuintAdmin/src/components/TopNav/index.vue | 181 + .../src/components/TreeSelect/index.vue | 194 + .../src/components/UserSelect/index.vue | 196 + fuintAdmin/src/components/iFrame/index.vue | 36 + fuintAdmin/src/directive/dialog/drag.js | 64 + fuintAdmin/src/directive/dialog/dragHeight.js | 34 + fuintAdmin/src/directive/dialog/dragWidth.js | 30 + fuintAdmin/src/directive/index.js | 23 + fuintAdmin/src/directive/module/clipboard.js | 54 + .../src/directive/permission/hasPermi.js | 28 + .../src/directive/permission/hasRole.js | 28 + fuintAdmin/src/layout/components/AppMain.vue | 57 + .../src/layout/components/InnerLink/index.vue | 27 + fuintAdmin/src/layout/components/Navbar.vue | 191 + .../src/layout/components/Settings/index.vue | 257 + .../layout/components/Sidebar/FixiOSBug.js | 25 + .../src/layout/components/Sidebar/Item.vue | 33 + .../src/layout/components/Sidebar/Link.vue | 43 + .../src/layout/components/Sidebar/Logo.vue | 94 + .../layout/components/Sidebar/SidebarItem.vue | 100 + .../src/layout/components/Sidebar/index.vue | 104 + .../layout/components/TagsView/ScrollPane.vue | 94 + .../src/layout/components/TagsView/index.vue | 326 + fuintAdmin/src/layout/components/index.js | 5 + fuintAdmin/src/layout/index.vue | 111 + fuintAdmin/src/layout/mixin/ResizeHandler.js | 45 + fuintAdmin/src/main.js | 92 + fuintAdmin/src/permission.js | 56 + fuintAdmin/src/plugins/auth.js | 60 + fuintAdmin/src/plugins/cache.js | 77 + fuintAdmin/src/plugins/download.js | 72 + fuintAdmin/src/plugins/index.js | 20 + fuintAdmin/src/plugins/modal.js | 83 + fuintAdmin/src/plugins/tab.js | 67 + fuintAdmin/src/router/index.js | 101 + fuintAdmin/src/settings.js | 44 + fuintAdmin/src/store/getters.js | 22 + fuintAdmin/src/store/index.js | 23 + fuintAdmin/src/store/modules/app.js | 66 + fuintAdmin/src/store/modules/permission.js | 133 + fuintAdmin/src/store/modules/settings.js | 42 + fuintAdmin/src/store/modules/tagsView.js | 207 + fuintAdmin/src/store/modules/user.js | 111 + fuintAdmin/src/utils/auth.js | 29 + fuintAdmin/src/utils/dict/Dict.js | 82 + fuintAdmin/src/utils/dict/DictConverter.js | 17 + fuintAdmin/src/utils/dict/DictData.js | 13 + fuintAdmin/src/utils/dict/DictMeta.js | 38 + fuintAdmin/src/utils/dict/DictOptions.js | 51 + fuintAdmin/src/utils/dict/index.js | 33 + fuintAdmin/src/utils/errorCode.js | 6 + fuintAdmin/src/utils/fuint.js | 226 + fuintAdmin/src/utils/generator/config.js | 438 ++ fuintAdmin/src/utils/generator/css.js | 18 + .../src/utils/generator/drawingDefault.js | 29 + fuintAdmin/src/utils/generator/html.js | 359 + fuintAdmin/src/utils/generator/icon.json | 1 + fuintAdmin/src/utils/generator/js.js | 236 + fuintAdmin/src/utils/generator/render.js | 126 + fuintAdmin/src/utils/index.js | 390 + fuintAdmin/src/utils/jsencrypt.js | 30 + fuintAdmin/src/utils/permission.js | 51 + fuintAdmin/src/utils/request.js | 149 + fuintAdmin/src/utils/scroll-to.js | 58 + fuintAdmin/src/utils/validate.js | 83 + fuintAdmin/src/views/balance/distribute.vue | 130 + fuintAdmin/src/views/balance/list.vue | 184 + fuintAdmin/src/views/balance/setting.vue | 171 + .../views/cashier/components/hangUpDialog.vue | 172 + .../cashier/components/noGoodsCashier.vue | 80 + .../cashier/components/orderPrintDialog.vue | 175 + .../cashier/components/payResultDialog.vue | 68 + .../cashier/components/scanPayCodeDialog.vue | 82 + .../cashier/components/settlementDialog.vue | 447 ++ .../cashier/components/switchMemberDialog.vue | 133 + fuintAdmin/src/views/cashier/index.vue | 1247 ++++ .../src/views/commission/cash/detail.vue | 112 + .../src/views/commission/cash/index.vue | 282 + fuintAdmin/src/views/commission/log/index.vue | 466 ++ .../src/views/commission/relation/index.vue | 377 + .../src/views/commission/rule/index.vue | 517 ++ .../src/views/components/charts/index.vue | 228 + .../views/components/charts/mixins/resize.js | 56 + .../views/components/icons/element-icons.js | 3 + .../src/views/components/icons/index.vue | 87 + .../src/views/components/icons/svg-icons.js | 10 + .../src/views/content/article/index.vue | 364 + fuintAdmin/src/views/content/banner/list.vue | 382 + fuintAdmin/src/views/coupon/confirm/index.vue | 215 + .../src/views/coupon/confirmLog/index.vue | 216 + fuintAdmin/src/views/coupon/coupon/index.vue | 960 +++ fuintAdmin/src/views/coupon/give/index.vue | 217 + fuintAdmin/src/views/coupon/group/index.vue | 294 + fuintAdmin/src/views/coupon/sendLog/index.vue | 184 + .../src/views/coupon/userCoupon/index.vue | 272 + fuintAdmin/src/views/dashboard/BarChart.vue | 102 + fuintAdmin/src/views/dashboard/LineChart.vue | 135 + fuintAdmin/src/views/dashboard/PanelGroup.vue | 181 + fuintAdmin/src/views/dashboard/PieChart.vue | 79 + .../src/views/dashboard/RaddarChart.vue | 116 + .../src/views/dashboard/mixins/resize.js | 56 + fuintAdmin/src/views/error/401.vue | 88 + fuintAdmin/src/views/error/404.vue | 233 + fuintAdmin/src/views/goods/cate/index.vue | 384 + fuintAdmin/src/views/goods/components/Sku.vue | 444 ++ fuintAdmin/src/views/goods/goods/add.vue | 12 + fuintAdmin/src/views/goods/goods/edit.vue | 12 + .../src/views/goods/goods/goodsForm.vue | 499 ++ fuintAdmin/src/views/goods/goods/index.vue | 318 + fuintAdmin/src/views/index.vue | 249 + fuintAdmin/src/views/login.vue | 270 + .../src/views/member/balanceRecharge.vue | 130 + fuintAdmin/src/views/member/group/index.vue | 330 + fuintAdmin/src/views/member/index.vue | 618 ++ fuintAdmin/src/views/member/memberCard.vue | 265 + fuintAdmin/src/views/member/pointRecharge.vue | 129 + fuintAdmin/src/views/member/setting.vue | 131 + fuintAdmin/src/views/merchant/index.vue | 419 ++ fuintAdmin/src/views/openGift/index.vue | 323 + fuintAdmin/src/views/order/detail.vue | 309 + fuintAdmin/src/views/order/index.vue | 774 ++ fuintAdmin/src/views/order/setting.vue | 106 + fuintAdmin/src/views/point/list.vue | 175 + fuintAdmin/src/views/point/setting.vue | 126 + fuintAdmin/src/views/redirect.vue | 12 + fuintAdmin/src/views/refund/index.vue | 330 + fuintAdmin/src/views/settlement/index.vue | 440 ++ fuintAdmin/src/views/smsManager/index.vue | 218 + fuintAdmin/src/views/smsTemplate/index.vue | 302 + fuintAdmin/src/views/staff/list.vue | 382 + fuintAdmin/src/views/statistic/index.vue | 322 + fuintAdmin/src/views/stock/index.vue | 406 ++ .../src/views/stock/selectGoodsDialog.vue | 178 + fuintAdmin/src/views/store/list.vue | 570 ++ fuintAdmin/src/views/subMessage/index.vue | 253 + .../src/views/system/account/authRole.vue | 117 + fuintAdmin/src/views/system/account/index.vue | 522 ++ .../views/system/account/profile/index.vue | 91 + .../views/system/account/profile/resetPwd.vue | 68 + .../system/account/profile/userAvatar.vue | 172 + .../views/system/account/profile/userInfo.vue | 75 + fuintAdmin/src/views/system/config/index.vue | 343 + fuintAdmin/src/views/system/dict/data.vue | 399 + fuintAdmin/src/views/system/dict/index.vue | 346 + fuintAdmin/src/views/system/genCode/index.vue | 334 + fuintAdmin/src/views/system/logs/index.vue | 221 + fuintAdmin/src/views/system/menu/index.vue | 343 + fuintAdmin/src/views/system/notice/index.vue | 312 + fuintAdmin/src/views/system/role/authUser.vue | 180 + fuintAdmin/src/views/system/role/index.vue | 398 + .../src/views/system/role/selectUser.vue | 125 + .../src/views/tool/build/CodeTypeDialog.vue | 106 + .../src/views/tool/build/DraggableItem.vue | 100 + .../src/views/tool/build/IconsDialog.vue | 123 + .../src/views/tool/build/RightPanel.vue | 946 +++ .../src/views/tool/build/TreeNodeDialog.vue | 149 + fuintAdmin/src/views/tool/build/index.vue | 783 ++ .../src/views/tool/gen/basicInfoForm.vue | 60 + fuintAdmin/src/views/tool/gen/editTable.vue | 234 + fuintAdmin/src/views/tool/gen/genInfoForm.vue | 299 + fuintAdmin/src/views/tool/gen/importTable.vue | 120 + fuintAdmin/src/views/tool/gen/index.vue | 337 + fuintAdmin/src/views/tool/swagger/index.vue | 15 + fuintAdmin/src/views/userGrade/index.vue | 389 + fuintAdmin/vue.config.js | 136 + fuintBackend/.gitignore | 12 + fuintBackend/LICENSE | 661 ++ fuintBackend/README.md | 123 + .../configure/dev/application.properties | 119 + .../configure/prod/application.properties | 108 + fuintBackend/db/fuint-db.sql | 6434 +++++++++++++++++ fuintBackend/db/说明.txt | 2 + fuintBackend/fuint-application/pom.xml | 190 + .../main/java/com/fuint/common/Constants.java | 38 + .../java/com/fuint/common/aspect/LogAop.java | 147 + .../fuint/common/aspect/RedisModelAspect.java | 16 + .../fuint/common/aspect/TActionLogAop.java | 233 + .../com/fuint/common/bean/AliPayBean.java | 104 + .../com/fuint/common/bean/H5SceneInfo.java | 83 + .../com/fuint/common/bean/UnionPayBean.java | 64 + .../java/com/fuint/common/bean/WxPayBean.java | 78 + .../com/fuint/common/bean/WxPayV3Bean.java | 113 + .../fuint/common/config/CaptchaConfig.java | 41 + .../java/com/fuint/common/config/Message.java | 22 + .../common/config/MybatisPlusConfig.java | 51 + .../com/fuint/common/config/RedisConfig.java | 67 + .../fuint/common/config/SecurityConfig.java | 100 + .../fuint/common/config/SwaggerConfig.java | 44 + .../com/fuint/common/config/WebConfig.java | 100 + .../com/fuint/common/domain/TreeNode.java | 69 + .../com/fuint/common/domain/TreeSelect.java | 61 + .../java/com/fuint/common/dto/AccountDto.java | 68 + .../com/fuint/common/dto/AccountInfo.java | 74 + .../java/com/fuint/common/dto/AddressDto.java | 56 + .../java/com/fuint/common/dto/ArticleDto.java | 167 + .../java/com/fuint/common/dto/AssetDto.java | 25 + .../java/com/fuint/common/dto/BalanceDto.java | 56 + .../java/com/fuint/common/dto/BannerDto.java | 59 + .../main/java/com/fuint/common/dto/Body.java | 33 + .../fuint/common/dto/CommissionCashDto.java | 67 + .../fuint/common/dto/CommissionLogDto.java | 96 + .../fuint/common/dto/CommissionRuleDto.java | 56 + .../common/dto/CommissionRuleItemDto.java | 40 + .../com/fuint/common/dto/ConfirmLogDto.java | 67 + .../com/fuint/common/dto/CouponCellDto.java | 30 + .../java/com/fuint/common/dto/CouponDto.java | 74 + .../java/com/fuint/common/dto/DateDto.java | 22 + .../java/com/fuint/common/dto/ExpressDto.java | 26 + .../java/com/fuint/common/dto/GiveDto.java | 78 + .../com/fuint/common/dto/GiveItemDto.java | 50 + .../com/fuint/common/dto/GoodsCateDto.java | 61 + .../com/fuint/common/dto/GoodsDetailDto.java | 95 + .../java/com/fuint/common/dto/GoodsDto.java | 123 + .../com/fuint/common/dto/GoodsSkuDto.java | 52 + .../fuint/common/dto/GoodsSpecChildDto.java | 29 + .../com/fuint/common/dto/GoodsSpecDto.java | 30 + .../fuint/common/dto/GoodsSpecItemDto.java | 30 + .../fuint/common/dto/GoodsSpecValueDto.java | 29 + .../com/fuint/common/dto/GoodsTopDto.java | 36 + .../com/fuint/common/dto/GroupDataDto.java | 33 + .../fuint/common/dto/GroupDataListDto.java | 23 + .../com/fuint/common/dto/GroupMemberDto.java | 30 + .../java/com/fuint/common/dto/HangUpDto.java | 38 + .../main/java/com/fuint/common/dto/Head.java | 40 + .../com/fuint/common/dto/MemberGroupDto.java | 50 + .../com/fuint/common/dto/MemberTopDto.java | 36 + .../com/fuint/common/dto/MessageResDto.java | 26 + .../com/fuint/common/dto/MyCouponDto.java | 77 + .../com/fuint/common/dto/OpenGiftDto.java | 53 + .../com/fuint/common/dto/OpenWxCardDto.java | 35 + .../java/com/fuint/common/dto/OrderDto.java | 121 + .../com/fuint/common/dto/OrderGoodsDto.java | 51 + .../com/fuint/common/dto/OrderUserDto.java | 39 + .../main/java/com/fuint/common/dto/Page.java | 120 + .../java/com/fuint/common/dto/ParamDto.java | 28 + .../java/com/fuint/common/dto/PointDto.java | 52 + .../com/fuint/common/dto/PreStoreRuleDto.java | 25 + .../com/fuint/common/dto/RechargeRuleDto.java | 25 + .../java/com/fuint/common/dto/RefundDto.java | 79 + .../java/com/fuint/common/dto/RegionDto.java | 41 + .../com/fuint/common/dto/ReqCouponDto.java | 119 + .../fuint/common/dto/ReqCouponGroupDto.java | 46 + .../java/com/fuint/common/dto/ReqResult.java | 31 + .../com/fuint/common/dto/ReqSendLogDto.java | 68 + .../java/com/fuint/common/dto/ResCartDto.java | 45 + .../java/com/fuint/common/dto/ResCateDto.java | 33 + .../java/com/fuint/common/dto/RoleDto.java | 35 + .../com/fuint/common/dto/SettlementDto.java | 60 + .../fuint/common/dto/SettlementOrderDto.java | 46 + .../com/fuint/common/dto/SmsTemplateDto.java | 47 + .../java/com/fuint/common/dto/SourceDto.java | 73 + .../java/com/fuint/common/dto/StoreDto.java | 109 + .../com/fuint/common/dto/SubMessageDto.java | 40 + .../java/com/fuint/common/dto/TokenDto.java | 30 + .../com/fuint/common/dto/UserCouponDto.java | 79 + .../java/com/fuint/common/dto/UserDto.java | 111 + .../com/fuint/common/dto/UserGroupDto.java | 56 + .../java/com/fuint/common/dto/UserInfo.java | 22 + .../com/fuint/common/dto/UserOrderDto.java | 132 + .../java/com/fuint/common/dto/WxCardDto.java | 77 + .../com/fuint/common/enums/AdminRoleEnum.java | 77 + .../fuint/common/enums/ApplyGoodsEnum.java | 57 + .../common/enums/BalanceSettingEnum.java | 57 + .../enums/CommissionCashStatusEnum.java | 39 + .../common/enums/CommissionStatusEnum.java | 38 + .../common/enums/CommissionTargetEnum.java | 37 + .../common/enums/CommissionTypeEnum.java | 54 + .../fuint/common/enums/CouponContentEnum.java | 40 + .../common/enums/CouponExpireTypeEnum.java | 37 + .../fuint/common/enums/CouponTypeEnum.java | 38 + .../fuint/common/enums/CouponUseForEnum.java | 57 + .../com/fuint/common/enums/GenderEnum.java | 39 + .../com/fuint/common/enums/GoodsTypeEnum.java | 58 + .../fuint/common/enums/MemberSourceEnum.java | 59 + .../fuint/common/enums/MerchantTypeEnum.java | 39 + .../com/fuint/common/enums/MessageEnum.java | 35 + .../com/fuint/common/enums/OrderModeEnum.java | 37 + .../fuint/common/enums/OrderSettingEnum.java | 57 + .../fuint/common/enums/OrderStatusEnum.java | 43 + .../com/fuint/common/enums/OrderTypeEnum.java | 56 + .../com/fuint/common/enums/PayStatusEnum.java | 37 + .../com/fuint/common/enums/PayTypeEnum.java | 40 + .../fuint/common/enums/PlatformTypeEnum.java | 55 + .../fuint/common/enums/PointSettingEnum.java | 59 + .../com/fuint/common/enums/QrCodeEnum.java | 76 + .../fuint/common/enums/RefundStatusEnum.java | 40 + .../fuint/common/enums/RefundTypeEnum.java | 38 + .../com/fuint/common/enums/SendWayEnum.java | 58 + .../fuint/common/enums/SettingTypeEnum.java | 60 + .../fuint/common/enums/SettleStatusEnum.java | 37 + .../fuint/common/enums/StaffCategoryEnum.java | 78 + .../com/fuint/common/enums/StatusEnum.java | 41 + .../fuint/common/enums/UserActionEnum.java | 64 + .../common/enums/UserCouponStatusEnum.java | 60 + .../common/enums/UserGradeCatchTypeEnum.java | 39 + .../fuint/common/enums/UserSettingEnum.java | 61 + .../com/fuint/common/enums/WxMessageEnum.java | 62 + .../com/fuint/common/enums/YesOrNoEnum.java | 39 + .../fuint/common/http/HttpRESTDataClient.java | 100 + .../common/param/AddressDetailParam.java | 18 + .../common/param/ArticleDetailParam.java | 18 + .../fuint/common/param/ArticleListParam.java | 21 + .../fuint/common/param/BalanceListParam.java | 18 + .../fuint/common/param/CartClearParam.java | 25 + .../com/fuint/common/param/CartListParam.java | 45 + .../com/fuint/common/param/CartSaveParam.java | 39 + .../common/param/CommissionRuleItemParam.java | 31 + .../common/param/CommissionRuleParam.java | 49 + .../com/fuint/common/param/ConfirmParam.java | 24 + .../fuint/common/param/CouponInfoParam.java | 21 + .../fuint/common/param/CouponListParam.java | 36 + .../common/param/CouponReceiveParam.java | 27 + .../com/fuint/common/param/GiveListParam.java | 21 + .../com/fuint/common/param/GiveParam.java | 36 + .../fuint/common/param/GoodsInfoParam.java | 21 + .../fuint/common/param/MemberInfoParam.java | 24 + .../fuint/common/param/MemberListParam.java | 48 + .../fuint/common/param/OrderDetailParam.java | 18 + .../fuint/common/param/OrderListParam.java | 69 + .../com/fuint/common/param/PageParam.java | 69 + .../com/fuint/common/param/RechargeParam.java | 21 + .../fuint/common/param/SettlementParam.java | 75 + .../common/permission/PermissionService.java | 73 + .../fuint/common/service/AccountService.java | 122 + .../common/service/ActionLogService.java | 31 + .../fuint/common/service/AddressService.java | 42 + .../fuint/common/service/AlipayService.java | 62 + .../fuint/common/service/ArticleService.java | 67 + .../fuint/common/service/BalanceService.java | 56 + .../fuint/common/service/BannerService.java | 72 + .../fuint/common/service/CaptchaService.java | 43 + .../com/fuint/common/service/CartService.java | 80 + .../com/fuint/common/service/CateService.java | 70 + .../common/service/CommissionCashService.java | 74 + .../common/service/CommissionLogService.java | 53 + .../common/service/CommissionRuleService.java | 53 + .../common/service/ConfirmLogService.java | 47 + .../common/service/CouponGroupService.java | 110 + .../fuint/common/service/CouponService.java | 169 + .../com/fuint/common/service/DutyService.java | 121 + .../fuint/common/service/GenCodeService.java | 58 + .../com/fuint/common/service/GiveService.java | 58 + .../fuint/common/service/GoodsService.java | 143 + .../common/service/MemberGroupService.java | 59 + .../fuint/common/service/MemberService.java | 258 + .../fuint/common/service/MerchantService.java | 89 + .../fuint/common/service/MessageService.java | 58 + .../fuint/common/service/OpenGiftService.java | 73 + .../fuint/common/service/OrderService.java | 242 + .../fuint/common/service/PaymentService.java | 50 + .../fuint/common/service/PointService.java | 46 + .../fuint/common/service/RefundService.java | 94 + .../fuint/common/service/SendLogService.java | 51 + .../fuint/common/service/SendSmsService.java | 37 + .../fuint/common/service/SettingService.java | 66 + .../common/service/SettlementService.java | 54 + .../common/service/SmsTemplateService.java | 58 + .../fuint/common/service/SourceService.java | 97 + .../fuint/common/service/StaffService.java | 77 + .../fuint/common/service/StockService.java | 65 + .../fuint/common/service/StoreService.java | 107 + .../common/service/UserActionService.java | 49 + .../common/service/UserCouponService.java | 107 + .../common/service/UserGradeService.java | 84 + .../common/service/VerifyCodeService.java | 45 + .../fuint/common/service/WeixinService.java | 178 + .../service/impl/AccountServiceImpl.java | 411 ++ .../service/impl/ActionLogServiceImpl.java | 80 + .../service/impl/AddressServiceImpl.java | 121 + .../service/impl/AlipayServiceImpl.java | 259 + .../service/impl/ArticleServiceImpl.java | 277 + .../service/impl/BalanceServiceImpl.java | 293 + .../service/impl/BannerServiceImpl.java | 250 + .../service/impl/CaptchaServiceImpl.java | 105 + .../common/service/impl/CartServiceImpl.java | 320 + .../common/service/impl/CateServiceImpl.java | 261 + .../impl/CommissionCashServiceImpl.java | 321 + .../impl/CommissionLogServiceImpl.java | 293 + .../impl/CommissionRuleServiceImpl.java | 319 + .../service/impl/ConfirmLogServiceImpl.java | 162 + .../service/impl/CouponGroupServiceImpl.java | 598 ++ .../service/impl/CouponServiceImpl.java | 1210 ++++ .../common/service/impl/DutyServiceImpl.java | 305 + .../service/impl/GenCodeServiceImpl.java | 184 + .../common/service/impl/GiveServiceImpl.java | 324 + .../common/service/impl/GoodsServiceImpl.java | 679 ++ .../service/impl/MemberGroupServiceImpl.java | 264 + .../service/impl/MemberServiceImpl.java | 971 +++ .../service/impl/MerchantServiceImpl.java | 257 + .../service/impl/MessageServiceImpl.java | 134 + .../service/impl/OpenGiftServiceImpl.java | 349 + .../common/service/impl/OrderServiceImpl.java | 2119 ++++++ .../service/impl/PaymentServiceImpl.java | 286 + .../common/service/impl/PointServiceImpl.java | 279 + .../service/impl/RefundServiceImpl.java | 595 ++ .../service/impl/SendLogServiceImpl.java | 149 + .../service/impl/SendSmsServiceImpl.java | 262 + .../service/impl/SettingServiceImpl.java | 187 + .../service/impl/SettlementServiceImpl.java | 235 + .../service/impl/SmsTemplateServiceImpl.java | 170 + .../service/impl/SourceServiceImpl.java | 306 + .../common/service/impl/StaffServiceImpl.java | 258 + .../common/service/impl/StockServiceImpl.java | 216 + .../common/service/impl/StoreServiceImpl.java | 415 ++ .../service/impl/UserActionServiceImpl.java | 146 + .../service/impl/UserCouponServiceImpl.java | 738 ++ .../service/impl/UserGradeServiceImpl.java | 234 + .../service/impl/VerifyCodeServiceImpl.java | 121 + .../service/impl/WeixinServiceImpl.java | 1162 +++ .../com/fuint/common/util/AliyunOssUtil.java | 124 + .../com/fuint/common/util/AuthUserUtil.java | 29 + .../com/fuint/common/util/Base64Util.java | 106 + .../fuint/common/util/BizCodeGenerator.java | 65 + .../com/fuint/common/util/CommonUtil.java | 510 ++ .../java/com/fuint/common/util/DateUtil.java | 198 + .../common/util/DtoConversionEntity.java | 94 + .../java/com/fuint/common/util/ExcelUtil.java | 100 + .../java/com/fuint/common/util/GenUtils.java | 134 + .../com/fuint/common/util/HtmlEncode.java | 35 + .../fuint/common/util/HttpPostUploadUtil.java | 156 + .../java/com/fuint/common/util/ListUtil.java | 33 + .../java/com/fuint/common/util/MD5Util.java | 62 + .../common/util/PhoneFormatCheckUtils.java | 51 + .../com/fuint/common/util/QRCodeUtil.java | 147 + .../com/fuint/common/util/QuartzCronUtil.java | 50 + .../java/com/fuint/common/util/RedisUtil.java | 159 + .../java/com/fuint/common/util/RegexUtil.java | 90 + .../java/com/fuint/common/util/SeqUtil.java | 57 + .../java/com/fuint/common/util/TimeUtil.java | 161 + .../java/com/fuint/common/util/TimeUtils.java | 110 + .../java/com/fuint/common/util/TokenUtil.java | 167 + .../java/com/fuint/common/util/TreeUtil.java | 46 + .../common/util/VelocityInitializer.java | 30 + .../com/fuint/common/util/VelocityUtils.java | 139 + .../java/com/fuint/common/util/XlsUtil.java | 180 + .../main/java/com/fuint/common/vo/MetaVo.java | 101 + .../java/com/fuint/common/vo/RouterVo.java | 149 + .../common/web/AdminUserInterceptor.java | 45 + .../java/com/fuint/common/web/CORSFilter.java | 30 + .../common/web/ClientUserInterceptor.java | 74 + .../fuint/common/web/CommandInterceptor.java | 23 + .../fuint/common/web/SpringContextHolder.java | 37 + .../java/com/fuint/common/web/SystemInit.java | 48 + .../main/java/com/fuint/fuintApplication.java | 46 + .../controller/BackendAccountController.java | 434 ++ .../BackendActionLogController.java | 93 + .../controller/BackendArticleController.java | 241 + .../controller/BackendBalanceController.java | 316 + .../controller/BackendBannerController.java | 232 + .../controller/BackendCaptchaController.java | 82 + .../controller/BackendCashierController.java | 429 ++ .../controller/BackendCateController.java | 252 + .../BackendCommissionCashController.java | 243 + .../BackendCommissionLogController.java | 270 + .../BackendCommissionRuleController.java | 214 + .../controller/BackendCommonController.java | 123 + .../BackendConfirmLogController.java | 164 + .../controller/BackendCouponController.java | 472 ++ .../BackendCouponGroupController.java | 349 + .../BackendDoConfirmController.java | 189 + .../controller/BackendDutyController.java | 294 + .../controller/BackendFileController.java | 190 + .../controller/BackendGenCodeController.java | 209 + .../controller/BackendGiveLogController.java | 228 + .../controller/BackendGoodsController.java | 832 +++ .../controller/BackendHomeController.java | 186 + .../controller/BackendLoginController.java | 177 + .../controller/BackendMemberController.java | 592 ++ .../BackendMemberGroupController.java | 214 + .../controller/BackendMerchantController.java | 270 + .../controller/BackendOpenGiftController.java | 253 + .../controller/BackendOrderController.java | 506 ++ .../controller/BackendPointController.java | 280 + .../controller/BackendRefundController.java | 262 + .../controller/BackendSendLogController.java | 150 + .../BackendSettlementController.java | 224 + .../controller/BackendSmsController.java | 84 + .../BackendSmsTemplateController.java | 155 + .../controller/BackendSourceController.java | 253 + .../controller/BackendStaffController.java | 283 + .../BackendStatisticController.java | 169 + .../controller/BackendStockController.java | 257 + .../controller/BackendStoreController.java | 314 + .../BackendSubMessageController.java | 279 + .../BackendUserCouponController.java | 326 + .../BackendUserGradeController.java | 280 + .../request/AccountInfoRequest.java | 41 + .../request/CommissionCashRequest.java | 30 + .../request/CommissionLogRequest.java | 33 + .../CommissionSettleConfirmRequest.java | 25 + .../request/CommissionSettleRequest.java | 37 + .../backendApi/request/DutyStatusRequest.java | 22 + .../backendApi/request/LoginRequest.java | 27 + .../backendApi/request/SettlementRequest.java | 33 + .../backendApi/response/LoginResponse.java | 19 + .../controller/ClientAddressController.java | 220 + .../controller/ClientArticleController.java | 105 + .../controller/ClientBalanceController.java | 260 + .../controller/ClientCaptchaController.java | 79 + .../controller/ClientCartController.java | 295 + .../controller/ClientCashierController.java | 62 + .../controller/ClientConfirmController.java | 147 + .../controller/ClientCouponController.java | 188 + .../controller/ClientFileController.java | 175 + .../controller/ClientGiveController.java | 147 + .../controller/ClientGoodsController.java | 318 + .../controller/ClientHelpController.java | 50 + .../controller/ClientMessageController.java | 153 + .../controller/ClientMyCouponController.java | 104 + .../controller/ClientOrderController.java | 168 + .../controller/ClientPageController.java | 67 + .../controller/ClientPayController.java | 281 + .../controller/ClientPointsController.java | 112 + .../controller/ClientRefundController.java | 149 + .../controller/ClientRegionController.java | 100 + .../ClientSettlementController.java | 45 + .../controller/ClientSignController.java | 375 + .../controller/ClientSmsController.java | 121 + .../controller/ClientStoreController.java | 74 + .../controller/ClientSystemController.java | 149 + .../controller/ClientUserController.java | 370 + .../ClientUserCouponController.java | 210 + .../clientApi/request/AddressRequest.java | 43 + .../controller/MerchantController.java | 107 + .../controller/MerchantMemberController.java | 216 + .../controller/MerchantOrderController.java | 137 + .../fuint/module/schedule/CommissionJob.java | 87 + .../module/schedule/CouponExpireJob.java | 119 + .../com/fuint/module/schedule/MessageJob.java | 73 + .../fuint/module/schedule/OrderCancelJob.java | 86 + .../src/main/resources/application.properties | 26 + .../main/resources/captcha-conf.properties | 25 + .../src/main/resources/ehcache.xml | 25 + .../international/message_en_US.properties | 20 + .../international/message_zh_CN.properties | 20 + .../src/main/resources/logback-spring.xml | 35 + .../src/main/resources/sentry.properties | 1 + .../resources/static/defaultImage/all.png | Bin 0 -> 2026 bytes .../resources/static/defaultImage/avatar.png | Bin 0 -> 1754 bytes .../static/defaultImage/banner-1.png | Bin 0 -> 79516 bytes .../static/defaultImage/banner-2.png | Bin 0 -> 106948 bytes .../main/resources/static/defaultImage/bg.png | Bin 0 -> 12693 bytes .../resources/static/defaultImage/card.png | Bin 0 -> 3453 bytes .../resources/static/defaultImage/coupon.png | Bin 0 -> 7076 bytes .../resources/static/defaultImage/hot.png | Bin 0 -> 2198 bytes .../resources/static/defaultImage/life.png | Bin 0 -> 1853 bytes .../resources/static/defaultImage/logo.png | Bin 0 -> 17478 bytes .../resources/static/defaultImage/love.png | Bin 0 -> 1303 bytes .../resources/static/defaultImage/none.png | Bin 0 -> 1694 bytes .../resources/static/defaultImage/office.png | Bin 0 -> 504 bytes .../resources/static/defaultImage/timer.png | Bin 0 -> 3720 bytes .../31cbf7ad0ef442a4b10dcefc24db0662.jpg | Bin 0 -> 100475 bytes .../4c90921a7fc34c97b0f62cebf314d2bb.jpg | Bin 0 -> 69315 bytes .../56e306c812f240f89c0ed96ab8f94ad0.jpg | Bin 0 -> 82488 bytes .../6083071182cd48afa6c2b9e23f181832.jpg | Bin 0 -> 37071 bytes .../6b67b70f35734ff28a03aa3d82ac96a0.jpg | Bin 0 -> 76355 bytes .../856dbc96197e4782b4febb7a6e671bcb.jpg | Bin 0 -> 23269 bytes .../9b64b3d65fa04296b62de186899f24ea.jpg | Bin 0 -> 60669 bytes .../bfdd063cda3043688252ff49513e1fec.jpg | Bin 0 -> 80678 bytes .../d39f84568b9746f89d9f6a368b8067c4.jpg | Bin 0 -> 77714 bytes .../e641d7430df04c35a93a8238f5f6e312.jpg | Bin 0 -> 76469 bytes .../ee5c67ed338442fc90e5c647ccbfd381.jpg | Bin 0 -> 105933 bytes .../ff4809f7a17d4142ace9bc287aab105a.jpg | Bin 0 -> 125261 bytes .../src/main/resources/urlRewrite.xml | 5 + .../vm/java/BackendController.java.vm | 198 + .../src/main/resources/vm/java/mapper.java.vm | 14 + .../src/main/resources/vm/java/model.java.vm | 35 + .../main/resources/vm/java/service.java.vm | 71 + .../resources/vm/java/serviceImpl.java.vm | 167 + .../src/main/resources/vm/js/api.js.vm | 44 + .../src/main/resources/vm/sql/sql.vm | 22 + .../main/resources/vm/vue/index-tree.vue.vm | 505 ++ .../src/main/resources/vm/vue/index.vue.vm | 602 ++ .../resources/vm/vue/v3/index-tree.vue.vm | 474 ++ .../src/main/resources/vm/vue/v3/index.vue.vm | 590 ++ .../src/main/resources/vm/xml/mapper.xml.vm | 5 + fuintBackend/fuint-framework/pom.xml | 42 + .../fuint/framework/FrameworkConstants.java | 11 + .../annoation/OperationServiceLog.java | 16 + .../fuint/framework/dto/ExcelExportDto.java | 65 + .../exception/BusinessCheckException.java | 71 + .../exception/BusinessRuntimeException.java | 71 + .../exception/GlobalExceptionHandler.java | 106 + .../pagination/PaginationRequest.java | 80 + .../pagination/PaginationResponse.java | 167 + .../framework/service/ExportService.java | 21 + .../framework/service/ExportServiceImpl.java | 68 + .../fuint/framework/web/BaseController.java | 78 + .../fuint/framework/web/ResponseObject.java | 55 + fuintBackend/fuint-repository/pom.xml | 30 + .../com/fuint/repository/base/MyMapper.java | 11 + .../com/fuint/repository/bean/ColumnBean.java | 30 + .../fuint/repository/bean/CouponNumBean.java | 28 + .../com/fuint/repository/bean/GoodsBean.java | 56 + .../fuint/repository/bean/GoodsTopBean.java | 54 + .../fuint/repository/bean/MemberTopBean.java | 52 + .../repository/bean/StoreDistanceBean.java | 28 + .../repository/mapper/MtAddressMapper.java | 15 + .../repository/mapper/MtArticleMapper.java | 15 + .../repository/mapper/MtBalanceMapper.java | 18 + .../repository/mapper/MtBannerMapper.java | 14 + .../fuint/repository/mapper/MtCartMapper.java | 21 + .../mapper/MtCommissionCashMapper.java | 19 + .../mapper/MtCommissionLogMapper.java | 19 + .../mapper/MtCommissionRelationMapper.java | 14 + .../mapper/MtCommissionRuleItemMapper.java | 16 + .../mapper/MtCommissionRuleMapper.java | 14 + .../repository/mapper/MtConfirmLogMapper.java | 23 + .../mapper/MtCouponGoodsMapper.java | 19 + .../mapper/MtCouponGroupMapper.java | 14 + .../repository/mapper/MtCouponMapper.java | 21 + .../repository/mapper/MtGiveItemMapper.java | 14 + .../fuint/repository/mapper/MtGiveMapper.java | 20 + .../repository/mapper/MtGoodsCateMapper.java | 14 + .../repository/mapper/MtGoodsMapper.java | 32 + .../repository/mapper/MtGoodsSkuMapper.java | 19 + .../repository/mapper/MtGoodsSpecMapper.java | 19 + .../repository/mapper/MtMerchantMapper.java | 19 + .../repository/mapper/MtMessageMapper.java | 20 + .../mapper/MtOpenGiftItemMapper.java | 14 + .../repository/mapper/MtOpenGiftMapper.java | 14 + .../mapper/MtOrderAddressMapper.java | 19 + .../repository/mapper/MtOrderGoodsMapper.java | 14 + .../repository/mapper/MtOrderMapper.java | 46 + .../repository/mapper/MtPointMapper.java | 14 + .../repository/mapper/MtRefundMapper.java | 21 + .../repository/mapper/MtRegionMapper.java | 14 + .../repository/mapper/MtSendLogMapper.java | 19 + .../repository/mapper/MtSettingMapper.java | 20 + .../repository/mapper/MtSettlementMapper.java | 14 + .../mapper/MtSettlementOrderMapper.java | 14 + .../mapper/MtSmsSendedLogMapper.java | 14 + .../mapper/MtSmsTemplateMapper.java | 14 + .../repository/mapper/MtStaffMapper.java | 22 + .../repository/mapper/MtStockItemMapper.java | 14 + .../repository/mapper/MtStockMapper.java | 14 + .../repository/mapper/MtStoreMapper.java | 26 + .../repository/mapper/MtUserActionMapper.java | 21 + .../repository/mapper/MtUserCouponMapper.java | 40 + .../repository/mapper/MtUserGradeMapper.java | 14 + .../repository/mapper/MtUserGroupMapper.java | 17 + .../fuint/repository/mapper/MtUserMapper.java | 48 + .../repository/mapper/MtVerifyCodeMapper.java | 22 + .../repository/mapper/TAccountDutyMapper.java | 20 + .../repository/mapper/TAccountMapper.java | 14 + .../repository/mapper/TActionLogMapper.java | 14 + .../fuint/repository/mapper/TDutyMapper.java | 23 + .../repository/mapper/TDutySourceMapper.java | 21 + .../repository/mapper/TGenCodeMapper.java | 21 + .../repository/mapper/TPlatformMapper.java | 14 + .../repository/mapper/TSourceMapper.java | 22 + .../com/fuint/repository/model/MtAddress.java | 64 + .../com/fuint/repository/model/MtArticle.java | 70 + .../com/fuint/repository/model/MtBalance.java | 65 + .../com/fuint/repository/model/MtBanner.java | 64 + .../com/fuint/repository/model/MtCart.java | 63 + .../repository/model/MtCommissionCash.java | 68 + .../repository/model/MtCommissionLog.java | 92 + .../model/MtCommissionRelation.java | 55 + .../repository/model/MtCommissionRule.java | 64 + .../model/MtCommissionRuleItem.java | 80 + .../fuint/repository/model/MtConfirmLog.java | 81 + .../com/fuint/repository/model/MtCoupon.java | 126 + .../fuint/repository/model/MtCouponGoods.java | 46 + .../fuint/repository/model/MtCouponGroup.java | 68 + .../com/fuint/repository/model/MtGive.java | 84 + .../fuint/repository/model/MtGiveItem.java | 46 + .../com/fuint/repository/model/MtGoods.java | 108 + .../fuint/repository/model/MtGoodsCate.java | 61 + .../fuint/repository/model/MtGoodsSku.java | 58 + .../fuint/repository/model/MtGoodsSpec.java | 43 + .../fuint/repository/model/MtMerchant.java | 79 + .../com/fuint/repository/model/MtMessage.java | 67 + .../fuint/repository/model/MtOpenGift.java | 60 + .../repository/model/MtOpenGiftItem.java | 46 + .../com/fuint/repository/model/MtOrder.java | 116 + .../repository/model/MtOrderAddress.java | 59 + .../fuint/repository/model/MtOrderGoods.java | 62 + .../com/fuint/repository/model/MtPoint.java | 61 + .../com/fuint/repository/model/MtRefund.java | 69 + .../com/fuint/repository/model/MtRegion.java | 45 + .../com/fuint/repository/model/MtSendLog.java | 83 + .../com/fuint/repository/model/MtSetting.java | 64 + .../fuint/repository/model/MtSettlement.java | 65 + .../repository/model/MtSettlementOrder.java | 52 + .../repository/model/MtSmsSendedLog.java | 53 + .../fuint/repository/model/MtSmsTemplate.java | 64 + .../com/fuint/repository/model/MtStaff.java | 67 + .../com/fuint/repository/model/MtStock.java | 55 + .../fuint/repository/model/MtStockItem.java | 55 + .../com/fuint/repository/model/MtStore.java | 116 + .../com/fuint/repository/model/MtUser.java | 114 + .../fuint/repository/model/MtUserAction.java | 60 + .../fuint/repository/model/MtUserCoupon.java | 90 + .../fuint/repository/model/MtUserGrade.java | 64 + .../fuint/repository/model/MtUserGroup.java | 56 + .../fuint/repository/model/MtVerifyCode.java | 50 + .../com/fuint/repository/model/TAccount.java | 72 + .../fuint/repository/model/TAccountDuty.java | 37 + .../fuint/repository/model/TActionLog.java | 64 + .../com/fuint/repository/model/TDuty.java | 44 + .../fuint/repository/model/TDutySource.java | 36 + .../com/fuint/repository/model/TGenCode.java | 67 + .../com/fuint/repository/model/TPlatform.java | 42 + .../com/fuint/repository/model/TSource.java | 71 + .../model/base/AutoIncrementIdModel.java | 18 + .../model/base/ElasticSearchModel.java | 26 + .../repository/model/base/OpsExercise.java | 38 + .../repository/model/base/RedisCache.java | 17 + .../main/resources/mapper/MtAddressMapper.xml | 7 + .../main/resources/mapper/MtArticleMapper.xml | 7 + .../main/resources/mapper/MtBalanceMapper.xml | 7 + .../main/resources/mapper/MtBannerMapper.xml | 5 + .../main/resources/mapper/MtCartMapper.xml | 15 + .../mapper/MtCommissionCashMapper.xml | 17 + .../mapper/MtCommissionLogMapper.xml | 17 + .../mapper/MtCommissionRelationMapper.xml | 5 + .../mapper/MtCommissionRuleItemMapper.xml | 7 + .../mapper/MtCommissionRuleMapper.xml | 4 + .../resources/mapper/MtConfirmLogMapper.xml | 22 + .../resources/mapper/MtCouponGoodsMapper.xml | 7 + .../resources/mapper/MtCouponGroupMapper.xml | 5 + .../main/resources/mapper/MtCouponMapper.xml | 11 + .../resources/mapper/MtGiveItemMapper.xml | 5 + .../main/resources/mapper/MtGiveMapper.xml | 7 + .../resources/mapper/MtGoodsCateMapper.xml | 5 + .../main/resources/mapper/MtGoodsMapper.xml | 72 + .../resources/mapper/MtGoodsSkuMapper.xml | 7 + .../resources/mapper/MtGoodsSpecMapper.xml | 7 + .../resources/mapper/MtMerchantMapper.xml | 11 + .../main/resources/mapper/MtMessageMapper.xml | 10 + .../resources/mapper/MtOpenGiftItemMapper.xml | 5 + .../resources/mapper/MtOpenGiftMapper.xml | 5 + .../resources/mapper/MtOrderAddressMapper.xml | 7 + .../resources/mapper/MtOrderGoodsMapper.xml | 5 + .../main/resources/mapper/MtOrderMapper.xml | 71 + .../main/resources/mapper/MtPointMapper.xml | 5 + .../main/resources/mapper/MtRefundMapper.xml | 10 + .../main/resources/mapper/MtRegionMapper.xml | 5 + .../main/resources/mapper/MtSendLogMapper.xml | 11 + .../main/resources/mapper/MtSettingMapper.xml | 11 + .../resources/mapper/MtSettlementMapper.xml | 5 + .../mapper/MtSettlementOrderMapper.xml | 5 + .../resources/mapper/MtSmsSendedLogMapper.xml | 5 + .../resources/mapper/MtSmsTemplateMapper.xml | 5 + .../main/resources/mapper/MtStaffMapper.xml | 15 + .../main/resources/mapper/MtStoreMapper.xml | 33 + .../resources/mapper/MtUserActionMapper.xml | 14 + .../resources/mapper/MtUserCouponMapper.xml | 68 + .../resources/mapper/MtUserGradeMapper.xml | 5 + .../resources/mapper/MtUserGroupMapper.xml | 13 + .../main/resources/mapper/MtUserMapper.xml | 113 + .../resources/mapper/MtVerifyCodeMapper.xml | 11 + .../resources/mapper/TAccountDutyMapper.xml | 11 + .../main/resources/mapper/TAccountMapper.xml | 5 + .../resources/mapper/TActionLogMapper.xml | 5 + .../src/main/resources/mapper/TDutyMapper.xml | 33 + .../resources/mapper/TDutySourceMapper.xml | 12 + .../main/resources/mapper/TGenCodeMapper.xml | 12 + .../main/resources/mapper/TPlatformMapper.xml | 5 + .../main/resources/mapper/TSourceMapper.xml | 28 + fuintBackend/fuint-utils/pom.xml | 70 + .../java/com/fuint/exception/Exceptions.java | 70 + .../main/java/com/fuint/text/CharsetKit.java | 87 + .../src/main/java/com/fuint/text/Convert.java | 1007 +++ .../java/com/fuint/text/StrFormatter.java | 93 + .../src/main/java/com/fuint/utils/AES.java | 104 + .../main/java/com/fuint/utils/AESUtil.java | 135 + .../main/java/com/fuint/utils/ArrayUtil.java | 5546 ++++++++++++++ .../main/java/com/fuint/utils/Base64Util.java | 175 + .../java/com/fuint/utils/BeanToMapUtil.java | 83 + .../main/java/com/fuint/utils/ClassUtil.java | 1252 ++++ .../main/java/com/fuint/utils/CommonUtil.java | 28 + .../java/com/fuint/utils/ContextUtils.java | 42 + .../main/java/com/fuint/utils/Digests.java | 110 + .../main/java/com/fuint/utils/Encodes.java | 125 + .../java/com/fuint/utils/ExportExcelUtil.java | 368 + .../main/java/com/fuint/utils/HttpUtil.java | 153 + .../src/main/java/com/fuint/utils/IDCard.java | 416 ++ .../src/main/java/com/fuint/utils/IpUtil.java | 72 + .../main/java/com/fuint/utils/MD5Util.java | 41 + .../main/java/com/fuint/utils/ObjectUtil.java | 376 + .../java/com/fuint/utils/PropertiesUtil.java | 57 + .../main/java/com/fuint/utils/QRCodeUtil.java | 40 + .../main/java/com/fuint/utils/RSAKeys.java | 15 + .../main/java/com/fuint/utils/SeqUtil.java | 122 + .../main/java/com/fuint/utils/StringUtil.java | 4215 +++++++++++ .../main/java/com/fuint/utils/TimeUtils.java | 82 + .../java/com/fuint/utils/ValidationUtil.java | 138 + fuintBackend/pom.xml | 174 + fuintBackend/sbin/kill.sh | 8 + fuintBackend/sbin/restart.sh | 8 + fuintBackend/sbin/start.sh | 8 + fuintBackend/sbin/stop.sh | 16 + fuintBackend/sbin/yanhe.fuint | 132 + fuintBackend/screenshots/cashier.png | Bin 0 -> 155908 bytes fuintBackend/screenshots/coupon-list.png | Bin 0 -> 101590 bytes fuintBackend/screenshots/create.png | Bin 0 -> 140340 bytes fuintBackend/screenshots/f1.png | Bin 0 -> 208989 bytes fuintBackend/screenshots/f2.png | Bin 0 -> 73989 bytes fuintBackend/screenshots/f3.png | Bin 0 -> 61960 bytes fuintBackend/screenshots/f4.png | Bin 0 -> 85410 bytes fuintBackend/screenshots/g1.png | Bin 0 -> 326546 bytes fuintBackend/screenshots/g2.png | Bin 0 -> 140613 bytes fuintBackend/screenshots/g3.png | Bin 0 -> 157852 bytes fuintBackend/screenshots/g4.png | Bin 0 -> 148102 bytes fuintBackend/screenshots/g5.png | Bin 0 -> 183893 bytes fuintBackend/screenshots/home.png | Bin 0 -> 99754 bytes fuintBackend/screenshots/homeV1.png | Bin 0 -> 103847 bytes fuintBackend/screenshots/homeV2.png | Bin 0 -> 91908 bytes fuintBackend/screenshots/login.png | Bin 0 -> 264914 bytes fuintBackend/screenshots/miniapp.png | Bin 0 -> 15523 bytes fuintBackend/screenshots/mp.jpg | Bin 0 -> 27233 bytes fuintBackend/screenshots/qr.png | Bin 0 -> 36251 bytes fuintBackend/screenshots/system.png | Bin 0 -> 356500 bytes fuintUniapp/.gitignore | 2 + fuintUniapp/.hbuilderx/launch.json | 20 + fuintUniapp/App.vue | 65 + fuintUniapp/LICENSE | 191 + fuintUniapp/README.md | 122 + fuintUniapp/api/address.js | 33 + fuintUniapp/api/article.js | 23 + fuintUniapp/api/balance.js | 23 + fuintUniapp/api/cart.js | 23 + fuintUniapp/api/confirm.js | 11 + fuintUniapp/api/coupon.js | 28 + fuintUniapp/api/give.js | 17 + fuintUniapp/api/goods.js | 29 + fuintUniapp/api/goods/service.js | 11 + fuintUniapp/api/help.js | 11 + fuintUniapp/api/login/index.js | 41 + fuintUniapp/api/merchant.js | 16 + fuintUniapp/api/merchant/member.js | 19 + fuintUniapp/api/merchant/order.js | 18 + fuintUniapp/api/message.js | 24 + fuintUniapp/api/myCoupon.js | 33 + fuintUniapp/api/order.js | 41 + fuintUniapp/api/page.js | 11 + fuintUniapp/api/points/log.js | 17 + fuintUniapp/api/refund.js | 30 + fuintUniapp/api/region.js | 17 + fuintUniapp/api/setting.js | 29 + fuintUniapp/api/settlement.js | 22 + fuintUniapp/api/upload.js | 23 + fuintUniapp/api/user.js | 51 + fuintUniapp/api/user/coupon.js | 11 + fuintUniapp/app.scss | 26 + fuintUniapp/common/constant/index.js | 3 + fuintUniapp/common/constant/paginate.js | 7 + fuintUniapp/common/enum/coupon/ApplyRange.js | 10 + fuintUniapp/common/enum/coupon/CouponType.js | 11 + fuintUniapp/common/enum/coupon/ExpireType.js | 10 + fuintUniapp/common/enum/coupon/index.js | 5 + fuintUniapp/common/enum/enum.js | 85 + .../common/enum/order/DeliveryStatus.js | 10 + fuintUniapp/common/enum/order/DeliveryType.js | 9 + fuintUniapp/common/enum/order/OrderSource.js | 11 + fuintUniapp/common/enum/order/OrderStatus.js | 16 + fuintUniapp/common/enum/order/PayStatus.js | 10 + fuintUniapp/common/enum/order/PayType.js | 14 + .../common/enum/order/ReceiptStatus.js | 10 + fuintUniapp/common/enum/order/index.js | 17 + .../common/enum/order/refund/AuditStatus.js | 11 + .../common/enum/order/refund/RefundStatus.js | 12 + .../common/enum/order/refund/RefundType.js | 10 + fuintUniapp/common/enum/order/refund/index.js | 9 + fuintUniapp/common/enum/setting/Key.js | 19 + .../common/enum/store/page/category/Style.js | 11 + .../common/enum/store/page/category/index.js | 3 + fuintUniapp/common/model/Region.js | 57 + fuintUniapp/common/model/Setting.js | 58 + fuintUniapp/components/actionsheet/index.js | 42 + fuintUniapp/components/actionsheet/index.json | 6 + fuintUniapp/components/actionsheet/index.wxml | 39 + fuintUniapp/components/actionsheet/index.wxss | 86 + .../bian-keywords/iconfont/iconfont.css | 25 + .../bian-keywords/iconfont/iconfont.eot | Bin 0 -> 2064 bytes .../bian-keywords/iconfont/iconfont.js | 1 + .../bian-keywords/iconfont/iconfont.json | 23 + .../bian-keywords/iconfont/iconfont.svg | 32 + .../bian-keywords/iconfont/iconfont.ttf | Bin 0 -> 1896 bytes .../bian-keywords/iconfont/iconfont.woff | Bin 0 -> 1248 bytes .../bian-keywords/iconfont/iconfont.woff2 | Bin 0 -> 860 bytes .../components/bian-keywords/index.vue | 270 + fuintUniapp/components/btn/index.js | 61 + fuintUniapp/components/btn/index.json | 3 + fuintUniapp/components/btn/index.wxml | 24 + fuintUniapp/components/btn/index.wxss | 1 + .../components/btn/native-button-behaviors.js | 74 + fuintUniapp/components/common/color.js | 3 + fuintUniapp/components/common/component.js | 48 + fuintUniapp/components/common/index.wxss | 1 + .../components/common/style/clearfix.wxss | 1 + .../components/common/style/ellipsis.wxss | 1 + .../components/common/style/hairline.wxss | 1 + .../common/style/mixins/clearfix.wxss | 0 .../common/style/mixins/ellipsis.wxss | 0 .../common/style/mixins/hairline.wxss | 0 fuintUniapp/components/common/style/var.wxss | 0 fuintUniapp/components/common/utils.js | 14 + fuintUniapp/components/dialog/data.js | 26 + fuintUniapp/components/dialog/dialog.js | 104 + fuintUniapp/components/dialog/index.js | 148 + fuintUniapp/components/dialog/index.json | 7 + fuintUniapp/components/dialog/index.wxml | 18 + fuintUniapp/components/dialog/index.wxss | 79 + fuintUniapp/components/empty/index.vue | 66 + .../components/goods-sku-popup/index.vue | 869 +++ .../goods-sku-popup/number-box/index.vue | 394 + fuintUniapp/components/grade-popup/index.vue | 524 ++ .../components/jyf-parser/jyf-parser.vue | 645 ++ .../components/jyf-parser/libs/CssHandler.js | 100 + .../jyf-parser/libs/MpHtmlParser.js | 580 ++ .../components/jyf-parser/libs/config.js | 80 + .../components/jyf-parser/libs/handler.wxs | 22 + .../components/jyf-parser/libs/trees.vue | 506 ++ fuintUniapp/components/loading/index.js | 17 + fuintUniapp/components/loading/index.json | 3 + fuintUniapp/components/loading/index.wxml | 16 + fuintUniapp/components/loading/index.wxss | 1 + .../components/merchant-shortcut/index.vue | 279 + .../mescroll-uni/components/mescroll-down.css | 55 + .../mescroll-uni/components/mescroll-down.vue | 47 + .../components/mescroll-empty.vue | 90 + .../mescroll-uni/components/mescroll-top.vue | 83 + .../mescroll-uni/components/mescroll-up.css | 47 + .../mescroll-uni/components/mescroll-up.vue | 39 + .../components/mescroll-uni/mescroll-body.css | 19 + .../components/mescroll-uni/mescroll-body.vue | 348 + .../mescroll-uni/mescroll-mixins.js | 65 + .../mescroll-uni/mescroll-uni-option.js | 37 + .../components/mescroll-uni/mescroll-uni.css | 36 + .../components/mescroll-uni/mescroll-uni.js | 799 ++ .../components/mescroll-uni/mescroll-uni.vue | 424 ++ .../mescroll-uni/mixins/mescroll-comp.js | 48 + .../mescroll-uni/mixins/mescroll-more-item.js | 59 + .../mescroll-uni/mixins/mescroll-more.js | 74 + .../components/mescroll-uni/wxs/mixins.js | 109 + .../components/mescroll-uni/wxs/renderjs.js | 92 + .../components/mescroll-uni/wxs/wxs.wxs | 268 + fuintUniapp/components/mixins/basic.js | 22 + fuintUniapp/components/mixins/button.js | 18 + fuintUniapp/components/mixins/iphonex.js | 32 + fuintUniapp/components/mixins/link.js | 17 + .../components/mixins/observer/behavior.js | 47 + .../components/mixins/observer/index.js | 27 + .../components/mixins/observer/props.js | 22 + fuintUniapp/components/mixins/open-type.js | 25 + fuintUniapp/components/mixins/touch.js | 21 + fuintUniapp/components/mixins/transition.js | 89 + .../neoceansoft-keyboard.vue | 444 ++ fuintUniapp/components/page/article/index.vue | 122 + fuintUniapp/components/page/banner/index.vue | 163 + fuintUniapp/components/page/blank/index.vue | 31 + fuintUniapp/components/page/coupon/index.vue | 294 + fuintUniapp/components/page/goods/index.vue | 349 + fuintUniapp/components/page/guide/index.vue | 36 + fuintUniapp/components/page/image/index.vue | 47 + fuintUniapp/components/page/index.vue | 108 + .../components/page/location/index.vue | 105 + fuintUniapp/components/page/mixin.js | 23 + fuintUniapp/components/page/navBar/index.vue | 115 + fuintUniapp/components/page/notice/index.vue | 40 + .../components/page/richText/index.vue | 41 + fuintUniapp/components/page/search/index.vue | 75 + fuintUniapp/components/page/service/index.vue | 86 + fuintUniapp/components/page/video/index.vue | 38 + fuintUniapp/components/page/window/index.vue | 171 + fuintUniapp/components/pay-popup/index.vue | 583 ++ fuintUniapp/components/pop-manager/index.js | 31 + fuintUniapp/components/pop-manager/index.json | 3 + fuintUniapp/components/pop-manager/index.wxml | 12 + fuintUniapp/components/pop-manager/index.wxss | 1 + fuintUniapp/components/popup/index.js | 37 + fuintUniapp/components/popup/index.json | 6 + fuintUniapp/components/popup/index.wxml | 8 + .../components/prestore-popup/index.vue | 397 + .../prestore-popup/number-box/index.vue | 394 + fuintUniapp/components/search/index.vue | 78 + .../select-region/select-region.vue | 165 + fuintUniapp/components/shortcut/index.vue | 276 + fuintUniapp/components/switch/index.js | 43 + fuintUniapp/components/switch/index.json | 6 + fuintUniapp/components/switch/index.wxml | 11 + fuintUniapp/components/switch/index.wxss | 1 + fuintUniapp/components/toptips/index.js | 54 + fuintUniapp/components/toptips/index.json | 3 + fuintUniapp/components/toptips/index.wxml | 1 + fuintUniapp/components/toptips/index.wxss | 1 + fuintUniapp/components/toptips/toptips.js | 28 + .../uni-transition/uni-transition.vue | 279 + fuintUniapp/components/wxs/array.wxs | 5 + fuintUniapp/components/wxs/bem.wxs | 38 + fuintUniapp/components/wxs/memoize.wxs | 54 + fuintUniapp/components/wxs/object.wxs | 13 + fuintUniapp/components/wxs/utils.wxs | 12 + .../components/xuan-switch/xuan-switch.vue | 184 + fuintUniapp/config.js | 8 + fuintUniapp/core/bootstrap.js | 13 + fuintUniapp/core/ican-H5Api.js | 71 + fuintUniapp/main.js | 39 + fuintUniapp/manifest.json | 117 + fuintUniapp/package.json | 9 + fuintUniapp/pages.json | 359 + fuintUniapp/pages/address/create.vue | 176 + fuintUniapp/pages/address/index.vue | 285 + fuintUniapp/pages/address/update.vue | 219 + fuintUniapp/pages/article/detail.vue | 82 + fuintUniapp/pages/article/index.vue | 252 + fuintUniapp/pages/cart/index.vue | 498 ++ .../pages/category/components/SkuPopup.vue | 194 + fuintUniapp/pages/category/index.vue | 587 ++ fuintUniapp/pages/comment/index.vue | 276 + fuintUniapp/pages/confirm/doConfirm.vue | 332 + fuintUniapp/pages/confirm/result.vue | 123 + fuintUniapp/pages/coupon/detail.vue | 430 ++ fuintUniapp/pages/coupon/list.vue | 517 ++ fuintUniapp/pages/coupon/receive.vue | 158 + fuintUniapp/pages/custom/index.vue | 120 + fuintUniapp/pages/empty.vue | 29 + fuintUniapp/pages/give/index.vue | 259 + .../pages/goods/components/Service.vue | 158 + .../pages/goods/components/SkuPopup.vue | 203 + .../pages/goods/components/SlideImage.vue | 88 + fuintUniapp/pages/goods/detail.scss | 232 + fuintUniapp/pages/goods/detail.vue | 277 + fuintUniapp/pages/goods/list.vue | 492 ++ fuintUniapp/pages/help/index.vue | 111 + fuintUniapp/pages/index/index.vue | 235 + fuintUniapp/pages/location/index.vue | 212 + fuintUniapp/pages/login/auth.vue | 180 + fuintUniapp/pages/login/components/main.vue | 598 ++ .../pages/login/components/mp-weixin.vue | 241 + fuintUniapp/pages/login/index.vue | 99 + fuintUniapp/pages/merchant/index.vue | 571 ++ fuintUniapp/pages/merchant/member/detail.vue | 79 + fuintUniapp/pages/merchant/member/index.vue | 249 + fuintUniapp/pages/merchant/order/index.vue | 403 ++ fuintUniapp/pages/my-coupon/index.vue | 281 + fuintUniapp/pages/order/comment/index.vue | 562 ++ fuintUniapp/pages/order/detail.vue | 884 +++ fuintUniapp/pages/order/express/index.vue | 202 + fuintUniapp/pages/order/index.vue | 400 + fuintUniapp/pages/order/result.vue | 190 + fuintUniapp/pages/pay/cashier.vue | 226 + fuintUniapp/pages/pay/components/Popup.vue | 57 + fuintUniapp/pages/pay/index.vue | 345 + fuintUniapp/pages/pay/result.vue | 120 + fuintUniapp/pages/points/detail.vue | 229 + fuintUniapp/pages/points/gift.vue | 208 + fuintUniapp/pages/prestore/buy.scss | 254 + fuintUniapp/pages/prestore/buy.vue | 216 + .../pages/prestore/components/Popup.vue | 71 + .../pages/prestore/components/Service.vue | 158 + fuintUniapp/pages/prestore/detail.vue | 221 + fuintUniapp/pages/refund/apply.vue | 431 ++ fuintUniapp/pages/refund/detail.vue | 460 ++ fuintUniapp/pages/refund/index.vue | 281 + fuintUniapp/pages/search/index.vue | 222 + fuintUniapp/pages/settlement/goods.vue | 550 ++ fuintUniapp/pages/settlement/index.vue | 227 + fuintUniapp/pages/settlement/style.scss | 487 ++ fuintUniapp/pages/timer/detail.vue | 364 + fuintUniapp/pages/user/card.vue | 138 + fuintUniapp/pages/user/code.vue | 138 + fuintUniapp/pages/user/components/Popup.vue | 59 + fuintUniapp/pages/user/index.vue | 786 ++ fuintUniapp/pages/user/password.vue | 211 + fuintUniapp/pages/user/setting.vue | 297 + fuintUniapp/pages/wallet/balance/log.vue | 128 + fuintUniapp/pages/wallet/index.vue | 160 + fuintUniapp/pages/wallet/recharge/index.vue | 294 + fuintUniapp/pages/wallet/recharge/order.vue | 132 + fuintUniapp/static/background/user-header.png | Bin 0 -> 30370 bytes fuintUniapp/static/channel/wechat.png | Bin 0 -> 2053 bytes fuintUniapp/static/confirm/do.png | Bin 0 -> 2936 bytes fuintUniapp/static/confirm/undo.png | Bin 0 -> 7045 bytes fuintUniapp/static/default-avatar.png | Bin 0 -> 2672 bytes fuintUniapp/static/empty-02.png | Bin 0 -> 8448 bytes fuintUniapp/static/empty.png | Bin 0 -> 7228 bytes fuintUniapp/static/icon/add.png | Bin 0 -> 1142 bytes fuintUniapp/static/icon/coupon.png | Bin 0 -> 1732 bytes fuintUniapp/static/icon/minus.png | Bin 0 -> 1026 bytes fuintUniapp/static/icon/saoma.png | Bin 0 -> 1714 bytes fuintUniapp/static/icon/saoyisao.png | Bin 0 -> 2183 bytes fuintUniapp/static/nav/1.png | Bin 0 -> 755 bytes fuintUniapp/static/nav/2.png | Bin 0 -> 1587 bytes fuintUniapp/static/nav/3.png | Bin 0 -> 1685 bytes fuintUniapp/static/nav/4.png | Bin 0 -> 1305 bytes fuintUniapp/static/order/refund-bg.png | Bin 0 -> 1832 bytes fuintUniapp/static/order/status/close.png | Bin 0 -> 3570 bytes fuintUniapp/static/order/status/received.png | Bin 0 -> 1843 bytes .../static/order/status/wait_deliver.png | Bin 0 -> 2902 bytes fuintUniapp/static/order/status/wait_pay.png | Bin 0 -> 2182 bytes .../static/order/status/wait_receipt.png | Bin 0 -> 2640 bytes fuintUniapp/static/pay/fail.png | Bin 0 -> 957 bytes fuintUniapp/static/pay/success.png | Bin 0 -> 870 bytes fuintUniapp/static/tabbar/cart-active.png | Bin 0 -> 6307 bytes fuintUniapp/static/tabbar/cart.png | Bin 0 -> 7144 bytes fuintUniapp/static/tabbar/cate-active.png | Bin 0 -> 4536 bytes fuintUniapp/static/tabbar/cate.png | Bin 0 -> 5430 bytes fuintUniapp/static/tabbar/home-active.png | Bin 0 -> 4940 bytes fuintUniapp/static/tabbar/home.png | Bin 0 -> 5133 bytes fuintUniapp/static/tabbar/shop-active.png | Bin 0 -> 2973 bytes fuintUniapp/static/tabbar/shop.png | Bin 0 -> 2868 bytes fuintUniapp/static/tabbar/user-active.png | Bin 0 -> 5536 bytes fuintUniapp/static/tabbar/user.png | Bin 0 -> 5530 bytes fuintUniapp/static/user/tag.png | Bin 0 -> 787 bytes fuintUniapp/store/getters.js | 7 + fuintUniapp/store/index.js | 26 + fuintUniapp/store/modules/app.js | 24 + fuintUniapp/store/modules/index.js | 7 + fuintUniapp/store/modules/user.js | 96 + fuintUniapp/store/mutation-types.js | 3 + fuintUniapp/uni.scss | 82 + .../uni_modules/uni-popup/changelog.md | 33 + .../components/uni-popup-dialog/keypress.js | 45 + .../uni-popup-dialog/uni-popup-dialog.vue | 244 + .../uni-popup-message/uni-popup-message.vue | 143 + .../uni-popup-share/uni-popup-share.vue | 171 + .../components/uni-popup/keypress.js | 45 + .../uni-popup/components/uni-popup/popup.js | 26 + .../components/uni-popup/uni-popup.vue | 401 + .../uni_modules/uni-popup/package.json | 83 + fuintUniapp/uni_modules/uni-popup/readme.md | 296 + fuintUniapp/uni_modules/uni-row/changelog.md | 5 + .../uni-row/components/uni-col/uni-col.vue | 316 + .../uni-row/components/uni-row/uni-row.vue | 190 + fuintUniapp/uni_modules/uni-row/package.json | 83 + fuintUniapp/uni_modules/uni-row/readme.md | 183 + fuintUniapp/utils/app.js | 360 + fuintUniapp/utils/iconfont-new.scss | 39 + fuintUniapp/utils/iconfont.scss | 459 ++ fuintUniapp/utils/request/core/request.js | 143 + fuintUniapp/utils/request/core/utils.js | 102 + fuintUniapp/utils/request/index.js | 205 + fuintUniapp/utils/request/request.js | 7 + fuintUniapp/utils/request/request.md | 453 ++ .../utils/request/upload/qiniuUploader.js | 169 + fuintUniapp/utils/request/upload/upload.js | 208 + fuintUniapp/utils/request/upload/utils.js | 288 + fuintUniapp/utils/storage.js | 86 + fuintUniapp/utils/util.js | 181 + fuintUniapp/utils/utils.scss | 371 + fuintUniapp/utils/verify.js | 69 + fuintUniapp/uview-ui/LICENSE | 21 + fuintUniapp/uview-ui/README.md | 106 + .../u-action-sheet/u-action-sheet.vue | 190 + .../components/u-alert-tips/u-alert-tips.vue | 256 + .../u-avatar-cropper/u-avatar-cropper.vue | 290 + .../components/u-avatar-cropper/weCropper.js | 1265 ++++ .../uview-ui/components/u-avatar/u-avatar.vue | 244 + .../components/u-back-top/u-back-top.vue | 153 + .../uview-ui/components/u-badge/u-badge.vue | 216 + .../uview-ui/components/u-button/u-button.vue | 596 ++ .../components/u-calendar/u-calendar.vue | 639 ++ .../u-car-keyboard/u-car-keyboard.vue | 257 + .../uview-ui/components/u-card/u-card.vue | 299 + .../components/u-cell-group/u-cell-group.vue | 70 + .../components/u-cell-item/u-cell-item.vue | 316 + .../u-checkbox-group/u-checkbox-group.vue | 123 + .../components/u-checkbox/u-checkbox.vue | 284 + .../u-circle-progress/u-circle-progress.vue | 220 + .../uview-ui/components/u-col/u-col.vue | 156 + .../u-collapse-item/u-collapse-item.vue | 204 + .../components/u-collapse/u-collapse.vue | 99 + .../u-column-notice/u-column-notice.vue | 237 + .../components/u-count-down/u-count-down.vue | 318 + .../components/u-count-to/u-count-to.vue | 241 + .../components/u-divider/u-divider.vue | 153 + .../u-dropdown-item/u-dropdown-item.vue | 132 + .../components/u-dropdown/u-dropdown.vue | 298 + .../uview-ui/components/u-empty/u-empty.vue | 193 + .../uview-ui/components/u-field/u-field.vue | 384 + .../components/u-form-item/u-form-item.vue | 431 ++ .../uview-ui/components/u-form/u-form.vue | 134 + .../u-full-screen/u-full-screen.vue | 52 + .../uview-ui/components/u-gap/u-gap.vue | 54 + .../components/u-grid-item/u-grid-item.vue | 126 + .../uview-ui/components/u-grid/u-grid.vue | 108 + .../uview-ui/components/u-icon/u-icon.vue | 336 + .../uview-ui/components/u-image/u-image.vue | 266 + .../u-index-anchor/u-index-anchor.vue | 89 + .../components/u-index-list/u-index-list.vue | 315 + .../uview-ui/components/u-input/u-input.vue | 387 + .../components/u-keyboard/u-keyboard.vue | 217 + .../components/u-lazy-load/u-lazy-load.vue | 244 + .../u-line-progress/u-line-progress.vue | 147 + .../uview-ui/components/u-line/u-line.vue | 84 + .../uview-ui/components/u-link/u-link.vue | 89 + .../u-loading-page/u-loading-page.vue | 25 + .../components/u-loading/u-loading.vue | 103 + .../components/u-loadmore/u-loadmore.vue | 203 + .../uview-ui/components/u-mask/u-mask.vue | 123 + .../u-message-input/u-message-input.vue | 311 + .../uview-ui/components/u-modal/u-modal.vue | 283 + .../uview-ui/components/u-navbar/u-navbar.vue | 315 + .../components/u-no-network/u-no-network.vue | 233 + .../components/u-notice-bar/u-notice-bar.vue | 272 + .../components/u-number-box/u-number-box.vue | 363 + .../u-number-keyboard/u-number-keyboard.vue | 158 + .../components/u-parse/libs/CssHandler.js | 100 + .../components/u-parse/libs/MpHtmlParser.js | 580 ++ .../components/u-parse/libs/config.js | 80 + .../components/u-parse/libs/handler.wxs | 22 + .../components/u-parse/libs/trees.vue | 505 ++ .../uview-ui/components/u-parse/u-parse.vue | 645 ++ .../uview-ui/components/u-picker/u-picker.vue | 676 ++ .../uview-ui/components/u-popup/u-popup.vue | 456 ++ .../u-radio-group/u-radio-group.vue | 128 + .../uview-ui/components/u-radio/u-radio.vue | 271 + .../uview-ui/components/u-rate/u-rate.vue | 275 + .../components/u-read-more/u-read-more.vue | 179 + .../components/u-row-notice/u-row-notice.vue | 269 + .../uview-ui/components/u-row/u-row.vue | 84 + .../uview-ui/components/u-search/u-search.vue | 342 + .../components/u-section/u-section.vue | 154 + .../uview-ui/components/u-select/u-select.vue | 417 ++ .../components/u-skeleton/u-skeleton.vue | 199 + .../uview-ui/components/u-slider/u-slider.vue | 257 + .../uview-ui/components/u-steps/u-steps.vue | 200 + .../uview-ui/components/u-sticky/u-sticky.vue | 157 + .../components/u-subsection/u-subsection.vue | 355 + .../u-swipe-action/u-swipe-action.vue | 255 + .../uview-ui/components/u-swiper/u-swiper.vue | 340 + .../uview-ui/components/u-switch/u-switch.vue | 163 + .../uview-ui/components/u-tabbar/u-tabbar.vue | 330 + .../uview-ui/components/u-table/u-table.vue | 84 + .../u-tabs-swiper/u-tabs-swiper.vue | 488 ++ .../uview-ui/components/u-tabs/u-tabs.vue | 368 + .../uview-ui/components/u-tag/u-tag.vue | 294 + fuintUniapp/uview-ui/components/u-td/u-td.vue | 66 + fuintUniapp/uview-ui/components/u-th/u-th.vue | 62 + .../u-time-line-item/u-time-line-item.vue | 83 + .../components/u-time-line/u-time-line.vue | 43 + .../uview-ui/components/u-toast/u-toast.vue | 220 + .../components/u-top-tips/u-top-tips.vue | 121 + fuintUniapp/uview-ui/components/u-tr/u-tr.vue | 25 + .../uview-ui/components/u-upload/u-upload.vue | 654 ++ .../u-verification-code.vue | 164 + .../components/u-waterfall/u-waterfall.vue | 176 + fuintUniapp/uview-ui/iconfont.css | 910 +++ fuintUniapp/uview-ui/index.js | 141 + fuintUniapp/uview-ui/index.scss | 27 + fuintUniapp/uview-ui/libs/config/config.js | 15 + fuintUniapp/uview-ui/libs/config/zIndex.js | 20 + fuintUniapp/uview-ui/libs/css/color.scss | 155 + fuintUniapp/uview-ui/libs/css/common.scss | 176 + .../uview-ui/libs/css/style.components.scss | 7 + fuintUniapp/uview-ui/libs/css/style.h5.scss | 8 + fuintUniapp/uview-ui/libs/css/style.mp.scss | 72 + fuintUniapp/uview-ui/libs/css/style.nvue.scss | 3 + fuintUniapp/uview-ui/libs/css/style.vue.scss | 175 + fuintUniapp/uview-ui/libs/function/$parent.js | 18 + fuintUniapp/uview-ui/libs/function/addUnit.js | 8 + fuintUniapp/uview-ui/libs/function/bem.js | 5 + fuintUniapp/uview-ui/libs/function/color.js | 37 + .../uview-ui/libs/function/colorGradient.js | 134 + .../uview-ui/libs/function/debounce.js | 29 + .../uview-ui/libs/function/deepClone.js | 23 + .../uview-ui/libs/function/deepMerge.js | 30 + .../uview-ui/libs/function/getParent.js | 47 + fuintUniapp/uview-ui/libs/function/guid.js | 41 + fuintUniapp/uview-ui/libs/function/md5.js | 385 + .../uview-ui/libs/function/queryParams.js | 58 + fuintUniapp/uview-ui/libs/function/random.js | 10 + .../uview-ui/libs/function/randomArray.js | 7 + fuintUniapp/uview-ui/libs/function/route.js | 122 + fuintUniapp/uview-ui/libs/function/sys.js | 9 + fuintUniapp/uview-ui/libs/function/test.js | 232 + .../uview-ui/libs/function/throttle.js | 32 + .../uview-ui/libs/function/timeFormat.js | 51 + .../uview-ui/libs/function/timeFrom.js | 47 + fuintUniapp/uview-ui/libs/function/toast.js | 9 + fuintUniapp/uview-ui/libs/function/trim.js | 15 + .../uview-ui/libs/function/type2icon.js | 35 + fuintUniapp/uview-ui/libs/mixin/mixin.js | 64 + fuintUniapp/uview-ui/libs/mixin/mpShare.js | 18 + fuintUniapp/uview-ui/libs/request/index.js | 169 + fuintUniapp/uview-ui/libs/store/index.js | 19 + fuintUniapp/uview-ui/libs/util/area.js | 1 + .../uview-ui/libs/util/async-validator.js | 1356 ++++ fuintUniapp/uview-ui/libs/util/city.js | 1 + fuintUniapp/uview-ui/libs/util/emitter.js | 51 + fuintUniapp/uview-ui/libs/util/province.js | 1 + fuintUniapp/uview-ui/package.json | 39 + fuintUniapp/uview-ui/theme.scss | 38 + 1508 files changed, 191318 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/yshi.iml create mode 100644 fuintAdmin/.editorconfig create mode 100644 fuintAdmin/.env.development create mode 100644 fuintAdmin/.env.production create mode 100644 fuintAdmin/.env.staging create mode 100644 fuintAdmin/.eslintignore create mode 100644 fuintAdmin/.eslintrc.js create mode 100644 fuintAdmin/.gitignore create mode 100644 fuintAdmin/README.md create mode 100644 fuintAdmin/babel.config.js create mode 100644 fuintAdmin/bin/build.bat create mode 100644 fuintAdmin/bin/package.bat create mode 100644 fuintAdmin/bin/run-web.bat create mode 100644 fuintAdmin/build/index.js create mode 100644 fuintAdmin/package.json create mode 100644 fuintAdmin/public/favicon.ico create mode 100644 fuintAdmin/public/html/ie.html create mode 100644 fuintAdmin/public/index.html create mode 100644 fuintAdmin/public/robots.txt create mode 100644 fuintAdmin/src/App.vue create mode 100644 fuintAdmin/src/api/article.js create mode 100644 fuintAdmin/src/api/balance.js create mode 100644 fuintAdmin/src/api/banner.js create mode 100644 fuintAdmin/src/api/cashier.js create mode 100644 fuintAdmin/src/api/commission/cash.js create mode 100644 fuintAdmin/src/api/commission/log.js create mode 100644 fuintAdmin/src/api/commission/rule.js create mode 100644 fuintAdmin/src/api/common.js create mode 100644 fuintAdmin/src/api/coupon/confirmLog.js create mode 100644 fuintAdmin/src/api/coupon/coupon.js create mode 100644 fuintAdmin/src/api/coupon/give.js create mode 100644 fuintAdmin/src/api/coupon/group.js create mode 100644 fuintAdmin/src/api/coupon/sendLog.js create mode 100644 fuintAdmin/src/api/coupon/userCoupon.js create mode 100644 fuintAdmin/src/api/goods.js create mode 100644 fuintAdmin/src/api/goodsCate.js create mode 100644 fuintAdmin/src/api/home.js create mode 100644 fuintAdmin/src/api/login.js create mode 100644 fuintAdmin/src/api/member.js create mode 100644 fuintAdmin/src/api/memberGroup.js create mode 100644 fuintAdmin/src/api/menu.js create mode 100644 fuintAdmin/src/api/merchant.js create mode 100644 fuintAdmin/src/api/openGift.js create mode 100644 fuintAdmin/src/api/order.js create mode 100644 fuintAdmin/src/api/point.js create mode 100644 fuintAdmin/src/api/refund.js create mode 100644 fuintAdmin/src/api/settlement.js create mode 100644 fuintAdmin/src/api/smsManager.js create mode 100644 fuintAdmin/src/api/smsTemplate.js create mode 100644 fuintAdmin/src/api/staff.js create mode 100644 fuintAdmin/src/api/statistic.js create mode 100644 fuintAdmin/src/api/stock.js create mode 100644 fuintAdmin/src/api/store.js create mode 100644 fuintAdmin/src/api/subMessage.js create mode 100644 fuintAdmin/src/api/system/account.js create mode 100644 fuintAdmin/src/api/system/config.js create mode 100644 fuintAdmin/src/api/system/dict/data.js create mode 100644 fuintAdmin/src/api/system/dict/type.js create mode 100644 fuintAdmin/src/api/system/genCode.js create mode 100644 fuintAdmin/src/api/system/logs.js create mode 100644 fuintAdmin/src/api/system/menu.js create mode 100644 fuintAdmin/src/api/system/notice.js create mode 100644 fuintAdmin/src/api/system/role.js create mode 100644 fuintAdmin/src/api/tool/gen.js create mode 100644 fuintAdmin/src/api/userGrade.js create mode 100644 fuintAdmin/src/assets/401_images/401.gif create mode 100644 fuintAdmin/src/assets/404_images/404.png create mode 100644 fuintAdmin/src/assets/404_images/404_cloud.png create mode 100644 fuintAdmin/src/assets/icons/index.js create mode 100644 fuintAdmin/src/assets/icons/svg/404.svg create mode 100644 fuintAdmin/src/assets/icons/svg/bug.svg create mode 100644 fuintAdmin/src/assets/icons/svg/build.svg create mode 100644 fuintAdmin/src/assets/icons/svg/button.svg create mode 100644 fuintAdmin/src/assets/icons/svg/cascader.svg create mode 100644 fuintAdmin/src/assets/icons/svg/chart.svg create mode 100644 fuintAdmin/src/assets/icons/svg/checkbox.svg create mode 100644 fuintAdmin/src/assets/icons/svg/clipboard.svg create mode 100644 fuintAdmin/src/assets/icons/svg/code.svg create mode 100644 fuintAdmin/src/assets/icons/svg/color.svg create mode 100644 fuintAdmin/src/assets/icons/svg/component.svg create mode 100644 fuintAdmin/src/assets/icons/svg/dashboard.svg create mode 100644 fuintAdmin/src/assets/icons/svg/date-range.svg create mode 100644 fuintAdmin/src/assets/icons/svg/date.svg create mode 100644 fuintAdmin/src/assets/icons/svg/dict.svg create mode 100644 fuintAdmin/src/assets/icons/svg/documentation.svg create mode 100644 fuintAdmin/src/assets/icons/svg/download.svg create mode 100644 fuintAdmin/src/assets/icons/svg/drag.svg create mode 100644 fuintAdmin/src/assets/icons/svg/druid.svg create mode 100644 fuintAdmin/src/assets/icons/svg/edit.svg create mode 100644 fuintAdmin/src/assets/icons/svg/education.svg create mode 100644 fuintAdmin/src/assets/icons/svg/email.svg create mode 100644 fuintAdmin/src/assets/icons/svg/example.svg create mode 100644 fuintAdmin/src/assets/icons/svg/excel.svg create mode 100644 fuintAdmin/src/assets/icons/svg/exit-fullscreen.svg create mode 100644 fuintAdmin/src/assets/icons/svg/eye-open.svg create mode 100644 fuintAdmin/src/assets/icons/svg/eye.svg create mode 100644 fuintAdmin/src/assets/icons/svg/form.svg create mode 100644 fuintAdmin/src/assets/icons/svg/fullscreen.svg create mode 100644 fuintAdmin/src/assets/icons/svg/github.svg create mode 100644 fuintAdmin/src/assets/icons/svg/guide.svg create mode 100644 fuintAdmin/src/assets/icons/svg/icon.svg create mode 100644 fuintAdmin/src/assets/icons/svg/input.svg create mode 100644 fuintAdmin/src/assets/icons/svg/international.svg create mode 100644 fuintAdmin/src/assets/icons/svg/job.svg create mode 100644 fuintAdmin/src/assets/icons/svg/language.svg create mode 100644 fuintAdmin/src/assets/icons/svg/link.svg create mode 100644 fuintAdmin/src/assets/icons/svg/list.svg create mode 100644 fuintAdmin/src/assets/icons/svg/lock.svg create mode 100644 fuintAdmin/src/assets/icons/svg/log.svg create mode 100644 fuintAdmin/src/assets/icons/svg/logininfor.svg create mode 100644 fuintAdmin/src/assets/icons/svg/message.svg create mode 100644 fuintAdmin/src/assets/icons/svg/money.svg create mode 100644 fuintAdmin/src/assets/icons/svg/monitor.svg create mode 100644 fuintAdmin/src/assets/icons/svg/nested.svg create mode 100644 fuintAdmin/src/assets/icons/svg/number.svg create mode 100644 fuintAdmin/src/assets/icons/svg/online.svg create mode 100644 fuintAdmin/src/assets/icons/svg/password.svg create mode 100644 fuintAdmin/src/assets/icons/svg/pdf.svg create mode 100644 fuintAdmin/src/assets/icons/svg/people.svg create mode 100644 fuintAdmin/src/assets/icons/svg/peoples.svg create mode 100644 fuintAdmin/src/assets/icons/svg/phone.svg create mode 100644 fuintAdmin/src/assets/icons/svg/post.svg create mode 100644 fuintAdmin/src/assets/icons/svg/qq.svg create mode 100644 fuintAdmin/src/assets/icons/svg/question.svg create mode 100644 fuintAdmin/src/assets/icons/svg/radio.svg create mode 100644 fuintAdmin/src/assets/icons/svg/rate.svg create mode 100644 fuintAdmin/src/assets/icons/svg/redis.svg create mode 100644 fuintAdmin/src/assets/icons/svg/row.svg create mode 100644 fuintAdmin/src/assets/icons/svg/search.svg create mode 100644 fuintAdmin/src/assets/icons/svg/select.svg create mode 100644 fuintAdmin/src/assets/icons/svg/server.svg create mode 100644 fuintAdmin/src/assets/icons/svg/shopping.svg create mode 100644 fuintAdmin/src/assets/icons/svg/size.svg create mode 100644 fuintAdmin/src/assets/icons/svg/skill.svg create mode 100644 fuintAdmin/src/assets/icons/svg/slider.svg create mode 100644 fuintAdmin/src/assets/icons/svg/star.svg create mode 100644 fuintAdmin/src/assets/icons/svg/swagger.svg create mode 100644 fuintAdmin/src/assets/icons/svg/switch.svg create mode 100644 fuintAdmin/src/assets/icons/svg/system.svg create mode 100644 fuintAdmin/src/assets/icons/svg/tab.svg create mode 100644 fuintAdmin/src/assets/icons/svg/table.svg create mode 100644 fuintAdmin/src/assets/icons/svg/textarea.svg create mode 100644 fuintAdmin/src/assets/icons/svg/theme.svg create mode 100644 fuintAdmin/src/assets/icons/svg/time-range.svg create mode 100644 fuintAdmin/src/assets/icons/svg/time.svg create mode 100644 fuintAdmin/src/assets/icons/svg/tool.svg create mode 100644 fuintAdmin/src/assets/icons/svg/tree-table.svg create mode 100644 fuintAdmin/src/assets/icons/svg/tree.svg create mode 100644 fuintAdmin/src/assets/icons/svg/upload.svg create mode 100644 fuintAdmin/src/assets/icons/svg/user.svg create mode 100644 fuintAdmin/src/assets/icons/svg/validCode.svg create mode 100644 fuintAdmin/src/assets/icons/svg/wechat.svg create mode 100644 fuintAdmin/src/assets/icons/svg/zip.svg create mode 100644 fuintAdmin/src/assets/icons/svgo.yml create mode 100644 fuintAdmin/src/assets/images/all-cate.svg create mode 100644 fuintAdmin/src/assets/images/avatar.png create mode 100644 fuintAdmin/src/assets/images/cashier.png create mode 100644 fuintAdmin/src/assets/images/cashier.svg create mode 100644 fuintAdmin/src/assets/images/dark.svg create mode 100644 fuintAdmin/src/assets/images/goods.png create mode 100644 fuintAdmin/src/assets/images/home/card.png create mode 100644 fuintAdmin/src/assets/images/home/coupon.png create mode 100644 fuintAdmin/src/assets/images/home/goods.png create mode 100644 fuintAdmin/src/assets/images/home/member.png create mode 100644 fuintAdmin/src/assets/images/home/order.png create mode 100644 fuintAdmin/src/assets/images/home/pay.png create mode 100644 fuintAdmin/src/assets/images/hot.png create mode 100644 fuintAdmin/src/assets/images/icon-cart.svg create mode 100644 fuintAdmin/src/assets/images/life.png create mode 100644 fuintAdmin/src/assets/images/light.svg create mode 100644 fuintAdmin/src/assets/images/login-bg.png create mode 100644 fuintAdmin/src/assets/images/love.png create mode 100644 fuintAdmin/src/assets/images/office.png create mode 100644 fuintAdmin/src/assets/images/order.png create mode 100644 fuintAdmin/src/assets/logo/logo.png create mode 100644 fuintAdmin/src/assets/styles/btn.scss create mode 100644 fuintAdmin/src/assets/styles/element-ui.scss create mode 100644 fuintAdmin/src/assets/styles/element-variables.scss create mode 100644 fuintAdmin/src/assets/styles/fuint.scss create mode 100644 fuintAdmin/src/assets/styles/index.scss create mode 100644 fuintAdmin/src/assets/styles/mixin.scss create mode 100644 fuintAdmin/src/assets/styles/sidebar.scss create mode 100644 fuintAdmin/src/assets/styles/transition.scss create mode 100644 fuintAdmin/src/assets/styles/variables.scss create mode 100644 fuintAdmin/src/components/Breadcrumb/index.vue create mode 100644 fuintAdmin/src/components/Crontab/day.vue create mode 100644 fuintAdmin/src/components/Crontab/hour.vue create mode 100644 fuintAdmin/src/components/Crontab/index.vue create mode 100644 fuintAdmin/src/components/Crontab/min.vue create mode 100644 fuintAdmin/src/components/Crontab/month.vue create mode 100644 fuintAdmin/src/components/Crontab/result.vue create mode 100644 fuintAdmin/src/components/Crontab/second.vue create mode 100644 fuintAdmin/src/components/Crontab/week.vue create mode 100644 fuintAdmin/src/components/Crontab/year.vue create mode 100644 fuintAdmin/src/components/DictData/index.js create mode 100644 fuintAdmin/src/components/DictTag/index.vue create mode 100644 fuintAdmin/src/components/Editor/index.vue create mode 100644 fuintAdmin/src/components/FileUpload/index.vue create mode 100644 fuintAdmin/src/components/Fuint/Cashier/index.vue create mode 100644 fuintAdmin/src/components/Fuint/Doc/index.vue create mode 100644 fuintAdmin/src/components/Fuint/Git/index.vue create mode 100644 fuintAdmin/src/components/Fuint/QrCode/index.vue create mode 100644 fuintAdmin/src/components/Hamburger/index.vue create mode 100644 fuintAdmin/src/components/HeaderSearch/index.vue create mode 100644 fuintAdmin/src/components/IconSelect/index.vue create mode 100644 fuintAdmin/src/components/IconSelect/requireIcons.js create mode 100644 fuintAdmin/src/components/ImagePreview/index.vue create mode 100644 fuintAdmin/src/components/ImageUpload/index.vue create mode 100644 fuintAdmin/src/components/Pagination/index.vue create mode 100644 fuintAdmin/src/components/PanThumb/index.vue create mode 100644 fuintAdmin/src/components/ParentView/index.vue create mode 100644 fuintAdmin/src/components/RightPanel/index.vue create mode 100644 fuintAdmin/src/components/RightToolbar/index.vue create mode 100644 fuintAdmin/src/components/Screenfull/index.vue create mode 100644 fuintAdmin/src/components/SizeSelect/index.vue create mode 100644 fuintAdmin/src/components/SvgIcon/index.vue create mode 100644 fuintAdmin/src/components/ThemePicker/index.vue create mode 100644 fuintAdmin/src/components/TopNav/index.vue create mode 100644 fuintAdmin/src/components/TreeSelect/index.vue create mode 100644 fuintAdmin/src/components/UserSelect/index.vue create mode 100644 fuintAdmin/src/components/iFrame/index.vue create mode 100644 fuintAdmin/src/directive/dialog/drag.js create mode 100644 fuintAdmin/src/directive/dialog/dragHeight.js create mode 100644 fuintAdmin/src/directive/dialog/dragWidth.js create mode 100644 fuintAdmin/src/directive/index.js create mode 100644 fuintAdmin/src/directive/module/clipboard.js create mode 100644 fuintAdmin/src/directive/permission/hasPermi.js create mode 100644 fuintAdmin/src/directive/permission/hasRole.js create mode 100644 fuintAdmin/src/layout/components/AppMain.vue create mode 100644 fuintAdmin/src/layout/components/InnerLink/index.vue create mode 100644 fuintAdmin/src/layout/components/Navbar.vue create mode 100644 fuintAdmin/src/layout/components/Settings/index.vue create mode 100644 fuintAdmin/src/layout/components/Sidebar/FixiOSBug.js create mode 100644 fuintAdmin/src/layout/components/Sidebar/Item.vue create mode 100644 fuintAdmin/src/layout/components/Sidebar/Link.vue create mode 100644 fuintAdmin/src/layout/components/Sidebar/Logo.vue create mode 100644 fuintAdmin/src/layout/components/Sidebar/SidebarItem.vue create mode 100644 fuintAdmin/src/layout/components/Sidebar/index.vue create mode 100644 fuintAdmin/src/layout/components/TagsView/ScrollPane.vue create mode 100644 fuintAdmin/src/layout/components/TagsView/index.vue create mode 100644 fuintAdmin/src/layout/components/index.js create mode 100644 fuintAdmin/src/layout/index.vue create mode 100644 fuintAdmin/src/layout/mixin/ResizeHandler.js create mode 100644 fuintAdmin/src/main.js create mode 100644 fuintAdmin/src/permission.js create mode 100644 fuintAdmin/src/plugins/auth.js create mode 100644 fuintAdmin/src/plugins/cache.js create mode 100644 fuintAdmin/src/plugins/download.js create mode 100644 fuintAdmin/src/plugins/index.js create mode 100644 fuintAdmin/src/plugins/modal.js create mode 100644 fuintAdmin/src/plugins/tab.js create mode 100644 fuintAdmin/src/router/index.js create mode 100644 fuintAdmin/src/settings.js create mode 100644 fuintAdmin/src/store/getters.js create mode 100644 fuintAdmin/src/store/index.js create mode 100644 fuintAdmin/src/store/modules/app.js create mode 100644 fuintAdmin/src/store/modules/permission.js create mode 100644 fuintAdmin/src/store/modules/settings.js create mode 100644 fuintAdmin/src/store/modules/tagsView.js create mode 100644 fuintAdmin/src/store/modules/user.js create mode 100644 fuintAdmin/src/utils/auth.js create mode 100644 fuintAdmin/src/utils/dict/Dict.js create mode 100644 fuintAdmin/src/utils/dict/DictConverter.js create mode 100644 fuintAdmin/src/utils/dict/DictData.js create mode 100644 fuintAdmin/src/utils/dict/DictMeta.js create mode 100644 fuintAdmin/src/utils/dict/DictOptions.js create mode 100644 fuintAdmin/src/utils/dict/index.js create mode 100644 fuintAdmin/src/utils/errorCode.js create mode 100644 fuintAdmin/src/utils/fuint.js create mode 100644 fuintAdmin/src/utils/generator/config.js create mode 100644 fuintAdmin/src/utils/generator/css.js create mode 100644 fuintAdmin/src/utils/generator/drawingDefault.js create mode 100644 fuintAdmin/src/utils/generator/html.js create mode 100644 fuintAdmin/src/utils/generator/icon.json create mode 100644 fuintAdmin/src/utils/generator/js.js create mode 100644 fuintAdmin/src/utils/generator/render.js create mode 100644 fuintAdmin/src/utils/index.js create mode 100644 fuintAdmin/src/utils/jsencrypt.js create mode 100644 fuintAdmin/src/utils/permission.js create mode 100644 fuintAdmin/src/utils/request.js create mode 100644 fuintAdmin/src/utils/scroll-to.js create mode 100644 fuintAdmin/src/utils/validate.js create mode 100644 fuintAdmin/src/views/balance/distribute.vue create mode 100644 fuintAdmin/src/views/balance/list.vue create mode 100644 fuintAdmin/src/views/balance/setting.vue create mode 100644 fuintAdmin/src/views/cashier/components/hangUpDialog.vue create mode 100644 fuintAdmin/src/views/cashier/components/noGoodsCashier.vue create mode 100644 fuintAdmin/src/views/cashier/components/orderPrintDialog.vue create mode 100644 fuintAdmin/src/views/cashier/components/payResultDialog.vue create mode 100644 fuintAdmin/src/views/cashier/components/scanPayCodeDialog.vue create mode 100644 fuintAdmin/src/views/cashier/components/settlementDialog.vue create mode 100644 fuintAdmin/src/views/cashier/components/switchMemberDialog.vue create mode 100644 fuintAdmin/src/views/cashier/index.vue create mode 100644 fuintAdmin/src/views/commission/cash/detail.vue create mode 100644 fuintAdmin/src/views/commission/cash/index.vue create mode 100644 fuintAdmin/src/views/commission/log/index.vue create mode 100644 fuintAdmin/src/views/commission/relation/index.vue create mode 100644 fuintAdmin/src/views/commission/rule/index.vue create mode 100644 fuintAdmin/src/views/components/charts/index.vue create mode 100644 fuintAdmin/src/views/components/charts/mixins/resize.js create mode 100644 fuintAdmin/src/views/components/icons/element-icons.js create mode 100644 fuintAdmin/src/views/components/icons/index.vue create mode 100644 fuintAdmin/src/views/components/icons/svg-icons.js create mode 100644 fuintAdmin/src/views/content/article/index.vue create mode 100644 fuintAdmin/src/views/content/banner/list.vue create mode 100644 fuintAdmin/src/views/coupon/confirm/index.vue create mode 100644 fuintAdmin/src/views/coupon/confirmLog/index.vue create mode 100644 fuintAdmin/src/views/coupon/coupon/index.vue create mode 100644 fuintAdmin/src/views/coupon/give/index.vue create mode 100644 fuintAdmin/src/views/coupon/group/index.vue create mode 100644 fuintAdmin/src/views/coupon/sendLog/index.vue create mode 100644 fuintAdmin/src/views/coupon/userCoupon/index.vue create mode 100644 fuintAdmin/src/views/dashboard/BarChart.vue create mode 100644 fuintAdmin/src/views/dashboard/LineChart.vue create mode 100644 fuintAdmin/src/views/dashboard/PanelGroup.vue create mode 100644 fuintAdmin/src/views/dashboard/PieChart.vue create mode 100644 fuintAdmin/src/views/dashboard/RaddarChart.vue create mode 100644 fuintAdmin/src/views/dashboard/mixins/resize.js create mode 100644 fuintAdmin/src/views/error/401.vue create mode 100644 fuintAdmin/src/views/error/404.vue create mode 100644 fuintAdmin/src/views/goods/cate/index.vue create mode 100644 fuintAdmin/src/views/goods/components/Sku.vue create mode 100644 fuintAdmin/src/views/goods/goods/add.vue create mode 100644 fuintAdmin/src/views/goods/goods/edit.vue create mode 100644 fuintAdmin/src/views/goods/goods/goodsForm.vue create mode 100644 fuintAdmin/src/views/goods/goods/index.vue create mode 100644 fuintAdmin/src/views/index.vue create mode 100644 fuintAdmin/src/views/login.vue create mode 100644 fuintAdmin/src/views/member/balanceRecharge.vue create mode 100644 fuintAdmin/src/views/member/group/index.vue create mode 100644 fuintAdmin/src/views/member/index.vue create mode 100644 fuintAdmin/src/views/member/memberCard.vue create mode 100644 fuintAdmin/src/views/member/pointRecharge.vue create mode 100644 fuintAdmin/src/views/member/setting.vue create mode 100644 fuintAdmin/src/views/merchant/index.vue create mode 100644 fuintAdmin/src/views/openGift/index.vue create mode 100644 fuintAdmin/src/views/order/detail.vue create mode 100644 fuintAdmin/src/views/order/index.vue create mode 100644 fuintAdmin/src/views/order/setting.vue create mode 100644 fuintAdmin/src/views/point/list.vue create mode 100644 fuintAdmin/src/views/point/setting.vue create mode 100644 fuintAdmin/src/views/redirect.vue create mode 100644 fuintAdmin/src/views/refund/index.vue create mode 100644 fuintAdmin/src/views/settlement/index.vue create mode 100644 fuintAdmin/src/views/smsManager/index.vue create mode 100644 fuintAdmin/src/views/smsTemplate/index.vue create mode 100644 fuintAdmin/src/views/staff/list.vue create mode 100644 fuintAdmin/src/views/statistic/index.vue create mode 100644 fuintAdmin/src/views/stock/index.vue create mode 100644 fuintAdmin/src/views/stock/selectGoodsDialog.vue create mode 100644 fuintAdmin/src/views/store/list.vue create mode 100644 fuintAdmin/src/views/subMessage/index.vue create mode 100644 fuintAdmin/src/views/system/account/authRole.vue create mode 100644 fuintAdmin/src/views/system/account/index.vue create mode 100644 fuintAdmin/src/views/system/account/profile/index.vue create mode 100644 fuintAdmin/src/views/system/account/profile/resetPwd.vue create mode 100644 fuintAdmin/src/views/system/account/profile/userAvatar.vue create mode 100644 fuintAdmin/src/views/system/account/profile/userInfo.vue create mode 100644 fuintAdmin/src/views/system/config/index.vue create mode 100644 fuintAdmin/src/views/system/dict/data.vue create mode 100644 fuintAdmin/src/views/system/dict/index.vue create mode 100644 fuintAdmin/src/views/system/genCode/index.vue create mode 100644 fuintAdmin/src/views/system/logs/index.vue create mode 100644 fuintAdmin/src/views/system/menu/index.vue create mode 100644 fuintAdmin/src/views/system/notice/index.vue create mode 100644 fuintAdmin/src/views/system/role/authUser.vue create mode 100644 fuintAdmin/src/views/system/role/index.vue create mode 100644 fuintAdmin/src/views/system/role/selectUser.vue create mode 100644 fuintAdmin/src/views/tool/build/CodeTypeDialog.vue create mode 100644 fuintAdmin/src/views/tool/build/DraggableItem.vue create mode 100644 fuintAdmin/src/views/tool/build/IconsDialog.vue create mode 100644 fuintAdmin/src/views/tool/build/RightPanel.vue create mode 100644 fuintAdmin/src/views/tool/build/TreeNodeDialog.vue create mode 100644 fuintAdmin/src/views/tool/build/index.vue create mode 100644 fuintAdmin/src/views/tool/gen/basicInfoForm.vue create mode 100644 fuintAdmin/src/views/tool/gen/editTable.vue create mode 100644 fuintAdmin/src/views/tool/gen/genInfoForm.vue create mode 100644 fuintAdmin/src/views/tool/gen/importTable.vue create mode 100644 fuintAdmin/src/views/tool/gen/index.vue create mode 100644 fuintAdmin/src/views/tool/swagger/index.vue create mode 100644 fuintAdmin/src/views/userGrade/index.vue create mode 100644 fuintAdmin/vue.config.js create mode 100644 fuintBackend/.gitignore create mode 100644 fuintBackend/LICENSE create mode 100644 fuintBackend/README.md create mode 100644 fuintBackend/configure/dev/application.properties create mode 100644 fuintBackend/configure/prod/application.properties create mode 100644 fuintBackend/db/fuint-db.sql create mode 100644 fuintBackend/db/说明.txt create mode 100644 fuintBackend/fuint-application/pom.xml create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/Constants.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/aspect/LogAop.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/aspect/RedisModelAspect.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/aspect/TActionLogAop.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/bean/AliPayBean.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/bean/H5SceneInfo.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/bean/UnionPayBean.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/bean/WxPayBean.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/bean/WxPayV3Bean.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/config/CaptchaConfig.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/config/Message.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/config/MybatisPlusConfig.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/config/RedisConfig.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/config/SecurityConfig.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/config/SwaggerConfig.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/config/WebConfig.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/domain/TreeNode.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/domain/TreeSelect.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/AccountDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/AccountInfo.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/AddressDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/ArticleDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/AssetDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/BalanceDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/BannerDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/Body.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/CommissionCashDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/CommissionLogDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/CommissionRuleDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/CommissionRuleItemDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/ConfirmLogDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/CouponCellDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/CouponDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/DateDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/ExpressDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/GiveDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/GiveItemDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/GoodsCateDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/GoodsDetailDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/GoodsDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/GoodsSkuDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/GoodsSpecChildDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/GoodsSpecDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/GoodsSpecItemDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/GoodsSpecValueDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/GoodsTopDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/GroupDataDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/GroupDataListDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/GroupMemberDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/HangUpDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/Head.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/MemberGroupDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/MemberTopDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/MessageResDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/MyCouponDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/OpenGiftDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/OpenWxCardDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/OrderDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/OrderGoodsDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/OrderUserDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/Page.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/ParamDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/PointDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/PreStoreRuleDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/RechargeRuleDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/RefundDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/RegionDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/ReqCouponDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/ReqCouponGroupDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/ReqResult.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/ReqSendLogDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/ResCartDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/ResCateDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/RoleDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/SettlementDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/SettlementOrderDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/SmsTemplateDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/SourceDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/StoreDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/SubMessageDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/TokenDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/UserCouponDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/UserDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/UserGroupDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/UserInfo.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/UserOrderDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/dto/WxCardDto.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/AdminRoleEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/ApplyGoodsEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/BalanceSettingEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/CommissionCashStatusEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/CommissionStatusEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/CommissionTargetEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/CommissionTypeEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/CouponContentEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/CouponExpireTypeEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/CouponTypeEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/CouponUseForEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/GenderEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/GoodsTypeEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/MemberSourceEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/MerchantTypeEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/MessageEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/OrderModeEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/OrderSettingEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/OrderStatusEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/OrderTypeEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/PayStatusEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/PayTypeEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/PlatformTypeEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/PointSettingEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/QrCodeEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/RefundStatusEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/RefundTypeEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/SendWayEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/SettingTypeEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/SettleStatusEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/StaffCategoryEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/StatusEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/UserActionEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/UserCouponStatusEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/UserGradeCatchTypeEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/UserSettingEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/WxMessageEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/enums/YesOrNoEnum.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/http/HttpRESTDataClient.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/AddressDetailParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/ArticleDetailParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/ArticleListParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/BalanceListParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/CartClearParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/CartListParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/CartSaveParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/CommissionRuleItemParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/CommissionRuleParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/ConfirmParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/CouponInfoParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/CouponListParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/CouponReceiveParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/GiveListParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/GiveParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/GoodsInfoParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/MemberInfoParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/MemberListParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/OrderDetailParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/OrderListParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/PageParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/RechargeParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/param/SettlementParam.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/permission/PermissionService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/AccountService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/ActionLogService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/AddressService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/AlipayService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/ArticleService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/BalanceService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/BannerService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/CaptchaService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/CartService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/CateService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/CommissionCashService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/CommissionLogService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/CommissionRuleService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/ConfirmLogService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/CouponGroupService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/CouponService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/DutyService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/GenCodeService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/GiveService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/GoodsService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/MemberGroupService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/MemberService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/MerchantService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/MessageService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/OpenGiftService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/OrderService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/PaymentService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/PointService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/RefundService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/SendLogService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/SendSmsService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/SettingService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/SettlementService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/SmsTemplateService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/SourceService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/StaffService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/StockService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/StoreService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/UserActionService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/UserCouponService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/UserGradeService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/VerifyCodeService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/WeixinService.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/AccountServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/ActionLogServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/AddressServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/AlipayServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/ArticleServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/BalanceServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/BannerServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/CaptchaServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/CartServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/CateServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/CommissionCashServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/CommissionLogServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/CommissionRuleServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/ConfirmLogServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/CouponGroupServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/CouponServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/DutyServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/GenCodeServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/GiveServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/GoodsServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/MemberGroupServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/MemberServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/MerchantServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/MessageServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/OpenGiftServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/OrderServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/PaymentServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/PointServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/RefundServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/SendLogServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/SendSmsServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/SettingServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/SettlementServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/SmsTemplateServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/SourceServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/StaffServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/StockServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/StoreServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/UserActionServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/UserCouponServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/UserGradeServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/VerifyCodeServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/service/impl/WeixinServiceImpl.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/AliyunOssUtil.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/AuthUserUtil.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/Base64Util.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/BizCodeGenerator.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/CommonUtil.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/DateUtil.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/DtoConversionEntity.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/ExcelUtil.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/GenUtils.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/HtmlEncode.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/HttpPostUploadUtil.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/ListUtil.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/MD5Util.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/PhoneFormatCheckUtils.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/QRCodeUtil.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/QuartzCronUtil.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/RedisUtil.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/RegexUtil.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/SeqUtil.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/TimeUtil.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/TimeUtils.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/TokenUtil.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/TreeUtil.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/VelocityInitializer.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/VelocityUtils.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/XlsUtil.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/vo/MetaVo.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/vo/RouterVo.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/web/AdminUserInterceptor.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/web/CORSFilter.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/web/ClientUserInterceptor.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/web/CommandInterceptor.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/web/SpringContextHolder.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/web/SystemInit.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/fuintApplication.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendAccountController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendActionLogController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendArticleController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendBalanceController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendBannerController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendCaptchaController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendCashierController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendCateController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendCommissionCashController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendCommissionLogController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendCommissionRuleController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendCommonController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendConfirmLogController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendCouponController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendCouponGroupController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendDoConfirmController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendDutyController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendFileController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendGenCodeController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendGiveLogController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendGoodsController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendHomeController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendLoginController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendMemberController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendMemberGroupController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendMerchantController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendOpenGiftController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendOrderController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendPointController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendRefundController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendSendLogController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendSettlementController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendSmsController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendSmsTemplateController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendSourceController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendStaffController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendStatisticController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendStockController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendStoreController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendSubMessageController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendUserCouponController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendUserGradeController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/request/AccountInfoRequest.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/request/CommissionCashRequest.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/request/CommissionLogRequest.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/request/CommissionSettleConfirmRequest.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/request/CommissionSettleRequest.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/request/DutyStatusRequest.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/request/LoginRequest.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/request/SettlementRequest.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/backendApi/response/LoginResponse.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientAddressController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientArticleController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientBalanceController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientCaptchaController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientCartController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientCashierController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientConfirmController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientCouponController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientFileController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientGiveController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientGoodsController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientHelpController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientMessageController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientMyCouponController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientOrderController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientPageController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientPayController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientPointsController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientRefundController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientRegionController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientSettlementController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientSignController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientSmsController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientStoreController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientSystemController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientUserController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientUserCouponController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/clientApi/request/AddressRequest.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/merchantApi/controller/MerchantController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/merchantApi/controller/MerchantMemberController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/merchantApi/controller/MerchantOrderController.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/schedule/CommissionJob.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/schedule/CouponExpireJob.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/schedule/MessageJob.java create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/module/schedule/OrderCancelJob.java create mode 100644 fuintBackend/fuint-application/src/main/resources/application.properties create mode 100644 fuintBackend/fuint-application/src/main/resources/captcha-conf.properties create mode 100644 fuintBackend/fuint-application/src/main/resources/ehcache.xml create mode 100644 fuintBackend/fuint-application/src/main/resources/international/message_en_US.properties create mode 100644 fuintBackend/fuint-application/src/main/resources/international/message_zh_CN.properties create mode 100644 fuintBackend/fuint-application/src/main/resources/logback-spring.xml create mode 100644 fuintBackend/fuint-application/src/main/resources/sentry.properties create mode 100644 fuintBackend/fuint-application/src/main/resources/static/defaultImage/all.png create mode 100644 fuintBackend/fuint-application/src/main/resources/static/defaultImage/avatar.png create mode 100644 fuintBackend/fuint-application/src/main/resources/static/defaultImage/banner-1.png create mode 100644 fuintBackend/fuint-application/src/main/resources/static/defaultImage/banner-2.png create mode 100644 fuintBackend/fuint-application/src/main/resources/static/defaultImage/bg.png create mode 100644 fuintBackend/fuint-application/src/main/resources/static/defaultImage/card.png create mode 100644 fuintBackend/fuint-application/src/main/resources/static/defaultImage/coupon.png create mode 100644 fuintBackend/fuint-application/src/main/resources/static/defaultImage/hot.png create mode 100644 fuintBackend/fuint-application/src/main/resources/static/defaultImage/life.png create mode 100644 fuintBackend/fuint-application/src/main/resources/static/defaultImage/logo.png create mode 100644 fuintBackend/fuint-application/src/main/resources/static/defaultImage/love.png create mode 100644 fuintBackend/fuint-application/src/main/resources/static/defaultImage/none.png create mode 100644 fuintBackend/fuint-application/src/main/resources/static/defaultImage/office.png create mode 100644 fuintBackend/fuint-application/src/main/resources/static/defaultImage/timer.png create mode 100644 fuintBackend/fuint-application/src/main/resources/static/uploadImages/20220110/31cbf7ad0ef442a4b10dcefc24db0662.jpg create mode 100644 fuintBackend/fuint-application/src/main/resources/static/uploadImages/20220110/4c90921a7fc34c97b0f62cebf314d2bb.jpg create mode 100644 fuintBackend/fuint-application/src/main/resources/static/uploadImages/20220110/56e306c812f240f89c0ed96ab8f94ad0.jpg create mode 100644 fuintBackend/fuint-application/src/main/resources/static/uploadImages/20220110/6083071182cd48afa6c2b9e23f181832.jpg create mode 100644 fuintBackend/fuint-application/src/main/resources/static/uploadImages/20220110/6b67b70f35734ff28a03aa3d82ac96a0.jpg create mode 100644 fuintBackend/fuint-application/src/main/resources/static/uploadImages/20220110/856dbc96197e4782b4febb7a6e671bcb.jpg create mode 100644 fuintBackend/fuint-application/src/main/resources/static/uploadImages/20220110/9b64b3d65fa04296b62de186899f24ea.jpg create mode 100644 fuintBackend/fuint-application/src/main/resources/static/uploadImages/20220110/bfdd063cda3043688252ff49513e1fec.jpg create mode 100644 fuintBackend/fuint-application/src/main/resources/static/uploadImages/20220110/d39f84568b9746f89d9f6a368b8067c4.jpg create mode 100644 fuintBackend/fuint-application/src/main/resources/static/uploadImages/20220110/e641d7430df04c35a93a8238f5f6e312.jpg create mode 100644 fuintBackend/fuint-application/src/main/resources/static/uploadImages/20220110/ee5c67ed338442fc90e5c647ccbfd381.jpg create mode 100644 fuintBackend/fuint-application/src/main/resources/static/uploadImages/20220110/ff4809f7a17d4142ace9bc287aab105a.jpg create mode 100644 fuintBackend/fuint-application/src/main/resources/urlRewrite.xml create mode 100644 fuintBackend/fuint-application/src/main/resources/vm/java/BackendController.java.vm create mode 100644 fuintBackend/fuint-application/src/main/resources/vm/java/mapper.java.vm create mode 100644 fuintBackend/fuint-application/src/main/resources/vm/java/model.java.vm create mode 100644 fuintBackend/fuint-application/src/main/resources/vm/java/service.java.vm create mode 100644 fuintBackend/fuint-application/src/main/resources/vm/java/serviceImpl.java.vm create mode 100644 fuintBackend/fuint-application/src/main/resources/vm/js/api.js.vm create mode 100644 fuintBackend/fuint-application/src/main/resources/vm/sql/sql.vm create mode 100644 fuintBackend/fuint-application/src/main/resources/vm/vue/index-tree.vue.vm create mode 100644 fuintBackend/fuint-application/src/main/resources/vm/vue/index.vue.vm create mode 100644 fuintBackend/fuint-application/src/main/resources/vm/vue/v3/index-tree.vue.vm create mode 100644 fuintBackend/fuint-application/src/main/resources/vm/vue/v3/index.vue.vm create mode 100644 fuintBackend/fuint-application/src/main/resources/vm/xml/mapper.xml.vm create mode 100644 fuintBackend/fuint-framework/pom.xml create mode 100644 fuintBackend/fuint-framework/src/main/java/com/fuint/framework/FrameworkConstants.java create mode 100644 fuintBackend/fuint-framework/src/main/java/com/fuint/framework/annoation/OperationServiceLog.java create mode 100644 fuintBackend/fuint-framework/src/main/java/com/fuint/framework/dto/ExcelExportDto.java create mode 100644 fuintBackend/fuint-framework/src/main/java/com/fuint/framework/exception/BusinessCheckException.java create mode 100644 fuintBackend/fuint-framework/src/main/java/com/fuint/framework/exception/BusinessRuntimeException.java create mode 100644 fuintBackend/fuint-framework/src/main/java/com/fuint/framework/exception/GlobalExceptionHandler.java create mode 100644 fuintBackend/fuint-framework/src/main/java/com/fuint/framework/pagination/PaginationRequest.java create mode 100644 fuintBackend/fuint-framework/src/main/java/com/fuint/framework/pagination/PaginationResponse.java create mode 100644 fuintBackend/fuint-framework/src/main/java/com/fuint/framework/service/ExportService.java create mode 100644 fuintBackend/fuint-framework/src/main/java/com/fuint/framework/service/ExportServiceImpl.java create mode 100644 fuintBackend/fuint-framework/src/main/java/com/fuint/framework/web/BaseController.java create mode 100644 fuintBackend/fuint-framework/src/main/java/com/fuint/framework/web/ResponseObject.java create mode 100644 fuintBackend/fuint-repository/pom.xml create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/base/MyMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/bean/ColumnBean.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/bean/CouponNumBean.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/bean/GoodsBean.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/bean/GoodsTopBean.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/bean/MemberTopBean.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/bean/StoreDistanceBean.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtAddressMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtArticleMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtBalanceMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtBannerMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtCartMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtCommissionCashMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtCommissionLogMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtCommissionRelationMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtCommissionRuleItemMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtCommissionRuleMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtConfirmLogMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtCouponGoodsMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtCouponGroupMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtCouponMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtGiveItemMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtGiveMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtGoodsCateMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtGoodsMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtGoodsSkuMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtGoodsSpecMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtMerchantMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtMessageMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtOpenGiftItemMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtOpenGiftMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtOrderAddressMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtOrderGoodsMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtOrderMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtPointMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtRefundMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtRegionMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtSendLogMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtSettingMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtSettlementMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtSettlementOrderMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtSmsSendedLogMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtSmsTemplateMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtStaffMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtStockItemMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtStockMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtStoreMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtUserActionMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtUserCouponMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtUserGradeMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtUserGroupMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtUserMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/MtVerifyCodeMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/TAccountDutyMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/TAccountMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/TActionLogMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/TDutyMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/TDutySourceMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/TGenCodeMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/TPlatformMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/mapper/TSourceMapper.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtAddress.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtArticle.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtBalance.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtBanner.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtCart.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtCommissionCash.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtCommissionLog.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtCommissionRelation.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtCommissionRule.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtCommissionRuleItem.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtConfirmLog.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtCoupon.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtCouponGoods.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtCouponGroup.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtGive.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtGiveItem.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtGoods.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtGoodsCate.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtGoodsSku.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtGoodsSpec.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtMerchant.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtMessage.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtOpenGift.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtOpenGiftItem.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtOrder.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtOrderAddress.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtOrderGoods.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtPoint.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtRefund.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtRegion.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtSendLog.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtSetting.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtSettlement.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtSettlementOrder.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtSmsSendedLog.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtSmsTemplate.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtStaff.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtStock.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtStockItem.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtStore.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtUser.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtUserAction.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtUserCoupon.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtUserGrade.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtUserGroup.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/MtVerifyCode.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/TAccount.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/TAccountDuty.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/TActionLog.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/TDuty.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/TDutySource.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/TGenCode.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/TPlatform.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/TSource.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/base/AutoIncrementIdModel.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/base/ElasticSearchModel.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/base/OpsExercise.java create mode 100644 fuintBackend/fuint-repository/src/main/java/com/fuint/repository/model/base/RedisCache.java create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtAddressMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtArticleMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtBalanceMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtBannerMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtCartMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtCommissionCashMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtCommissionLogMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtCommissionRelationMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtCommissionRuleItemMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtCommissionRuleMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtConfirmLogMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtCouponGoodsMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtCouponGroupMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtCouponMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtGiveItemMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtGiveMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtGoodsCateMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtGoodsMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtGoodsSkuMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtGoodsSpecMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtMerchantMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtMessageMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtOpenGiftItemMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtOpenGiftMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtOrderAddressMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtOrderGoodsMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtOrderMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtPointMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtRefundMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtRegionMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtSendLogMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtSettingMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtSettlementMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtSettlementOrderMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtSmsSendedLogMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtSmsTemplateMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtStaffMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtStoreMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtUserActionMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtUserCouponMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtUserGradeMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtUserGroupMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtUserMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/MtVerifyCodeMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/TAccountDutyMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/TAccountMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/TActionLogMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/TDutyMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/TDutySourceMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/TGenCodeMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/TPlatformMapper.xml create mode 100644 fuintBackend/fuint-repository/src/main/resources/mapper/TSourceMapper.xml create mode 100644 fuintBackend/fuint-utils/pom.xml create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/exception/Exceptions.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/text/CharsetKit.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/text/Convert.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/text/StrFormatter.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/AES.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/AESUtil.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/ArrayUtil.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/Base64Util.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/BeanToMapUtil.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/ClassUtil.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/CommonUtil.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/ContextUtils.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/Digests.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/Encodes.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/ExportExcelUtil.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/HttpUtil.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/IDCard.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/IpUtil.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/MD5Util.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/ObjectUtil.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/PropertiesUtil.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/QRCodeUtil.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/RSAKeys.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/SeqUtil.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/StringUtil.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/TimeUtils.java create mode 100644 fuintBackend/fuint-utils/src/main/java/com/fuint/utils/ValidationUtil.java create mode 100644 fuintBackend/pom.xml create mode 100644 fuintBackend/sbin/kill.sh create mode 100644 fuintBackend/sbin/restart.sh create mode 100644 fuintBackend/sbin/start.sh create mode 100644 fuintBackend/sbin/stop.sh create mode 100644 fuintBackend/sbin/yanhe.fuint create mode 100644 fuintBackend/screenshots/cashier.png create mode 100644 fuintBackend/screenshots/coupon-list.png create mode 100644 fuintBackend/screenshots/create.png create mode 100644 fuintBackend/screenshots/f1.png create mode 100644 fuintBackend/screenshots/f2.png create mode 100644 fuintBackend/screenshots/f3.png create mode 100644 fuintBackend/screenshots/f4.png create mode 100644 fuintBackend/screenshots/g1.png create mode 100644 fuintBackend/screenshots/g2.png create mode 100644 fuintBackend/screenshots/g3.png create mode 100644 fuintBackend/screenshots/g4.png create mode 100644 fuintBackend/screenshots/g5.png create mode 100644 fuintBackend/screenshots/home.png create mode 100644 fuintBackend/screenshots/homeV1.png create mode 100644 fuintBackend/screenshots/homeV2.png create mode 100644 fuintBackend/screenshots/login.png create mode 100644 fuintBackend/screenshots/miniapp.png create mode 100644 fuintBackend/screenshots/mp.jpg create mode 100644 fuintBackend/screenshots/qr.png create mode 100644 fuintBackend/screenshots/system.png create mode 100644 fuintUniapp/.gitignore create mode 100644 fuintUniapp/.hbuilderx/launch.json create mode 100644 fuintUniapp/App.vue create mode 100644 fuintUniapp/LICENSE create mode 100644 fuintUniapp/README.md create mode 100644 fuintUniapp/api/address.js create mode 100644 fuintUniapp/api/article.js create mode 100644 fuintUniapp/api/balance.js create mode 100644 fuintUniapp/api/cart.js create mode 100644 fuintUniapp/api/confirm.js create mode 100644 fuintUniapp/api/coupon.js create mode 100644 fuintUniapp/api/give.js create mode 100644 fuintUniapp/api/goods.js create mode 100644 fuintUniapp/api/goods/service.js create mode 100644 fuintUniapp/api/help.js create mode 100644 fuintUniapp/api/login/index.js create mode 100644 fuintUniapp/api/merchant.js create mode 100644 fuintUniapp/api/merchant/member.js create mode 100644 fuintUniapp/api/merchant/order.js create mode 100644 fuintUniapp/api/message.js create mode 100644 fuintUniapp/api/myCoupon.js create mode 100644 fuintUniapp/api/order.js create mode 100644 fuintUniapp/api/page.js create mode 100644 fuintUniapp/api/points/log.js create mode 100644 fuintUniapp/api/refund.js create mode 100644 fuintUniapp/api/region.js create mode 100644 fuintUniapp/api/setting.js create mode 100644 fuintUniapp/api/settlement.js create mode 100644 fuintUniapp/api/upload.js create mode 100644 fuintUniapp/api/user.js create mode 100644 fuintUniapp/api/user/coupon.js create mode 100644 fuintUniapp/app.scss create mode 100644 fuintUniapp/common/constant/index.js create mode 100644 fuintUniapp/common/constant/paginate.js create mode 100644 fuintUniapp/common/enum/coupon/ApplyRange.js create mode 100644 fuintUniapp/common/enum/coupon/CouponType.js create mode 100644 fuintUniapp/common/enum/coupon/ExpireType.js create mode 100644 fuintUniapp/common/enum/coupon/index.js create mode 100644 fuintUniapp/common/enum/enum.js create mode 100644 fuintUniapp/common/enum/order/DeliveryStatus.js create mode 100644 fuintUniapp/common/enum/order/DeliveryType.js create mode 100644 fuintUniapp/common/enum/order/OrderSource.js create mode 100644 fuintUniapp/common/enum/order/OrderStatus.js create mode 100644 fuintUniapp/common/enum/order/PayStatus.js create mode 100644 fuintUniapp/common/enum/order/PayType.js create mode 100644 fuintUniapp/common/enum/order/ReceiptStatus.js create mode 100644 fuintUniapp/common/enum/order/index.js create mode 100644 fuintUniapp/common/enum/order/refund/AuditStatus.js create mode 100644 fuintUniapp/common/enum/order/refund/RefundStatus.js create mode 100644 fuintUniapp/common/enum/order/refund/RefundType.js create mode 100644 fuintUniapp/common/enum/order/refund/index.js create mode 100644 fuintUniapp/common/enum/setting/Key.js create mode 100644 fuintUniapp/common/enum/store/page/category/Style.js create mode 100644 fuintUniapp/common/enum/store/page/category/index.js create mode 100644 fuintUniapp/common/model/Region.js create mode 100644 fuintUniapp/common/model/Setting.js create mode 100644 fuintUniapp/components/actionsheet/index.js create mode 100644 fuintUniapp/components/actionsheet/index.json create mode 100644 fuintUniapp/components/actionsheet/index.wxml create mode 100644 fuintUniapp/components/actionsheet/index.wxss create mode 100644 fuintUniapp/components/bian-keywords/iconfont/iconfont.css create mode 100644 fuintUniapp/components/bian-keywords/iconfont/iconfont.eot create mode 100644 fuintUniapp/components/bian-keywords/iconfont/iconfont.js create mode 100644 fuintUniapp/components/bian-keywords/iconfont/iconfont.json create mode 100644 fuintUniapp/components/bian-keywords/iconfont/iconfont.svg create mode 100644 fuintUniapp/components/bian-keywords/iconfont/iconfont.ttf create mode 100644 fuintUniapp/components/bian-keywords/iconfont/iconfont.woff create mode 100644 fuintUniapp/components/bian-keywords/iconfont/iconfont.woff2 create mode 100644 fuintUniapp/components/bian-keywords/index.vue create mode 100644 fuintUniapp/components/btn/index.js create mode 100644 fuintUniapp/components/btn/index.json create mode 100644 fuintUniapp/components/btn/index.wxml create mode 100644 fuintUniapp/components/btn/index.wxss create mode 100644 fuintUniapp/components/btn/native-button-behaviors.js create mode 100644 fuintUniapp/components/common/color.js create mode 100644 fuintUniapp/components/common/component.js create mode 100644 fuintUniapp/components/common/index.wxss create mode 100644 fuintUniapp/components/common/style/clearfix.wxss create mode 100644 fuintUniapp/components/common/style/ellipsis.wxss create mode 100644 fuintUniapp/components/common/style/hairline.wxss create mode 100644 fuintUniapp/components/common/style/mixins/clearfix.wxss create mode 100644 fuintUniapp/components/common/style/mixins/ellipsis.wxss create mode 100644 fuintUniapp/components/common/style/mixins/hairline.wxss create mode 100644 fuintUniapp/components/common/style/var.wxss create mode 100644 fuintUniapp/components/common/utils.js create mode 100644 fuintUniapp/components/dialog/data.js create mode 100644 fuintUniapp/components/dialog/dialog.js create mode 100644 fuintUniapp/components/dialog/index.js create mode 100644 fuintUniapp/components/dialog/index.json create mode 100644 fuintUniapp/components/dialog/index.wxml create mode 100644 fuintUniapp/components/dialog/index.wxss create mode 100644 fuintUniapp/components/empty/index.vue create mode 100644 fuintUniapp/components/goods-sku-popup/index.vue create mode 100644 fuintUniapp/components/goods-sku-popup/number-box/index.vue create mode 100644 fuintUniapp/components/grade-popup/index.vue create mode 100644 fuintUniapp/components/jyf-parser/jyf-parser.vue create mode 100644 fuintUniapp/components/jyf-parser/libs/CssHandler.js create mode 100644 fuintUniapp/components/jyf-parser/libs/MpHtmlParser.js create mode 100644 fuintUniapp/components/jyf-parser/libs/config.js create mode 100644 fuintUniapp/components/jyf-parser/libs/handler.wxs create mode 100644 fuintUniapp/components/jyf-parser/libs/trees.vue create mode 100644 fuintUniapp/components/loading/index.js create mode 100644 fuintUniapp/components/loading/index.json create mode 100644 fuintUniapp/components/loading/index.wxml create mode 100644 fuintUniapp/components/loading/index.wxss create mode 100644 fuintUniapp/components/merchant-shortcut/index.vue create mode 100644 fuintUniapp/components/mescroll-uni/components/mescroll-down.css create mode 100644 fuintUniapp/components/mescroll-uni/components/mescroll-down.vue create mode 100644 fuintUniapp/components/mescroll-uni/components/mescroll-empty.vue create mode 100644 fuintUniapp/components/mescroll-uni/components/mescroll-top.vue create mode 100644 fuintUniapp/components/mescroll-uni/components/mescroll-up.css create mode 100644 fuintUniapp/components/mescroll-uni/components/mescroll-up.vue create mode 100644 fuintUniapp/components/mescroll-uni/mescroll-body.css create mode 100644 fuintUniapp/components/mescroll-uni/mescroll-body.vue create mode 100644 fuintUniapp/components/mescroll-uni/mescroll-mixins.js create mode 100644 fuintUniapp/components/mescroll-uni/mescroll-uni-option.js create mode 100644 fuintUniapp/components/mescroll-uni/mescroll-uni.css create mode 100644 fuintUniapp/components/mescroll-uni/mescroll-uni.js create mode 100644 fuintUniapp/components/mescroll-uni/mescroll-uni.vue create mode 100644 fuintUniapp/components/mescroll-uni/mixins/mescroll-comp.js create mode 100644 fuintUniapp/components/mescroll-uni/mixins/mescroll-more-item.js create mode 100644 fuintUniapp/components/mescroll-uni/mixins/mescroll-more.js create mode 100644 fuintUniapp/components/mescroll-uni/wxs/mixins.js create mode 100644 fuintUniapp/components/mescroll-uni/wxs/renderjs.js create mode 100644 fuintUniapp/components/mescroll-uni/wxs/wxs.wxs create mode 100644 fuintUniapp/components/mixins/basic.js create mode 100644 fuintUniapp/components/mixins/button.js create mode 100644 fuintUniapp/components/mixins/iphonex.js create mode 100644 fuintUniapp/components/mixins/link.js create mode 100644 fuintUniapp/components/mixins/observer/behavior.js create mode 100644 fuintUniapp/components/mixins/observer/index.js create mode 100644 fuintUniapp/components/mixins/observer/props.js create mode 100644 fuintUniapp/components/mixins/open-type.js create mode 100644 fuintUniapp/components/mixins/touch.js create mode 100644 fuintUniapp/components/mixins/transition.js create mode 100644 fuintUniapp/components/neoceansoft-keyboard/neoceansoft-keyboard.vue create mode 100644 fuintUniapp/components/page/article/index.vue create mode 100644 fuintUniapp/components/page/banner/index.vue create mode 100644 fuintUniapp/components/page/blank/index.vue create mode 100644 fuintUniapp/components/page/coupon/index.vue create mode 100644 fuintUniapp/components/page/goods/index.vue create mode 100644 fuintUniapp/components/page/guide/index.vue create mode 100644 fuintUniapp/components/page/image/index.vue create mode 100644 fuintUniapp/components/page/index.vue create mode 100644 fuintUniapp/components/page/location/index.vue create mode 100644 fuintUniapp/components/page/mixin.js create mode 100644 fuintUniapp/components/page/navBar/index.vue create mode 100644 fuintUniapp/components/page/notice/index.vue create mode 100644 fuintUniapp/components/page/richText/index.vue create mode 100644 fuintUniapp/components/page/search/index.vue create mode 100644 fuintUniapp/components/page/service/index.vue create mode 100644 fuintUniapp/components/page/video/index.vue create mode 100644 fuintUniapp/components/page/window/index.vue create mode 100644 fuintUniapp/components/pay-popup/index.vue create mode 100644 fuintUniapp/components/pop-manager/index.js create mode 100644 fuintUniapp/components/pop-manager/index.json create mode 100644 fuintUniapp/components/pop-manager/index.wxml create mode 100644 fuintUniapp/components/pop-manager/index.wxss create mode 100644 fuintUniapp/components/popup/index.js create mode 100644 fuintUniapp/components/popup/index.json create mode 100644 fuintUniapp/components/popup/index.wxml create mode 100644 fuintUniapp/components/prestore-popup/index.vue create mode 100644 fuintUniapp/components/prestore-popup/number-box/index.vue create mode 100644 fuintUniapp/components/search/index.vue create mode 100644 fuintUniapp/components/select-region/select-region.vue create mode 100644 fuintUniapp/components/shortcut/index.vue create mode 100644 fuintUniapp/components/switch/index.js create mode 100644 fuintUniapp/components/switch/index.json create mode 100644 fuintUniapp/components/switch/index.wxml create mode 100644 fuintUniapp/components/switch/index.wxss create mode 100644 fuintUniapp/components/toptips/index.js create mode 100644 fuintUniapp/components/toptips/index.json create mode 100644 fuintUniapp/components/toptips/index.wxml create mode 100644 fuintUniapp/components/toptips/index.wxss create mode 100644 fuintUniapp/components/toptips/toptips.js create mode 100644 fuintUniapp/components/uni-transition/uni-transition.vue create mode 100644 fuintUniapp/components/wxs/array.wxs create mode 100644 fuintUniapp/components/wxs/bem.wxs create mode 100644 fuintUniapp/components/wxs/memoize.wxs create mode 100644 fuintUniapp/components/wxs/object.wxs create mode 100644 fuintUniapp/components/wxs/utils.wxs create mode 100644 fuintUniapp/components/xuan-switch/xuan-switch.vue create mode 100644 fuintUniapp/config.js create mode 100644 fuintUniapp/core/bootstrap.js create mode 100644 fuintUniapp/core/ican-H5Api.js create mode 100644 fuintUniapp/main.js create mode 100644 fuintUniapp/manifest.json create mode 100644 fuintUniapp/package.json create mode 100644 fuintUniapp/pages.json create mode 100644 fuintUniapp/pages/address/create.vue create mode 100644 fuintUniapp/pages/address/index.vue create mode 100644 fuintUniapp/pages/address/update.vue create mode 100644 fuintUniapp/pages/article/detail.vue create mode 100644 fuintUniapp/pages/article/index.vue create mode 100644 fuintUniapp/pages/cart/index.vue create mode 100644 fuintUniapp/pages/category/components/SkuPopup.vue create mode 100644 fuintUniapp/pages/category/index.vue create mode 100644 fuintUniapp/pages/comment/index.vue create mode 100644 fuintUniapp/pages/confirm/doConfirm.vue create mode 100644 fuintUniapp/pages/confirm/result.vue create mode 100644 fuintUniapp/pages/coupon/detail.vue create mode 100644 fuintUniapp/pages/coupon/list.vue create mode 100644 fuintUniapp/pages/coupon/receive.vue create mode 100644 fuintUniapp/pages/custom/index.vue create mode 100644 fuintUniapp/pages/empty.vue create mode 100644 fuintUniapp/pages/give/index.vue create mode 100644 fuintUniapp/pages/goods/components/Service.vue create mode 100644 fuintUniapp/pages/goods/components/SkuPopup.vue create mode 100644 fuintUniapp/pages/goods/components/SlideImage.vue create mode 100644 fuintUniapp/pages/goods/detail.scss create mode 100644 fuintUniapp/pages/goods/detail.vue create mode 100644 fuintUniapp/pages/goods/list.vue create mode 100644 fuintUniapp/pages/help/index.vue create mode 100644 fuintUniapp/pages/index/index.vue create mode 100644 fuintUniapp/pages/location/index.vue create mode 100644 fuintUniapp/pages/login/auth.vue create mode 100644 fuintUniapp/pages/login/components/main.vue create mode 100644 fuintUniapp/pages/login/components/mp-weixin.vue create mode 100644 fuintUniapp/pages/login/index.vue create mode 100644 fuintUniapp/pages/merchant/index.vue create mode 100644 fuintUniapp/pages/merchant/member/detail.vue create mode 100644 fuintUniapp/pages/merchant/member/index.vue create mode 100644 fuintUniapp/pages/merchant/order/index.vue create mode 100644 fuintUniapp/pages/my-coupon/index.vue create mode 100644 fuintUniapp/pages/order/comment/index.vue create mode 100644 fuintUniapp/pages/order/detail.vue create mode 100644 fuintUniapp/pages/order/express/index.vue create mode 100644 fuintUniapp/pages/order/index.vue create mode 100644 fuintUniapp/pages/order/result.vue create mode 100644 fuintUniapp/pages/pay/cashier.vue create mode 100644 fuintUniapp/pages/pay/components/Popup.vue create mode 100644 fuintUniapp/pages/pay/index.vue create mode 100644 fuintUniapp/pages/pay/result.vue create mode 100644 fuintUniapp/pages/points/detail.vue create mode 100644 fuintUniapp/pages/points/gift.vue create mode 100644 fuintUniapp/pages/prestore/buy.scss create mode 100644 fuintUniapp/pages/prestore/buy.vue create mode 100644 fuintUniapp/pages/prestore/components/Popup.vue create mode 100644 fuintUniapp/pages/prestore/components/Service.vue create mode 100644 fuintUniapp/pages/prestore/detail.vue create mode 100644 fuintUniapp/pages/refund/apply.vue create mode 100644 fuintUniapp/pages/refund/detail.vue create mode 100644 fuintUniapp/pages/refund/index.vue create mode 100644 fuintUniapp/pages/search/index.vue create mode 100644 fuintUniapp/pages/settlement/goods.vue create mode 100644 fuintUniapp/pages/settlement/index.vue create mode 100644 fuintUniapp/pages/settlement/style.scss create mode 100644 fuintUniapp/pages/timer/detail.vue create mode 100644 fuintUniapp/pages/user/card.vue create mode 100644 fuintUniapp/pages/user/code.vue create mode 100644 fuintUniapp/pages/user/components/Popup.vue create mode 100644 fuintUniapp/pages/user/index.vue create mode 100644 fuintUniapp/pages/user/password.vue create mode 100644 fuintUniapp/pages/user/setting.vue create mode 100644 fuintUniapp/pages/wallet/balance/log.vue create mode 100644 fuintUniapp/pages/wallet/index.vue create mode 100644 fuintUniapp/pages/wallet/recharge/index.vue create mode 100644 fuintUniapp/pages/wallet/recharge/order.vue create mode 100644 fuintUniapp/static/background/user-header.png create mode 100644 fuintUniapp/static/channel/wechat.png create mode 100644 fuintUniapp/static/confirm/do.png create mode 100644 fuintUniapp/static/confirm/undo.png create mode 100644 fuintUniapp/static/default-avatar.png create mode 100644 fuintUniapp/static/empty-02.png create mode 100644 fuintUniapp/static/empty.png create mode 100644 fuintUniapp/static/icon/add.png create mode 100644 fuintUniapp/static/icon/coupon.png create mode 100644 fuintUniapp/static/icon/minus.png create mode 100644 fuintUniapp/static/icon/saoma.png create mode 100644 fuintUniapp/static/icon/saoyisao.png create mode 100644 fuintUniapp/static/nav/1.png create mode 100644 fuintUniapp/static/nav/2.png create mode 100644 fuintUniapp/static/nav/3.png create mode 100644 fuintUniapp/static/nav/4.png create mode 100644 fuintUniapp/static/order/refund-bg.png create mode 100644 fuintUniapp/static/order/status/close.png create mode 100644 fuintUniapp/static/order/status/received.png create mode 100644 fuintUniapp/static/order/status/wait_deliver.png create mode 100644 fuintUniapp/static/order/status/wait_pay.png create mode 100644 fuintUniapp/static/order/status/wait_receipt.png create mode 100644 fuintUniapp/static/pay/fail.png create mode 100644 fuintUniapp/static/pay/success.png create mode 100644 fuintUniapp/static/tabbar/cart-active.png create mode 100644 fuintUniapp/static/tabbar/cart.png create mode 100644 fuintUniapp/static/tabbar/cate-active.png create mode 100644 fuintUniapp/static/tabbar/cate.png create mode 100644 fuintUniapp/static/tabbar/home-active.png create mode 100644 fuintUniapp/static/tabbar/home.png create mode 100644 fuintUniapp/static/tabbar/shop-active.png create mode 100644 fuintUniapp/static/tabbar/shop.png create mode 100644 fuintUniapp/static/tabbar/user-active.png create mode 100644 fuintUniapp/static/tabbar/user.png create mode 100644 fuintUniapp/static/user/tag.png create mode 100644 fuintUniapp/store/getters.js create mode 100644 fuintUniapp/store/index.js create mode 100644 fuintUniapp/store/modules/app.js create mode 100644 fuintUniapp/store/modules/index.js create mode 100644 fuintUniapp/store/modules/user.js create mode 100644 fuintUniapp/store/mutation-types.js create mode 100644 fuintUniapp/uni.scss create mode 100644 fuintUniapp/uni_modules/uni-popup/changelog.md create mode 100644 fuintUniapp/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js create mode 100644 fuintUniapp/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue create mode 100644 fuintUniapp/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue create mode 100644 fuintUniapp/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue create mode 100644 fuintUniapp/uni_modules/uni-popup/components/uni-popup/keypress.js create mode 100644 fuintUniapp/uni_modules/uni-popup/components/uni-popup/popup.js create mode 100644 fuintUniapp/uni_modules/uni-popup/components/uni-popup/uni-popup.vue create mode 100644 fuintUniapp/uni_modules/uni-popup/package.json create mode 100644 fuintUniapp/uni_modules/uni-popup/readme.md create mode 100644 fuintUniapp/uni_modules/uni-row/changelog.md create mode 100644 fuintUniapp/uni_modules/uni-row/components/uni-col/uni-col.vue create mode 100644 fuintUniapp/uni_modules/uni-row/components/uni-row/uni-row.vue create mode 100644 fuintUniapp/uni_modules/uni-row/package.json create mode 100644 fuintUniapp/uni_modules/uni-row/readme.md create mode 100644 fuintUniapp/utils/app.js create mode 100644 fuintUniapp/utils/iconfont-new.scss create mode 100644 fuintUniapp/utils/iconfont.scss create mode 100644 fuintUniapp/utils/request/core/request.js create mode 100644 fuintUniapp/utils/request/core/utils.js create mode 100644 fuintUniapp/utils/request/index.js create mode 100644 fuintUniapp/utils/request/request.js create mode 100644 fuintUniapp/utils/request/request.md create mode 100644 fuintUniapp/utils/request/upload/qiniuUploader.js create mode 100644 fuintUniapp/utils/request/upload/upload.js create mode 100644 fuintUniapp/utils/request/upload/utils.js create mode 100644 fuintUniapp/utils/storage.js create mode 100644 fuintUniapp/utils/util.js create mode 100644 fuintUniapp/utils/utils.scss create mode 100644 fuintUniapp/utils/verify.js create mode 100644 fuintUniapp/uview-ui/LICENSE create mode 100644 fuintUniapp/uview-ui/README.md create mode 100644 fuintUniapp/uview-ui/components/u-action-sheet/u-action-sheet.vue create mode 100644 fuintUniapp/uview-ui/components/u-alert-tips/u-alert-tips.vue create mode 100644 fuintUniapp/uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue create mode 100644 fuintUniapp/uview-ui/components/u-avatar-cropper/weCropper.js create mode 100644 fuintUniapp/uview-ui/components/u-avatar/u-avatar.vue create mode 100644 fuintUniapp/uview-ui/components/u-back-top/u-back-top.vue create mode 100644 fuintUniapp/uview-ui/components/u-badge/u-badge.vue create mode 100644 fuintUniapp/uview-ui/components/u-button/u-button.vue create mode 100644 fuintUniapp/uview-ui/components/u-calendar/u-calendar.vue create mode 100644 fuintUniapp/uview-ui/components/u-car-keyboard/u-car-keyboard.vue create mode 100644 fuintUniapp/uview-ui/components/u-card/u-card.vue create mode 100644 fuintUniapp/uview-ui/components/u-cell-group/u-cell-group.vue create mode 100644 fuintUniapp/uview-ui/components/u-cell-item/u-cell-item.vue create mode 100644 fuintUniapp/uview-ui/components/u-checkbox-group/u-checkbox-group.vue create mode 100644 fuintUniapp/uview-ui/components/u-checkbox/u-checkbox.vue create mode 100644 fuintUniapp/uview-ui/components/u-circle-progress/u-circle-progress.vue create mode 100644 fuintUniapp/uview-ui/components/u-col/u-col.vue create mode 100644 fuintUniapp/uview-ui/components/u-collapse-item/u-collapse-item.vue create mode 100644 fuintUniapp/uview-ui/components/u-collapse/u-collapse.vue create mode 100644 fuintUniapp/uview-ui/components/u-column-notice/u-column-notice.vue create mode 100644 fuintUniapp/uview-ui/components/u-count-down/u-count-down.vue create mode 100644 fuintUniapp/uview-ui/components/u-count-to/u-count-to.vue create mode 100644 fuintUniapp/uview-ui/components/u-divider/u-divider.vue create mode 100644 fuintUniapp/uview-ui/components/u-dropdown-item/u-dropdown-item.vue create mode 100644 fuintUniapp/uview-ui/components/u-dropdown/u-dropdown.vue create mode 100644 fuintUniapp/uview-ui/components/u-empty/u-empty.vue create mode 100644 fuintUniapp/uview-ui/components/u-field/u-field.vue create mode 100644 fuintUniapp/uview-ui/components/u-form-item/u-form-item.vue create mode 100644 fuintUniapp/uview-ui/components/u-form/u-form.vue create mode 100644 fuintUniapp/uview-ui/components/u-full-screen/u-full-screen.vue create mode 100644 fuintUniapp/uview-ui/components/u-gap/u-gap.vue create mode 100644 fuintUniapp/uview-ui/components/u-grid-item/u-grid-item.vue create mode 100644 fuintUniapp/uview-ui/components/u-grid/u-grid.vue create mode 100644 fuintUniapp/uview-ui/components/u-icon/u-icon.vue create mode 100644 fuintUniapp/uview-ui/components/u-image/u-image.vue create mode 100644 fuintUniapp/uview-ui/components/u-index-anchor/u-index-anchor.vue create mode 100644 fuintUniapp/uview-ui/components/u-index-list/u-index-list.vue create mode 100644 fuintUniapp/uview-ui/components/u-input/u-input.vue create mode 100644 fuintUniapp/uview-ui/components/u-keyboard/u-keyboard.vue create mode 100644 fuintUniapp/uview-ui/components/u-lazy-load/u-lazy-load.vue create mode 100644 fuintUniapp/uview-ui/components/u-line-progress/u-line-progress.vue create mode 100644 fuintUniapp/uview-ui/components/u-line/u-line.vue create mode 100644 fuintUniapp/uview-ui/components/u-link/u-link.vue create mode 100644 fuintUniapp/uview-ui/components/u-loading-page/u-loading-page.vue create mode 100644 fuintUniapp/uview-ui/components/u-loading/u-loading.vue create mode 100644 fuintUniapp/uview-ui/components/u-loadmore/u-loadmore.vue create mode 100644 fuintUniapp/uview-ui/components/u-mask/u-mask.vue create mode 100644 fuintUniapp/uview-ui/components/u-message-input/u-message-input.vue create mode 100644 fuintUniapp/uview-ui/components/u-modal/u-modal.vue create mode 100644 fuintUniapp/uview-ui/components/u-navbar/u-navbar.vue create mode 100644 fuintUniapp/uview-ui/components/u-no-network/u-no-network.vue create mode 100644 fuintUniapp/uview-ui/components/u-notice-bar/u-notice-bar.vue create mode 100644 fuintUniapp/uview-ui/components/u-number-box/u-number-box.vue create mode 100644 fuintUniapp/uview-ui/components/u-number-keyboard/u-number-keyboard.vue create mode 100644 fuintUniapp/uview-ui/components/u-parse/libs/CssHandler.js create mode 100644 fuintUniapp/uview-ui/components/u-parse/libs/MpHtmlParser.js create mode 100644 fuintUniapp/uview-ui/components/u-parse/libs/config.js create mode 100644 fuintUniapp/uview-ui/components/u-parse/libs/handler.wxs create mode 100644 fuintUniapp/uview-ui/components/u-parse/libs/trees.vue create mode 100644 fuintUniapp/uview-ui/components/u-parse/u-parse.vue create mode 100644 fuintUniapp/uview-ui/components/u-picker/u-picker.vue create mode 100644 fuintUniapp/uview-ui/components/u-popup/u-popup.vue create mode 100644 fuintUniapp/uview-ui/components/u-radio-group/u-radio-group.vue create mode 100644 fuintUniapp/uview-ui/components/u-radio/u-radio.vue create mode 100644 fuintUniapp/uview-ui/components/u-rate/u-rate.vue create mode 100644 fuintUniapp/uview-ui/components/u-read-more/u-read-more.vue create mode 100644 fuintUniapp/uview-ui/components/u-row-notice/u-row-notice.vue create mode 100644 fuintUniapp/uview-ui/components/u-row/u-row.vue create mode 100644 fuintUniapp/uview-ui/components/u-search/u-search.vue create mode 100644 fuintUniapp/uview-ui/components/u-section/u-section.vue create mode 100644 fuintUniapp/uview-ui/components/u-select/u-select.vue create mode 100644 fuintUniapp/uview-ui/components/u-skeleton/u-skeleton.vue create mode 100644 fuintUniapp/uview-ui/components/u-slider/u-slider.vue create mode 100644 fuintUniapp/uview-ui/components/u-steps/u-steps.vue create mode 100644 fuintUniapp/uview-ui/components/u-sticky/u-sticky.vue create mode 100644 fuintUniapp/uview-ui/components/u-subsection/u-subsection.vue create mode 100644 fuintUniapp/uview-ui/components/u-swipe-action/u-swipe-action.vue create mode 100644 fuintUniapp/uview-ui/components/u-swiper/u-swiper.vue create mode 100644 fuintUniapp/uview-ui/components/u-switch/u-switch.vue create mode 100644 fuintUniapp/uview-ui/components/u-tabbar/u-tabbar.vue create mode 100644 fuintUniapp/uview-ui/components/u-table/u-table.vue create mode 100644 fuintUniapp/uview-ui/components/u-tabs-swiper/u-tabs-swiper.vue create mode 100644 fuintUniapp/uview-ui/components/u-tabs/u-tabs.vue create mode 100644 fuintUniapp/uview-ui/components/u-tag/u-tag.vue create mode 100644 fuintUniapp/uview-ui/components/u-td/u-td.vue create mode 100644 fuintUniapp/uview-ui/components/u-th/u-th.vue create mode 100644 fuintUniapp/uview-ui/components/u-time-line-item/u-time-line-item.vue create mode 100644 fuintUniapp/uview-ui/components/u-time-line/u-time-line.vue create mode 100644 fuintUniapp/uview-ui/components/u-toast/u-toast.vue create mode 100644 fuintUniapp/uview-ui/components/u-top-tips/u-top-tips.vue create mode 100644 fuintUniapp/uview-ui/components/u-tr/u-tr.vue create mode 100644 fuintUniapp/uview-ui/components/u-upload/u-upload.vue create mode 100644 fuintUniapp/uview-ui/components/u-verification-code/u-verification-code.vue create mode 100644 fuintUniapp/uview-ui/components/u-waterfall/u-waterfall.vue create mode 100644 fuintUniapp/uview-ui/iconfont.css create mode 100644 fuintUniapp/uview-ui/index.js create mode 100644 fuintUniapp/uview-ui/index.scss create mode 100644 fuintUniapp/uview-ui/libs/config/config.js create mode 100644 fuintUniapp/uview-ui/libs/config/zIndex.js create mode 100644 fuintUniapp/uview-ui/libs/css/color.scss create mode 100644 fuintUniapp/uview-ui/libs/css/common.scss create mode 100644 fuintUniapp/uview-ui/libs/css/style.components.scss create mode 100644 fuintUniapp/uview-ui/libs/css/style.h5.scss create mode 100644 fuintUniapp/uview-ui/libs/css/style.mp.scss create mode 100644 fuintUniapp/uview-ui/libs/css/style.nvue.scss create mode 100644 fuintUniapp/uview-ui/libs/css/style.vue.scss create mode 100644 fuintUniapp/uview-ui/libs/function/$parent.js create mode 100644 fuintUniapp/uview-ui/libs/function/addUnit.js create mode 100644 fuintUniapp/uview-ui/libs/function/bem.js create mode 100644 fuintUniapp/uview-ui/libs/function/color.js create mode 100644 fuintUniapp/uview-ui/libs/function/colorGradient.js create mode 100644 fuintUniapp/uview-ui/libs/function/debounce.js create mode 100644 fuintUniapp/uview-ui/libs/function/deepClone.js create mode 100644 fuintUniapp/uview-ui/libs/function/deepMerge.js create mode 100644 fuintUniapp/uview-ui/libs/function/getParent.js create mode 100644 fuintUniapp/uview-ui/libs/function/guid.js create mode 100644 fuintUniapp/uview-ui/libs/function/md5.js create mode 100644 fuintUniapp/uview-ui/libs/function/queryParams.js create mode 100644 fuintUniapp/uview-ui/libs/function/random.js create mode 100644 fuintUniapp/uview-ui/libs/function/randomArray.js create mode 100644 fuintUniapp/uview-ui/libs/function/route.js create mode 100644 fuintUniapp/uview-ui/libs/function/sys.js create mode 100644 fuintUniapp/uview-ui/libs/function/test.js create mode 100644 fuintUniapp/uview-ui/libs/function/throttle.js create mode 100644 fuintUniapp/uview-ui/libs/function/timeFormat.js create mode 100644 fuintUniapp/uview-ui/libs/function/timeFrom.js create mode 100644 fuintUniapp/uview-ui/libs/function/toast.js create mode 100644 fuintUniapp/uview-ui/libs/function/trim.js create mode 100644 fuintUniapp/uview-ui/libs/function/type2icon.js create mode 100644 fuintUniapp/uview-ui/libs/mixin/mixin.js create mode 100644 fuintUniapp/uview-ui/libs/mixin/mpShare.js create mode 100644 fuintUniapp/uview-ui/libs/request/index.js create mode 100644 fuintUniapp/uview-ui/libs/store/index.js create mode 100644 fuintUniapp/uview-ui/libs/util/area.js create mode 100644 fuintUniapp/uview-ui/libs/util/async-validator.js create mode 100644 fuintUniapp/uview-ui/libs/util/city.js create mode 100644 fuintUniapp/uview-ui/libs/util/emitter.js create mode 100644 fuintUniapp/uview-ui/libs/util/province.js create mode 100644 fuintUniapp/uview-ui/package.json create mode 100644 fuintUniapp/uview-ui/theme.scss diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..0548357 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..6bebd37 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/yshi.iml b/.idea/yshi.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/yshi.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/fuintAdmin/.editorconfig b/fuintAdmin/.editorconfig new file mode 100644 index 0000000..7034f9b --- /dev/null +++ b/fuintAdmin/.editorconfig @@ -0,0 +1,22 @@ +# 告诉EditorConfig插件,这是根文件,不用继续往上查找 +root = true + +# 匹配全部文件 +[*] +# 设置字符集 +charset = utf-8 +# 缩进风格,可选space、tab +indent_style = space +# 缩进的空格数 +indent_size = 2 +# 结尾换行符,可选lf、cr、crlf +end_of_line = lf +# 在文件结尾插入新行 +insert_final_newline = true +# 删除一行中的前后空格 +trim_trailing_whitespace = true + +# 匹配md结尾的文件 +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/fuintAdmin/.env.development b/fuintAdmin/.env.development new file mode 100644 index 0000000..86f1c7a --- /dev/null +++ b/fuintAdmin/.env.development @@ -0,0 +1,14 @@ +# 页面标题 +VUE_APP_TITLE = 会员演示营销管理系统 + +# 开发环境配置 +ENV = 'development' + +# 会员演示营销系统/开发环境 +VUE_APP_BASE_API = '/dev-api' + +# 发布目录 +VUE_APP_PUBLIC_PATH = '/' + +# 后端接口地址 +VUE_APP_SERVER_URL = 'http://localhost:8080/' diff --git a/fuintAdmin/.env.production b/fuintAdmin/.env.production new file mode 100644 index 0000000..360fe88 --- /dev/null +++ b/fuintAdmin/.env.production @@ -0,0 +1,14 @@ +# 页面标题 +VUE_APP_TITLE = 会员演示营销管理系统 + +# 生产环境配置 +ENV = 'production' + +# 会员演示营销系统/生产环境 +VUE_APP_BASE_API = '/fuint-application/' + +# 发布目录 +VUE_APP_PUBLIC_PATH = '/fuintAdmin/' + +# 后端接口地址 +VUE_APP_SERVER_URL = 'https://www.baidu.com/fuint-application/' diff --git a/fuintAdmin/.env.staging b/fuintAdmin/.env.staging new file mode 100644 index 0000000..0818993 --- /dev/null +++ b/fuintAdmin/.env.staging @@ -0,0 +1,14 @@ +# 页面标题 +VUE_APP_TITLE = 会员演示营销管理系统 + +# 测试环境配置 +ENV = 'staging' + +# 会员演示营销系统/测试环境 +VUE_APP_BASE_API = '/stage-api' + +# 发布目录 +VUE_APP_PUBLIC_PATH = '/' + +# 后端接口地址 +VUE_APP_SERVER_URL = 'http://localhost:8082/stage-api/' diff --git a/fuintAdmin/.eslintignore b/fuintAdmin/.eslintignore new file mode 100644 index 0000000..89be6f6 --- /dev/null +++ b/fuintAdmin/.eslintignore @@ -0,0 +1,10 @@ +# 忽略build目录下类型为js的文件的语法检查 +build/*.js +# 忽略src/assets目录下文件的语法检查 +src/assets +# 忽略public目录下文件的语法检查 +public +# 忽略当前目录下为js的文件的语法检查 +*.js +# 忽略当前目录下为vue的文件的语法检查 +*.vue \ No newline at end of file diff --git a/fuintAdmin/.eslintrc.js b/fuintAdmin/.eslintrc.js new file mode 100644 index 0000000..82bbdee --- /dev/null +++ b/fuintAdmin/.eslintrc.js @@ -0,0 +1,199 @@ +// ESlint 检查配置 +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/singleline-html-element-content-newline": "off", + "vue/multiline-html-element-content-newline":"off", + "vue/name-property-casing": ["error", "PascalCase"], + "vue/no-v-html": "off", + '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': ["error", "always", {"null": "ignore"}], + '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': 0, + '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'] + } +} diff --git a/fuintAdmin/.gitignore b/fuintAdmin/.gitignore new file mode 100644 index 0000000..78a752d --- /dev/null +++ b/fuintAdmin/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +**/*.log + +tests/**/coverage/ +tests/e2e/reports +selenium-debug.log + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.local + +package-lock.json +yarn.lock diff --git a/fuintAdmin/README.md b/fuintAdmin/README.md new file mode 100644 index 0000000..9935fdd --- /dev/null +++ b/fuintAdmin/README.md @@ -0,0 +1,28 @@ +## 开发 + +```bash + +# 进入项目目录 +cd fuintAdmin + +# 安装依赖 +npm install + +# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题 +npm install --registry=https://registry.npmmirror.com + +# 启动服务 +npm run dev +``` + +浏览器访问 http://localhost:8081 + +## 发布 + +```bash +# 构建测试环境 +npm run build:stage + +# 构建生产环境 +npm run build:prod +``` \ No newline at end of file diff --git a/fuintAdmin/babel.config.js b/fuintAdmin/babel.config.js new file mode 100644 index 0000000..b99f001 --- /dev/null +++ b/fuintAdmin/babel.config.js @@ -0,0 +1,13 @@ +module.exports = { + presets: [ + // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app + '@vue/cli-plugin-babel/preset' + ], + 'env': { + 'development': { + // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require(). + // This plugin can significantly increase the speed of hot updates, when you have a large number of pages. + 'plugins': ['dynamic-import-node'] + } + } +} diff --git a/fuintAdmin/bin/build.bat b/fuintAdmin/bin/build.bat new file mode 100644 index 0000000..dda590d --- /dev/null +++ b/fuintAdmin/bin/build.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] Weḅdistļ +echo. + +%~d0 +cd %~dp0 + +cd .. +npm run build:prod + +pause \ No newline at end of file diff --git a/fuintAdmin/bin/package.bat b/fuintAdmin/bin/package.bat new file mode 100644 index 0000000..0e5bc0f --- /dev/null +++ b/fuintAdmin/bin/package.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] װWeḅnode_modulesļ +echo. + +%~d0 +cd %~dp0 + +cd .. +npm install --registry=https://registry.npmmirror.com + +pause \ No newline at end of file diff --git a/fuintAdmin/bin/run-web.bat b/fuintAdmin/bin/run-web.bat new file mode 100644 index 0000000..d30deae --- /dev/null +++ b/fuintAdmin/bin/run-web.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] ʹ Vue CLI Web ̡ +echo. + +%~d0 +cd %~dp0 + +cd .. +npm run dev + +pause \ No newline at end of file diff --git a/fuintAdmin/build/index.js b/fuintAdmin/build/index.js new file mode 100644 index 0000000..0c57de2 --- /dev/null +++ b/fuintAdmin/build/index.js @@ -0,0 +1,35 @@ +const { run } = require('runjs') +const chalk = require('chalk') +const config = require('../vue.config.js') +const rawArgv = process.argv.slice(2) +const args = rawArgv.join(' ') + +if (process.env.npm_config_preview || rawArgv.includes('--preview')) { + const report = rawArgv.includes('--report') + + run(`vue-cli-service build ${args}`) + + const port = 9526 + const publicPath = config.publicPath + + var connect = require('connect') + var serveStatic = require('serve-static') + const app = connect() + + app.use( + publicPath, + serveStatic('./dist', { + index: ['index.html', '/'] + }) + ) + + app.listen(port, function () { + console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`)) + if (report) { + console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`)) + } + + }) +} else { + run(`vue-cli-service build ${args}`) +} diff --git a/fuintAdmin/package.json b/fuintAdmin/package.json new file mode 100644 index 0000000..d4801e2 --- /dev/null +++ b/fuintAdmin/package.json @@ -0,0 +1,91 @@ +{ + "name": "fuintAdmin", + "version": "3.0.3", + "description": "会员演示营销系统后台管理端", + "author": "FSQ", + "license": "MIT", + "scripts": { + "dev": "vue-cli-service serve", + "build:prod": "vue-cli-service build", + "build:stage": "vue-cli-service build --mode staging", + "preview": "node build/index.js --preview", + "lint": "eslint --ext .js,.vue src" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "src/**/*.{js,vue}": [ + "eslint --fix", + "git add" + ] + }, + "keywords": [ + "vue", + "admin", + "dashboard", + "element-ui", + "boilerplate", + "admin-template", + "management-system" + ], + "repository": { + "type": "git", + "url": "https://gitee.com/fuint/fuint-uniapp.git" + }, + "dependencies": { + "@riophae/vue-treeselect": "0.4.0", + "axios": "0.24.0", + "clipboard": "2.0.8", + "core-js": "3.25.3", + "echarts": "4.9.0", + "element-ui": "2.15.12", + "file-saver": "2.0.5", + "fuse.js": "6.4.3", + "highlight.js": "9.18.5", + "js-beautify": "1.13.0", + "js-cookie": "3.0.1", + "jsencrypt": "3.0.0-rc.1", + "nprogress": "0.2.0", + "quill": "1.3.7", + "screenfull": "5.0.2", + "sortablejs": "1.10.2", + "vue": "2.6.12", + "vue-count-to": "1.0.13", + "vue-cropper": "0.5.5", + "vue-meta": "2.4.0", + "vue-print-nb": "^1.7.5", + "vue-router": "3.4.9", + "vuedraggable": "2.24.3", + "vuex": "3.6.0" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "4.4.6", + "@vue/cli-plugin-eslint": "4.4.6", + "@vue/cli-service": "4.4.6", + "babel-eslint": "10.1.0", + "babel-plugin-dynamic-import-node": "2.3.3", + "chalk": "4.1.0", + "compression-webpack-plugin": "5.0.2", + "connect": "3.6.6", + "eslint": "^6.0.0", + "eslint-plugin-vue": "7.2.0", + "lint-staged": "10.5.3", + "runjs": "4.4.2", + "sass": "1.32.13", + "sass-loader": "10.1.1", + "script-ext-html-webpack-plugin": "2.1.5", + "svg-sprite-loader": "5.1.1", + "vue-template-compiler": "2.6.12" + }, + "engines": { + "node": ">=8.9", + "npm": ">= 3.0.0" + }, + "browserslist": [ + "> 1%", + "last 2 versions" + ] +} diff --git a/fuintAdmin/public/favicon.ico b/fuintAdmin/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2535907740e07d9ce8dd586f997f87328e5c37a9 GIT binary patch literal 1237 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%*vS|5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s0}+W0YGPq*>E`NeX6EE( zV&-OKW&+delAm0fo0?Yw)0=|OYk^ZQC@tg`0Bv?jEy^rQO>ryA&s6~X*(wvaTTF49 z2i2Q`+bw1|_38s1qYsK%q?m>Y0h14i2~W2`4m{Q;TBuL$la;~-0-g11I)m#U0)^O=r zuSHKip2)|0&;QlwR#wNtUkAT8o)-^Rj(hx{K~pgKW1s`qk&qf80bxV&`K(7AbdHKM zzE_BOsYQ`9WeTDf4WRz6oSR|ZVj%A*>uwO#aNYhb)?f8AB3qP!6 ze(4_3I{%Y#`?8nm|7G6RJ#t>T;CDjCp0%$JK5J6reqj2~K|;9YfW$|}L+4Z)mi~B9 zSfOB$X2a6B@$o)x;ou{+Vrt8}cI)~0NR~$m&#>Cp;?Vcw&LNj|Kdu~7X;>sI^D*5e yIJ9KN6aU*`-(3EEPr73$+48ojR{Q#XCLV@pw + + + + 请升级您的浏览器 + + + + + + +

请升级您的浏览器,以便我们更好的为您提供服务!

+

您正在使用 Internet Explorer 的早期版本(IE11以下版本或使用该内核的浏览器)。这意味着在升级浏览器前,您将无法访问此网站。

+
+

请注意:微软公司对Windows XP 及 Internet Explorer 早期版本的支持已经结束

+

自 2016 年 1 月 12 日起,Microsoft 不再为 IE 11 以下版本提供相应支持和更新。没有关键的浏览器安全更新,您的电脑可能易受有害病毒、间谍软件和其他恶意软件的攻击,它们可以窃取或损害您的业务数据和信息。请参阅 微软对 Internet Explorer 早期版本的支持将于 2016 年 1 月 12 日结束的说明

+
+

您可以选择更先进的浏览器

+

推荐使用以下浏览器的最新版本。如果您的电脑已有以下浏览器的最新版本则直接使用该浏览器访问即可。

+ +
+ + \ No newline at end of file diff --git a/fuintAdmin/public/index.html b/fuintAdmin/public/index.html new file mode 100644 index 0000000..a3b4312 --- /dev/null +++ b/fuintAdmin/public/index.html @@ -0,0 +1,202 @@ + + + + + + + + + + <%= webpackConfig.name %> + + + + +
+
+
+
+
+
正在加载系统资源,请耐心等待...
+
+
+ + diff --git a/fuintAdmin/public/robots.txt b/fuintAdmin/public/robots.txt new file mode 100644 index 0000000..77470cb --- /dev/null +++ b/fuintAdmin/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / \ No newline at end of file diff --git a/fuintAdmin/src/App.vue b/fuintAdmin/src/App.vue new file mode 100644 index 0000000..391d951 --- /dev/null +++ b/fuintAdmin/src/App.vue @@ -0,0 +1,19 @@ + + + diff --git a/fuintAdmin/src/api/article.js b/fuintAdmin/src/api/article.js new file mode 100644 index 0000000..1ce90ea --- /dev/null +++ b/fuintAdmin/src/api/article.js @@ -0,0 +1,40 @@ +import request from '@/utils/request' + +// 分页查询文章列表 +export function getArticleList(query) { + return request({ + url: 'backendApi/article/list', + method: 'get', + params: query + }) +} + +// 查询文章信息 +export function getArticle(articleId) { + return request({ + url: 'backendApi/article/info/' + articleId, + method: 'get' + }) +} + +// 更新文章状态 +export function updateStatus(id, status) { + const data = { + id, + status + } + return request({ + url: 'backendApi/article/updateStatus', + method: 'post', + data: data + }) +} + +// 保存数据 +export function saveArticle(data) { + return request({ + url: 'backendApi/article/save', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/balance.js b/fuintAdmin/src/api/balance.js new file mode 100644 index 0000000..2fbf087 --- /dev/null +++ b/fuintAdmin/src/api/balance.js @@ -0,0 +1,67 @@ +import request from '@/utils/request' + +// 分页查询余额明细列表 +export function getBalanceList(query) { + return request({ + url: 'backendApi/balance/list', + method: 'get', + params: query + }) +} + +// 查询明细详情 +export function getBalanceInfo(memberId) { + return request({ + url: 'backendApi/balance/info/' + memberId, + method: 'get' + }) +} + +// 更新状态 +export function updateBalanceStatus(id, status) { + const data = { + id, + status + } + return request({ + url: 'backendApi/balance/updateStatus', + method: 'post', + data: data + }) +} + +// 获取配置信息 +export function getSettingInfo() { + return request({ + url: 'backendApi/balance/setting', + method: 'get' + }) +} + +// 保存配置 +export function saveSetting(data) { + return request({ + url: 'backendApi/balance/saveSetting', + method: 'post', + data: data + }) +} + +// 确定充值 +export function doRecharge(data) { + return request({ + url: 'backendApi/balance/doRecharge', + method: 'post', + data: data + }) +} + +// 发放余额 +export function distribute(data) { + return request({ + url: 'backendApi/balance/distribute', + method: 'post', + data: data + }) +} + diff --git a/fuintAdmin/src/api/banner.js b/fuintAdmin/src/api/banner.js new file mode 100644 index 0000000..fcc0ddb --- /dev/null +++ b/fuintAdmin/src/api/banner.js @@ -0,0 +1,40 @@ +import request from '@/utils/request' + +// 分页查询banner列表 +export function getBannerList(query) { + return request({ + url: 'backendApi/banner/list', + method: 'get', + params: query + }) +} + +// 查询banner信息 +export function getBannerInfo(bannerId) { + return request({ + url: 'backendApi/banner/info/' + bannerId, + method: 'get' + }) +} + +// 更新banner状态 +export function updateBannerStatus(id, status) { + const data = { + id, + status + } + return request({ + url: 'backendApi/banner/updateStatus', + method: 'post', + data: data + }) +} + +// 保存数据 +export function saveBanner(data) { + return request({ + url: 'backendApi/banner/save', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/cashier.js b/fuintAdmin/src/api/cashier.js new file mode 100644 index 0000000..2ac1fd1 --- /dev/null +++ b/fuintAdmin/src/api/cashier.js @@ -0,0 +1,123 @@ +import request from '@/utils/request' + +// 初始化数据 +export function init(userId) { + return request({ + url: 'backendApi/cashier/init/' + userId, + method: 'get' + }) +} + +// 查询商品详情 +export function getGoodsInfo(goodsId) { + return request({ + url: 'backendApi/cashier/getGoodsInfo/' + goodsId, + method: 'get' + }) +} + +// 查询商品 +export function searchGoods(data) { + return request({ + url: 'backendApi/cashier/searchGoods', + method: 'post', + data: data + }) +} + +// 查询会员信息 +export function getMemberInfo(data) { + return request({ + url: 'backendApi/cashier/getMemberInfo', + method: 'post', + data: data + }) +} + +// 查询会员信息 +export function getMemberInfoById(userId) { + return request({ + url: 'backendApi/cashier/getMemberInfoById/' + userId, + method: 'get' + }) +} + +// 获取购物车列表 +export function getCartList(data) { + return request({ + url: 'clientApi/cart/list', + method: 'post', + data: data + }) +} + +// 保存购物车 +export function saveCart(data) { + return request({ + url: 'clientApi/cart/save', + method: 'post', + data: data + }) +} + +// 删除购物车 +export function removeFromCart(data) { + return request({ + url: 'clientApi/cart/clear', + method: 'post', + data: data + }) +} + +// 提交结算 +export function submitSettlement(data) { + return request({ + url: 'clientApi/settlement/submit', + method: 'post', + data: data + }) +} + +// 发起支付 +export function doPay(params) { + return request({ + url: 'clientApi/pay/doPay', + method: 'get', + params: params + }) +} + +// 获取订单列表 +export function getOrderList(data) { + return request({ + url: 'backendApi/order/latest', + method: 'post', + data: data + }) +} + +// 执行挂单 +export function doHangUp(data) { + return request({ + url: 'backendApi/cashier/doHangUp', + method: 'post', + data: data + }) +} + +// 获取挂单 +export function getHangUpList() { + return request({ + url: 'backendApi/cashier/getHangUpList', + method: 'get' + }) +} + +// 删除挂单 +export function removeHangUp(data) { + return request({ + url: 'clientApi/cart/clear', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/commission/cash.js b/fuintAdmin/src/api/commission/cash.js new file mode 100644 index 0000000..59714b5 --- /dev/null +++ b/fuintAdmin/src/api/commission/cash.js @@ -0,0 +1,45 @@ +import request from '@/utils/request' + +// 分页查询提现列表 +export function getCashList(query) { + return request({ + url: 'backendApi/commissionCash/list', + method: 'get', + params: query + }) +} + +// 查询提现详情 +export function getCashDetail(bannerId) { + return request({ + url: 'backendApi/commissionCash/info/' + bannerId, + method: 'get' + }) +} + +// 更新提现 +export function updateCommissionCash(data) { + return request({ + url: 'backendApi/commissionCash/save', + method: 'post', + data: data + }) +} + +// 确认结算 +export function confirmCommissionCash(data) { + return request({ + url: 'backendApi/commissionCash/confirm', + method: 'post', + data: data + }) +} + +// 取消结算 +export function cancelCommissionCash(data) { + return request({ + url: 'backendApi/commissionCash/cancel', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/commission/log.js b/fuintAdmin/src/api/commission/log.js new file mode 100644 index 0000000..fbacbc3 --- /dev/null +++ b/fuintAdmin/src/api/commission/log.js @@ -0,0 +1,45 @@ +import request from '@/utils/request' + +// 查询分佣记录列表 +export function getCommissionLogList(query) { + return request({ + url: 'backendApi/commissionLog/list', + method: 'get', + params: query + }) +} + +// 查询分佣记录详情 +export function getCommissionLogDetail(query) { + return request({ + url: 'backendApi/commissionLog/detail', + method: 'get', + params: query + }) +} + +// 更新分佣记录 +export function updateCommissionLog(data) { + return request({ + url: 'backendApi/commissionLog/save', + method: 'post', + data: data + }) +} + +// 作废分佣记录 +export function deleteCommissionLog(id) { + return request({ + url: 'backendApi/commissionLog/delete/' + id, + method: 'get' + }) +} + +// 结算分佣记录 +export function doSettle(data) { + return request({ + url: 'backendApi/commissionLog/doSettle', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/commission/rule.js b/fuintAdmin/src/api/commission/rule.js new file mode 100644 index 0000000..e037c20 --- /dev/null +++ b/fuintAdmin/src/api/commission/rule.js @@ -0,0 +1,46 @@ +import request from '@/utils/request' + +// 分页查询分销提成规则列表 +export function getCommissionRuleList(query) { + return request({ + url: 'backendApi/commissionRule/list', + method: 'get', + params: query + }) +} + +// 查询分销提成规则详情 +export function getCommissionRuleInfo(ruleId) { + return request({ + url: 'backendApi/commissionRule/info/' + ruleId, + method: 'get' + }) +} + +// 更新分销提成规则状态 +export function updateCommissionRuleStatus(ruleId, status) { + const data = { ruleId, status } + return request({ + url: 'backendApi/commissionRule/updateStatus', + method: 'post', + data: data + }) +} + +// 保存分销提成规则 +export function saveCommissionRule(data) { + return request({ + url: 'backendApi/commissionRule/save', + method: 'post', + data: data + }) +} + +// 删除分销提成规则 +export function removeCommissionRule(data) { + return request({ + url: 'backendApi/commissionRule/updateStatus', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/common.js b/fuintAdmin/src/api/common.js new file mode 100644 index 0000000..64fd674 --- /dev/null +++ b/fuintAdmin/src/api/common.js @@ -0,0 +1,11 @@ +import request from '@/utils/request' + +// 生成二维码 +export function createQrCode(data) { + return request({ + url: 'backendApi/common/createQrCode', + method: 'post', + data: data + }) +} + diff --git a/fuintAdmin/src/api/coupon/confirmLog.js b/fuintAdmin/src/api/coupon/confirmLog.js new file mode 100644 index 0000000..ec3bed3 --- /dev/null +++ b/fuintAdmin/src/api/coupon/confirmLog.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 分页查询核销流水列表 +export function getConfirmLogList(query) { + return request({ + url: 'backendApi/confirmLog/list', + method: 'get', + params: query + }) +} + +// 撤销已使用的卡券 +export function rollbackUserCoupon(id, userCouponId) { + return request({ + url: 'backendApi/confirmLog/rollbackUserCoupon/' + id + '?userCouponId=' + userCouponId, + method: 'get', + }) +} diff --git a/fuintAdmin/src/api/coupon/coupon.js b/fuintAdmin/src/api/coupon/coupon.js new file mode 100644 index 0000000..6c6e9d4 --- /dev/null +++ b/fuintAdmin/src/api/coupon/coupon.js @@ -0,0 +1,75 @@ +import request from '@/utils/request' + +// 分页查询卡券列表 +export function getCouponList(query) { + return request({ + url: 'backendApi/coupon/list', + method: 'get', + params: query + }) +} + +// 查询卡券信息 +export function getCouponInfo(id) { + return request({ + url: 'backendApi/coupon/info/' + id, + method: 'get' + }) +} + +// 更新状态 +export function updateCouponStatus(id, status) { + const data = { + id, + status + } + return request({ + url: 'backendApi/coupon/updateStatus', + method: 'post', + data: data + }) +} + +// 删除卡券 +export function deleteCoupon(id) { + return request({ + url: 'backendApi/coupon/delete/' + id, + method: 'get' + }) +} + +// 保存卡券 +export function saveCoupon(data) { + return request({ + url: 'backendApi/coupon/save', + method: 'post', + data: data + }) +} + +// 查询卡券核销信息 +export function getConfirmInfo(data) { + return request({ + url: 'backendApi/doConfirm/info', + method: 'post', + data: data + }) +} + +// 执行核销 +export function doConfirm(data) { + return request({ + url: 'backendApi/doConfirm/doConfirm', + method: 'post', + data: data + }) +} + +// 发放卡券 +export function sendCoupon(params) { + return request({ + url: 'backendApi/coupon/sendCoupon', + method: 'get', + params: params + }) +} diff --git a/fuintAdmin/src/api/coupon/give.js b/fuintAdmin/src/api/coupon/give.js new file mode 100644 index 0000000..ac7cfb6 --- /dev/null +++ b/fuintAdmin/src/api/coupon/give.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 分页查询转赠记录列表 +export function getGiveLogList(query) { + return request({ + url: 'backendApi/give/list', + method: 'get', + params: query + }) +} + +// 获取转赠详情 +export function getGiveItem(id) { + return request({ + url: 'backendApi/give/giveItem?giveId=' + id, + method: 'get', + }) +} diff --git a/fuintAdmin/src/api/coupon/group.js b/fuintAdmin/src/api/coupon/group.js new file mode 100644 index 0000000..e8dcda7 --- /dev/null +++ b/fuintAdmin/src/api/coupon/group.js @@ -0,0 +1,57 @@ +import request from '@/utils/request' + +// 分页查询卡券分组列表 +export function getGroupList(query) { + return request({ + url: 'backendApi/couponGroup/list', + method: 'get', + params: query + }) +} + +// 查询卡券分组列表 +export function getAllGroupList(query) { + return request({ + url: 'backendApi/couponGroup/quickSearch', + method: 'get', + params: query + }) +} + +// 查询分组信息 +export function getGroupInfo(id) { + return request({ + url: 'backendApi/couponGroup/info/' + id, + method: 'get' + }) +} + +// 更新状态 +export function updateGroupStatus(id, status) { + const data = { + id, + status + } + return request({ + url: 'backendApi/couponGroup/updateStatus', + method: 'post', + data: data + }) +} + +// 删除卡券分组 +export function deleteGroup(id) { + return request({ + url: 'backendApi/couponGroup/delete/' + id, + method: 'get' + }) +} + +// 保存卡券分组数据 +export function saveGroup(data) { + return request({ + url: 'backendApi/couponGroup/save', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/coupon/sendLog.js b/fuintAdmin/src/api/coupon/sendLog.js new file mode 100644 index 0000000..d8b57a9 --- /dev/null +++ b/fuintAdmin/src/api/coupon/sendLog.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 分页查询发券记录列表 +export function getSendLogList(query) { + return request({ + url: 'backendApi/sendLog/list', + method: 'get', + params: query + }) +} + +// 撤销已发放的卡券 +export function removeUserCoupon(id) { + return request({ + url: 'backendApi/sendLog/removeUserCoupon/' + id, + method: 'get', + }) +} diff --git a/fuintAdmin/src/api/coupon/userCoupon.js b/fuintAdmin/src/api/coupon/userCoupon.js new file mode 100644 index 0000000..d8d7ce5 --- /dev/null +++ b/fuintAdmin/src/api/coupon/userCoupon.js @@ -0,0 +1,19 @@ +import request from '@/utils/request' + +// 分页查询会员卡券列表 +export function getUserCouponList(query) { + return request({ + url: 'backendApi/userCoupon/list', + method: 'get', + params: query + }) +} + +// 作废会员卡券 +export function deleteUserCoupon(id) { + return request({ + url: 'backendApi/userCoupon/delete/' + id, + method: 'get', + }) +} + diff --git a/fuintAdmin/src/api/goods.js b/fuintAdmin/src/api/goods.js new file mode 100644 index 0000000..ce44c40 --- /dev/null +++ b/fuintAdmin/src/api/goods.js @@ -0,0 +1,85 @@ +import request from '@/utils/request' + +// 分页查询商品列表 +export function getGoodsList(query) { + return request({ + url: 'backendApi/goods/goods/list', + method: 'get', + params: query + }) +} + +// 查询商品详情 +export function getGoodsInfo(goodsId) { + return request({ + url: 'backendApi/goods/goods/info/' + goodsId, + method: 'get' + }) +} + +// 更新状态 +export function updateGoodsStatus(id, status) { + const data = { + id, + status + } + return request({ + url: 'backendApi/goods/goods/updateStatus', + method: 'post', + data: data + }) +} + +// 保存分类数据 +export function saveGoods(data) { + return request({ + url: 'backendApi/goods/goods/save', + method: 'post', + data: data + }) +} + +// 保存商品规格名称 +export function saveSpecName(data) { + return request({ + url: 'backendApi/goods/goods/saveSpecName', + method: 'post', + data: data + }) +} + +// 保存商品规格值 +export function saveSpecValue(data) { + return request({ + url: 'backendApi/goods/goods/saveSpecValue', + method: 'post', + data: data + }) +} + +// 删除商品规格 +export function deleteSpec(query) { + return request({ + url: 'backendApi/goods/goods/deleteSpec', + method: 'get', + params: query + }) +} + +// 删除商品规格值 +export function deleteSpecValue(query) { + return request({ + url: 'backendApi/goods/goods/deleteSpecValue', + method: 'get', + params: query + }) +} + +// 获取选择商品列表 +export function selectGoodsList(data) { + return request({ + url: 'backendApi/goods/goods/selectGoods', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/goodsCate.js b/fuintAdmin/src/api/goodsCate.js new file mode 100644 index 0000000..e277b16 --- /dev/null +++ b/fuintAdmin/src/api/goodsCate.js @@ -0,0 +1,40 @@ +import request from '@/utils/request' + +// 分页查询商品分类列表 +export function getGoodsCateList(query) { + return request({ + url: 'backendApi/goods/cate/list', + method: 'get', + params: query + }) +} + +// 查询商品分类详情 +export function getGoodsCateInfo(cateId) { + return request({ + url: 'backendApi/goods/cate/info/' + cateId, + method: 'get' + }) +} + +// 更新状态 +export function updateGoodsCateStatus(id, status) { + const data = { + id, + status + } + return request({ + url: 'backendApi/goods/cate/updateStatus', + method: 'post', + data: data + }) +} + +// 保存分类数据 +export function saveGoodsCate(data) { + return request({ + url: 'backendApi/goods/cate/save', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/home.js b/fuintAdmin/src/api/home.js new file mode 100644 index 0000000..a8d1e03 --- /dev/null +++ b/fuintAdmin/src/api/home.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 获取首页数据 +export function getHomeData() { + return request({ + url: 'backendApi/home/index', + method: 'get' + }) +} + +// 获取统计数据 +export function getStatisticData(query) { + return request({ + url: 'backendApi/home/statistic', + method: 'get', + params: query + }) +} diff --git a/fuintAdmin/src/api/login.js b/fuintAdmin/src/api/login.js new file mode 100644 index 0000000..fca43c0 --- /dev/null +++ b/fuintAdmin/src/api/login.js @@ -0,0 +1,43 @@ +import request from '@/utils/request' + +// 登录方法 +export function login(username, password, captchaCode, uuid) { + const data = { + username, + password, + captchaCode, + uuid + } + return request({ + url: 'backendApi/login/doLogin', + headers: { + isToken: false + }, + method: 'post', + data: data + }) +} + +// 获取用户详细信息 +export function getInfo() { + return request({ + url: 'backendApi/login/getInfo', + method: 'get' + }) +} + +// 退出方法 +export function logout() { + return request({ + url: 'backendApi/login/logout', + method: 'post' + }) +} + +// 获取验证码 +export function getCodeImg() { + return request({ + url: 'clientApi/captcha/getCode', + method: 'get' + }) +} diff --git a/fuintAdmin/src/api/member.js b/fuintAdmin/src/api/member.js new file mode 100644 index 0000000..5c07d71 --- /dev/null +++ b/fuintAdmin/src/api/member.js @@ -0,0 +1,92 @@ +import request from '@/utils/request' + +// 分页查询会员列表 +export function getMemberList(query) { + return request({ + url: 'backendApi/member/list', + method: 'get', + params: query + }) +} + +// 查询会员信息 +export function getMemberInfo(memberId) { + return request({ + url: 'backendApi/member/info/' + memberId, + method: 'get' + }) +} + +// 查询会员设置 +export function getMemberSetting() { + return request({ + url: 'backendApi/member/setting', + method: 'get' + }) +} + +// 保存会员设置 +export function saveSetting(data) { + return request({ + url: 'backendApi/member/saveSetting', + method: 'post', + data: data + }) +} + +// 更新会员状态 +export function updateMemberStatus(userId, status) { + const data = { + userId, + status + } + return request({ + url: 'backendApi/member/updateStatus', + method: 'post', + data: data + }) +} + +// 删除会员信息 +export function deleteMember(memberId) { + return request({ + url: 'backendApi/member/delete/' + memberId, + method: 'get' + }) +} + +// 保存会员信息 +export function saveMember(data) { + return request({ + url: 'backendApi/member/save', + method: 'post', + data: data + }) +} + +// 查询会员分组列表 +export function getGroupList(query) { + return request({ + url: 'backendApi/member/groupList', + method: 'get', + params: query + }) +} + +// 查找会员 +export function searchMembers(query) { + return request({ + url: 'backendApi/member/searchMembers', + method: 'get', + params: query + }) +} + +// 重置会员密码 +export function resetMemberPwd(data) { + return request({ + url: 'backendApi/member/resetPwd', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/memberGroup.js b/fuintAdmin/src/api/memberGroup.js new file mode 100644 index 0000000..a4b7586 --- /dev/null +++ b/fuintAdmin/src/api/memberGroup.js @@ -0,0 +1,57 @@ +import request from '@/utils/request' + +// 分页查询会员分组列表 +export function getGroupList(query) { + return request({ + url: 'backendApi/memberGroup/list', + method: 'get', + params: query + }) +} + +// 查询会员分组列表 +export function getAllGroupList(query) { + return request({ + url: 'backendApi/memberGroup/quickSearch', + method: 'get', + params: query + }) +} + +// 查询会员分组信息 +export function getGroupInfo(id) { + return request({ + url: 'backendApi/memberGroup/info/' + id, + method: 'get' + }) +} + +// 更新会员分组状态 +export function updateGroupStatus(id, status) { + const data = { + id, + status + } + return request({ + url: 'backendApi/memberGroup/updateStatus', + method: 'post', + data: data + }) +} + +// 删除会员分组 +export function deleteGroup(id) { + return request({ + url: 'backendApi/memberGroup/delete/' + id, + method: 'get' + }) +} + +// 保存会员分组数据 +export function saveGroup(data) { + return request({ + url: 'backendApi/memberGroup/save', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/menu.js b/fuintAdmin/src/api/menu.js new file mode 100644 index 0000000..f65ebe0 --- /dev/null +++ b/fuintAdmin/src/api/menu.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 获取路由 +export const getRouters = () => { + return request({ + url: 'backendApi/login/getRouters', + method: 'get' + }) +} diff --git a/fuintAdmin/src/api/merchant.js b/fuintAdmin/src/api/merchant.js new file mode 100644 index 0000000..3d9a868 --- /dev/null +++ b/fuintAdmin/src/api/merchant.js @@ -0,0 +1,49 @@ +import request from '@/utils/request' + +// 分页查询商户列表 +export function getMerchantList(query) { + return request({ + url: 'backendApi/merchant/list', + method: 'get', + params: query + }) +} + +// 查询商户信息 +export function getMerchantInfo(merchantId) { + return request({ + url: 'backendApi/merchant/info/' + merchantId, + method: 'get' + }) +} + +// 查询商户列表 +export function searchMerchant(param) { + return request({ + url: 'backendApi/merchant/searchMerchant', + method: 'get', + params: param + }) +} + +// 更新商户状态 +export function updateMerchantStatus(merchantId, status) { + const data = { + merchantId, + status + } + return request({ + url: 'backendApi/merchant/updateStatus', + method: 'post', + data: data + }) +} + +// 保存商户信息 +export function saveMerchant(data) { + return request({ + url: 'backendApi/merchant/save', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/openGift.js b/fuintAdmin/src/api/openGift.js new file mode 100644 index 0000000..1337497 --- /dev/null +++ b/fuintAdmin/src/api/openGift.js @@ -0,0 +1,48 @@ +import request from '@/utils/request' + +// 分页查询开卡赠礼列表 +export function getOpenGiftList(query) { + return request({ + url: 'backendApi/openGift/list', + method: 'get', + params: query + }) +} + +// 查询信息 +export function getOpenGiftInfo(id) { + return request({ + url: 'backendApi/openGift/info/' + id, + method: 'get' + }) +} + +// 更新状态 +export function updateOpenGiftStatus(id, status) { + const data = { + id, + status + } + return request({ + url: 'backendApi/openGift/updateStatus', + method: 'post', + data: data + }) +} + +// 删除开卡赠礼 +export function deleteOpenGift(id) { + return request({ + url: 'backendApi/openGift/delete/' + id, + method: 'get' + }) +} + +// 保存数据 +export function saveOpenGift(data) { + return request({ + url: 'backendApi/openGift/save', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/order.js b/fuintAdmin/src/api/order.js new file mode 100644 index 0000000..4ab73ab --- /dev/null +++ b/fuintAdmin/src/api/order.js @@ -0,0 +1,83 @@ +import request from '@/utils/request' + +// 分页查询订单列表 +export function getOrderList(data) { + return request({ + url: 'backendApi/order/list', + method: 'post', + data: data + }) +} + +// 查询订单信息 +export function getOrderInfo(orderId) { + return request({ + url: 'backendApi/order/info/' + orderId, + method: 'get' + }) +} + +// 更新订单状态 +export function updateOrderStatus(orderId, status) { + const data = { + orderId, + status + } + return request({ + url: 'backendApi/order/updateStatus', + method: 'post', + data: data + }) +} + +// 删除订单 +export function deleteOrder(orderId) { + return request({ + url: 'backendApi/order/delete/' + orderId, + method: 'get' + }) +} + +// 保存订单数据 +export function saveOrder(data) { + return request({ + url: 'backendApi/order/save', + method: 'post', + data: data + }) +} + +// 验证核销订单 +export function verifyOrder(data) { + return request({ + url: 'backendApi/order/verify', + method: 'post', + data: data + }) +} + +// 提交发货信息 +export function delivered(data) { + return request({ + url: 'backendApi/order/delivered', + method: 'post', + data: data + }) +} + +// 获取配置信息 +export function getSettingInfo() { + return request({ + url: 'backendApi/order/setting', + method: 'get' + }) +} + +// 保存配置 +export function saveSetting(data) { + return request({ + url: 'backendApi/order/saveSetting', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/point.js b/fuintAdmin/src/api/point.js new file mode 100644 index 0000000..9427b6a --- /dev/null +++ b/fuintAdmin/src/api/point.js @@ -0,0 +1,58 @@ +import request from '@/utils/request' + +// 分页查询积分明细列表 +export function getPointList(query) { + return request({ + url: 'backendApi/point/list', + method: 'get', + params: query + }) +} + +// 查询明细详情 +export function getPointInfo(memberId) { + return request({ + url: 'backendApi/point/info/' + memberId, + method: 'get' + }) +} + +// 更新状态 +export function updatePointStatus(id, status) { + const data = { + id, + status + } + return request({ + url: 'backendApi/point/updateStatus', + method: 'post', + data: data + }) +} + +// 获取配置信息 +export function getSettingInfo() { + return request({ + url: 'backendApi/point/setting', + method: 'get' + }) +} + +// 保存配置 +export function saveSetting(data) { + return request({ + url: 'backendApi/point/saveSetting', + method: 'post', + data: data + }) +} + +// 确定充值 +export function doRecharge(data) { + return request({ + url: 'backendApi/point/doRecharge', + method: 'post', + data: data + }) +} + diff --git a/fuintAdmin/src/api/refund.js b/fuintAdmin/src/api/refund.js new file mode 100644 index 0000000..7cba536 --- /dev/null +++ b/fuintAdmin/src/api/refund.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 分页查询退款订单列表 +export function getRefundList(query) { + return request({ + url: 'backendApi/refund/list', + method: 'get', + params: query + }) +} + +// 查询订单信息 +export function getRefundInfo(refundId) { + return request({ + url: 'backendApi/refund/info/' + refundId, + method: 'get' + }) +} + +// 订单退款 +export function doRefund(data) { + return request({ + url: 'backendApi/refund/doRefund', + method: 'post', + data: data + }) +} + +// 删除退款订单 +export function deleteRefund(refundId) { + return request({ + url: 'backendApi/refund/delete/' + refundId, + method: 'get' + }) +} + +// 保存退款订单 +export function saveRefund(data) { + return request({ + url: 'backendApi/refund/save', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/settlement.js b/fuintAdmin/src/api/settlement.js new file mode 100644 index 0000000..a14a760 --- /dev/null +++ b/fuintAdmin/src/api/settlement.js @@ -0,0 +1,39 @@ +import request from '@/utils/request' + +// 分页查询结算列表 +export function getSettlementList(query) { + return request({ + url: 'backendApi/settlement/list', + method: 'get', + params: query + }) +} + +// 查询结算详情 +export function getSettlementInfo(query) { + return request({ + url: 'backendApi/settlement/info/', + method: 'get', + params: query + }) +} + +// 提交结算 +export function doSubmit(data) { + return request({ + url: 'backendApi/settlement/doSubmit', + method: 'post', + data: data + }) +} + +// 提交确认 +export function doConfirm(data) { + return request({ + url: 'backendApi/settlement/doConfirm', + method: 'post', + data: data + }) +} + + diff --git a/fuintAdmin/src/api/smsManager.js b/fuintAdmin/src/api/smsManager.js new file mode 100644 index 0000000..886ad2f --- /dev/null +++ b/fuintAdmin/src/api/smsManager.js @@ -0,0 +1,19 @@ +import request from '@/utils/request' + +// 分页查询短信列表 +export function getSmsList(query) { + return request({ + url: 'backendApi/smsManager/list', + method: 'get', + params: query + }) +} + +// 发送短信 +export function sendSms(data) { + return request({ + url: 'backendApi/smsManager/send', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/smsTemplate.js b/fuintAdmin/src/api/smsTemplate.js new file mode 100644 index 0000000..9b49c3e --- /dev/null +++ b/fuintAdmin/src/api/smsTemplate.js @@ -0,0 +1,48 @@ +import request from '@/utils/request' + +// 分页查询短信模板列表 +export function getSmsTemplateList(query) { + return request({ + url: 'backendApi/smsTemplate/list', + method: 'get', + params: query + }) +} + +// 查询信息 +export function getSmsTemplateInfo(id) { + return request({ + url: 'backendApi/smsTemplate/info/' + id, + method: 'get' + }) +} + +// 更新状态 +export function updateSmsTemplateStatus(id, status) { + const data = { + id, + status + } + return request({ + url: 'backendApi/smsTemplate/updateStatus', + method: 'post', + data: data + }) +} + +// 删除短信模板 +export function deleteSmsTemplate(id) { + return request({ + url: 'backendApi/smsTemplate/delete/' + id, + method: 'get' + }) +} + +// 保存数据 +export function saveSmsTemplate(data) { + return request({ + url: 'backendApi/smsTemplate/save', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/staff.js b/fuintAdmin/src/api/staff.js new file mode 100644 index 0000000..b7bc210 --- /dev/null +++ b/fuintAdmin/src/api/staff.js @@ -0,0 +1,56 @@ +import request from '@/utils/request' + +// 查询员工列表 +export function getStaffList(query) { + return request({ + url: 'backendApi/staff/list', + method: 'get', + params: query + }) +} + +// 查询员工信息 +export function getStaffInfo(staffId) { + return request({ + url: 'backendApi/staff/info/' + staffId, + method: 'get' + }) +} + +// 删除员工信息 +export function deleteStaff(staffId) { + return request({ + url: 'backendApi/staff/delete/' + staffId, + method: 'get' + }) +} + +// 获取店铺员工列表 +export function getStoreStaffList(storeId) { + return request({ + url: 'backendApi/staff/storeStaffList/' + storeId, + method: 'get' + }) +} + +// 更新员工状态 +export function updateStaffStatus(id, status) { + const data = { + id, + status + } + return request({ + url: 'backendApi/staff/updateStatus', + method: 'post', + data: data + }) +} + +// 保存员工信息 +export function saveStaff(data) { + return request({ + url: 'backendApi/staff/save', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/statistic.js b/fuintAdmin/src/api/statistic.js new file mode 100644 index 0000000..0c1c93e --- /dev/null +++ b/fuintAdmin/src/api/statistic.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +// 获取看板数据 +export function getMainData(params) { + return request({ + url: 'backendApi/statistic/main', + method: 'post', + data: params + }) +} + +// 获取排行榜数据 +export function getTopData(params) { + return request({ + url: 'backendApi/statistic/top', + method: 'post', + data: params + }) +} + +// 获取总会员数量 +export function getTotalMember() { + return request({ + url: 'backendApi/statistic/totalMember', + method: 'get' + }) +} diff --git a/fuintAdmin/src/api/stock.js b/fuintAdmin/src/api/stock.js new file mode 100644 index 0000000..fac99fa --- /dev/null +++ b/fuintAdmin/src/api/stock.js @@ -0,0 +1,40 @@ +import request from '@/utils/request' + +// 分页查询库存管理记录列表 +export function getStockList(query) { + return request({ + url: 'backendApi/stock/list', + method: 'get', + params: query + }) +} + +// 删除库存管理记录 +export function deleteStock(id, status) { + const data = { + id, + status + } + return request({ + url: 'backendApi/stock/delete', + method: 'post', + data: data + }) +} + +// 保存库存管理记录 +export function saveStock(data) { + return request({ + url: 'backendApi/stock/save', + method: 'post', + data: data + }) +} + +// 获取库存管理记录详情 +export function getStockInfo(cateId) { + return request({ + url: 'backendApi/stock/info/' + cateId, + method: 'get' + }) +} diff --git a/fuintAdmin/src/api/store.js b/fuintAdmin/src/api/store.js new file mode 100644 index 0000000..8f7b51c --- /dev/null +++ b/fuintAdmin/src/api/store.js @@ -0,0 +1,49 @@ +import request from '@/utils/request' + +// 分页查询店铺列表 +export function getStoreList(query) { + return request({ + url: 'backendApi/store/list', + method: 'get', + params: query + }) +} + +// 查询店铺信息 +export function getStoreInfo(storeId) { + return request({ + url: 'backendApi/store/info/' + storeId, + method: 'get' + }) +} + +// 查询店铺列表 +export function searchStore(param) { + return request({ + url: 'backendApi/store/searchStore', + method: 'get', + params: param + }) +} + +// 更新店铺状态 +export function updateStoreStatus(storeId, status) { + const data = { + storeId, + status + } + return request({ + url: 'backendApi/store/updateStatus', + method: 'post', + data: data + }) +} + +// 保存店铺 +export function saveStore(data) { + return request({ + url: 'backendApi/store/save', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/subMessage.js b/fuintAdmin/src/api/subMessage.js new file mode 100644 index 0000000..1aeea5e --- /dev/null +++ b/fuintAdmin/src/api/subMessage.js @@ -0,0 +1,48 @@ +import request from '@/utils/request' + +// 分页查询订阅消息列表 +export function getSubMessageList(query) { + return request({ + url: 'backendApi/subMessage/list', + method: 'get', + params: query + }) +} + +// 查询信息 +export function getSubMessageInfo(id) { + return request({ + url: 'backendApi/subMessage/info/' + id, + method: 'get' + }) +} + +// 更新状态 +export function updateSubMessageStatus(id, status) { + const data = { + id, + status + } + return request({ + url: 'backendApi/subMessage/updateStatus', + method: 'post', + data: data + }) +} + +// 删除订阅消息 +export function deleteSubMessage(id) { + return request({ + url: 'backendApi/subMessage/delete/' + id, + method: 'get' + }) +} + +// 保存数据 +export function saveSubMessage(data) { + return request({ + url: 'backendApi/subMessage/save', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/api/system/account.js b/fuintAdmin/src/api/system/account.js new file mode 100644 index 0000000..5820135 --- /dev/null +++ b/fuintAdmin/src/api/system/account.js @@ -0,0 +1,127 @@ +import request from '@/utils/request' +import { parseStrEmpty } from "@/utils/fuint"; + +// 查询用户列表 +export function getAccountList(query) { + return request({ + url: 'backendApi/account/list', + method: 'get', + params: query + }) +} + +// 查询用户详细 +export function getAccount(userId) { + return request({ + url: 'backendApi/account/info/' + parseStrEmpty(userId), + method: 'get' + }) +} + +// 新增用户 +export function addAccount(data) { + return request({ + url: 'backendApi/account/doCreate', + method: 'post', + data: data + }) +} + +// 修改用户 +export function updateAccount(data) { + return request({ + url: 'backendApi/account/update', + method: 'post', + data: data + }) +} + +// 删除用户 +export function delAccount(userId) { + return request({ + url: 'backendApi/account/delete/' + userId, + method: 'get' + }) +} + +// 用户密码重置 +export function resetAccountPwd(userId, password) { + const data = { + userId, + password + } + return request({ + url: 'backendApi/account/resetPwd', + method: 'post', + data: data + }) +} + +// 用户状态修改 +export function changeAccountStatus(userId, status) { + const data = { + userId, + status + } + return request({ + url: 'backendApi/account/updateStatus', + method: 'post', + data: data + }) +} + +// 查询用户个人信息 +export function getAccountProfile() { + return request({ + url: 'backendApi/account/profile', + method: 'get' + }) +} + +// 修改用户个人信息 +export function updateAccountProfile(data) { + return request({ + url: 'backendApi/account/profile', + method: 'post', + data: data + }) +} + +// 用户密码重置 +export function updateAccountPwd(oldPassword, newPassword) { + const data = { + oldPassword, + newPassword + } + return request({ + url: 'backendApi/account/profile/updatePwd', + method: 'post', + params: data + }) +} + +// 用户头像上传 +export function uploadAvatar(data) { + return request({ + url: 'backendApi/account/profile/avatar', + method: 'post', + data: data + }) +} + +// 查询授权角色 +export function getAuthRole(userId) { + return request({ + url: 'backendApi/account/authRole/' + userId, + method: 'get' + }) +} + +// 保存授权角色 +export function updateAuthRole(data) { + return request({ + url: 'backendApi/account/authRole', + method: 'post', + params: data + }) +} diff --git a/fuintAdmin/src/api/system/config.js b/fuintAdmin/src/api/system/config.js new file mode 100644 index 0000000..a404d82 --- /dev/null +++ b/fuintAdmin/src/api/system/config.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 查询参数列表 +export function listConfig(query) { + return request({ + url: '/system/config/list', + method: 'get', + params: query + }) +} + +// 查询参数详细 +export function getConfig(configId) { + return request({ + url: '/system/config/' + configId, + method: 'get' + }) +} + +// 根据参数键名查询参数值 +export function getConfigKey(configKey) { + return request({ + url: '/system/config/configKey/' + configKey, + method: 'get' + }) +} + +// 新增参数配置 +export function addConfig(data) { + return request({ + url: '/system/config', + method: 'post', + data: data + }) +} + +// 修改参数配置 +export function updateConfig(data) { + return request({ + url: '/system/config', + method: 'put', + data: data + }) +} + +// 删除参数配置 +export function delConfig(configId) { + return request({ + url: '/system/config/' + configId, + method: 'delete' + }) +} + +// 刷新参数缓存 +export function refreshCache() { + return request({ + url: '/system/config/refreshCache', + method: 'delete' + }) +} diff --git a/fuintAdmin/src/api/system/dict/data.js b/fuintAdmin/src/api/system/dict/data.js new file mode 100644 index 0000000..6c9eb79 --- /dev/null +++ b/fuintAdmin/src/api/system/dict/data.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 查询字典数据列表 +export function listData(query) { + return request({ + url: '/system/dict/data/list', + method: 'get', + params: query + }) +} + +// 查询字典数据详细 +export function getData(dictCode) { + return request({ + url: '/system/dict/data/' + dictCode, + method: 'get' + }) +} + +// 根据字典类型查询字典数据信息 +export function getDicts(dictType) { + return request({ + url: '/system/dict/data/type/' + dictType, + method: 'get' + }) +} + +// 新增字典数据 +export function addData(data) { + return request({ + url: '/system/dict/data', + method: 'post', + data: data + }) +} + +// 修改字典数据 +export function updateData(data) { + return request({ + url: '/system/dict/data', + method: 'put', + data: data + }) +} + +// 删除字典数据 +export function delData(dictCode) { + return request({ + url: '/system/dict/data/' + dictCode, + method: 'delete' + }) +} diff --git a/fuintAdmin/src/api/system/dict/type.js b/fuintAdmin/src/api/system/dict/type.js new file mode 100644 index 0000000..a7a6e01 --- /dev/null +++ b/fuintAdmin/src/api/system/dict/type.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 查询字典类型列表 +export function listType(query) { + return request({ + url: '/system/dict/type/list', + method: 'get', + params: query + }) +} + +// 查询字典类型详细 +export function getType(dictId) { + return request({ + url: '/system/dict/type/' + dictId, + method: 'get' + }) +} + +// 新增字典类型 +export function addType(data) { + return request({ + url: '/system/dict/type', + method: 'post', + data: data + }) +} + +// 修改字典类型 +export function updateType(data) { + return request({ + url: '/system/dict/type', + method: 'put', + data: data + }) +} + +// 删除字典类型 +export function delType(dictId) { + return request({ + url: '/system/dict/type/' + dictId, + method: 'delete' + }) +} + +// 刷新字典缓存 +export function refreshCache() { + return request({ + url: '/system/dict/type/refreshCache', + method: 'delete' + }) +} + +// 获取字典选择框列表 +export function optionselect() { + return request({ + url: '/system/dict/type/optionselect', + method: 'get' + }) +} \ No newline at end of file diff --git a/fuintAdmin/src/api/system/genCode.js b/fuintAdmin/src/api/system/genCode.js new file mode 100644 index 0000000..e678359 --- /dev/null +++ b/fuintAdmin/src/api/system/genCode.js @@ -0,0 +1,48 @@ +import request from '@/utils/request' + +// 分页查询生成代码列表 +export function getGenCodeList(query) { + return request({ + url: 'backendApi/genCode/list', + method: 'get', + params: query + }) +} + +// 查询生成代码信息 +export function getGenCodeInfo(id) { + return request({ + url: 'backendApi/genCode/info/' + id, + method: 'get' + }) +} + +// 更新生成代码状态 +export function updateGenCodeStatus(id, status) { + const data = { + id, + status + } + return request({ + url: 'backendApi/genCode/updateStatus', + method: 'post', + data: data + }) +} + +// 保存生成代码 +export function saveGenCode(data) { + return request({ + url: 'backendApi/genCode/save', + method: 'post', + data: data + }) +} + +// 执行生成代码 +export function doGenCode(id) { + return request({ + url: 'backendApi/genCode/gen/' + id, + method: 'get' + }) +} diff --git a/fuintAdmin/src/api/system/logs.js b/fuintAdmin/src/api/system/logs.js new file mode 100644 index 0000000..69ceb25 --- /dev/null +++ b/fuintAdmin/src/api/system/logs.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 查询操作日志列表 +export function list(query) { + return request({ + url: 'backendApi/actlog/list', + method: 'get', + params: query + }) +} + +// 删除操作日志 +export function delOperlog(logId) { + return request({ + url: 'backendApi/actlog/delete/' + logId, + method: 'get' + }) +} diff --git a/fuintAdmin/src/api/system/menu.js b/fuintAdmin/src/api/system/menu.js new file mode 100644 index 0000000..0c5dd33 --- /dev/null +++ b/fuintAdmin/src/api/system/menu.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 查询菜单列表 +export function listMenu(query) { + return request({ + url: 'backendApi/source/list', + method: 'get', + params: query + }) +} + +// 查询菜单详细 +export function getMenu(menuId) { + return request({ + url: 'backendApi/source/info/' + menuId, + method: 'get' + }) +} + +// 查询菜单下拉树结构 +export function treeselect() { + return request({ + url: 'backendApi/source/treeselect', + method: 'get' + }) +} + +// 根据角色ID查询菜单下拉树结构 +export function roleMenuTreeselect(roleId) { + return request({ + url: 'backendApi/source/roleMenuTreeselect/' + roleId, + method: 'get' + }) +} + +// 新增菜单 +export function addMenu(data) { + return request({ + url: 'backendApi/source/add', + method: 'post', + data: data + }) +} + +// 修改菜单 +export function updateMenu(data) { + return request({ + url: 'backendApi/source/update', + method: 'post', + data: data + }) +} + +// 删除菜单 +export function delMenu(menuId) { + return request({ + url: 'backendApi/source/delete/' + menuId, + method: 'get' + }) +} diff --git a/fuintAdmin/src/api/system/notice.js b/fuintAdmin/src/api/system/notice.js new file mode 100644 index 0000000..c274ea5 --- /dev/null +++ b/fuintAdmin/src/api/system/notice.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询公告列表 +export function listNotice(query) { + return request({ + url: '/system/notice/list', + method: 'get', + params: query + }) +} + +// 查询公告详细 +export function getNotice(noticeId) { + return request({ + url: '/system/notice/' + noticeId, + method: 'get' + }) +} + +// 新增公告 +export function addNotice(data) { + return request({ + url: '/system/notice', + method: 'post', + data: data + }) +} + +// 修改公告 +export function updateNotice(data) { + return request({ + url: '/system/notice', + method: 'put', + data: data + }) +} + +// 删除公告 +export function delNotice(noticeId) { + return request({ + url: '/system/notice/' + noticeId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/fuintAdmin/src/api/system/role.js b/fuintAdmin/src/api/system/role.js new file mode 100644 index 0000000..8af7673 --- /dev/null +++ b/fuintAdmin/src/api/system/role.js @@ -0,0 +1,111 @@ +import request from '@/utils/request' + +// 查询角色列表 +export function listRole(query) { + return request({ + url: 'backendApi/duty/list', + method: 'get', + params: query + }) +} + +// 查询角色详细 +export function getRole(roleId) { + return request({ + url: 'backendApi/duty/info/' + roleId, + method: 'get' + }) +} + +// 新增角色 +export function addRole(data) { + return request({ + url: 'backendApi/duty/add', + method: 'post', + data: data + }) +} + +// 修改角色 +export function updateRole(data) { + return request({ + url: 'backendApi/duty/update', + method: 'post', + data: data + }) +} + +// 角色数据权限 +export function dataScope(data) { + return request({ + url: 'backendApi/duty/dataScope', + method: 'post', + data: data + }) +} + +// 角色状态修改 +export function changeRoleStatus(roleId, status) { + const data = { + roleId, + status + } + return request({ + url: 'backendApi/duty/changeStatus', + method: 'post', + data: data + }) +} + +// 删除角色 +export function delRole(roleId) { + return request({ + url: 'backendApi/duty/delete/' + roleId, + method: 'post' + }) +} + +// 查询角色已授权用户列表 +export function getRoleUserList(query) { + return request({ + url: 'backendApi/duty/getRoleUserList', + method: 'get', + params: query + }) +} + +// 查询角色未授权用户列表 +export function unallocatedUserList(query) { + return request({ + url: 'backendApi/duty/authUser/unallocatedList', + method: 'get', + params: query + }) +} + +// 取消用户授权角色 +export function authUserCancel(data) { + return request({ + url: 'backendApi/duty/authUser/cancel', + method: 'post', + data: data + }) +} + +// 批量取消用户授权角色 +export function authUserCancelAll(data) { + return request({ + url: 'backendApi/duty/authUser/cancelAll', + method: 'post', + params: data + }) +} + +// 授权用户选择 +export function authUserSelectAll(data) { + return request({ + url: 'backendApi/duty/authUser/selectAll', + method: 'post', + params: data + }) +} diff --git a/fuintAdmin/src/api/tool/gen.js b/fuintAdmin/src/api/tool/gen.js new file mode 100644 index 0000000..4506927 --- /dev/null +++ b/fuintAdmin/src/api/tool/gen.js @@ -0,0 +1,76 @@ +import request from '@/utils/request' + +// 查询生成表数据 +export function listTable(query) { + return request({ + url: '/tool/gen/list', + method: 'get', + params: query + }) +} +// 查询db数据库列表 +export function listDbTable(query) { + return request({ + url: '/tool/gen/db/list', + method: 'get', + params: query + }) +} + +// 查询表详细信息 +export function getGenTable(tableId) { + return request({ + url: '/tool/gen/' + tableId, + method: 'get' + }) +} + +// 修改代码生成信息 +export function updateGenTable(data) { + return request({ + url: '/tool/gen', + method: 'put', + data: data + }) +} + +// 导入表 +export function importTable(data) { + return request({ + url: '/tool/gen/importTable', + method: 'post', + params: data + }) +} + +// 预览生成代码 +export function previewTable(tableId) { + return request({ + url: '/tool/gen/preview/' + tableId, + method: 'get' + }) +} + +// 删除表数据 +export function delTable(tableId) { + return request({ + url: '/tool/gen/' + tableId, + method: 'delete' + }) +} + +// 生成代码(自定义路径) +export function genCode(tableName) { + return request({ + url: '/tool/gen/genCode/' + tableName, + method: 'get' + }) +} + +// 同步数据库 +export function synchDb(tableName) { + return request({ + url: '/tool/gen/synchDb/' + tableName, + method: 'get' + }) +} diff --git a/fuintAdmin/src/api/userGrade.js b/fuintAdmin/src/api/userGrade.js new file mode 100644 index 0000000..0f0b64d --- /dev/null +++ b/fuintAdmin/src/api/userGrade.js @@ -0,0 +1,48 @@ +import request from '@/utils/request' + +// 分页查询会员等级列表 +export function getUserGradeList(query) { + return request({ + url: 'backendApi/userGrade/list', + method: 'get', + params: query + }) +} + +// 查询等级信息 +export function getUserGradeInfo(memberId) { + return request({ + url: 'backendApi/userGrade/info/' + memberId, + method: 'get' + }) +} + +// 更新状态 +export function updateUserGradeStatus(userGradeId, status) { + const data = { + userGradeId, + status + } + return request({ + url: 'backendApi/userGrade/updateStatus', + method: 'post', + data: data + }) +} + +// 删除会员等级信息 +export function deleteUserGrade(gradeId) { + return request({ + url: 'backendApi/userGrade/delete/' + gradeId, + method: 'get' + }) +} + +// 保存数据 +export function saveUserGrade(data) { + return request({ + url: 'backendApi/userGrade/save', + method: 'post', + data: data + }) +} diff --git a/fuintAdmin/src/assets/401_images/401.gif b/fuintAdmin/src/assets/401_images/401.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd6e0d9433421b3f29d0ec0c40f755e354728000 GIT binary patch literal 164227 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⋘jgFP=;s&56II*5tLII8*PlN8jx1nb5rMA@;htGb{z% zve2><;}yOubOr{5YaftlUuqy8r|o>kA;qejtE{ueLbnW3n0j!_zLM+XfD^AMUVGvQ zs}P_)1h$TeB5~k*IXhfJOx(AeZ|Q0Ax4h*Cf8H&Bm1`<*A&?!(h;qS1LlJTdyo{4a zhX)~fMUn%q^eHMa)mdlPR{nrfK?BbGyhs-zMc( z+Vp3#A1am_Mfp!_+kYe8{)=kc^L`Wx2Ru$wNSRp9DN4=yA!tFzapx2Qsff0eAn{W8 z&|4>52&Y$Yh__xJudZR7TCMU*BnyeMQ*KzXKl#T4B|mHiKMGz}*oM>(RzwcC?Tl9a zxc6PZ{?mQA>;&!zONQNqVU}Dw%E(jJg{_Ct{)2+U>^roj4~xL@DOV4LD-J?`hm8vC z%Dw0a-E(0Ne4fxddE$=NhSFPe?Q0U&2Tm+>Zsn5H+IWN#ewihgao{!QZZn)35*&>=fAf?}>!NZO63TX0YjSv+I(`#rGCgo6SD zsTnZiUf$EU7es9+yG1w;!$_F&`0m0e@^gakZKs8^6X7Xmie7d=pU%6*4$~u4Txr0ijuSyAHUDzv7)B?hg z23_hVXO`A!bKJx#S0}IoMI)Cy8WVpEEU_x65c37RK3j5+29mR`4f`#G1ES*M5255` zl4TVWzV_Vzupj!@NADMZ`Q>lkOXtOk5OgFz=*6iEZ?PoP8GYQGn;k<9D`C!DaGc{t z$tyiNj9A`l5mT@-2B)4Aja#T`cN*^bdy$~G&mu@$?vJ*X_BEYd+;NK$^tt+ZS;&gH zx~w$c+B2Gj`E`%lOuHj43We@Cj004Ks0AMvH5Y$`iK&6D9p7>?T7ZSS}-jLZX z_HdB6)DW-R&S|Xz1$I(+ycLn_Jy@KuiBPoWh{$w%#LHbws_W^f5%Ik*x2@Y32_847 z=)>AE@kdi5P)KDI3YU|UrIL~MyN38*4}ia;GD!0_FTXIc(`V{YObVYk4`#eSJLcIZzBXj+Cb$?tz!F($d5`e2~FXRh&j{eh8l zTW~Y4ga(v-`P3rpu}_a|_YGWZ<@m5;PY>)0Lf%p3C()-5;d1Pq?R_vB>^^MeQdCHF zab7L&CF{yg44g{BX~ePBylc^kl#47}2<7ky1nwLSf`k&shv=aQAjSz=uOz$TB*4X1 zw*#SlGJqJG?}q7-!1Q;NbEw94VStMORHB%)FczJghsLHzZRhn%D=W80$%~_KwYc?l zIJxQyNHO-;b+-SGxL{wXu`Hg4q`&@fscDciSl08%`<4}TCs=OnAMbQz#LmkhG)0J* zdA*n!hf}RoOidqG7WyrId}}uBJ-w)WFHF4i+$SLYP17_F&hCA;3&`*!K6KDaG+t%* ziLcOr;}^1G#dQsLvSo+X03Q#(;=?&Z1X-!vz*{D(@O8N2v(CdLi&tS`7kK;VJWE2F zVo@OjriBv|+J4xcLlCQY{xS@7#1H4b*z_JOT(MHIN&~NYjUDd0BgpXyk(fC1gJ`gg z+{Zsa3X9$-pP!FGV|k?y3hzpt%~fs{g^qZ?^;dez@X`H2hvdj7*&Y z#^#(IwO-IaOp$zr3KQbQ2@phtGKcc`Xb#GbH{*3;%oR7%yZRz46D*?Er0e?{?s~QF zwfOC3#nLCgF0zIzWZrNSqef1=;}b^gRnqv0Yes~Jk2*s%6p2xB3}Z)%6+p_PFA*jc zAO+KJnOz>X;Yd}y5!BlIBDvxftg~LJW+JjAxq2XgPOGUqtI-IpSv%)-{*Es+@a&%( zXtO^Ytmdg(^RvYSC=h7a?vIFyNlfzfk8=#7(bEs1sOrLKjH)aOS6nEk7>uVTWB^&8 z4MAMBczX#_e4_*NA13*3kHo)53hRHu&Ar`~wV7)taHfm_sTlYvmhTper$8(D@P;8TD9}p24Z4*_I!T~aC?0Uw zlbS^HjrUGWrl(sXBb9iC^YYx4^$ul}GBkD98JVDPOq_HrPJRn^-Tt!H6DlaQzJ1;1 zMr4Z~mVC0W->TO_{`{Y!r}`fhbz)bDoBj4L%TlwmkeVEyfrV`9U8GQ0(%p!<^6RH1>$ac zFf9b03CUlLo}njRp}biqjiJ3}%41^T!}BI=II;jZdd7yMi1=5!>yqo-*>aoieZ4Rz zd2Ow<7!IZWm?c%Gg~8LHsZIz-VXlrIT_wq05RS^Jj~i|JW)~vNquy!1AyX(wcONlK zOcKox6L(k)4fgRLpl;^Hn(k6iSck?2Y9wS;RuLmqgwbX=+~&sZXyHv!)u-At1KjJa z+@y^|+I#zC6vUexaNB$O|NB*)|3)~{a^M$JWIA_KI~$}^TdJLQkh}Tb4N6!VjtE^V zRX}82b|wMYuo8mdEF={g)KW^sA~IkbBE4nCGPwsjg&#?!hb3TQR~=-Q9XhF@@+iLG ze$COf7>zvZI0+ zQi&s6%1}{_AY6`FE1?4FDn8L7VGLV>p@P zlb-#R6+a^Im}H_b+GD3Wub$GvPQtb~q1+r15!^?q078%A*Mx*^=X|#hUbd4vMDQ^; zY-`Zt&1+>V9k+;ln18&V?+$x`_IoVh^COT5rCU~K*U#%-2+d(jpjVqDS)SkX+LG8- z!J19-l$VBZ*$zyw2Bos)*fwO1IM&e`St>17cf6}x?VKwn zrsvNRng4sxk;3TX>7HZ?0;d@vp>qxq&MDq2X9Pc)drTV9KdU+2Lk?4ZCCSw|cMjcH z8ak)jO;FP%i%H@>_KZqK+~&Gr9E&lKe?-Mz)s@ucm!b~wa2EtVjQbdoxAzD3RQh|= zxO(b{2U=x6K8~H&HSqlUJ%OL$u#(V@xP~PLvdl6JufAm-3{9~*UX@uV3ko=`lF4sx zTmx$2_L8oNg@|)86EmO5?%w{;$RE*ATUZ&1+Aou)ijLBvC4z6^GGwzDH6b@|%U(5J6>~JNhEslJ)n-(M6fY*n423C^ z=54G#S*3Dfw_M4oKYyC#e=^Y|Yzc~Sl+caYiQDSfwgHv3n;+dI7pl zI7ZF*GfxMNSzhm6P@ng_HUYO6r&xaCf)-{Bt~x+@w&`jQCi16#Wn##ELgKhxM?{4V zTXOt8NL)R$O4O?lPJMf1bru#0TQ&cpgeNUcY3{&0o|i7RZ613eTrT5(X1qmYSR`%m z`3chD?e+Ixv};GE+yd>wDAJw9&yLswQaG77JeHT7oMLVT6j2$O8`JI6fcjG$73+iv zEnJ$?{F}53|IQ#Oz8D*`0xcn8)O|+X7c7LgbG*8ngUN>=VJ7Kh3O!v+LZVHN@jfsW z%@3O}?D_NPI^cyPkvZnvHwE&^$WgdpKI_RkO&Py~eM# zId*DXoWTq(rJIrLL*@`NCcn~$tI=NCdxh+OHDoSosUO8FuEI`ZjQJ)QAd0A4a-KdB?rrp47%i(x!Tr5s*&Zp&cE zaAyY)47_jT>(?S-)Nbxr)0}m7^p~T;$gI_KXK%hHu4n(W?l3GJHV6a%X>fgZ{0l}O z|3>nVqW`noPMsgu)s0($?u~CG>T=xj5)%Ny9a`5dq<%Q8Wg?LY0Lv>O6Cu?!eXKxO61TqJvg~H4vHD48-H(#qEaCX99 z`euZk3NOdE+Ufu-mcti@1v=5?@iGrvlJ^YB3tHwA&C42qJNB>!XwQY(Dg!#4=g7kX zWiCwpW*dPD_~mjQRDG!SyvXUNBGQ*Ph~7E1qG(;o-PtPDbEA}>KZizoW%l#EJ zpLs0X6Z;VTELFEL=bcUR%&`WZ^5BpS_ggT#1=Y2LTS=9Pjm7b89qXF!nx`yYZ-f}b z*Z=DX2H6g*rARkK#FDZz%uMqN#U0&?NI^<_q{A60!l^a1aI_MC|*XdL^5YKrX+ai6QS(3l}erb1RpG GY5fOuZZib{ literal 0 HcmV?d00001 diff --git a/fuintAdmin/src/assets/404_images/404.png b/fuintAdmin/src/assets/404_images/404.png new file mode 100644 index 0000000000000000000000000000000000000000..3d8e2305cc973ad2121403aee4bf08728f76c461 GIT binary patch literal 98071 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 literal 0 HcmV?d00001 diff --git a/fuintAdmin/src/assets/404_images/404_cloud.png b/fuintAdmin/src/assets/404_images/404_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..c6281d09013e0a2c5f8e699a0a6038d9480291e5 GIT binary patch literal 4766 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 literal 0 HcmV?d00001 diff --git a/fuintAdmin/src/assets/icons/index.js b/fuintAdmin/src/assets/icons/index.js new file mode 100644 index 0000000..2c6b309 --- /dev/null +++ b/fuintAdmin/src/assets/icons/index.js @@ -0,0 +1,9 @@ +import Vue from 'vue' +import SvgIcon from '@/components/SvgIcon'// svg component + +// register globally +Vue.component('svg-icon', SvgIcon) + +const req = require.context('./svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys().map(requireContext) +requireAll(req) diff --git a/fuintAdmin/src/assets/icons/svg/404.svg b/fuintAdmin/src/assets/icons/svg/404.svg new file mode 100644 index 0000000..6df5019 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/bug.svg b/fuintAdmin/src/assets/icons/svg/bug.svg new file mode 100644 index 0000000..05a150d --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/bug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/build.svg b/fuintAdmin/src/assets/icons/svg/build.svg new file mode 100644 index 0000000..97c4688 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/build.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/button.svg b/fuintAdmin/src/assets/icons/svg/button.svg new file mode 100644 index 0000000..904fddc --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/button.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/cascader.svg b/fuintAdmin/src/assets/icons/svg/cascader.svg new file mode 100644 index 0000000..e256024 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/cascader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/chart.svg b/fuintAdmin/src/assets/icons/svg/chart.svg new file mode 100644 index 0000000..27728fb --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/checkbox.svg b/fuintAdmin/src/assets/icons/svg/checkbox.svg new file mode 100644 index 0000000..013fd3a --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/checkbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/clipboard.svg b/fuintAdmin/src/assets/icons/svg/clipboard.svg new file mode 100644 index 0000000..90923ff --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/clipboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/code.svg b/fuintAdmin/src/assets/icons/svg/code.svg new file mode 100644 index 0000000..ed4d23c --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/color.svg b/fuintAdmin/src/assets/icons/svg/color.svg new file mode 100644 index 0000000..44a81aa --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/component.svg b/fuintAdmin/src/assets/icons/svg/component.svg new file mode 100644 index 0000000..29c3458 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/component.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/dashboard.svg b/fuintAdmin/src/assets/icons/svg/dashboard.svg new file mode 100644 index 0000000..5317d37 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/date-range.svg b/fuintAdmin/src/assets/icons/svg/date-range.svg new file mode 100644 index 0000000..fda571e --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/date-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/date.svg b/fuintAdmin/src/assets/icons/svg/date.svg new file mode 100644 index 0000000..52dc73e --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/date.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/dict.svg b/fuintAdmin/src/assets/icons/svg/dict.svg new file mode 100644 index 0000000..4849377 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/dict.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/documentation.svg b/fuintAdmin/src/assets/icons/svg/documentation.svg new file mode 100644 index 0000000..7043122 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/documentation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/download.svg b/fuintAdmin/src/assets/icons/svg/download.svg new file mode 100644 index 0000000..c896951 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/drag.svg b/fuintAdmin/src/assets/icons/svg/drag.svg new file mode 100644 index 0000000..4185d3c --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/drag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/druid.svg b/fuintAdmin/src/assets/icons/svg/druid.svg new file mode 100644 index 0000000..a2b4b4e --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/druid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/edit.svg b/fuintAdmin/src/assets/icons/svg/edit.svg new file mode 100644 index 0000000..d26101f --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/education.svg b/fuintAdmin/src/assets/icons/svg/education.svg new file mode 100644 index 0000000..7bfb01d --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/education.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/email.svg b/fuintAdmin/src/assets/icons/svg/email.svg new file mode 100644 index 0000000..74d25e2 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/example.svg b/fuintAdmin/src/assets/icons/svg/example.svg new file mode 100644 index 0000000..46f42b5 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/example.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/excel.svg b/fuintAdmin/src/assets/icons/svg/excel.svg new file mode 100644 index 0000000..74d97b8 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/excel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/exit-fullscreen.svg b/fuintAdmin/src/assets/icons/svg/exit-fullscreen.svg new file mode 100644 index 0000000..485c128 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/exit-fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/eye-open.svg b/fuintAdmin/src/assets/icons/svg/eye-open.svg new file mode 100644 index 0000000..88dcc98 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/eye-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/eye.svg b/fuintAdmin/src/assets/icons/svg/eye.svg new file mode 100644 index 0000000..16ed2d8 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/eye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/form.svg b/fuintAdmin/src/assets/icons/svg/form.svg new file mode 100644 index 0000000..dcbaa18 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/form.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/fullscreen.svg b/fuintAdmin/src/assets/icons/svg/fullscreen.svg new file mode 100644 index 0000000..0e86b6f --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/github.svg b/fuintAdmin/src/assets/icons/svg/github.svg new file mode 100644 index 0000000..db0a0d4 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/guide.svg b/fuintAdmin/src/assets/icons/svg/guide.svg new file mode 100644 index 0000000..b271001 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/guide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/icon.svg b/fuintAdmin/src/assets/icons/svg/icon.svg new file mode 100644 index 0000000..82be8ee --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/input.svg b/fuintAdmin/src/assets/icons/svg/input.svg new file mode 100644 index 0000000..ab91381 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/input.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/international.svg b/fuintAdmin/src/assets/icons/svg/international.svg new file mode 100644 index 0000000..e9b56ee --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/international.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/job.svg b/fuintAdmin/src/assets/icons/svg/job.svg new file mode 100644 index 0000000..2a93a25 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/job.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/language.svg b/fuintAdmin/src/assets/icons/svg/language.svg new file mode 100644 index 0000000..0082b57 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/language.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/link.svg b/fuintAdmin/src/assets/icons/svg/link.svg new file mode 100644 index 0000000..48197ba --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/list.svg b/fuintAdmin/src/assets/icons/svg/list.svg new file mode 100644 index 0000000..20259ed --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/lock.svg b/fuintAdmin/src/assets/icons/svg/lock.svg new file mode 100644 index 0000000..74fee54 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/log.svg b/fuintAdmin/src/assets/icons/svg/log.svg new file mode 100644 index 0000000..d879d33 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/log.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/logininfor.svg b/fuintAdmin/src/assets/icons/svg/logininfor.svg new file mode 100644 index 0000000..267f844 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/logininfor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/message.svg b/fuintAdmin/src/assets/icons/svg/message.svg new file mode 100644 index 0000000..14ca817 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/message.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/money.svg b/fuintAdmin/src/assets/icons/svg/money.svg new file mode 100644 index 0000000..c1580de --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/money.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/monitor.svg b/fuintAdmin/src/assets/icons/svg/monitor.svg new file mode 100644 index 0000000..bc308cb --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/monitor.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/nested.svg b/fuintAdmin/src/assets/icons/svg/nested.svg new file mode 100644 index 0000000..06713a8 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/nested.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/number.svg b/fuintAdmin/src/assets/icons/svg/number.svg new file mode 100644 index 0000000..ad5ce9a --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/number.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/online.svg b/fuintAdmin/src/assets/icons/svg/online.svg new file mode 100644 index 0000000..330a202 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/online.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/password.svg b/fuintAdmin/src/assets/icons/svg/password.svg new file mode 100644 index 0000000..6c64def --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/password.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/pdf.svg b/fuintAdmin/src/assets/icons/svg/pdf.svg new file mode 100644 index 0000000..957aa0c --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/pdf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/people.svg b/fuintAdmin/src/assets/icons/svg/people.svg new file mode 100644 index 0000000..2bd54ae --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/people.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/peoples.svg b/fuintAdmin/src/assets/icons/svg/peoples.svg new file mode 100644 index 0000000..aab852e --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/peoples.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/phone.svg b/fuintAdmin/src/assets/icons/svg/phone.svg new file mode 100644 index 0000000..ab8e8c4 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/post.svg b/fuintAdmin/src/assets/icons/svg/post.svg new file mode 100644 index 0000000..2922c61 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/post.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/qq.svg b/fuintAdmin/src/assets/icons/svg/qq.svg new file mode 100644 index 0000000..ee13d4e --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/qq.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/question.svg b/fuintAdmin/src/assets/icons/svg/question.svg new file mode 100644 index 0000000..cf75bd4 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/question.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/radio.svg b/fuintAdmin/src/assets/icons/svg/radio.svg new file mode 100644 index 0000000..0cde345 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/radio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/rate.svg b/fuintAdmin/src/assets/icons/svg/rate.svg new file mode 100644 index 0000000..aa3b14d --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/rate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/redis.svg b/fuintAdmin/src/assets/icons/svg/redis.svg new file mode 100644 index 0000000..2f1d62d --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/redis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/row.svg b/fuintAdmin/src/assets/icons/svg/row.svg new file mode 100644 index 0000000..0780992 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/row.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/search.svg b/fuintAdmin/src/assets/icons/svg/search.svg new file mode 100644 index 0000000..84233dd --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/select.svg b/fuintAdmin/src/assets/icons/svg/select.svg new file mode 100644 index 0000000..d628382 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/select.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/server.svg b/fuintAdmin/src/assets/icons/svg/server.svg new file mode 100644 index 0000000..ca37b00 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/shopping.svg b/fuintAdmin/src/assets/icons/svg/shopping.svg new file mode 100644 index 0000000..87513e7 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/shopping.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/size.svg b/fuintAdmin/src/assets/icons/svg/size.svg new file mode 100644 index 0000000..ddb25b8 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/skill.svg b/fuintAdmin/src/assets/icons/svg/skill.svg new file mode 100644 index 0000000..a3b7312 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/skill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/slider.svg b/fuintAdmin/src/assets/icons/svg/slider.svg new file mode 100644 index 0000000..fbe4f39 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/slider.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/star.svg b/fuintAdmin/src/assets/icons/svg/star.svg new file mode 100644 index 0000000..6cf86e6 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/star.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/swagger.svg b/fuintAdmin/src/assets/icons/svg/swagger.svg new file mode 100644 index 0000000..05d4e7b --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/swagger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/switch.svg b/fuintAdmin/src/assets/icons/svg/switch.svg new file mode 100644 index 0000000..0ba61e3 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/switch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/system.svg b/fuintAdmin/src/assets/icons/svg/system.svg new file mode 100644 index 0000000..dba28cf --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/system.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/tab.svg b/fuintAdmin/src/assets/icons/svg/tab.svg new file mode 100644 index 0000000..b4b48e4 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/tab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/table.svg b/fuintAdmin/src/assets/icons/svg/table.svg new file mode 100644 index 0000000..0e3dc9d --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/textarea.svg b/fuintAdmin/src/assets/icons/svg/textarea.svg new file mode 100644 index 0000000..2709f29 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/textarea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/theme.svg b/fuintAdmin/src/assets/icons/svg/theme.svg new file mode 100644 index 0000000..5982a2f --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/theme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/time-range.svg b/fuintAdmin/src/assets/icons/svg/time-range.svg new file mode 100644 index 0000000..13c1202 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/time-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/time.svg b/fuintAdmin/src/assets/icons/svg/time.svg new file mode 100644 index 0000000..b376e32 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/tool.svg b/fuintAdmin/src/assets/icons/svg/tool.svg new file mode 100644 index 0000000..c813067 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/tool.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/tree-table.svg b/fuintAdmin/src/assets/icons/svg/tree-table.svg new file mode 100644 index 0000000..8aafdb8 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/tree-table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/tree.svg b/fuintAdmin/src/assets/icons/svg/tree.svg new file mode 100644 index 0000000..dd4b7dd --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/upload.svg b/fuintAdmin/src/assets/icons/svg/upload.svg new file mode 100644 index 0000000..bae49c0 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/upload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/user.svg b/fuintAdmin/src/assets/icons/svg/user.svg new file mode 100644 index 0000000..0ba0716 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/validCode.svg b/fuintAdmin/src/assets/icons/svg/validCode.svg new file mode 100644 index 0000000..cfb1021 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/validCode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/wechat.svg b/fuintAdmin/src/assets/icons/svg/wechat.svg new file mode 100644 index 0000000..c586e55 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/wechat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svg/zip.svg b/fuintAdmin/src/assets/icons/svg/zip.svg new file mode 100644 index 0000000..f806fc4 --- /dev/null +++ b/fuintAdmin/src/assets/icons/svg/zip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/icons/svgo.yml b/fuintAdmin/src/assets/icons/svgo.yml new file mode 100644 index 0000000..d11906a --- /dev/null +++ b/fuintAdmin/src/assets/icons/svgo.yml @@ -0,0 +1,22 @@ +# 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' diff --git a/fuintAdmin/src/assets/images/all-cate.svg b/fuintAdmin/src/assets/images/all-cate.svg new file mode 100644 index 0000000..ff281ed --- /dev/null +++ b/fuintAdmin/src/assets/images/all-cate.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/images/avatar.png b/fuintAdmin/src/assets/images/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..cc951fbdd2d80c984759b3254b794e8587ce66bd GIT binary patch literal 1754 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 e!viEvfd2u&*T}s&Y&9DI0000 \ No newline at end of file diff --git a/fuintAdmin/src/assets/images/dark.svg b/fuintAdmin/src/assets/images/dark.svg new file mode 100644 index 0000000..f646bd7 --- /dev/null +++ b/fuintAdmin/src/assets/images/dark.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fuintAdmin/src/assets/images/goods.png b/fuintAdmin/src/assets/images/goods.png new file mode 100644 index 0000000000000000000000000000000000000000..e226ba7973564638c7b317ce6bb9b93d74417226 GIT binary patch literal 1955 zcmV;U2VD4xP)vpP6Ur1RKW2wpHoqglo3xj*e-xW0aFe*ADR%Q@P-R=KI|zJ`JKl5WEQsO#$8`=8HJbij;Mx$89|7D&gHt{!VulsUb0Him56bLv0xHF5z z&<0#)B!hG<+!(@jQ&_Nt1AxOBpB(}|01`*A9&tmNs&)n7@Wy9_fDeGd;6)O*zsqBw zT~!wV@-aRe1Y7{PFK;JZy?Lkm>)M5?{R6{L0P-_F3j|yMBneyY1*ERO*#Dn;AqoK? zU*mU%KmqU(lfUshL7)Ka1E4>~4~9Si*atveyBNc{&q-wVe^Pg>0PM0}vzWtu)9>F! zn35|1+ss?S0+_|(1PRJ10NVgSXB2t+hFd!|f9Y$Y0?^iwTfJLVZc5qz3s?Z70Bi!# z-@d;si~BHlcJ_WB$qGPQJ7q0^xv|~ANC8;afG-kQ*P<4{s0Y~e01Ch(onT+tNWq6F zqbqde?)LzF4F2p=sn;&*0X7GLqE*W^bj*uH!cC`T+si_zD1G{8gE}AqX-)Cjk7LE-A)wWl;n9B7yxI69gNd69B$F zcT~gwdPD!SfBLtFbpe0^TBsbf`#Kq)7XV=K0ZleS>6BZ;@`0eU@p%DoTfyh^lVk@m zt@t>^=Fr1Kz+!xE09<`;hww#`BiWqczkhcJFS@UHN3g%>+6AmX2pxC8je`oZ89xR9 z>k>>Mal#6@zTO$#-{-gM=L8_VCtx)`3IH~^3NvK-ySM>J2LZeBQ2?+_m+4Iz^2B(% znB#T_QH+lP@cHux`(^1}h_t((E{$xwg*kQ`;P{tziH}*OopYl?D`mRGQB8 zISN3ghDp^d1t68CGkuN%kf~u(HA?|VrRhwcqX1-Tm{iSD08(i>)8~W%kbCans=Bp7 zm#@C9(XdSlmX`(qo(C7!ZRCR8^6?6g7Y9IE?qDJEVgQtIbSfoxupoIc0LnN!&wF6f z&+bT&ynX=syAEJ;c!4Yl6DF@8fRb_t8*^!A25K0#Jy&d;pY^I~WC^5P7)(@K3MUU;9>t==L=p4^WJ}Tmax<)>t5* z`|)@HC`MidpbaF}1tvJ39zZ>Sr&AX8MyLl6{zfPO3V@CQ9xh}01ALk10|1n)B~soP!FIUU>^fI4b*8MFfA!& zUaXNo;eDb4pa5tnSn{AqJ%D-u^#JMtyu;pN2E7^x67KQ104OJSFc$YHMqVxe%E=v! z0Z@#*d;lP)Z+N@bzygQZ8diwBd;pY^I~er!f&I~WI`2zj{ySoh)6 zK!=Xp7B6=&4S?RuivS=icW_;ck{1C$R_u?C=5fmgZ27t8O!Gh$)0BF2`tlYsuJ2`OCYTN@k01kG07cD>GYL~^NP>0A{XNUz*JQh5XDcq1V{7p@ zR8<$FRqaU3g_N>9shcry#nA8Cs^A{dihR9ne7tGsAcxIU$oti}4{>pHRrP7@L2m$_ z#z*&*^z)UBD6iy*CWp2H0{|VirfqE0 z#KoGOhq;M+ey(=`tW+|hOizq0o|>B>njCBxc~+_}d4E`?qT&0{ShGV-Rw&7jw5(?{ zO2BF*qq01W!AX86XU}4?98g1i$l5wATkf*NI;& zLhjesKadI(iowS92vZ*%J7KTy){wk}=JMo@1ZxIMS14!_s1LWX?Xe_Vb&cwZ24g-) zSBncHhB6VBxrk7bt;m%N6vLD+`50HYGyXcu=^?2PT9PgMo%sRg|dwMqBnGj)9rQW);YTX6c6nkjAEj^X1F_3ZRra#WTkIuD6Ed>9PM zrv3K3iqHF(tYy$*Cpr(w-%I@sQQ0_(AnlH9RWhQx$8ALeI=F}^5T_PH{S#yxcH4?>$I2587457B@q{JJb4*89U@}P}le5B+s));umTY?8s+A z8)7&wBFIbPoawFhHLULkEA24f;=kocZhnICa|%+6MN=c^IKxwoP4i)r0|xjp6KAh* zEnw6$F&i$wA26FZYA!X%ZwO5_PS1LD(aj>bVOn+HPi=Il+2fValQr~3U8&mZ_Zj2* z59YrOE6j{&yqe!lPc!(Kbf0C(XkK#TCSI3^?lgmst1erffu5h>@M5g?(2z)OY_BnSuZ19wkk+Bs1 Y1CDtoo3f=qPXGV_07*qoM6N<$f|3g3mjD0& literal 0 HcmV?d00001 diff --git a/fuintAdmin/src/assets/images/home/coupon.png b/fuintAdmin/src/assets/images/home/coupon.png new file mode 100644 index 0000000000000000000000000000000000000000..c282eb28385b6b669c7d77516e19b39bd32a51cc GIT binary patch literal 1587 zcmV-32F&@1P)3 z%Z=kO3}p!^VM<5|Q$k9Z5>i4sNC`eI0$4QE!McP1d)cEg75KV`1$Gaz$CHUgN|q?m zy99KbjO1sEeBwt2&?L9p3m~4rm@{2b><$MpPHg;SXUr`F&c{Fj0bQ-|h+O~ZY0Vzeo z)}DJr1c%!87@z?oNX7?JWIZ}2J%+Hwx$QN`*qlP*oE!HHc}EcAa0}~MTcgR|`o!(R zrU1BiFyFA6Y6%2TqsezTJY|E9XSNe6 zVgS1cncp;|#ui*4g>szRKz87+XM$B}FwJ>w+CLAPBOc@saAWDD2*BKNGG}Bg7swLe zy7l=0PN<8Z7aAEE3YsqsV`PPnp{fLTe5)sV0u%z0$>Y zd>Pd<$UL}tlwvMMO#WZACdq~%d3yB-7$5YP+i{!3MVb7IEg_*G^XV#uF=;xeli#`d zBn;%8feXN~hq4Ra4zf~k0Ra4w{;^7|Hy&ig;L`Rt&&h3zgoCUYTmU-uP&+%!gRC=y z{UEf1lhq8@qd^Zk_|ydbkE%iucBynwTuob^QK~cPN&E~VFsC0Wbt-Hsnmqpr?k+N4 zoeG>Pk^1-`@AzJ2IdD?hNAJ=YPliRjfx594)Jl-n|sn=dN+RB{d9z@?6#5{`4hMlL3nViv>le=!)^PP zfkkk?b;Fp82<4=*GEYT<)F0R6n_77=osD0~22swZT0RT(0vv1}X5q|4t%uPFFqbs& z9?<9t%W^eppG70Ubaf{|1-U~&jR(>OFqai)X)T?~DIbK_25@qV8|@wC0zf{|1aP(% zH=28v4a92#I9rPw-4Ii@LWW{DB?0DQDACFPY~zO1{Pc~1{Gf0tGMgOBhU4{KBp%9nTODe z-PC?>Vnsr4Wi1vL55L}4_jQX-Ys2z`#cz|1OTRa&fWF;cBEFO$Tf9w5sNJfj1z#lo z6BG)%NF9ZXYX>OxEsR-QL*pe%8Pu7#ZM6>W{)gPxkh^OYUlTq`mEnXYA?amN&2-Ux zoOUn094FZJ>9j|Cs}kHF&!^A8 z<7XXUt22b0;*Qz93SiaS*%Wb<>0DT=hmWs({a50s)LB5Yb$vQbjm%Wb@z-Voepu1= l5tfhn-2u@~zd30G^e>MVaAK`O3i<#5002ovPDHLkV1kp%=fMB~ literal 0 HcmV?d00001 diff --git a/fuintAdmin/src/assets/images/home/goods.png b/fuintAdmin/src/assets/images/home/goods.png new file mode 100644 index 0000000000000000000000000000000000000000..8a2844dcd4db40370ca88654307c06271f189e0e GIT binary patch literal 920 zcmeAS@N?(olHy`uVBq!ia0vp^5g^RL1|$oo8kjIJFvokkIEGZrc{}&+##II)ZsnZQ z62PdyYXgh*1{S%Qiitr@ssTWBXfJx2m~9{!G~FmBtAy^{Gk)54fJ;n}Gx56i3hw86@2{7zzFC)f`*oYHQbc~n3eDD;p)umC_0G-h zJ>SS0e)VDM6!X8m`K+}oZ|WDl_t&4#%&B+!Z%4%0;LuW!h^J34%Gi8S;t!fuJ>@}J z$eQBgPo~CB{@8d;R`G_|?^`8y6BmmAjBeU0c}Go8M$Yo}=fgWsd)&GpBWugnA-mUL zO-IJrvhCf1;(yoau&&qNA$r!nr|yr>Qe&3<(i^*33>V*(6OrL(ZC;pQAi~qubTGhR zh7N1{hUgNn%{t#VY(2DwrG10(vq{Q%8ESu7Z-oV&|C6d(QE}`2v?ssTzX+OUn>e-T zo|W{$s6_9)UtZllXP29tJay9J!w)y7?8J|<$DZfiPI;Q59P#<#h6h)67S^o3%x-tE z>h40%KW0Cpvz*@k4;>-`{MFz3k5$B#YVnmrXw zoAvUE-p1F(!cA|bYt^Ss%)Vc~tjRTKZtp(bswp|aP1et3AI3g^aY&8T{{7zopr0Jn;_I{*Lx literal 0 HcmV?d00001 diff --git a/fuintAdmin/src/assets/images/home/member.png b/fuintAdmin/src/assets/images/home/member.png new file mode 100644 index 0000000000000000000000000000000000000000..f198c383093f12d07572e6e421a016792f64af0b GIT binary patch literal 1288 zcmV+j1^4=iP) z(UIyf3`JD}B~St-Py!{q61D_7paecM6FZX z9O+uJvqVdxu6Jb24_SLAYp-POjjV0Sm?PEoZtmfIA8os#ra6(d9a;Met!Ykk5A}Pf zs_lJtV}}o|BV+b+4}1Ao+eSFOcfOK=i|4UUf7p5M;V+j^Ob=OAZRfs(8#lbEdTy4L4Fatv+^U+ioU)_W&G!n_=V&$AyzAXC6ksi*Ay& z*BM5>aIoWho!&33RN07u!^iL@_J|U_))yz6=2ZMiaB?x+#O64R*Pp!=RXlCGxlbfKj=J6vMHJl1p66R5%G))0}*@?C>9_grOL@ zm`f?S$q6TZJLIem`!K|vIXvZZ6Ac5r>*Lk!W5S8gs%p!vd-KAOFCO!h%d}j~C0A~y zgcIM>Ohk`IAJ4v&4}T3q?&jvn#av?LW_~z9zI(dCXh8j!pA)~lz5lI@T$FKsXfi#v zkEBexj;uXXUGLy7iNXF(bXT8aZB=bEcXnZ?zZ0I^jGx`c{0t@!nyiC-h_XM*`0fUz z%!uLac=rnVnY2BbuXY(ZJpB1jY7Ncg&}>W(L!Z$litla>!-)?xF$dxSXMJ8_$%P@V zEd8u))N$iJvQ(EVT}*w(%RV2hY~r^&`@>KfxtNPzZsKr)z!JTk`enwW5rO;i^WP1$ z_WaS?EryDxBWo|o#k8o|9pI=YvWG-U=vMO6%qzK4@LwU8QS+%_mCHJV1BrqxYqJ7)k3PRW^CxQbFJ> zmMWV(aOr_DaeYk@#ZPLLmx#)i4!#{+B4?DqRoSG2CM~Pbh!dVxCVLnKm2H$~O}QZ!MEPn=-)rN+H@l1c@y;L?FA8-z%d(9%I1I4?%NwnYb*&-IPinoFh54NU9J<#08F2PZ~ zj_c3t0|iWnIeF9#<{&X{GkmZ6cG=l7p_`RY$l^R>v`)c<1C@L?9tl2p^8RS;sav+4B_)n&O7A_cSkO>kKO)vd`}y6#VkA?*s$kpJmARm+>%H4-TayT+Z$J( zf0F6eF9CJ4sf3r303CU d^MU6J)0_C>M*>{0-vZ-;!PC{xWt~$(695Mrwg&(J literal 0 HcmV?d00001 diff --git a/fuintAdmin/src/assets/images/home/pay.png b/fuintAdmin/src/assets/images/home/pay.png new file mode 100644 index 0000000000000000000000000000000000000000..b9cb819f0996ec69fc93c7fb53ff794e491aa5b2 GIT binary patch literal 755 zcmeAS@N?(olHy`uVBq!ia0vp^5g^RL1|$oo8kjIJFzxbmaSW-L^LFmRiHi*cTt%Cl z3pn@=Dq66#KM*)^K=I5(t(BTiGX&IHI2#4Z_-94tpXA86a{t)1`q0|L9D64*m`-{l zqu3%4q+7ecSWzaHLtNZxamVA$`n87stK&J`)jz#;`M0J^VAiK@2H``grGH)6)Qh6R zH=J0x;6e13xA#IiRPV{xsZ6~Vthw`jx!;r1E*rk5cgS!j@$0T%eB#5JrtNo|lASlL zT>ffaOj-Oc*Xyx~MQb<~8Vc2H)G8^6E&p5j>e=Dn%;&lc@5#^k{`};xlDnmD1)KLA z*z@4w(zyL=I{94}JP3dBDWgdDrpty`cAuA3)Gtd=5#ecTIv8Le!Nul$FkwN{_BlH$ zMRw{e4*F2BN!`3_w%@FpvvRk;?_MJG(`VkZ8^76#JnDYWv^AT)8jMT*s41Z=d11P^QT!UO{p`>+YNgdERh zR7%#na$~LhYW0x$?{%jaUKKty(^g4+dGzk+{EGU0)w>m2{wVXw*|{svHL)mr^Y_6+ zp+8^Ax-u9Hf)Z^dF3b)#BH*Nri4T@VGSl8dPdfI!!eBZJ^DoTgF-*V^p z-hSuqUf9-@uipLp>XYQ)m-{3iefVw?Isb)i50@%htIKBXh>X9UR=F^&{-eUC zjYmokg-pNRo>Z24rlNMX$eyQnnRNd@bDS%_O{?ZK|IwEwubJ~&Kh9mhggf{D)^%?x zjcI|5H|bj@rL^sq?!z6k8^kKhQsPs;777Z_7o%#LVF7>gTe~DWM4fq;6Oc literal 0 HcmV?d00001 diff --git a/fuintAdmin/src/assets/images/hot.png b/fuintAdmin/src/assets/images/hot.png new file mode 100644 index 0000000000000000000000000000000000000000..164072faf3576ae52281e194821ffb590f43e30a GIT binary patch literal 2198 zcmV;H2x<3;P) zO==rU5Xbuny1~;CbOaqiM;HiX5eVo(76F41hAd1B3IrlF4m2K-MIbN>Lly=jF9KdX zh{z(4o%Y%22=f*#*)vtu^Vu`qGhII@-X_n}(;rp!ukIcR!7vQNFbu;m4C4<{j)asW z+s$CQM6RYH3S+SecOnW8A_|k^e`67af$iooZ6W1IMAysIpwqSqcS5elwwueCM9R@| z#p?$inhYnlo6VR)t^CXYkG_0LrtwuWyS+@tUq4clU~jwGj0sfC&kX$X;Ve1)ewieH zUObun@s^kb>$&abGfjy?nI6=|{ds2K)3*KZUpNU4wwup1B?|ZH)el!bwAt+?$OSkd z>@QM|(t|m>z04i_+>N_@`x0Apq3_un0WU;teFWP%> zxk}o>IhVOv&!7yHKi-lGfT#yZ+s%JMhLdBtI=_I`N+q*uC9Tz&SOcQtX1ABg;{H5Y z+@B}Y_zJFkRS0rrqe!mCg(YlM$uv0$G&7IrG&hqckPMbGm)cMC|1`cz=64s#{O%%| z##hukY)w5pfPZ{`caiLWy~?=H$+r(U9JrJ~DHpme`%3&S`v= zE1?d*Um9+JVU!ox6N8`fT8`}krrJCC_MuS50#Dpf#i$O;xc+V%V36X$cQ16Q<%PN#sVyueTb)sPyM%;5VwgA)KWAa5t_WI#*1 zv8R5sUVs7KXF3LK8JkO>43Lt4H7c0~JaDQ3py^1F-89ls~tB& z0q{_Hl}wZbZo-}M2I%6@;rB}{1zk`9$i-hTwf`1}3HuYcNhQ-r|AR#2l#RxZZ<775 zSIO?@>ty+G=4K@gXlS*nbJ|3_s}nT=O(pYG2qJ1QDvvSN|HPTPLbJV(PM1%E!v7EF z3-*=F=gUI4F}^6ngm0y~>Ray8ZL{N>rUy;??jEe$Pbr$HLX zgswuTP@$mf0#TVe4C(jVggX(f=iMwgm6!w~x?YM+_*kluT_uD{x`K|YaaI9`y>29} zYJWLzdlP<8heB-ST9m|6S-0*5+Apx+fvfjSH4s^E*Y+e<&%`^gn{anrY`BfSXC)7W2Or%ls7P+rBdZy6Dt<4Nb{jU zO*9jp+~Y>uEs~L@{Re$R_p53QI5{p;x<#I-g^6AnSAD7g@7kf`@45_cMMfO5#g^w4pi0K zc1HHasud^dDuk*#eWs|hV^}rQC!d==p4TV`F%EQ1RWop%LeQxSa;LAut7+JC(UZPz zrcXW-On4X0T08+`W1Yt7H=3}EZL-s6ilR_ZH`CXF18T>Riub1b!U_2Y!P#;1xQyMseb*1smbhysdlb&fKS;KrX5v&;g6py>7TOTDqdi_Nxh?2@(hxOvL0Aq}V-WHWf)9y|Z8ynT z1|k0-=sq3GK`n!je-Io7-1vU5iws8oK?eI`1{sw6gRmSd231a7xchI4K_)kbaq8<| zZ7?`_W0*GXR5%5agAN|;wgtZYGC&V$;tKgt!5_&8Y&Xd~Tou&g&DjZ-gBZ9l1||O> zrmv6>fxPc64-PMqor(-z{y|s{X7TP0MO#@5d}qKz`3D*N?pFcc$v=qCheW)Te~>D_H#9W(-lXtb4tgv9Am|rA z99Ribj%ZtrX$vQ%ZL^-?@BaEE{~-7`c#`8@!M2ob!de_^9}^(=#~}SSZ`6R_8$deqXk$pO z#ykl!X7@Lctr3O6F%E7$wD|b$f$d>n7=~dOhG7_nVHk#C7=~dOhG7_nVHk#C7-lH^ Y4<%A-ySHmCF#rGn07*qoM6N<$f@DP={{R30 literal 0 HcmV?d00001 diff --git a/fuintAdmin/src/assets/images/icon-cart.svg b/fuintAdmin/src/assets/images/icon-cart.svg new file mode 100644 index 0000000..65c2eb9 --- /dev/null +++ b/fuintAdmin/src/assets/images/icon-cart.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/fuintAdmin/src/assets/images/life.png b/fuintAdmin/src/assets/images/life.png new file mode 100644 index 0000000000000000000000000000000000000000..1d04c05063aa43c3560810739d19ac08e5136f5c GIT binary patch literal 1924 zcmV-~2YdL5P)1300aO5GDjeD^AQ0+fXord z+yDMepecj+Y=BmrS2J>_5e)PkobG zdIAgvXVlwoR*sL$BxvJ3!8 z@URP~zpUR{uU$oTp3L*4UiUmifwEAu{yT%vl$?JK=eO>ja21Y5JhY!_8>9(gS^WI@ zl|sgqR^Z8GA)Ll&sZ|7i{OHiI{mW2ipCbVGeqETDQiyolsxqkTbr2Yhm;ky7{+J11 z3K4xGz~$>`j8tK#!1{myfdP-LIS?Q=j|A2S1PBaxY|ViHv3Vr0J|I9~z+-C;1c=Qe zf%O3a0s|gfb09!$9to@u2oM_CKmbqRQYi)kq~b|WJFEnlQKkHYCtU>QxD}kPb48Yc03w*u z6#@a$^{vP<5I_V|x>O3NY}R_%Rm4TOz8@N0O|TxWElt`f+<}g z5FlOOiYx;GL@=c*1OlY%+l^)F6Ttk{_va735R!xc3)~9M!p&wQK>!fI@F`#n0a;K3 z5g-dUV+hFH%^&~>U_byvK<3l{0YCt(0&?a6B0$dGC)+`Q00iI^E%*0lt9(5t^m|TW zcec*XWz=9@j$hxFmT@%)1aL*nL7pABT;7oLE~u0#-(sIq?_6)C-chM}IaQzT8B?~; zYiSN(tHvOJgF{_Jl><33Q%6v2PDHuh%Hum4ad{?>{;8^KiXz_x^Aze;BM)A5CL4h+aRxcKIdBUO|e_g;X4>yP}WwC1m;Ia9I06#fD|c# zoXW??D`-~^Xl*xpn7)U$6Ndv=pk4-emHRt9{1>#I=-pC|wVv_t^gvduI`+apGO zF0kpb=H;PJHa8HUB?8zcYm3FHcFnHl4E!y|?Z>vnvm|?@e2!fwi$DM;xXi+8>8B6R zy3ra{whB-OLl>*Fd($#fPa2zvAV7-* zXjtZDanrHlMM7T^0n8_{3307P7Z1eeOur`}tt$okfEQ%@?{`yM|JgK>#UIj&g&+ z8J*&>^X#EpRmjuU%pMLx7`GeZ-rbSeAVv%I%gD&7q&k zGF@FD**$9uB7l!qJ<6~{m&+4c#%=Bd9vw{^d+*b7?088T7xh2@7qk+T1pyLts*6b= zfD2j)$~F*yHz0J^oAi6z3F4EyN#>i!Q~pR4-*3~cLH({DC6DGF8fZShn3RQW31d3q z+(QhqRoQ-m+2;uGp1|SF4Bg{?`5;@QBQ@L{;aTBsS*WeZU-S?2YfZi0Wu)doEfWHp z^9TIXAzpy2}fYxdI)d-4oN%viW5OHbX@N{>(W4#3WqkL5 z?6DKzsljTJ$e%+|=iPYXM1a3bv|P@L)X$1lVgF4QJK!7;?5=<))AQ;qfHuOJ+H$?}P#f~=s0000< KMNUMnLSTZt3~~_w literal 0 HcmV?d00001 diff --git a/fuintAdmin/src/assets/images/light.svg b/fuintAdmin/src/assets/images/light.svg new file mode 100644 index 0000000..ab7cc08 --- /dev/null +++ b/fuintAdmin/src/assets/images/light.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fuintAdmin/src/assets/images/login-bg.png b/fuintAdmin/src/assets/images/login-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..9f1e4945e9c149d907f089c95e6f0d37bf00d25b GIT binary patch literal 137648 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 N002ovPDHLkV1n~FYxMvC literal 0 HcmV?d00001 diff --git a/fuintAdmin/src/assets/images/office.png b/fuintAdmin/src/assets/images/office.png new file mode 100644 index 0000000000000000000000000000000000000000..d569f0de02ec0b3de885f4e8ae4a64395d848e36 GIT binary patch literal 504 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrVBGKN;uumf=k48txw9D<+5+89 zaLB4Em$39-5ZvYHcEV6dz|hIBgZbhV%_O z{7g5R7#^_*s5e+J9^r(j5_Xuwz?U>{|GO>QrwZ@9zVXlhV;?sa-Fd%T_B`=qhpmdKI;Vst09XyWSO5S3 literal 0 HcmV?d00001 diff --git a/fuintAdmin/src/assets/images/order.png b/fuintAdmin/src/assets/images/order.png new file mode 100644 index 0000000000000000000000000000000000000000..9de87449668ea226465748f989371c34d692d650 GIT binary patch literal 1600 zcmZuvdo+}37=JzuW~R|j&0<&Sh%_isxpiSaM#F3umyk7?lSvmU)2w1#W2f3Z`_I1TJn!>+pYwa)=l46$o9=qhNrS9I z1^^AVv!lB*V;_R3rrcZYj!OX4)Y*>q9tp=}`EI9ZJE>`${f`INUZrIoD@hIFDe9_7)-G_*dq6Nyfl*65RC)$ZIw&68KNr^1T;uJcRZW|>sqc(eRkpz!|H zDXm{Gujr)T4@Is4wsxemn)}Lrt@tlM!tMc#S$o%@X>-(z;_w0T^!UHEe zFE2N}6JL$EQhP@ukCS`gzT+GW#J?IlDE^_dhW%GVqSc=x%%0i1@+td_$UNvdHmX&{ z>lrv_YdSn|Ic$sBZHp^h5ZCQGJv`5;7;j>Qd&8r|NZCpaGs_sTMZ&MPM4a83tLt3cKiBr90}1Wc>nUV&@>Hv$P;H|=g?D+uY#or zK;p4?M2Y%!m3dbrHEtV1TZ0or3K{X_V^ishVmTx(;^>!E?F8UUAaGsrN z(zVlRu%^?a3XMsq!|byH;;rG-o3(dzkK*zbREz-i>HK{O7H{PgyV&LFnNDH#$dR7- zr)RE}r|%xIGytC#?>8F>!XvWEi99$#3aZVaVyCJlm9Z*Wh8fQfI>7I}TP2-A5W>im z*8CF3_vxaIpZz?~aP;?0_gCNzhsJa6FQ3$hq?qir*#0pR5v_&U{MHX(5O8I}Sg`nA z;LrIJ;WtI^2n5ssA`;KP+@OC}A67S~q!ps}9*|q_v9@h_ih_we_=78df^OU#EW}H{zgGebX zdVp$xD%c6W4>k|=_xKEZQOZhG-WLGzP%`=45DiqiwGcbRf*`M8zK|?WF6n+`q4|G7qF)X31lb#=C>hgBE`?pLKQ0KLBODbbm_nD zR>>_74p;2C-dtk488au8U?sMQ9)znHeu?h*qWYw2mPf$>;lENwj;qeLci6g7N7vL) zm;P)zkIYK-`M!ZuniJfwgR8Xd7hG53irw!cQ}d+4Vd8I#;w!#Tzb}bb?r%%&II1X6 zy(7{Ad0Sx28E1+!IG9M90;A79T9MASq4YV8qI@N17RpG>&+(5RQb(BP!GB48%&0vC0! z8gH6sL0Zui!cdMldbRlR1(n%E^;wtpqPn=rRNA<}Lir0qJbrAq^`t--?MCe9Jb@I~ z(TPNs8h>4OH@7unR#F%)LM;%`oz<;cC7e03bT~@KD>;EO+DR+93E!-J%1v=4{GmLk zOV<+wbejx^d2UJ|5Ia_UFIj`=+M-&AZP;HCi0D@jO)58lX8N^JGUA->yVr^!)ZcdK y$ObTWE4!Bl9vg$tZzkv&hH4H{vGc#}k9p4E+mAGWv@Qsgi@o=t<1L4Pl)nMqYs0|+ literal 0 HcmV?d00001 diff --git a/fuintAdmin/src/assets/logo/logo.png b/fuintAdmin/src/assets/logo/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..36d00d37a73e71e22daa91fd54476c6fe5e69d8f GIT binary patch literal 3416 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 V>Qr!tJ4N~J<7l^oR div + > .el-submenu + > .el-submenu__title + .el-submenu__icon-arrow { + display: none; +} + +.common-dialog { + .el-dialog { + border: solid 6px #00acac; + } + .el-dialog__header{ + background: #00acac; + padding: 10px; + } + .el-dialog__headerbtn { + top: 15px; + } + .el-dialog__body { + padding: 30px; + } + .el-dialog__title,.el-dialog__close{ + color: #fff; + font-size: 14px; + } + .el-dialog__title,.el-dialog__close:hover{ + color: #fff; + font-weight: bold; + } +} diff --git a/fuintAdmin/src/assets/styles/element-variables.scss b/fuintAdmin/src/assets/styles/element-variables.scss new file mode 100644 index 0000000..3ae7d05 --- /dev/null +++ b/fuintAdmin/src/assets/styles/element-variables.scss @@ -0,0 +1,31 @@ +/** +* I think element-ui's default theme color is too light for long-term use. +* So I modified the default color and you can modify it to your liking. +**/ + +/* theme color */ +$--color-primary: #00acac; +$--color-success: #13ce66; +$--color-warning: #ffba00; +$--color-danger: #ff4949; +// $--color-info: #1E1E1E; + +$--button-font-weight: 400; + +// $--color-text-regular: #1f2d3d; + +$--border-color-light: #dfe4ed; +$--border-color-lighter: #e6ebf5; + +$--table-border:1px solid #dfe6ec; + +/* icon font path, required */ +$--font-path: '~element-ui/lib/theme-chalk/fonts'; + +@import "~element-ui/packages/theme-chalk/src/index"; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + theme: $--color-primary; +} diff --git a/fuintAdmin/src/assets/styles/fuint.scss b/fuintAdmin/src/assets/styles/fuint.scss new file mode 100644 index 0000000..cdf2b55 --- /dev/null +++ b/fuintAdmin/src/assets/styles/fuint.scss @@ -0,0 +1,404 @@ + /** + * 通用css样式布局处理 + * Copyright (c) 2022 https://www.baidu.com + */ + /** 基础通用 **/ +.pt5 { + padding-top: 5px; +} +.pr5 { + padding-right: 5px; +} +.pb5 { + padding-bottom: 5px; +} +.mt5 { + margin-top: 5px; +} +.mr5 { + margin-right: 5px; +} +.mb5 { + margin-bottom: 5px; +} +.mb8 { + margin-bottom: 8px; +} +.ml5 { + margin-left: 5px; +} +.mt10 { + margin-top: 10px; +} +.mr10 { + margin-right: 10px; +} +.mb10 { + margin-bottom: 10px; +} +.ml10 { + margin-left: 10px; +} +.mt20 { + margin-top: 20px; +} +.mr20 { + margin-right: 20px; +} +.mb20 { + margin-bottom: 20px; +} +.ml20 { + margin-left: 20px; +} +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +.main-panel { + border: solid 1px #ccc; + padding: 25px 10px 20px 10px; + .input { + width: 450px; + } + .min-input { + width: 240px; + } + .el-upload { + width: 80px; + height: 80px; + line-height: 88px; + } + .el-upload-list__item { + width: 80px; + height: 80px; + } + .footer { + margin-left: 80px; + } +} +.el-dialog:not(.is-fullscreen) { + margin-top: 6vh !important; +} +.el-dialog__wrapper.scrollbar .el-dialog .el-dialog__body { + overflow: auto; + overflow-x: hidden; + max-height: 70vh; + padding: 10px 20px 0; +} +.el-table { + .el-table__header-wrapper, .el-table__fixed-header-wrapper { + th { + word-break: break-word; + background-color: #f8f8f9; + color: #515a6e; + height: 40px; + font-size: 13px; + } + } + .el-table__body-wrapper { + .el-button [class*="el-icon-"] + span { + margin-left: 1px; + } + } +} + +/** 表单布局 **/ +.form-header { + font-size:15px; + color:#6379bb; + border-bottom:1px solid #ddd; + margin:8px 10px 25px 10px; + padding-bottom:5px +} + +/** 表单提示 **/ +.form-tips { + font-size: 12px; + color: #888; + height: 12px; + padding-left: 5px; + line-height: 12px; + margin-top: 5px; +} + +/** 表格布局 **/ +.pagination-container { + position: relative; + height: 25px; + margin-bottom: 10px; + margin-top: 15px; + padding: 10px 20px !important; +} + +/* tree border */ +.tree-border { + margin-top: 5px; + border: 1px solid #e5e6e7; + background: #FFFFFF none; + border-radius:4px; +} + +.pagination-container .el-pagination { + right: 0; + position: absolute; +} + +@media ( max-width : 768px) { + .pagination-container .el-pagination > .el-pagination__jump { + display: none !important; + } + .pagination-container .el-pagination > .el-pagination__sizes { + display: none !important; + } +} + +.el-table .fixed-width .el-button--mini { + padding-left: 0; + padding-right: 0; + width: inherit; +} + +/** 表格更多操作下拉样式 */ +.el-table .el-dropdown-link { + cursor: pointer; + color: #00acac; + margin-left: 5px; +} + +.el-table .el-dropdown, .el-icon-arrow-down { + font-size: 12px; +} + +.el-tree-node__content > .el-checkbox { + margin-right: 8px; +} + +.list-group-striped > .list-group-item { + border-left: 0; + border-right: 0; + border-radius: 0; + padding-left: 0; + padding-right: 0; +} + +.list-group { + padding-left: 0px; + list-style: none; +} + +.list-group-item { + border-bottom: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; + margin-bottom: -1px; + padding: 11px 0px; + font-size: 13px; +} + +.pull-right { + float: right !important; +} + +.el-card__header { + padding: 14px 15px 7px; + min-height: 40px; +} + +.el-card__body { + padding: 15px 20px 20px 20px; +} + +.card-box { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 10px; +} + +/* button color */ +.el-button--cyan.is-active, +.el-button--cyan:active { + background: #20B2AA; + border-color: #20B2AA; + color: #FFFFFF; +} + +.el-button--cyan:focus, +.el-button--cyan:hover { + background: #48D1CC; + border-color: #48D1CC; + color: #FFFFFF; +} + +.el-button--cyan { + background-color: #20B2AA; + border-color: #20B2AA; + color: #FFFFFF; +} + +/* text color */ +.text-navy { + color: #1ab394; +} + +.text-primary { + color: inherit; +} + +.text-success { + color: #00acac; +} + +.text-info { + color: #23c6c8; +} + +.text-warning { + color: #f8ac59; +} + +.text-danger { + color: #ed5565; +} + +.text-muted { + color: #888888; +} + +/* image */ +.img-circle { + border-radius: 50%; +} + +.img-lg { + width: 120px; + height: 120px; +} + +.avatar-upload-preview { + position: absolute; + top: 50%; + transform: translate(50%, -50%); + width: 200px; + height: 200px; + border-radius: 50%; + box-shadow: 0 0 4px #ccc; + overflow: hidden; +} + +/* 拖拽列样式 */ +.sortable-ghost{ + opacity: .8; + color: #fff!important; + background: #42b983!important; +} + +.top-right-btn { + position: relative; + float: right; +} +.no-border { + border: none; +} +.list-img { + width: 58px; + height: 48px; + border-radius: 5px; + border: 1px solid #ccc; +} +.list-qr { + width: 70px; + height: 70px; + border-radius: 5px; + border: 1px solid #ccc; +} +.list-avatar { + width: 45px; + height: 45px; + border-radius: 30px; + border: 1px solid #ccc; + } +.el-upload { + width: 150px; + height: 150px; + line-height: 150px; +} +.mini-btn { + padding: 4px 8px 4px 8px; +} +.status-active { + color: #52c41a; + background: #f6ffed; + border: #b7eb8f solid 1px; + border-radius: 20px; + display: block; + font-size: 90%; + text-align: center; +} +.status-disabled { + color: #f5222d; + background: #fff1f0; + border: #ffa39e solid 1px; + border-radius: 20px; + font-size: 90%; + display: block; + text-align: center; +} +.status-normal { + color: #666666; + background: #ffffff; + border: #666666 solid 1px; + border-radius: 20px; + display: block; + font-size: 90%; + text-align: center; + cursor: pointer; +} +.nav-icon { + cursor: pointer; +} +.nav-tool { + cursor: pointer; + text-align: center; + .icon { + margin-left: 10px; + margin-top: 6px; + width: 25px; + height: 25px; + clear: both; + display: block; + } + .name { + font-size: 12px; + clear: both; + padding: 0px; + margin: 0px; + line-height: 20px; + font-weight: bold; + } +} +.main-search { + background: #f5f5f5; + padding: 10px; + border-radius: 3px; + margin-bottom: 3px; + border: solid 1px #cccccc; +} +.dialog-qr { + text-align: center; + .qr-detail { + margin-bottom: 10px; + .title { + text-align: left; + font-weight: bold; + padding-left: 100px; + } + .qr-code { + margin: 0 auto; + width: 200px; + height: 210px; + border: solid 1px #ccc; + } + } +} diff --git a/fuintAdmin/src/assets/styles/index.scss b/fuintAdmin/src/assets/styles/index.scss new file mode 100644 index 0000000..96095ef --- /dev/null +++ b/fuintAdmin/src/assets/styles/index.scss @@ -0,0 +1,191 @@ +@import './variables.scss'; +@import './mixin.scss'; +@import './transition.scss'; +@import './element-ui.scss'; +@import './sidebar.scss'; +@import './btn.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; +} + +.no-padding { + padding: 0px !important; +} + +.padding-content { + padding: 4px 0; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +div:focus { + outline: none; +} + +.fr { + float: right; +} + +.fl { + float: left; +} + +.pr-5 { + padding-right: 5px; +} + +.pl-5 { + padding-left: 5px; +} + +.block { + display: block; +} + +.pointer { + cursor: pointer; +} + +.inlineBlock { + display: block; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } +} + +aside { + background: #eef1f6; + padding: 8px 24px; + margin-bottom: 20px; + border-radius: 2px; + display: block; + line-height: 32px; + font-size: 16px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + color: #2c3e50; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + a { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } + } +} + +//main-container全局样式 +.app-container { + padding: 20px; +} + +.components-container { + margin: 30px 50px; + position: relative; +} + +.pagination-container { + margin-top: 30px; +} + +.text-center { + text-align: center +} + +.sub-navbar { + height: 50px; + line-height: 50px; + position: relative; + width: 100%; + text-align: right; + padding-right: 20px; + transition: 600ms ease position; + background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%); + + .subtitle { + font-size: 20px; + color: #fff; + } + + &.draft { + background: #d0d0d0; + } + + &.deleted { + background: #d0d0d0; + } +} + +.link-type, +.link-type:focus { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } +} + +.filter-container { + padding-bottom: 10px; + + .filter-item { + display: inline-block; + vertical-align: middle; + margin-bottom: 10px; + } +} + +//refine vue-multiselect plugin +.multiselect { + line-height: 16px; +} + +.multiselect--active { + z-index: 1000 !important; +} diff --git a/fuintAdmin/src/assets/styles/mixin.scss b/fuintAdmin/src/assets/styles/mixin.scss new file mode 100644 index 0000000..06fa061 --- /dev/null +++ b/fuintAdmin/src/assets/styles/mixin.scss @@ -0,0 +1,66 @@ +@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%; +} + +@mixin pct($pct) { + width: #{$pct}; + position: relative; + margin: 0 auto; +} + +@mixin triangle($width, $height, $color, $direction) { + $width: $width/2; + $color-border-style: $height solid $color; + $transparent-border-style: $width solid transparent; + height: 0; + width: 0; + + @if $direction==up { + border-bottom: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==right { + border-left: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } + + @else if $direction==down { + border-top: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==left { + border-right: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } +} diff --git a/fuintAdmin/src/assets/styles/sidebar.scss b/fuintAdmin/src/assets/styles/sidebar.scss new file mode 100644 index 0000000..f827d32 --- /dev/null +++ b/fuintAdmin/src/assets/styles/sidebar.scss @@ -0,0 +1,228 @@ +#app { + + .main-container { + min-height: 100%; + transition: margin-left .28s; + margin-left: $base-sidebar-width; + position: relative; + } + + .sidebarHide { + margin-left: 0!important; + } + + .sidebar-container { + -webkit-transition: width .28s; + transition: width 0.28s; + width: $base-sidebar-width !important; + background-color: $base-menu-background; + height: 100%; + position: fixed; + font-size: 0px; + top: 0; + bottom: 0; + left: 0; + z-index: 1001; + overflow: hidden; + -webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35); + box-shadow: 2px 0 6px rgba(0,21,41,.35); + margin-bottom: 100px; + // 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; + } + + .scrollbar-wrapper { + overflow-x: hidden !important; + } + + .el-scrollbar__bar.is-vertical { + right: 0px; + } + + .el-scrollbar { + height: 100%; + } + + &.has-logo { + .el-scrollbar { + height: calc(100% - 50px); + } + } + + .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; + } + + .el-menu-item, .el-submenu__title { + overflow: hidden !important; + text-overflow: ellipsis !important; + white-space: nowrap !important; + height: 48px; + line-height: 48px; + } + + // menu hover + .submenu-title-noDropdown, + .el-submenu__title { + &:hover { + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + & .theme-dark .is-active > .el-submenu__title { + color: $base-menu-color-active !important; + } + + & .nest-menu .el-submenu>.el-submenu__title, + & .el-submenu .el-menu-item { + min-width: $base-sidebar-width !important; + background: red; + &:hover { + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + & .theme-dark .nest-menu .el-submenu>.el-submenu__title, + & .theme-dark .el-submenu .el-menu-item { + background-color: $base-sub-menu-background !important; + + &:hover { + background-color: $base-sub-menu-hover !important; + } + } + } + + .hideSidebar { + .sidebar-container { + width: 54px !important; + } + + .main-container { + margin-left: 54px; + } + + .submenu-title-noDropdown { + padding: 0 !important; + position: relative; + .el-tooltip { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + } + } + + .el-submenu { + overflow: hidden; + + &>.el-submenu__title { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + + } + } + + .el-menu--collapse { + .el-submenu { + &>.el-submenu__title { + &>span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + .el-menu--collapse .el-menu .el-submenu { + min-width: $base-sidebar-width !important; + } + + // mobile responsive + .mobile { + .main-container { + margin-left: 0px; + } + + .sidebar-container { + transition: transform .28s; + width: $base-sidebar-width !important; + } + + &.hideSidebar { + .sidebar-container { + pointer-events: none; + transition-duration: 0.3s; + transform: translate3d(-$base-sidebar-width, 0, 0); + } + } + } + + .withoutAnimation { + + .main-container, + .sidebar-container { + transition: none; + } + } +} + +// when menu collapsed +.el-menu--vertical { + &>.el-menu { + .svg-icon { + margin-right: 16px; + } + } + + .nest-menu .el-submenu>.el-submenu__title, + .el-menu-item { + &:hover { + // you can use $subMenuHover + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + // the scroll bar appears when the subMenu is too long + >.el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } + } +} diff --git a/fuintAdmin/src/assets/styles/transition.scss b/fuintAdmin/src/assets/styles/transition.scss new file mode 100644 index 0000000..4cb27cc --- /dev/null +++ b/fuintAdmin/src/assets/styles/transition.scss @@ -0,0 +1,48 @@ +// global 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); +} + +/* breadcrumb transition */ +.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; +} diff --git a/fuintAdmin/src/assets/styles/variables.scss b/fuintAdmin/src/assets/styles/variables.scss new file mode 100644 index 0000000..fa32342 --- /dev/null +++ b/fuintAdmin/src/assets/styles/variables.scss @@ -0,0 +1,39 @@ +// base color +$blue:#324157; +$light-blue:#3A71A8; +$red:#C03639; +$pink: #E65D6E; +$green: #30B08F; +$tiffany: #4AB7BD; +$yellow:#FEC171; +$panGreen: #30B08F; + +// 默认菜单主题风格 +$base-menu-color:#bfcbd9; +$base-menu-color-active:#f4f4f5; +$base-menu-background:#304156; +$base-logo-title-color: #ffffff; + +$base-menu-light-color:rgba(0,0,0,.70); +$base-menu-light-background:#ffffff; +$base-logo-light-title-color: #001529; + +$base-sub-menu-background:#1f2d3d; +$base-sub-menu-hover:#001528; + +$base-sidebar-width: 200px; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + menuColor: $base-menu-color; + menuLightColor: $base-menu-light-color; + menuColorActive: $base-menu-color-active; + menuBackground: $base-menu-background; + menuLightBackground: $base-menu-light-background; + subMenuBackground: $base-sub-menu-background; + subMenuHover: $base-sub-menu-hover; + sideBarWidth: $base-sidebar-width; + logoTitleColor: $base-logo-title-color; + logoLightTitleColor: $base-logo-light-title-color +} diff --git a/fuintAdmin/src/components/Breadcrumb/index.vue b/fuintAdmin/src/components/Breadcrumb/index.vue new file mode 100644 index 0000000..1696f54 --- /dev/null +++ b/fuintAdmin/src/components/Breadcrumb/index.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/fuintAdmin/src/components/Crontab/day.vue b/fuintAdmin/src/components/Crontab/day.vue new file mode 100644 index 0000000..19ba773 --- /dev/null +++ b/fuintAdmin/src/components/Crontab/day.vue @@ -0,0 +1,161 @@ + + + diff --git a/fuintAdmin/src/components/Crontab/hour.vue b/fuintAdmin/src/components/Crontab/hour.vue new file mode 100644 index 0000000..1c171c1 --- /dev/null +++ b/fuintAdmin/src/components/Crontab/hour.vue @@ -0,0 +1,114 @@ + + + diff --git a/fuintAdmin/src/components/Crontab/index.vue b/fuintAdmin/src/components/Crontab/index.vue new file mode 100644 index 0000000..3963df2 --- /dev/null +++ b/fuintAdmin/src/components/Crontab/index.vue @@ -0,0 +1,430 @@ + + + + diff --git a/fuintAdmin/src/components/Crontab/min.vue b/fuintAdmin/src/components/Crontab/min.vue new file mode 100644 index 0000000..685a9cc --- /dev/null +++ b/fuintAdmin/src/components/Crontab/min.vue @@ -0,0 +1,116 @@ + + + diff --git a/fuintAdmin/src/components/Crontab/month.vue b/fuintAdmin/src/components/Crontab/month.vue new file mode 100644 index 0000000..5e0008e --- /dev/null +++ b/fuintAdmin/src/components/Crontab/month.vue @@ -0,0 +1,114 @@ + + + diff --git a/fuintAdmin/src/components/Crontab/result.vue b/fuintAdmin/src/components/Crontab/result.vue new file mode 100644 index 0000000..ddd8f04 --- /dev/null +++ b/fuintAdmin/src/components/Crontab/result.vue @@ -0,0 +1,559 @@ + + + diff --git a/fuintAdmin/src/components/Crontab/second.vue b/fuintAdmin/src/components/Crontab/second.vue new file mode 100644 index 0000000..bf381df --- /dev/null +++ b/fuintAdmin/src/components/Crontab/second.vue @@ -0,0 +1,117 @@ + + + diff --git a/fuintAdmin/src/components/Crontab/week.vue b/fuintAdmin/src/components/Crontab/week.vue new file mode 100644 index 0000000..06d0367 --- /dev/null +++ b/fuintAdmin/src/components/Crontab/week.vue @@ -0,0 +1,202 @@ + + + diff --git a/fuintAdmin/src/components/Crontab/year.vue b/fuintAdmin/src/components/Crontab/year.vue new file mode 100644 index 0000000..3019a11 --- /dev/null +++ b/fuintAdmin/src/components/Crontab/year.vue @@ -0,0 +1,131 @@ + + + diff --git a/fuintAdmin/src/components/DictData/index.js b/fuintAdmin/src/components/DictData/index.js new file mode 100644 index 0000000..c2a0359 --- /dev/null +++ b/fuintAdmin/src/components/DictData/index.js @@ -0,0 +1,21 @@ +import Vue from 'vue' +import DataDict from '@/utils/dict' +import { getDicts as getDicts } from '@/api/system/dict/data' + +function install() { + Vue.use(DataDict, { + metas: { + '*': { + labelField: 'dictLabel', + valueField: 'dictValue', + request(dictMeta) { + return getDicts(dictMeta.type).then(res => res.data) + }, + }, + }, + }) +} + +export default { + install, +} \ No newline at end of file diff --git a/fuintAdmin/src/components/DictTag/index.vue b/fuintAdmin/src/components/DictTag/index.vue new file mode 100644 index 0000000..4c196c4 --- /dev/null +++ b/fuintAdmin/src/components/DictTag/index.vue @@ -0,0 +1,52 @@ + + + + \ No newline at end of file diff --git a/fuintAdmin/src/components/Editor/index.vue b/fuintAdmin/src/components/Editor/index.vue new file mode 100644 index 0000000..8edb34e --- /dev/null +++ b/fuintAdmin/src/components/Editor/index.vue @@ -0,0 +1,272 @@ + + + + + diff --git a/fuintAdmin/src/components/FileUpload/index.vue b/fuintAdmin/src/components/FileUpload/index.vue new file mode 100644 index 0000000..472db76 --- /dev/null +++ b/fuintAdmin/src/components/FileUpload/index.vue @@ -0,0 +1,209 @@ + + + + + diff --git a/fuintAdmin/src/components/Fuint/Cashier/index.vue b/fuintAdmin/src/components/Fuint/Cashier/index.vue new file mode 100644 index 0000000..c487ab2 --- /dev/null +++ b/fuintAdmin/src/components/Fuint/Cashier/index.vue @@ -0,0 +1,23 @@ + + + diff --git a/fuintAdmin/src/components/Fuint/Doc/index.vue b/fuintAdmin/src/components/Fuint/Doc/index.vue new file mode 100644 index 0000000..bb66935 --- /dev/null +++ b/fuintAdmin/src/components/Fuint/Doc/index.vue @@ -0,0 +1,21 @@ + + + diff --git a/fuintAdmin/src/components/Fuint/Git/index.vue b/fuintAdmin/src/components/Fuint/Git/index.vue new file mode 100644 index 0000000..0d33b75 --- /dev/null +++ b/fuintAdmin/src/components/Fuint/Git/index.vue @@ -0,0 +1,21 @@ + + + diff --git a/fuintAdmin/src/components/Fuint/QrCode/index.vue b/fuintAdmin/src/components/Fuint/QrCode/index.vue new file mode 100644 index 0000000..9684ce6 --- /dev/null +++ b/fuintAdmin/src/components/Fuint/QrCode/index.vue @@ -0,0 +1,70 @@ + + + diff --git a/fuintAdmin/src/components/Hamburger/index.vue b/fuintAdmin/src/components/Hamburger/index.vue new file mode 100644 index 0000000..368b002 --- /dev/null +++ b/fuintAdmin/src/components/Hamburger/index.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/fuintAdmin/src/components/HeaderSearch/index.vue b/fuintAdmin/src/components/HeaderSearch/index.vue new file mode 100644 index 0000000..83548d5 --- /dev/null +++ b/fuintAdmin/src/components/HeaderSearch/index.vue @@ -0,0 +1,188 @@ + + + + + diff --git a/fuintAdmin/src/components/IconSelect/index.vue b/fuintAdmin/src/components/IconSelect/index.vue new file mode 100644 index 0000000..b0ec9fa --- /dev/null +++ b/fuintAdmin/src/components/IconSelect/index.vue @@ -0,0 +1,68 @@ + + + + + + diff --git a/fuintAdmin/src/components/IconSelect/requireIcons.js b/fuintAdmin/src/components/IconSelect/requireIcons.js new file mode 100644 index 0000000..99e5c54 --- /dev/null +++ b/fuintAdmin/src/components/IconSelect/requireIcons.js @@ -0,0 +1,11 @@ + +const req = require.context('../../assets/icons/svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys() + +const re = /\.\/(.*)\.svg/ + +const icons = requireAll(req).map(i => { + return i.match(re)[1] +}) + +export default icons diff --git a/fuintAdmin/src/components/ImagePreview/index.vue b/fuintAdmin/src/components/ImagePreview/index.vue new file mode 100644 index 0000000..743d8d5 --- /dev/null +++ b/fuintAdmin/src/components/ImagePreview/index.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/fuintAdmin/src/components/ImageUpload/index.vue b/fuintAdmin/src/components/ImageUpload/index.vue new file mode 100644 index 0000000..8192c87 --- /dev/null +++ b/fuintAdmin/src/components/ImageUpload/index.vue @@ -0,0 +1,212 @@ + + + + + diff --git a/fuintAdmin/src/components/Pagination/index.vue b/fuintAdmin/src/components/Pagination/index.vue new file mode 100644 index 0000000..56f5a6b --- /dev/null +++ b/fuintAdmin/src/components/Pagination/index.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/fuintAdmin/src/components/PanThumb/index.vue b/fuintAdmin/src/components/PanThumb/index.vue new file mode 100644 index 0000000..1bcf417 --- /dev/null +++ b/fuintAdmin/src/components/PanThumb/index.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/fuintAdmin/src/components/ParentView/index.vue b/fuintAdmin/src/components/ParentView/index.vue new file mode 100644 index 0000000..7bf6148 --- /dev/null +++ b/fuintAdmin/src/components/ParentView/index.vue @@ -0,0 +1,3 @@ + diff --git a/fuintAdmin/src/components/RightPanel/index.vue b/fuintAdmin/src/components/RightPanel/index.vue new file mode 100644 index 0000000..fbf27eb --- /dev/null +++ b/fuintAdmin/src/components/RightPanel/index.vue @@ -0,0 +1,149 @@ + + + + + + + diff --git a/fuintAdmin/src/components/RightToolbar/index.vue b/fuintAdmin/src/components/RightToolbar/index.vue new file mode 100644 index 0000000..f7663a3 --- /dev/null +++ b/fuintAdmin/src/components/RightToolbar/index.vue @@ -0,0 +1,87 @@ + + + diff --git a/fuintAdmin/src/components/Screenfull/index.vue b/fuintAdmin/src/components/Screenfull/index.vue new file mode 100644 index 0000000..c8bc9a5 --- /dev/null +++ b/fuintAdmin/src/components/Screenfull/index.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/fuintAdmin/src/components/SizeSelect/index.vue b/fuintAdmin/src/components/SizeSelect/index.vue new file mode 100644 index 0000000..069b5de --- /dev/null +++ b/fuintAdmin/src/components/SizeSelect/index.vue @@ -0,0 +1,56 @@ + + + diff --git a/fuintAdmin/src/components/SvgIcon/index.vue b/fuintAdmin/src/components/SvgIcon/index.vue new file mode 100644 index 0000000..e4bf5ad --- /dev/null +++ b/fuintAdmin/src/components/SvgIcon/index.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/fuintAdmin/src/components/ThemePicker/index.vue b/fuintAdmin/src/components/ThemePicker/index.vue new file mode 100644 index 0000000..3a41b9b --- /dev/null +++ b/fuintAdmin/src/components/ThemePicker/index.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/fuintAdmin/src/components/TopNav/index.vue b/fuintAdmin/src/components/TopNav/index.vue new file mode 100644 index 0000000..f780b16 --- /dev/null +++ b/fuintAdmin/src/components/TopNav/index.vue @@ -0,0 +1,181 @@ + + + + + diff --git a/fuintAdmin/src/components/TreeSelect/index.vue b/fuintAdmin/src/components/TreeSelect/index.vue new file mode 100644 index 0000000..bcf5e09 --- /dev/null +++ b/fuintAdmin/src/components/TreeSelect/index.vue @@ -0,0 +1,194 @@ + + + + diff --git a/fuintAdmin/src/components/UserSelect/index.vue b/fuintAdmin/src/components/UserSelect/index.vue new file mode 100644 index 0000000..5d6741f --- /dev/null +++ b/fuintAdmin/src/components/UserSelect/index.vue @@ -0,0 +1,196 @@ + + + + diff --git a/fuintAdmin/src/components/iFrame/index.vue b/fuintAdmin/src/components/iFrame/index.vue new file mode 100644 index 0000000..426857f --- /dev/null +++ b/fuintAdmin/src/components/iFrame/index.vue @@ -0,0 +1,36 @@ + + + + + \ No newline at end of file diff --git a/fuintUniapp/components/btn/index.js b/fuintUniapp/components/btn/index.js new file mode 100644 index 0000000..1ec7783 --- /dev/null +++ b/fuintUniapp/components/btn/index.js @@ -0,0 +1,61 @@ +'use strict'; + +var nativeButtonBehavior = require('./native-button-behaviors'); + +Component({ + externalClasses: ['custom-class', 'theme-class'], + behaviors: [nativeButtonBehavior], + relations: { + '../btn-group/index': { + type: 'parent', + linked: function linked() { + this.setData({ inGroup: true }); + }, + unlinked: function unlinked() { + this.setData({ inGroup: false }); + } + } + }, + properties: { + type: { + type: String, + value: '' + }, + size: { + type: String, + value: '' + }, + plain: { + type: Boolean, + value: false + }, + disabled: { + type: Boolean, + value: false + }, + loading: { + type: Boolean, + value: false + } + }, + + data: { + inGroup: false, + isLast: false + }, + + methods: { + handleTap: function handleTap() { + if (this.data.disabled) { + this.triggerEvent('disabledclick'); + return; + } + this.triggerEvent('btnclick'); + }, + switchLastButtonStatus: function switchLastButtonStatus() { + var isLast = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + this.setData({ isLast: isLast }); + } + } +}); \ No newline at end of file diff --git a/fuintUniapp/components/btn/index.json b/fuintUniapp/components/btn/index.json new file mode 100644 index 0000000..32640e0 --- /dev/null +++ b/fuintUniapp/components/btn/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} \ No newline at end of file diff --git a/fuintUniapp/components/btn/index.wxml b/fuintUniapp/components/btn/index.wxml new file mode 100644 index 0000000..13d69d7 --- /dev/null +++ b/fuintUniapp/components/btn/index.wxml @@ -0,0 +1,24 @@ + diff --git a/fuintUniapp/components/btn/index.wxss b/fuintUniapp/components/btn/index.wxss new file mode 100644 index 0000000..84d50b9 --- /dev/null +++ b/fuintUniapp/components/btn/index.wxss @@ -0,0 +1 @@ +.zan-btn{position:relative;color:#333;background-color:#fff;padding-left:15px;padding-right:15px;border-radius:2px;font-size:16px;line-height:45px;height:45px;box-sizing:border-box;text-decoration:none;text-align:center;vertical-align:middle;overflow:visible}.zan-btn--group{margin-bottom:10px}.zan-btn::after{content:'';position:absolute;top:0;left:0;width:200%;height:200%;-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:0 0;transform-origin:0 0;pointer-events:none;box-sizing:border-box;border:0 solid #e5e5e5;border-width:1px;border-radius:4px}.zan-btn--primary{color:#fff;background-color:#4b0}.zan-btn--primary::after{border-color:#0a0}.zan-btn--warn{color:#fff;background-color:#f85}.zan-btn--warn::after{border-color:#f85}.zan-btn--danger{color:#fff;background-color:#f44}.zan-btn--danger::after{border-color:#e33}.zan-btn--small{display:inline-block;height:30px;line-height:30px;font-size:12px}.zan-btn--small.zan-btn--group{margin-bottom:0;margin-right:5px}.zan-btn--mini{display:inline-block;line-height:21px;height:22px;font-size:10px;padding-left:5px;padding-right:5px}.zan-btn--mini.zan-btn--group{margin-bottom:0;margin-right:5px}.zan-btn--large{border-radius:0;border:none;line-height:50px;height:50px}.zan-btn--large.zan-btn--group{margin-bottom:0}.zan-btn--plain.zan-btn{background-color:transparent}.zan-btn--plain.zan-btn--primary{color:#06bf04}.zan-btn--plain.zan-btn--warn{color:#f60}.zan-btn--plain.zan-btn--danger{color:#f44}.button-hover{opacity:.9}.zan-btn--loading{color:transparent;opacity:1}.zan-btn--loading::before{position:absolute;left:50%;top:50%;content:' ';width:16px;height:16px;margin-left:-8px;margin-top:-8px;border:3px solid #e5e5e5;border-color:#666 #e5e5e5 #e5e5e5 #e5e5e5;border-radius:8px;box-sizing:border-box;-webkit-animation:btn-spin .6s linear;animation:btn-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.zan-btn--danger.zan-btn--loading::before,.zan-btn--primary.zan-btn--loading::before,.zan-btn--warn.zan-btn--loading::before{border-color:#fff rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.1)}@-webkit-keyframes btn-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes btn-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.zan-btn.zan-btn--disabled{color:#999!important;background:#f8f8f8!important;border-color:#e5e5e5!important;cursor:not-allowed!important;opacity:1!important}.zan-btn.zan-btn--disabled::after{border-color:#e5e5e5!important}.zan-btn--group.zan-btn--last{margin-bottom:0;margin-right:0} \ No newline at end of file diff --git a/fuintUniapp/components/btn/native-button-behaviors.js b/fuintUniapp/components/btn/native-button-behaviors.js new file mode 100644 index 0000000..3bd240d --- /dev/null +++ b/fuintUniapp/components/btn/native-button-behaviors.js @@ -0,0 +1,74 @@ +'use strict'; + +module.exports = Behavior({ + properties: { + loading: Boolean, + // 在自定义组件中,无法与外界的 form 组件联动,暂时不开放 + // formType: String, + openType: String, + appParameter: String, + // 暂时不开放,直接传入无法设置样式 + // hoverClass: { + // type: String, + // value: 'button-hover' + // }, + hoverStopPropagation: Boolean, + hoverStartTime: { + type: Number, + value: 20 + }, + hoverStayTime: { + type: Number, + value: 70 + }, + lang: { + type: String, + value: 'en' + }, + sessionFrom: { + type: String, + value: '' + }, + sendMessageTitle: String, + sendMessagePath: String, + sendMessageImg: String, + showMessageCard: String + }, + methods: { + bindgetuserinfo: function bindgetuserinfo() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref$detail = _ref.detail, + detail = _ref$detail === undefined ? {} : _ref$detail; + + this.triggerEvent('getuserinfo', detail); + }, + bindcontact: function bindcontact() { + var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref2$detail = _ref2.detail, + detail = _ref2$detail === undefined ? {} : _ref2$detail; + + this.triggerEvent('contact', detail); + }, + bindgetphonenumber: function bindgetphonenumber() { + var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref3$detail = _ref3.detail, + detail = _ref3$detail === undefined ? {} : _ref3$detail; + + this.triggerEvent('getphonenumber', detail); + }, + bindopensetting: function bindopensetting() { + var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref4$detail = _ref4.detail, + detail = _ref4$detail === undefined ? {} : _ref4$detail; + + this.triggerEvent('opensetting', detail); + }, + binderror: function binderror() { + var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref5$detail = _ref5.detail, + detail = _ref5$detail === undefined ? {} : _ref5$detail; + + this.triggerEvent('error', detail); + } + } +}); \ No newline at end of file diff --git a/fuintUniapp/components/common/color.js b/fuintUniapp/components/common/color.js new file mode 100644 index 0000000..5f5e966 --- /dev/null +++ b/fuintUniapp/components/common/color.js @@ -0,0 +1,3 @@ +export const RED = '#f44'; +export const BLUE = '#1989fa'; +export const GREEN = '#07c160'; diff --git a/fuintUniapp/components/common/component.js b/fuintUniapp/components/common/component.js new file mode 100644 index 0000000..63ef1a9 --- /dev/null +++ b/fuintUniapp/components/common/component.js @@ -0,0 +1,48 @@ +import { basic } from '../mixins/basic'; +import { observe } from '../mixins/observer/index'; +function mapKeys(source, target, map) { + Object.keys(map).forEach(key => { + if (source[key]) { + target[map[key]] = source[key]; + } + }); +} +function VantComponent(vantOptions = {}) { + const options = {}; + mapKeys(vantOptions, options, { + data: 'data', + props: 'properties', + mixins: 'behaviors', + methods: 'methods', + beforeCreate: 'created', + created: 'attached', + mounted: 'ready', + relations: 'relations', + destroyed: 'detached', + classes: 'externalClasses' + }); + const { relation } = vantOptions; + if (relation) { + options.relations = Object.assign(options.relations || {}, { + [`../${relation.name}/index`]: relation + }); + } + // add default externalClasses + options.externalClasses = options.externalClasses || []; + options.externalClasses.push('custom-class'); + // add default behaviors + options.behaviors = options.behaviors || []; + options.behaviors.push(basic); + // map field to form-field behavior + if (vantOptions.field) { + options.behaviors.push('wx://form-field'); + } + // add default options + options.options = { + multipleSlots: true, + addGlobalClass: true + }; + observe(vantOptions, options); + Component(options); +} +export { VantComponent }; diff --git a/fuintUniapp/components/common/index.wxss b/fuintUniapp/components/common/index.wxss new file mode 100644 index 0000000..474d28b --- /dev/null +++ b/fuintUniapp/components/common/index.wxss @@ -0,0 +1 @@ +.van-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-multi-ellipsis--l2{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.van-multi-ellipsis--l3{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}.van-clearfix::after{content:'';display:table;clear:both}.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom::after,.van-hairline--left::after,.van-hairline--right::after,.van-hairline--surround::after,.van-hairline--top-bottom::after,.van-hairline--top::after,.van-hairline::after{content:' ';position:absolute;pointer-events:none;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;top:-50%;left:-50%;right:-50%;bottom:-50%;-webkit-transform:scale(.5);transform:scale(.5);border:0 solid #eee}.van-hairline--top::after{border-top-width:1px}.van-hairline--left::after{border-left-width:1px}.van-hairline--right::after{border-right-width:1px}.van-hairline--bottom::after{border-bottom-width:1px}.van-hairline--top-bottom::after{border-width:1px 0}.van-hairline--surround::after{border-width:1px} \ No newline at end of file diff --git a/fuintUniapp/components/common/style/clearfix.wxss b/fuintUniapp/components/common/style/clearfix.wxss new file mode 100644 index 0000000..df65a0a --- /dev/null +++ b/fuintUniapp/components/common/style/clearfix.wxss @@ -0,0 +1 @@ +.van-clearfix::after{content:'';display:table;clear:both} \ No newline at end of file diff --git a/fuintUniapp/components/common/style/ellipsis.wxss b/fuintUniapp/components/common/style/ellipsis.wxss new file mode 100644 index 0000000..94eba8e --- /dev/null +++ b/fuintUniapp/components/common/style/ellipsis.wxss @@ -0,0 +1 @@ +.van-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-multi-ellipsis--l2{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.van-multi-ellipsis--l3{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical} \ No newline at end of file diff --git a/fuintUniapp/components/common/style/hairline.wxss b/fuintUniapp/components/common/style/hairline.wxss new file mode 100644 index 0000000..0988a6a --- /dev/null +++ b/fuintUniapp/components/common/style/hairline.wxss @@ -0,0 +1 @@ +.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom::after,.van-hairline--left::after,.van-hairline--right::after,.van-hairline--surround::after,.van-hairline--top-bottom::after,.van-hairline--top::after,.van-hairline::after{content:' ';position:absolute;pointer-events:none;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;top:-50%;left:-50%;right:-50%;bottom:-50%;-webkit-transform:scale(.5);transform:scale(.5);border:0 solid #eee}.van-hairline--top::after{border-top-width:1px}.van-hairline--left::after{border-left-width:1px}.van-hairline--right::after{border-right-width:1px}.van-hairline--bottom::after{border-bottom-width:1px}.van-hairline--top-bottom::after{border-width:1px 0}.van-hairline--surround::after{border-width:1px} \ No newline at end of file diff --git a/fuintUniapp/components/common/style/mixins/clearfix.wxss b/fuintUniapp/components/common/style/mixins/clearfix.wxss new file mode 100644 index 0000000..e69de29 diff --git a/fuintUniapp/components/common/style/mixins/ellipsis.wxss b/fuintUniapp/components/common/style/mixins/ellipsis.wxss new file mode 100644 index 0000000..e69de29 diff --git a/fuintUniapp/components/common/style/mixins/hairline.wxss b/fuintUniapp/components/common/style/mixins/hairline.wxss new file mode 100644 index 0000000..e69de29 diff --git a/fuintUniapp/components/common/style/var.wxss b/fuintUniapp/components/common/style/var.wxss new file mode 100644 index 0000000..e69de29 diff --git a/fuintUniapp/components/common/utils.js b/fuintUniapp/components/common/utils.js new file mode 100644 index 0000000..2f0a66a --- /dev/null +++ b/fuintUniapp/components/common/utils.js @@ -0,0 +1,14 @@ +function isDef(value) { + return value !== undefined && value !== null; +} +function isObj(x) { + const type = typeof x; + return x !== null && (type === 'object' || type === 'function'); +} +function isNumber(value) { + return /^\d+$/.test(value); +} +function range(num, min, max) { + return Math.min(Math.max(num, min), max); +} +export { isObj, isDef, isNumber, range }; diff --git a/fuintUniapp/components/dialog/data.js b/fuintUniapp/components/dialog/data.js new file mode 100644 index 0000000..597b192 --- /dev/null +++ b/fuintUniapp/components/dialog/data.js @@ -0,0 +1,26 @@ +'use strict'; + +module.exports = { + // 标题 + title: '', + // 内容 + message: ' ', + // 选择节点 + selector: '#zan-dialog', + // 按钮是否展示为纵向 + buttonsShowVertical: false, + // 是否展示确定 + showConfirmButton: true, + // 确认按钮文案 + confirmButtonText: '确定', + // 确认按钮颜色 + confirmButtonColor: '#3CC51F', + // 是否展示取消 + showCancelButton: false, + // 取消按钮文案 + cancelButtonText: '取消', + // 取消按钮颜色 + cancelButtonColor: '#333', + // 点击按钮自动关闭 dialog + autoClose: true +}; \ No newline at end of file diff --git a/fuintUniapp/components/dialog/dialog.js b/fuintUniapp/components/dialog/dialog.js new file mode 100644 index 0000000..a305fa1 --- /dev/null +++ b/fuintUniapp/components/dialog/dialog.js @@ -0,0 +1,104 @@ +'use strict'; + +var defaultData = require('./data'); + +function getDialogCtx(_ref) { + var selector = _ref.selector, + pageCtx = _ref.pageCtx; + + var ctx = pageCtx; + if (!ctx) { + var pages = getCurrentPages(); + ctx = pages[pages.length - 1]; + } + return ctx.selectComponent(selector); +} + +function getParsedOptions() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + return Object.assign({ + // 自定义 btn 列表 + // { type: 按钮类型,回调时以此作为区分依据,text: 按钮文案, color: 按钮文字颜色 } + buttons: [] + }, defaultData, options); +} + +// options 使用参数 +// pageCtx 页面 page 上下文 +function Dialog(options, pageCtx) { + var parsedOptions = getParsedOptions(options); + + var dialogCtx = getDialogCtx({ + selector: parsedOptions.selector, + pageCtx: pageCtx + }); + + if (!dialogCtx) { + console.error('无法找到对应的dialog组件,请于页面中注册并在 wxml 中声明 dialog 自定义组件'); + return Promise.reject({ type: 'component error' }); + } + + // 处理默认按钮的展示 + // 纵向排布确认按钮在上方 + var _parsedOptions$button = parsedOptions.buttons, + buttons = _parsedOptions$button === undefined ? [] : _parsedOptions$button; + + var showCustomBtns = false; + if (buttons.length === 0) { + if (parsedOptions.showConfirmButton) { + buttons.push({ + type: 'confirm', + text: parsedOptions.confirmButtonText, + color: parsedOptions.confirmButtonColor + }); + } + + if (parsedOptions.showCancelButton) { + var cancelButton = { + type: 'cancel', + text: parsedOptions.cancelButtonText, + color: parsedOptions.cancelButtonColor + }; + if (parsedOptions.buttonsShowVertical) { + buttons.push(cancelButton); + } else { + buttons.unshift(cancelButton); + } + } + } else { + showCustomBtns = true; + } + + return new Promise(function (resolve, reject) { + dialogCtx.setData(Object.assign({}, parsedOptions, { + buttons: buttons, + showCustomBtns: showCustomBtns, + key: '' + new Date().getTime(), + show: true, + promiseFunc: { resolve: resolve, reject: reject }, + openTypePromiseFunc: null + })); + }); +} + +Dialog.close = function (options, pageCtx) { + var parsedOptions = getParsedOptions(options); + + var dialogCtx = getDialogCtx({ + selector: parsedOptions.selector, + pageCtx: pageCtx + }); + + if (!dialogCtx) { + return; + } + + dialogCtx.setData({ + show: false, + promiseFunc: null, + openTypePromiseFunc: null + }); +}; + +module.exports = Dialog; \ No newline at end of file diff --git a/fuintUniapp/components/dialog/index.js b/fuintUniapp/components/dialog/index.js new file mode 100644 index 0000000..9260a69 --- /dev/null +++ b/fuintUniapp/components/dialog/index.js @@ -0,0 +1,148 @@ +'use strict'; + +var _f = function _f() {}; +var needResponseOpenTypes = ['getUserInfo', 'getPhoneNumber', 'openSetting']; + +Component({ + properties: {}, + + data: { + // 标题 + title: '', + // 自定义 btn 列表 + // { type: 按钮类型,回调时以此作为区分依据,text: 按钮文案, color: 按钮文字颜色, openType: 微信开放能力 } + buttons: [], + // 内容 + message: ' ', + // 选择节点 + selector: '#zan-dialog', + // 是否允许滚动 + isScroll: false, + // 按钮是否展示为纵向 + buttonsShowVertical: false, + // 是否展示确定 + showConfirmButton: true, + // 确认按钮文案 + confirmButtonText: '确定', + // 确认按钮颜色 + confirmButtonColor: '#3CC51F', + // 是否展示取消 + showCancelButton: false, + // 取消按钮文案 + cancelButtonText: '取消', + // 取消按钮颜色 + cancelButtonColor: '#333', + key: '', + autoClose: true, + show: false, + showCustomBtns: false, + promiseFunc: {}, + openTypePromiseFunc: {} + }, + + methods: { + handleButtonClick: function handleButtonClick(e) { + var _this = this; + + var _e$currentTarget = e.currentTarget, + currentTarget = _e$currentTarget === undefined ? {} : _e$currentTarget; + var _currentTarget$datase = currentTarget.dataset, + dataset = _currentTarget$datase === undefined ? {} : _currentTarget$datase; + + // 获取当次弹出框的信息 + + var _ref = this.data.promiseFunc || {}, + _ref$resolve = _ref.resolve, + resolve = _ref$resolve === undefined ? _f : _ref$resolve, + _ref$reject = _ref.reject, + reject = _ref$reject === undefined ? _f : _ref$reject; + + // 重置展示 + + + if (this.data.autoClose) { + this.setData({ + show: false + }); + } + + // 自定义按钮,全部 resolve 形式返回,根据 type 区分点击按钮 + if (this.data.showCustomBtns) { + var isNeedOpenDataButton = needResponseOpenTypes.indexOf(dataset.openType) > -1; + var resolveData = { + type: dataset.type + }; + // 如果需要 openData,就额外返回一个 promise,用于后续 open 数据返回 + if (isNeedOpenDataButton) { + resolveData.openDataPromise = new Promise(function(resolve, reject) { + _this.setData({ + openTypePromiseFunc: { + resolve: resolve, + reject: reject + } + }); + }); + resolveData.hasOpenDataPromise = true; + } + resolve(resolveData); + return; + } + + // 默认按钮,确认为 resolve,取消为 reject + if (dataset.type === 'confirm') { + resolve({ + type: 'confirm' + }); + } else { + reject({ + type: 'cancel' + }); + } + + this.setData({ + promiseFunc: {} + }); + }, + + + // 以下为处理微信按钮开放能力的逻辑 + handleUserInfoResponse: function handleUserInfoResponse(_ref2) { + var detail = _ref2.detail; + + this.__handleOpenDataResponse({ + type: detail.errMsg === 'getUserInfo:ok' ? 'resolve' : 'reject', + data: detail + }); + }, + handlePhoneResponse: function handlePhoneResponse(_ref3) { + var detail = _ref3.detail; + + this.__handleOpenDataResponse({ + type: detail.errMsg === 'getPhoneNumber:ok' ? 'resolve' : 'reject', + data: detail + }); + }, + handleOpenSettingResponse: function handleOpenSettingResponse(_ref4) { + var detail = _ref4.detail; + + this.__handleOpenDataResponse({ + type: detail.errMsg === 'openSetting:ok' ? 'resolve' : 'reject', + data: detail + }); + }, + __handleOpenDataResponse: function __handleOpenDataResponse(_ref5) { + var _ref5$type = _ref5.type, + type = _ref5$type === undefined ? 'resolve' : _ref5$type, + _ref5$data = _ref5.data, + data = _ref5$data === undefined ? {} : _ref5$data; + + var promiseFuncs = this.data.openTypePromiseFunc || {}; + var responseFunc = promiseFuncs[type] || _f; + + responseFunc(data); + this.setData({ + openTypePromiseFunc: null + }); + } + } +}); \ No newline at end of file diff --git a/fuintUniapp/components/dialog/index.json b/fuintUniapp/components/dialog/index.json new file mode 100644 index 0000000..e783dbb --- /dev/null +++ b/fuintUniapp/components/dialog/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "pop-manager": "../pop-manager/index", + "zan-button": "../btn/index" + } +} diff --git a/fuintUniapp/components/dialog/index.wxml b/fuintUniapp/components/dialog/index.wxml new file mode 100644 index 0000000..b7896b6 --- /dev/null +++ b/fuintUniapp/components/dialog/index.wxml @@ -0,0 +1,18 @@ + + + {{ title }} + + + {{ message }} + + + + + + {{ item.text }} + + + + + \ No newline at end of file diff --git a/fuintUniapp/components/dialog/index.wxss b/fuintUniapp/components/dialog/index.wxss new file mode 100644 index 0000000..2d7efdf --- /dev/null +++ b/fuintUniapp/components/dialog/index.wxss @@ -0,0 +1,79 @@ +.zan-dialog--container { + width: 80vw; + font-size: 16px; + overflow: hidden; + border-radius: 4px; + background-color: #fff; + color: #333; +} + +.zan-dialog__header { + padding: 15px 0 0; + text-align: center; +} + +.zan-dialog__content { + position: relative; + padding: 15px 20px; + line-height: 1.5; + min-height: 40px; +} + +.zan-dialog__content::after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 200%; + height: 200%; + -webkit-transform: scale(0.5); + transform: scale(0.5); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + pointer-events: none; + box-sizing: border-box; + border: 0 solid #e5e5e5; + border-bottom-width: 1px; +} + +.zan-dialog__content--title { + color: #999; + font-size: 14px; +} + +.zan-dialog__content--scroll { + max-height: 70vh; +} + +.zan-dialog__footer { + overflow: hidden; +} + +.zan-dialog__button { + -webkit-box-flex: 1; + flex: 1; +} + +.zan-dialog__button-inside, .zan-dialog__button-inside--first { + margin-bottom: 0; + line-height: 50px; + height: 50px; +} + +.zan-dialog__button-inside--first::after, .zan-dialog__button-inside::after { + border-width: 0; + border-radius: 0; +} + +.zan-dialog__footer--horizon { + display: -webkit-box; + display: flex; +} + +.zan-dialog__footer--horizon .zan-dialog__button-inside::after { + border-left-width: 1px; +} + +.zan-dialog__footer--vertical .zan-dialog__button-inside::after { + border-top-width: 1px; +} diff --git a/fuintUniapp/components/empty/index.vue b/fuintUniapp/components/empty/index.vue new file mode 100644 index 0000000..ad790be --- /dev/null +++ b/fuintUniapp/components/empty/index.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/fuintUniapp/components/goods-sku-popup/index.vue b/fuintUniapp/components/goods-sku-popup/index.vue new file mode 100644 index 0000000..8d8489d --- /dev/null +++ b/fuintUniapp/components/goods-sku-popup/index.vue @@ -0,0 +1,869 @@ + + + + + diff --git a/fuintUniapp/components/goods-sku-popup/number-box/index.vue b/fuintUniapp/components/goods-sku-popup/number-box/index.vue new file mode 100644 index 0000000..2cf44d5 --- /dev/null +++ b/fuintUniapp/components/goods-sku-popup/number-box/index.vue @@ -0,0 +1,394 @@ + + + + diff --git a/fuintUniapp/components/grade-popup/index.vue b/fuintUniapp/components/grade-popup/index.vue new file mode 100644 index 0000000..eeb3744 --- /dev/null +++ b/fuintUniapp/components/grade-popup/index.vue @@ -0,0 +1,524 @@ + + + + + diff --git a/fuintUniapp/components/jyf-parser/jyf-parser.vue b/fuintUniapp/components/jyf-parser/jyf-parser.vue new file mode 100644 index 0000000..0c78621 --- /dev/null +++ b/fuintUniapp/components/jyf-parser/jyf-parser.vue @@ -0,0 +1,645 @@ + + + + + diff --git a/fuintUniapp/components/jyf-parser/libs/CssHandler.js b/fuintUniapp/components/jyf-parser/libs/CssHandler.js new file mode 100644 index 0000000..8f06b99 --- /dev/null +++ b/fuintUniapp/components/jyf-parser/libs/CssHandler.js @@ -0,0 +1,100 @@ +const cfg = require('./config.js'), + isLetter = c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); + +function CssHandler(tagStyle) { + var styles = Object.assign(Object.create(null), cfg.userAgentStyles); + for (var item in tagStyle) + styles[item] = (styles[item] ? styles[item] + ';' : '') + tagStyle[item]; + this.styles = styles; +} +CssHandler.prototype.getStyle = function(data) { + this.styles = new parser(data, this.styles).parse(); +} +CssHandler.prototype.match = function(name, attrs) { + var tmp, matched = (tmp = this.styles[name]) ? tmp + ';' : ''; + if (attrs.class) { + var items = attrs.class.split(' '); + for (var i = 0, item; item = items[i]; i++) + if (tmp = this.styles['.' + item]) + matched += tmp + ';'; + } + if (tmp = this.styles['#' + attrs.id]) + matched += tmp + ';'; + return matched; +} +module.exports = CssHandler; + +function parser(data, init) { + this.data = data; + this.floor = 0; + this.i = 0; + this.list = []; + this.res = init; + this.state = this.Space; +} +parser.prototype.parse = function() { + for (var c; c = this.data[this.i]; this.i++) + this.state(c); + return this.res; +} +parser.prototype.section = function() { + return this.data.substring(this.start, this.i); +} +// 状态机 +parser.prototype.Space = function(c) { + if (c == '.' || c == '#' || isLetter(c)) { + this.start = this.i; + this.state = this.Name; + } else if (c == '/' && this.data[this.i + 1] == '*') + this.Comment(); + else if (!cfg.blankChar[c] && c != ';') + this.state = this.Ignore; +} +parser.prototype.Comment = function() { + this.i = this.data.indexOf('*/', this.i) + 1; + if (!this.i) this.i = this.data.length; + this.state = this.Space; +} +parser.prototype.Ignore = function(c) { + if (c == '{') this.floor++; + else if (c == '}' && !--this.floor) { + this.list = []; + this.state = this.Space; + } +} +parser.prototype.Name = function(c) { + if (cfg.blankChar[c]) { + this.list.push(this.section()); + this.state = this.NameSpace; + } else if (c == '{') { + this.list.push(this.section()); + this.Content(); + } else if (c == ',') { + this.list.push(this.section()); + this.Comma(); + } else if (!isLetter(c) && (c < '0' || c > '9') && c != '-' && c != '_') + this.state = this.Ignore; +} +parser.prototype.NameSpace = function(c) { + if (c == '{') this.Content(); + else if (c == ',') this.Comma(); + else if (!cfg.blankChar[c]) this.state = this.Ignore; +} +parser.prototype.Comma = function() { + while (cfg.blankChar[this.data[++this.i]]); + if (this.data[this.i] == '{') this.Content(); + else { + this.start = this.i--; + this.state = this.Name; + } +} +parser.prototype.Content = function() { + this.start = ++this.i; + if ((this.i = this.data.indexOf('}', this.i)) == -1) this.i = this.data.length; + var content = this.section(); + for (var i = 0, item; item = this.list[i++];) + if (this.res[item]) this.res[item] += ';' + content; + else this.res[item] = content; + this.list = []; + this.state = this.Space; +} diff --git a/fuintUniapp/components/jyf-parser/libs/MpHtmlParser.js b/fuintUniapp/components/jyf-parser/libs/MpHtmlParser.js new file mode 100644 index 0000000..5ddd4c0 --- /dev/null +++ b/fuintUniapp/components/jyf-parser/libs/MpHtmlParser.js @@ -0,0 +1,580 @@ +/** + * html 解析器 + * @tutorial https://github.com/jin-yufeng/Parser + * @version 20201029 + * @author JinYufeng + * @listens MIT + */ +const cfg = require('./config.js'), + blankChar = cfg.blankChar, + CssHandler = require('./CssHandler.js'), + windowWidth = uni.getSystemInfoSync().windowWidth; +var emoji; + +function MpHtmlParser(data, options = {}) { + this.attrs = {}; + this.CssHandler = new CssHandler(options.tagStyle, windowWidth); + this.data = data; + this.domain = options.domain; + this.DOM = []; + this.i = this.start = this.audioNum = this.imgNum = this.videoNum = 0; + options.prot = (this.domain || '').includes('://') ? this.domain.split('://')[0] : 'http'; + this.options = options; + this.state = this.Text; + this.STACK = []; + // 工具函数 + this.bubble = () => { + for (var i = this.STACK.length, item; item = this.STACK[--i];) { + if (cfg.richOnlyTags[item.name]) return false; + item.c = 1; + } + return true; + } + this.decode = (val, amp) => { + var i = -1, + j, en; + while (1) { + if ((i = val.indexOf('&', i + 1)) == -1) break; + if ((j = val.indexOf(';', i + 2)) == -1) break; + if (val[i + 1] == '#') { + en = parseInt((val[i + 2] == 'x' ? '0' : '') + val.substring(i + 2, j)); + if (!isNaN(en)) val = val.substr(0, i) + String.fromCharCode(en) + val.substr(j + 1); + } else { + en = val.substring(i + 1, j); + if (cfg.entities[en] || en == amp) + val = val.substr(0, i) + (cfg.entities[en] || '&') + val.substr(j + 1); + } + } + return val; + } + this.getUrl = url => { + if (url[0] == '/') { + if (url[1] == '/') url = this.options.prot + ':' + url; + else if (this.domain) url = this.domain + url; + } else if (this.domain && url.indexOf('data:') != 0 && !url.includes('://')) + url = this.domain + '/' + url; + return url; + } + this.isClose = () => this.data[this.i] == '>' || (this.data[this.i] == '/' && this.data[this.i + 1] == '>'); + this.section = () => this.data.substring(this.start, this.i); + this.parent = () => this.STACK[this.STACK.length - 1]; + this.siblings = () => this.STACK.length ? this.parent().children : this.DOM; +} +MpHtmlParser.prototype.parse = function() { + if (emoji) this.data = emoji.parseEmoji(this.data); + for (var c; c = this.data[this.i]; this.i++) + this.state(c); + if (this.state == this.Text) this.setText(); + while (this.STACK.length) this.popNode(this.STACK.pop()); + return this.DOM; +} +// 设置属性 +MpHtmlParser.prototype.setAttr = function() { + var name = this.attrName.toLowerCase(), + val = this.attrVal; + if (cfg.boolAttrs[name]) this.attrs[name] = 'T'; + else if (val) { + if (name == 'src' || (name == 'data-src' && !this.attrs.src)) this.attrs.src = this.getUrl(this.decode(val, 'amp')); + else if (name == 'href' || name == 'style') this.attrs[name] = this.decode(val, 'amp'); + else if (name.substr(0, 5) != 'data-') this.attrs[name] = val; + } + this.attrVal = ''; + while (blankChar[this.data[this.i]]) this.i++; + if (this.isClose()) this.setNode(); + else { + this.start = this.i; + this.state = this.AttrName; + } +} +// 设置文本节点 +MpHtmlParser.prototype.setText = function() { + var back, text = this.section(); + if (!text) return; + text = (cfg.onText && cfg.onText(text, () => back = true)) || text; + if (back) { + this.data = this.data.substr(0, this.start) + text + this.data.substr(this.i); + let j = this.start + text.length; + for (this.i = this.start; this.i < j; this.i++) this.state(this.data[this.i]); + return; + } + if (!this.pre) { + // 合并空白符 + var flag, tmp = []; + for (let i = text.length, c; c = text[--i];) + if (!blankChar[c]) { + tmp.unshift(c); + if (!flag) flag = 1; + } else { + if (tmp[0] != ' ') tmp.unshift(' '); + if (c == '\n' && flag == void 0) flag = 0; + } + if (flag == 0) return; + text = tmp.join(''); + } + this.siblings().push({ + type: 'text', + text: this.decode(text) + }); +} +// 设置元素节点 +MpHtmlParser.prototype.setNode = function() { + var node = { + name: this.tagName.toLowerCase(), + attrs: this.attrs + }, + close = cfg.selfClosingTags[node.name]; + if (this.options.nodes.length) node.type = 'node'; + this.attrs = {}; + if (!cfg.ignoreTags[node.name]) { + // 处理属性 + var attrs = node.attrs, + style = this.CssHandler.match(node.name, attrs, node) + (attrs.style || ''), + styleObj = {}; + if (attrs.id) { + if (this.options.compress & 1) attrs.id = void 0; + else if (this.options.useAnchor) this.bubble(); + } + if ((this.options.compress & 2) && attrs.class) attrs.class = void 0; + switch (node.name) { + case 'a': + case 'ad': // #ifdef APP-PLUS + case 'iframe': + // #endif + this.bubble(); + break; + case 'font': + if (attrs.color) { + styleObj['color'] = attrs.color; + attrs.color = void 0; + } + if (attrs.face) { + styleObj['font-family'] = attrs.face; + attrs.face = void 0; + } + if (attrs.size) { + var size = parseInt(attrs.size); + if (size < 1) size = 1; + else if (size > 7) size = 7; + var map = ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large']; + styleObj['font-size'] = map[size - 1]; + attrs.size = void 0; + } + break; + case 'embed': + // #ifndef APP-PLUS + var src = node.attrs.src || '', + type = node.attrs.type || ''; + if (type.includes('video') || src.includes('.mp4') || src.includes('.3gp') || src.includes('.m3u8')) + node.name = 'video'; + else if (type.includes('audio') || src.includes('.m4a') || src.includes('.wav') || src.includes('.mp3') || src.includes( + '.aac')) + node.name = 'audio'; + else break; + if (node.attrs.autostart) + node.attrs.autoplay = 'T'; + node.attrs.controls = 'T'; + // #endif + // #ifdef APP-PLUS + this.bubble(); + break; + // #endif + case 'video': + case 'audio': + if (!attrs.id) attrs.id = node.name + (++this[`${node.name}Num`]); + else this[`${node.name}Num`]++; + if (node.name == 'video') { + if (this.videoNum > 3) + node.lazyLoad = 1; + if (attrs.width) { + styleObj.width = parseFloat(attrs.width) + (attrs.width.includes('%') ? '%' : 'px'); + attrs.width = void 0; + } + if (attrs.height) { + styleObj.height = parseFloat(attrs.height) + (attrs.height.includes('%') ? '%' : 'px'); + attrs.height = void 0; + } + } + if (!attrs.controls && !attrs.autoplay) attrs.controls = 'T'; + attrs.source = []; + if (attrs.src) { + attrs.source.push(attrs.src); + attrs.src = void 0; + } + this.bubble(); + break; + case 'td': + case 'th': + if (attrs.colspan || attrs.rowspan) + for (var k = this.STACK.length, item; item = this.STACK[--k];) + if (item.name == 'table') { + item.flag = 1; + break; + } + } + if (attrs.align) { + if (node.name == 'table') { + if (attrs.align == 'center') styleObj['margin-inline-start'] = styleObj['margin-inline-end'] = 'auto'; + else styleObj['float'] = attrs.align; + } else styleObj['text-align'] = attrs.align; + attrs.align = void 0; + } + // 压缩 style + var styles = style.split(';'); + style = ''; + for (var i = 0, len = styles.length; i < len; i++) { + var info = styles[i].split(':'); + if (info.length < 2) continue; + let key = info[0].trim().toLowerCase(), + value = info.slice(1).join(':').trim(); + if (value[0] == '-' || value.includes('safe')) + style += `;${key}:${value}`; + else if (!styleObj[key] || value.includes('import') || !styleObj[key].includes('import')) + styleObj[key] = value; + } + if (node.name == 'img') { + if (attrs.src && !attrs.ignore) { + if (this.bubble()) + attrs.i = (this.imgNum++).toString(); + else attrs.ignore = 'T'; + } + if (attrs.ignore) { + style += ';-webkit-touch-callout:none'; + styleObj['max-width'] = '100%'; + } + var width; + if (styleObj.width) width = styleObj.width; + else if (attrs.width) width = attrs.width.includes('%') ? attrs.width : parseFloat(attrs.width) + 'px'; + if (width) { + styleObj.width = width; + attrs.width = '100%'; + if (parseInt(width) > windowWidth) { + styleObj.height = ''; + if (attrs.height) attrs.height = void 0; + } + } + if (styleObj.height) { + attrs.height = styleObj.height; + styleObj.height = ''; + } else if (attrs.height && !attrs.height.includes('%')) + attrs.height = parseFloat(attrs.height) + 'px'; + } + for (var key in styleObj) { + var value = styleObj[key]; + if (!value) continue; + if (key.includes('flex') || key == 'order' || key == 'self-align') node.c = 1; + // 填充链接 + if (value.includes('url')) { + var j = value.indexOf('('); + if (j++ != -1) { + while (value[j] == '"' || value[j] == "'" || blankChar[value[j]]) j++; + value = value.substr(0, j) + this.getUrl(value.substr(j)); + } + } + // 转换 rpx + else if (value.includes('rpx')) + value = value.replace(/[0-9.]+\s*rpx/g, $ => parseFloat($) * windowWidth / 750 + 'px'); + else if (key == 'white-space' && value.includes('pre') && !close) + this.pre = node.pre = true; + style += `;${key}:${value}`; + } + style = style.substr(1); + if (style) attrs.style = style; + if (!close) { + node.children = []; + if (node.name == 'pre' && cfg.highlight) { + this.remove(node); + this.pre = node.pre = true; + } + this.siblings().push(node); + this.STACK.push(node); + } else if (!cfg.filter || cfg.filter(node, this) != false) + this.siblings().push(node); + } else { + if (!close) this.remove(node); + else if (node.name == 'source') { + var parent = this.parent(); + if (parent && (parent.name == 'video' || parent.name == 'audio') && node.attrs.src) + parent.attrs.source.push(node.attrs.src); + } else if (node.name == 'base' && !this.domain) this.domain = node.attrs.href; + } + if (this.data[this.i] == '/') this.i++; + this.start = this.i + 1; + this.state = this.Text; +} +// 移除标签 +MpHtmlParser.prototype.remove = function(node) { + var name = node.name, + j = this.i; + // 处理 svg + var handleSvg = () => { + var src = this.data.substring(j, this.i + 1); + node.attrs.xmlns = 'http://www.w3.org/2000/svg'; + for (var key in node.attrs) { + if (key == 'viewbox') src = ` viewBox="${node.attrs.viewbox}"` + src; + else if (key != 'style') src = ` ${key}="${node.attrs[key]}"` + src; + } + src = '', this.i)) == -1) this.i = this.data.length; + if (name == 'svg') handleSvg(); + return; + } + } +} +// 节点出栈处理 +MpHtmlParser.prototype.popNode = function(node) { + // 空白符处理 + if (node.pre) { + node.pre = this.pre = void 0; + for (let i = this.STACK.length; i--;) + if (this.STACK[i].pre) + this.pre = true; + } + var siblings = this.siblings(), + len = siblings.length, + childs = node.children; + if (node.name == 'head' || (cfg.filter && cfg.filter(node, this) == false)) + return siblings.pop(); + var attrs = node.attrs; + // 替换一些标签名 + if (cfg.blockTags[node.name]) node.name = 'div'; + else if (!cfg.trustTags[node.name]) node.name = 'span'; + // 处理列表 + if (node.c && (node.name == 'ul' || node.name == 'ol')) { + if ((node.attrs.style || '').includes('list-style:none')) { + for (let i = 0, child; child = childs[i++];) + if (child.name == 'li') + child.name = 'div'; + } else if (node.name == 'ul') { + var floor = 1; + for (let i = this.STACK.length; i--;) + if (this.STACK[i].name == 'ul') floor++; + if (floor != 1) + for (let i = childs.length; i--;) + childs[i].floor = floor; + } else { + for (let i = 0, num = 1, child; child = childs[i++];) + if (child.name == 'li') { + child.type = 'ol'; + child.num = ((num, type) => { + if (type == 'a') return String.fromCharCode(97 + (num - 1) % 26); + if (type == 'A') return String.fromCharCode(65 + (num - 1) % 26); + if (type == 'i' || type == 'I') { + num = (num - 1) % 99 + 1; + var one = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'], + ten = ['X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'], + res = (ten[Math.floor(num / 10) - 1] || '') + (one[num % 10 - 1] || ''); + if (type == 'i') return res.toLowerCase(); + return res; + } + return num; + })(num++, attrs.type) + '.'; + } + } + } + // 处理表格 + if (node.name == 'table') { + var padding = parseFloat(attrs.cellpadding), + spacing = parseFloat(attrs.cellspacing), + border = parseFloat(attrs.border); + if (node.c) { + if (isNaN(padding)) padding = 2; + if (isNaN(spacing)) spacing = 2; + } + if (border) attrs.style = `border:${border}px solid gray;${attrs.style || ''}`; + if (node.flag && node.c) { + // 有 colspan 或 rowspan 且含有链接的表格转为 grid 布局实现 + attrs.style = `${attrs.style || ''};${spacing ? `;grid-gap:${spacing}px` : ';border-left:0;border-top:0'}`; + var row = 1, + col = 1, + colNum, + trs = [], + children = [], + map = {}; + (function f(ns) { + for (var i = 0; i < ns.length; i++) { + if (ns[i].name == 'tr') trs.push(ns[i]); + else f(ns[i].children || []); + } + })(node.children) + for (let i = 0; i < trs.length; i++) { + for (let j = 0, td; td = trs[i].children[j]; j++) { + if (td.name == 'td' || td.name == 'th') { + while (map[row + '.' + col]) col++; + var cell = { + name: 'div', + c: 1, + attrs: { + style: (td.attrs.style || '') + (border ? `;border:${border}px solid gray` + (spacing ? '' : + ';border-right:0;border-bottom:0') : '') + (padding ? `;padding:${padding}px` : '') + }, + children: td.children + } + if (td.attrs.colspan) { + cell.attrs.style += ';grid-column-start:' + col + ';grid-column-end:' + (col + parseInt(td.attrs.colspan)); + if (!td.attrs.rowspan) cell.attrs.style += ';grid-row-start:' + row + ';grid-row-end:' + (row + 1); + col += parseInt(td.attrs.colspan) - 1; + } + if (td.attrs.rowspan) { + cell.attrs.style += ';grid-row-start:' + row + ';grid-row-end:' + (row + parseInt(td.attrs.rowspan)); + if (!td.attrs.colspan) cell.attrs.style += ';grid-column-start:' + col + ';grid-column-end:' + (col + 1); + for (var k = 1; k < td.attrs.rowspan; k++) map[(row + k) + '.' + col] = 1; + } + children.push(cell); + col++; + } + } + if (!colNum) { + colNum = col - 1; + attrs.style += `;grid-template-columns:repeat(${colNum},auto)` + } + col = 1; + row++; + } + node.children = children; + } else { + attrs.style = `border-spacing:${spacing}px;${attrs.style || ''}`; + if (border || padding) + (function f(ns) { + for (var i = 0, n; n = ns[i]; i++) { + if (n.name == 'th' || n.name == 'td') { + if (border) n.attrs.style = `border:${border}px solid gray;${n.attrs.style || ''}`; + if (padding) n.attrs.style = `padding:${padding}px;${n.attrs.style || ''}`; + } else f(n.children || []); + } + })(childs) + } + if (this.options.autoscroll) { + var table = Object.assign({}, node); + node.name = 'div'; + node.attrs = { + style: 'overflow:scroll' + } + node.children = [table]; + } + } + this.CssHandler.pop && this.CssHandler.pop(node); + // 自动压缩 + if (node.name == 'div' && !Object.keys(attrs).length && childs.length == 1 && childs[0].name == 'div') + siblings[len - 1] = childs[0]; +} +// 状态机 +MpHtmlParser.prototype.Text = function(c) { + if (c == '<') { + var next = this.data[this.i + 1], + isLetter = c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); + if (isLetter(next)) { + this.setText(); + this.start = this.i + 1; + this.state = this.TagName; + } else if (next == '/') { + this.setText(); + if (isLetter(this.data[++this.i + 1])) { + this.start = this.i + 1; + this.state = this.EndTag; + } else this.Comment(); + } else if (next == '!' || next == '?') { + this.setText(); + this.Comment(); + } + } +} +MpHtmlParser.prototype.Comment = function() { + var key; + if (this.data.substring(this.i + 2, this.i + 4) == '--') key = '-->'; + else if (this.data.substring(this.i + 2, this.i + 9) == '[CDATA[') key = ']]>'; + else key = '>'; + if ((this.i = this.data.indexOf(key, this.i + 2)) == -1) this.i = this.data.length; + else this.i += key.length - 1; + this.start = this.i + 1; + this.state = this.Text; +} +MpHtmlParser.prototype.TagName = function(c) { + if (blankChar[c]) { + this.tagName = this.section(); + while (blankChar[this.data[this.i]]) this.i++; + if (this.isClose()) this.setNode(); + else { + this.start = this.i; + this.state = this.AttrName; + } + } else if (this.isClose()) { + this.tagName = this.section(); + this.setNode(); + } +} +MpHtmlParser.prototype.AttrName = function(c) { + if (c == '=' || blankChar[c] || this.isClose()) { + this.attrName = this.section(); + if (blankChar[c]) + while (blankChar[this.data[++this.i]]); + if (this.data[this.i] == '=') { + while (blankChar[this.data[++this.i]]); + this.start = this.i--; + this.state = this.AttrValue; + } else this.setAttr(); + } +} +MpHtmlParser.prototype.AttrValue = function(c) { + if (c == '"' || c == "'") { + this.start++; + if ((this.i = this.data.indexOf(c, this.i + 1)) == -1) return this.i = this.data.length; + this.attrVal = this.section(); + this.i++; + } else { + for (; !blankChar[this.data[this.i]] && !this.isClose(); this.i++); + this.attrVal = this.section(); + } + this.setAttr(); +} +MpHtmlParser.prototype.EndTag = function(c) { + if (blankChar[c] || c == '>' || c == '/') { + var name = this.section().toLowerCase(); + for (var i = this.STACK.length; i--;) + if (this.STACK[i].name == name) break; + if (i != -1) { + var node; + while ((node = this.STACK.pop()).name != name) this.popNode(node); + this.popNode(node); + } else if (name == 'p' || name == 'br') + this.siblings().push({ + name, + attrs: {} + }); + this.i = this.data.indexOf('>', this.i); + this.start = this.i + 1; + if (this.i == -1) this.i = this.data.length; + else this.state = this.Text; + } +} +module.exports = MpHtmlParser; diff --git a/fuintUniapp/components/jyf-parser/libs/config.js b/fuintUniapp/components/jyf-parser/libs/config.js new file mode 100644 index 0000000..f135a8d --- /dev/null +++ b/fuintUniapp/components/jyf-parser/libs/config.js @@ -0,0 +1,80 @@ +/* 配置文件 */ +var cfg = { + // 出错占位图 + errorImg: null, + // 过滤器函数 + filter: null, + // 代码高亮函数 + highlight: null, + // 文本处理函数 + onText: null, + // 实体编码列表 + entities: { + quot: '"', + apos: "'", + semi: ';', + nbsp: '\xA0', + ensp: '\u2002', + emsp: '\u2003', + ndash: '–', + mdash: '—', + middot: '·', + lsquo: '‘', + rsquo: '’', + ldquo: '“', + rdquo: '”', + bull: '•', + hellip: '…' + }, + blankChar: makeMap(' ,\xA0,\t,\r,\n,\f'), + boolAttrs: makeMap('allowfullscreen,autoplay,autostart,controls,ignore,loop,muted'), + // 块级标签,将被转为 div + blockTags: makeMap('address,article,aside,body,caption,center,cite,footer,header,html,nav,pre,section'), + // 将被移除的标签 + ignoreTags: makeMap('area,base,canvas,frame,iframe,input,link,map,meta,param,script,source,style,svg,textarea,title,track,wbr'), + // 只能被 rich-text 显示的标签 + richOnlyTags: makeMap('a,colgroup,fieldset,legend'), + // 自闭合的标签 + selfClosingTags: makeMap('area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr'), + // 信任的标签 + trustTags: makeMap('a,abbr,ad,audio,b,blockquote,br,code,col,colgroup,dd,del,dl,dt,div,em,fieldset,h1,h2,h3,h4,h5,h6,hr,i,img,ins,label,legend,li,ol,p,q,source,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,title,ul,video'), + // 默认的标签样式 + userAgentStyles: { + address: 'font-style:italic', + big: 'display:inline;font-size:1.2em', + blockquote: 'background-color:#f6f6f6;border-left:3px solid #dbdbdb;color:#6c6c6c;padding:5px 0 5px 10px', + caption: 'display:table-caption;text-align:center', + center: 'text-align:center', + cite: 'font-style:italic', + dd: 'margin-left:40px', + mark: 'background-color:yellow', + pre: 'font-family:monospace;white-space:pre;overflow:scroll', + s: 'text-decoration:line-through', + small: 'display:inline;font-size:0.8em', + u: 'text-decoration:underline' + } +} + +function makeMap(str) { + var map = Object.create(null), + list = str.split(','); + for (var i = list.length; i--;) + map[list[i]] = true; + return map; +} + +// #ifdef MP-WEIXIN +if (wx.canIUse('editor')) { + cfg.blockTags.pre = void 0; + cfg.ignoreTags.rp = true; + Object.assign(cfg.richOnlyTags, makeMap('bdi,bdo,caption,rt,ruby')); + Object.assign(cfg.trustTags, makeMap('bdi,bdo,caption,pre,rt,ruby')); +} +// #endif + +// #ifdef APP-PLUS +cfg.ignoreTags.iframe = void 0; +Object.assign(cfg.trustTags, makeMap('embed,iframe')); +// #endif + +module.exports = cfg; diff --git a/fuintUniapp/components/jyf-parser/libs/handler.wxs b/fuintUniapp/components/jyf-parser/libs/handler.wxs new file mode 100644 index 0000000..fa0d252 --- /dev/null +++ b/fuintUniapp/components/jyf-parser/libs/handler.wxs @@ -0,0 +1,22 @@ +var inline = { + abbr: 1, + b: 1, + big: 1, + code: 1, + del: 1, + em: 1, + i: 1, + ins: 1, + label: 1, + q: 1, + small: 1, + span: 1, + strong: 1, + sub: 1, + sup: 1 +} +module.exports = { + use: function(item) { + return !item.c && !inline[item.name] && (item.attrs.style || '').indexOf('display:inline') == -1 + } +} diff --git a/fuintUniapp/components/jyf-parser/libs/trees.vue b/fuintUniapp/components/jyf-parser/libs/trees.vue new file mode 100644 index 0000000..5101cae --- /dev/null +++ b/fuintUniapp/components/jyf-parser/libs/trees.vue @@ -0,0 +1,506 @@ +