From f50c881079e17512c19cdd2d914d8a5128a13352 Mon Sep 17 00:00:00 2001 From: dingzhiwei Date: Wed, 9 Jun 2021 19:53:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96jeepay-ui=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 55 ++ LICENSE | 165 ++++ README.md | 154 +++- jeepay-ui-cashier/.env | 3 + jeepay-ui-cashier/.env.development | 3 + jeepay-ui-cashier/.gitignore | 23 + jeepay-ui-cashier/.postcssrc.js | 21 + jeepay-ui-cashier/README.md | 24 + jeepay-ui-cashier/babel.config.js | 5 + jeepay-ui-cashier/package.json | 49 ++ jeepay-ui-cashier/public/favicon.ico | Bin 0 -> 4286 bytes jeepay-ui-cashier/public/index.html | 17 + jeepay-ui-cashier/src/App.vue | 28 + jeepay-ui-cashier/src/api/api.js | 58 ++ jeepay-ui-cashier/src/assets/icon/S.svg | 1 + jeepay-ui-cashier/src/assets/icon/error.svg | 1 + jeepay-ui-cashier/src/assets/icon/wx.svg | 1 + jeepay-ui-cashier/src/assets/images/empty.svg | 1 + .../src/assets/images/loading.gif | Bin 0 -> 1787 bytes jeepay-ui-cashier/src/assets/images/ysf.jpg | Bin 0 -> 41053 bytes jeepay-ui-cashier/src/assets/images/zfb.jpeg | Bin 0 -> 19758 bytes .../src/assets/wx-zt/WeChatSansSS-Bold.ttf | Bin 0 -> 11908 bytes .../src/assets/wx-zt/WeChatSansSS-Light.ttf | Bin 0 -> 12384 bytes .../src/assets/wx-zt/WeChatSansSS-Medium.ttf | Bin 0 -> 12020 bytes .../src/assets/wx-zt/WeChatSansSS-Regular.ttf | Bin 0 -> 12220 bytes .../src/assets/wx-zt/WeChatSansStd-Bold.ttf | Bin 0 -> 12164 bytes .../src/assets/wx-zt/WeChatSansStd-Light.ttf | Bin 0 -> 12472 bytes .../src/assets/wx-zt/WeChatSansStd-Medium.ttf | Bin 0 -> 12240 bytes .../assets/wx-zt/WeChatSansStd-Regular.ttf | Bin 0 -> 12452 bytes jeepay-ui-cashier/src/config/index.js | 24 + jeepay-ui-cashier/src/config/rem.js | 15 + jeepay-ui-cashier/src/http/HttpRequest.js | 81 ++ jeepay-ui-cashier/src/http/request.js | 4 + jeepay-ui-cashier/src/main.js | 57 ++ jeepay-ui-cashier/src/router/index.js | 42 + jeepay-ui-cashier/src/utils/channelUserId.js | 19 + jeepay-ui-cashier/src/utils/wayCode.js | 36 + jeepay-ui-cashier/src/views/Cashier.vue | 15 + jeepay-ui-cashier/src/views/Error.vue | 38 + jeepay-ui-cashier/src/views/Hub.vue | 61 ++ .../src/views/Oauth2Callback.vue | 56 ++ jeepay-ui-cashier/src/views/dialog/dialog.vue | 133 +++ jeepay-ui-cashier/src/views/dialog/index.js | 39 + .../src/views/keyboard/keyboard.vue | 374 +++++++++ jeepay-ui-cashier/src/views/payway/Alipay.vue | 149 ++++ jeepay-ui-cashier/src/views/payway/Wxpay.vue | 203 +++++ jeepay-ui-cashier/src/views/payway/Ysfpay.vue | 108 +++ jeepay-ui-cashier/src/views/payway/pay.css | 323 ++++++++ jeepay-ui-cashier/vue.config.js | 20 + jeepay-ui-manager/.browserslistrc | 3 + jeepay-ui-manager/.env | 4 + jeepay-ui-manager/.env.development | 4 + jeepay-ui-manager/.eslintrc.js | 100 +++ jeepay-ui-manager/babel.config.js | 37 + jeepay-ui-manager/package.json | 69 ++ jeepay-ui-manager/postcss.config.js | 5 + jeepay-ui-manager/public/imgs/defava_f.png | Bin 0 -> 6113 bytes jeepay-ui-manager/public/imgs/defava_m.png | Bin 0 -> 6077 bytes jeepay-ui-manager/public/imgs/favicon.ico | Bin 0 -> 4286 bytes jeepay-ui-manager/public/imgs/logo.svg | 1 + jeepay-ui-manager/public/index.html | 36 + jeepay-ui-manager/src/App.vue | 31 + jeepay-ui-manager/src/api/login.js | 35 + jeepay-ui-manager/src/api/manage.js | 275 +++++++ jeepay-ui-manager/src/assets/logo-j.svg | 18 + jeepay-ui-manager/src/assets/logo.svg | 1 + jeepay-ui-manager/src/assets/styles/color.css | 0 .../src/assets/styles/color.less | 17 + jeepay-ui-manager/src/assets/svg/403.svg | 1 + jeepay-ui-manager/src/assets/svg/404.svg | 1 + jeepay-ui-manager/src/assets/svg/500.svg | 1 + .../src/assets/svg/add-icon-hover.svg | 1 + jeepay-ui-manager/src/assets/svg/add-icon.svg | 1 + .../src/assets/svg/background.svg | 1 + .../src/assets/svg/backgroundold.svg | 69 ++ jeepay-ui-manager/src/assets/svg/code.svg | 1 + jeepay-ui-manager/src/assets/svg/empty.svg | 1 + jeepay-ui-manager/src/assets/svg/jeepay.svg | 1 + jeepay-ui-manager/src/assets/svg/lock.svg | 1 + .../src/assets/svg/mini-logo.svg | 1 + jeepay-ui-manager/src/assets/svg/more.svg | 1 + jeepay-ui-manager/src/assets/svg/operate.svg | 1 + .../src/assets/svg/scroll_down.svg | 1 + .../src/assets/svg/scroll_left.svg | 1 + .../src/assets/svg/scroll_right.svg | 1 + .../src/assets/svg/scroll_up.svg | 1 + .../src/assets/svg/select-code.svg | 1 + .../src/assets/svg/select-lock.svg | 1 + .../src/assets/svg/select-user.svg | 1 + jeepay-ui-manager/src/assets/svg/user.svg | 1 + .../src/components/GlobalFooter/index.vue | 20 + .../GlobalHeader/AvatarDropdown.vue | 74 ++ .../components/GlobalHeader/RightContent.vue | 55 ++ .../src/components/GlobalLoad/GlobalLoad.vue | 30 + .../src/components/JeepayCard/JeepayCard.vue | 123 +++ .../components/JeepayTable/JeepayTable.vue | 119 +++ .../JeepayTable/JeepayTableColState.vue | 57 ++ .../JeepayTable/JeepayTableColumns.vue | 43 + .../components/JeepayTextUp/JeepayTextUp.vue | 121 +++ .../components/JeepayUpload/JeepayUpload.vue | 86 ++ .../src/components/NProgress/nprogress.less | 74 ++ jeepay-ui-manager/src/config/appConfig.js | 36 + jeepay-ui-manager/src/core/bootstrap.js | 5 + jeepay-ui-manager/src/core/lazy_use.js | 115 +++ jeepay-ui-manager/src/core/use.js | 20 + jeepay-ui-manager/src/global.less | 372 +++++++++ jeepay-ui-manager/src/http/HttpRequest.js | 117 +++ jeepay-ui-manager/src/http/request.js | 4 + .../src/layouts/BasicLayout.less | 59 ++ jeepay-ui-manager/src/layouts/BasicLayout.vue | 158 ++++ jeepay-ui-manager/src/layouts/BlankLayout.vue | 16 + jeepay-ui-manager/src/layouts/PageView.vue | 12 + jeepay-ui-manager/src/layouts/RouteView.vue | 32 + jeepay-ui-manager/src/layouts/UserLayout.vue | 179 ++++ jeepay-ui-manager/src/layouts/index.js | 7 + jeepay-ui-manager/src/main.js | 43 + jeepay-ui-manager/src/permission.js | 63 ++ .../src/router/generator-routers.js | 136 +++ jeepay-ui-manager/src/router/index.js | 29 + jeepay-ui-manager/src/store/index.js | 32 + .../src/store/modules/async-router.js | 27 + jeepay-ui-manager/src/store/modules/user.js | 78 ++ jeepay-ui-manager/src/utils/domUtil.js | 17 + jeepay-ui-manager/src/utils/filter.js | 20 + jeepay-ui-manager/src/utils/infoBox.js | 33 + .../src/utils/jeepayStorageWrapper.js | 34 + jeepay-ui-manager/src/utils/screenLog.js | 18 + jeepay-ui-manager/src/utils/util.js | 12 + jeepay-ui-manager/src/utils/utils.less | 50 ++ .../src/views/current/AvatarModal.vue | 202 +++++ .../src/views/current/UserinfoPage.vue | 265 ++++++ .../src/views/dashboard/Analysis.vue | 772 ++++++++++++++++++ .../src/views/dashboard/empty.vue | 24 + .../src/views/dashboard/index.css | 162 ++++ .../src/views/dashboard/index.less | 167 ++++ jeepay-ui-manager/src/views/ent/AddOrEdit.vue | 105 +++ jeepay-ui-manager/src/views/ent/EntPage.vue | 105 +++ jeepay-ui-manager/src/views/exception/403.vue | 22 + jeepay-ui-manager/src/views/exception/404.vue | 22 + jeepay-ui-manager/src/views/exception/500.vue | 22 + jeepay-ui-manager/src/views/isv/AddOrEdit.vue | 174 ++++ jeepay-ui-manager/src/views/isv/IsvList.vue | 118 +++ .../src/views/isv/IsvPayIfConfigList.vue | 323 ++++++++ jeepay-ui-manager/src/views/mch/AddOrEdit.vue | 272 ++++++ jeepay-ui-manager/src/views/mch/Detail.vue | 163 ++++ jeepay-ui-manager/src/views/mch/MchList.vue | 144 ++++ .../src/views/mch/MchPayConfigAddOrEdit.vue | 268 ++++++ .../src/views/mch/MchPayIfConfigList.vue | 246 ++++++ .../src/views/mch/MchPayPassageAddOrEdit.vue | 219 +++++ .../src/views/order/notify/MchNotifyList.vue | 263 ++++++ .../src/views/order/pay/PayOrderList.vue | 393 +++++++++ .../views/order/refund/RefundOrderList.vue | 389 +++++++++ .../views/payconfig/payIfDefine/AddOrEdit.vue | 255 ++++++ .../src/views/payconfig/payIfDefine/List.vue | 127 +++ .../src/views/payconfig/payWay/AddOrEdit.vue | 80 ++ .../src/views/payconfig/payWay/List.vue | 114 +++ jeepay-ui-manager/src/views/role/Add.vue | 63 ++ .../src/views/role/AddOrEdit.vue | 105 +++ jeepay-ui-manager/src/views/role/RoleDist.vue | 100 +++ jeepay-ui-manager/src/views/role/RolePage.vue | 123 +++ .../src/views/sys/config/SysConfig.vue | 79 ++ .../src/views/sys/log/SysLog.vue | 260 ++++++ .../src/views/sysuser/AddOrEdit.vue | 158 ++++ .../src/views/sysuser/RoleDist.vue | 101 +++ .../src/views/sysuser/SysUserPage.vue | 142 ++++ jeepay-ui-manager/src/views/user/Login.vue | 217 +++++ jeepay-ui-manager/tests/unit/.eslintrc.js | 5 + jeepay-ui-manager/vue.config.js | 127 +++ jeepay-ui-merchant/.browserslistrc | 3 + jeepay-ui-merchant/.env | 4 + jeepay-ui-merchant/.env.development | 4 + jeepay-ui-merchant/.eslintrc.js | 100 +++ jeepay-ui-merchant/babel.config.js | 28 + jeepay-ui-merchant/package.json | 71 ++ jeepay-ui-merchant/postcss.config.js | 5 + jeepay-ui-merchant/public/imgs/defava_f.png | Bin 0 -> 6113 bytes jeepay-ui-merchant/public/imgs/defava_m.png | Bin 0 -> 6077 bytes jeepay-ui-merchant/public/imgs/favicon.ico | Bin 0 -> 4286 bytes jeepay-ui-merchant/public/imgs/logo.svg | 1 + jeepay-ui-merchant/public/index.html | 36 + jeepay-ui-merchant/src/App.vue | 31 + jeepay-ui-merchant/src/api/login.js | 35 + jeepay-ui-merchant/src/api/manage.js | 259 ++++++ .../src/assets/images/background.png | Bin 0 -> 267104 bytes jeepay-ui-merchant/src/assets/logo-j.svg | 18 + jeepay-ui-merchant/src/assets/logo.svg | 1 + .../src/assets/styles/color.css | 0 .../src/assets/styles/color.less | 17 + jeepay-ui-merchant/src/assets/svg/403.svg | 1 + jeepay-ui-merchant/src/assets/svg/404.svg | 1 + jeepay-ui-merchant/src/assets/svg/500.svg | 1 + .../src/assets/svg/add-icon.svg | 1 + .../src/assets/svg/background.svg | 1 + .../src/assets/svg/backgroundold.svg | 69 ++ jeepay-ui-merchant/src/assets/svg/code.svg | 1 + jeepay-ui-merchant/src/assets/svg/empty.svg | 1 + jeepay-ui-merchant/src/assets/svg/jeepay.svg | 1 + jeepay-ui-merchant/src/assets/svg/lock.svg | 1 + .../src/assets/svg/mini-logo.svg | 1 + jeepay-ui-merchant/src/assets/svg/more.svg | 1 + jeepay-ui-merchant/src/assets/svg/operate.svg | 1 + .../src/assets/svg/scroll_down.svg | 1 + .../src/assets/svg/scroll_left.svg | 1 + .../src/assets/svg/scroll_right.svg | 1 + .../src/assets/svg/scroll_up.svg | 1 + .../src/assets/svg/select-code.svg | 1 + .../src/assets/svg/select-lock.svg | 1 + .../src/assets/svg/select-user.svg | 1 + jeepay-ui-merchant/src/assets/svg/user.svg | 1 + .../src/components/GlobalFooter/index.vue | 20 + .../GlobalHeader/AvatarDropdown.vue | 71 ++ .../components/GlobalHeader/RightContent.vue | 55 ++ .../src/components/GlobalLoad/GlobalLoad.vue | 30 + .../src/components/JeepayCard/JeepayCard.vue | 85 ++ .../components/JeepayTable/JeepayTable.vue | 119 +++ .../JeepayTable/JeepayTableColState.vue | 57 ++ .../JeepayTable/JeepayTableColumns.vue | 42 + .../components/JeepayTextUp/JeepayTextUp.vue | 126 +++ .../components/JeepayUpload/JeepayUpload.vue | 79 ++ .../src/components/NProgress/nprogress.less | 74 ++ jeepay-ui-merchant/src/config/appConfig.js | 31 + jeepay-ui-merchant/src/core/bootstrap.js | 6 + jeepay-ui-merchant/src/core/lazy_use.js | 115 +++ jeepay-ui-merchant/src/core/use.js | 20 + jeepay-ui-merchant/src/global.less | 375 +++++++++ jeepay-ui-merchant/src/http/HttpRequest.js | 116 +++ jeepay-ui-merchant/src/http/request.js | 4 + .../src/layouts/BasicLayout.less | 59 ++ .../src/layouts/BasicLayout.vue | 150 ++++ .../src/layouts/BlankLayout.vue | 16 + jeepay-ui-merchant/src/layouts/PageView.vue | 12 + jeepay-ui-merchant/src/layouts/RouteView.vue | 32 + jeepay-ui-merchant/src/layouts/UserLayout.vue | 179 ++++ jeepay-ui-merchant/src/layouts/index.js | 7 + jeepay-ui-merchant/src/main.js | 43 + jeepay-ui-merchant/src/permission.js | 65 ++ .../src/router/generator-routers.js | 139 ++++ jeepay-ui-merchant/src/router/index.js | 29 + jeepay-ui-merchant/src/store/index.js | 29 + .../src/store/modules/async-router.js | 27 + jeepay-ui-merchant/src/store/modules/user.js | 75 ++ jeepay-ui-merchant/src/utils/domUtil.js | 17 + jeepay-ui-merchant/src/utils/filter.js | 20 + jeepay-ui-merchant/src/utils/infoBox.js | 33 + .../src/utils/jeepayStorageWrapper.js | 34 + jeepay-ui-merchant/src/utils/screenLog.js | 18 + jeepay-ui-merchant/src/utils/util.js | 12 + jeepay-ui-merchant/src/utils/utils.less | 50 ++ .../src/views/current/AvatarModal.vue | 202 +++++ .../src/views/current/UserinfoPage.vue | 253 ++++++ .../src/views/dashboard/Analysis.vue | 749 +++++++++++++++++ .../src/views/dashboard/Workplace.less | 107 +++ .../src/views/dashboard/empty.vue | 24 + .../src/views/dashboard/index.css | 159 ++++ .../src/views/dashboard/index.less | 165 ++++ .../src/views/exception/403.vue | 22 + .../src/views/exception/404.vue | 22 + .../src/views/exception/500.vue | 22 + .../src/views/order/pay/PayOrderList.vue | 367 +++++++++ .../views/order/refund/RefundOrderList.vue | 375 +++++++++ .../src/views/pay/MchPayPassageAddOrEdit.vue | 194 +++++ .../src/views/pay/PayConfigList.vue | 301 +++++++ .../src/views/pay/PayPassageList.vue | 95 +++ .../src/views/role/AddOrEdit.vue | 105 +++ .../src/views/role/RoleDist.vue | 100 +++ .../src/views/role/RolePage.vue | 124 +++ .../src/views/sysuser/AddOrEdit.vue | 158 ++++ .../src/views/sysuser/RoleDist.vue | 101 +++ .../src/views/sysuser/SysUserPage.vue | 146 ++++ jeepay-ui-merchant/src/views/user/Login.vue | 224 +++++ jeepay-ui-merchant/tests/unit/.eslintrc.js | 5 + jeepay-ui-merchant/vue.config.js | 130 +++ 272 files changed, 19875 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 jeepay-ui-cashier/.env create mode 100644 jeepay-ui-cashier/.env.development create mode 100644 jeepay-ui-cashier/.gitignore create mode 100644 jeepay-ui-cashier/.postcssrc.js create mode 100644 jeepay-ui-cashier/README.md create mode 100644 jeepay-ui-cashier/babel.config.js create mode 100644 jeepay-ui-cashier/package.json create mode 100644 jeepay-ui-cashier/public/favicon.ico create mode 100644 jeepay-ui-cashier/public/index.html create mode 100644 jeepay-ui-cashier/src/App.vue create mode 100644 jeepay-ui-cashier/src/api/api.js create mode 100644 jeepay-ui-cashier/src/assets/icon/S.svg create mode 100644 jeepay-ui-cashier/src/assets/icon/error.svg create mode 100644 jeepay-ui-cashier/src/assets/icon/wx.svg create mode 100644 jeepay-ui-cashier/src/assets/images/empty.svg create mode 100644 jeepay-ui-cashier/src/assets/images/loading.gif create mode 100644 jeepay-ui-cashier/src/assets/images/ysf.jpg create mode 100644 jeepay-ui-cashier/src/assets/images/zfb.jpeg create mode 100644 jeepay-ui-cashier/src/assets/wx-zt/WeChatSansSS-Bold.ttf create mode 100644 jeepay-ui-cashier/src/assets/wx-zt/WeChatSansSS-Light.ttf create mode 100644 jeepay-ui-cashier/src/assets/wx-zt/WeChatSansSS-Medium.ttf create mode 100644 jeepay-ui-cashier/src/assets/wx-zt/WeChatSansSS-Regular.ttf create mode 100644 jeepay-ui-cashier/src/assets/wx-zt/WeChatSansStd-Bold.ttf create mode 100644 jeepay-ui-cashier/src/assets/wx-zt/WeChatSansStd-Light.ttf create mode 100644 jeepay-ui-cashier/src/assets/wx-zt/WeChatSansStd-Medium.ttf create mode 100644 jeepay-ui-cashier/src/assets/wx-zt/WeChatSansStd-Regular.ttf create mode 100644 jeepay-ui-cashier/src/config/index.js create mode 100644 jeepay-ui-cashier/src/config/rem.js create mode 100644 jeepay-ui-cashier/src/http/HttpRequest.js create mode 100644 jeepay-ui-cashier/src/http/request.js create mode 100644 jeepay-ui-cashier/src/main.js create mode 100644 jeepay-ui-cashier/src/router/index.js create mode 100644 jeepay-ui-cashier/src/utils/channelUserId.js create mode 100644 jeepay-ui-cashier/src/utils/wayCode.js create mode 100644 jeepay-ui-cashier/src/views/Cashier.vue create mode 100644 jeepay-ui-cashier/src/views/Error.vue create mode 100644 jeepay-ui-cashier/src/views/Hub.vue create mode 100644 jeepay-ui-cashier/src/views/Oauth2Callback.vue create mode 100644 jeepay-ui-cashier/src/views/dialog/dialog.vue create mode 100644 jeepay-ui-cashier/src/views/dialog/index.js create mode 100644 jeepay-ui-cashier/src/views/keyboard/keyboard.vue create mode 100644 jeepay-ui-cashier/src/views/payway/Alipay.vue create mode 100644 jeepay-ui-cashier/src/views/payway/Wxpay.vue create mode 100644 jeepay-ui-cashier/src/views/payway/Ysfpay.vue create mode 100644 jeepay-ui-cashier/src/views/payway/pay.css create mode 100644 jeepay-ui-cashier/vue.config.js create mode 100644 jeepay-ui-manager/.browserslistrc create mode 100644 jeepay-ui-manager/.env create mode 100644 jeepay-ui-manager/.env.development create mode 100644 jeepay-ui-manager/.eslintrc.js create mode 100644 jeepay-ui-manager/babel.config.js create mode 100644 jeepay-ui-manager/package.json create mode 100644 jeepay-ui-manager/postcss.config.js create mode 100644 jeepay-ui-manager/public/imgs/defava_f.png create mode 100644 jeepay-ui-manager/public/imgs/defava_m.png create mode 100644 jeepay-ui-manager/public/imgs/favicon.ico create mode 100644 jeepay-ui-manager/public/imgs/logo.svg create mode 100644 jeepay-ui-manager/public/index.html create mode 100644 jeepay-ui-manager/src/App.vue create mode 100644 jeepay-ui-manager/src/api/login.js create mode 100644 jeepay-ui-manager/src/api/manage.js create mode 100644 jeepay-ui-manager/src/assets/logo-j.svg create mode 100644 jeepay-ui-manager/src/assets/logo.svg create mode 100644 jeepay-ui-manager/src/assets/styles/color.css create mode 100644 jeepay-ui-manager/src/assets/styles/color.less create mode 100644 jeepay-ui-manager/src/assets/svg/403.svg create mode 100644 jeepay-ui-manager/src/assets/svg/404.svg create mode 100644 jeepay-ui-manager/src/assets/svg/500.svg create mode 100644 jeepay-ui-manager/src/assets/svg/add-icon-hover.svg create mode 100644 jeepay-ui-manager/src/assets/svg/add-icon.svg create mode 100644 jeepay-ui-manager/src/assets/svg/background.svg create mode 100644 jeepay-ui-manager/src/assets/svg/backgroundold.svg create mode 100644 jeepay-ui-manager/src/assets/svg/code.svg create mode 100644 jeepay-ui-manager/src/assets/svg/empty.svg create mode 100644 jeepay-ui-manager/src/assets/svg/jeepay.svg create mode 100644 jeepay-ui-manager/src/assets/svg/lock.svg create mode 100644 jeepay-ui-manager/src/assets/svg/mini-logo.svg create mode 100644 jeepay-ui-manager/src/assets/svg/more.svg create mode 100644 jeepay-ui-manager/src/assets/svg/operate.svg create mode 100644 jeepay-ui-manager/src/assets/svg/scroll_down.svg create mode 100644 jeepay-ui-manager/src/assets/svg/scroll_left.svg create mode 100644 jeepay-ui-manager/src/assets/svg/scroll_right.svg create mode 100644 jeepay-ui-manager/src/assets/svg/scroll_up.svg create mode 100644 jeepay-ui-manager/src/assets/svg/select-code.svg create mode 100644 jeepay-ui-manager/src/assets/svg/select-lock.svg create mode 100644 jeepay-ui-manager/src/assets/svg/select-user.svg create mode 100644 jeepay-ui-manager/src/assets/svg/user.svg create mode 100644 jeepay-ui-manager/src/components/GlobalFooter/index.vue create mode 100644 jeepay-ui-manager/src/components/GlobalHeader/AvatarDropdown.vue create mode 100644 jeepay-ui-manager/src/components/GlobalHeader/RightContent.vue create mode 100644 jeepay-ui-manager/src/components/GlobalLoad/GlobalLoad.vue create mode 100644 jeepay-ui-manager/src/components/JeepayCard/JeepayCard.vue create mode 100644 jeepay-ui-manager/src/components/JeepayTable/JeepayTable.vue create mode 100644 jeepay-ui-manager/src/components/JeepayTable/JeepayTableColState.vue create mode 100644 jeepay-ui-manager/src/components/JeepayTable/JeepayTableColumns.vue create mode 100644 jeepay-ui-manager/src/components/JeepayTextUp/JeepayTextUp.vue create mode 100644 jeepay-ui-manager/src/components/JeepayUpload/JeepayUpload.vue create mode 100644 jeepay-ui-manager/src/components/NProgress/nprogress.less create mode 100644 jeepay-ui-manager/src/config/appConfig.js create mode 100644 jeepay-ui-manager/src/core/bootstrap.js create mode 100644 jeepay-ui-manager/src/core/lazy_use.js create mode 100644 jeepay-ui-manager/src/core/use.js create mode 100644 jeepay-ui-manager/src/global.less create mode 100644 jeepay-ui-manager/src/http/HttpRequest.js create mode 100644 jeepay-ui-manager/src/http/request.js create mode 100644 jeepay-ui-manager/src/layouts/BasicLayout.less create mode 100644 jeepay-ui-manager/src/layouts/BasicLayout.vue create mode 100644 jeepay-ui-manager/src/layouts/BlankLayout.vue create mode 100644 jeepay-ui-manager/src/layouts/PageView.vue create mode 100644 jeepay-ui-manager/src/layouts/RouteView.vue create mode 100644 jeepay-ui-manager/src/layouts/UserLayout.vue create mode 100644 jeepay-ui-manager/src/layouts/index.js create mode 100644 jeepay-ui-manager/src/main.js create mode 100644 jeepay-ui-manager/src/permission.js create mode 100644 jeepay-ui-manager/src/router/generator-routers.js create mode 100644 jeepay-ui-manager/src/router/index.js create mode 100644 jeepay-ui-manager/src/store/index.js create mode 100644 jeepay-ui-manager/src/store/modules/async-router.js create mode 100644 jeepay-ui-manager/src/store/modules/user.js create mode 100644 jeepay-ui-manager/src/utils/domUtil.js create mode 100644 jeepay-ui-manager/src/utils/filter.js create mode 100644 jeepay-ui-manager/src/utils/infoBox.js create mode 100644 jeepay-ui-manager/src/utils/jeepayStorageWrapper.js create mode 100644 jeepay-ui-manager/src/utils/screenLog.js create mode 100644 jeepay-ui-manager/src/utils/util.js create mode 100644 jeepay-ui-manager/src/utils/utils.less create mode 100644 jeepay-ui-manager/src/views/current/AvatarModal.vue create mode 100644 jeepay-ui-manager/src/views/current/UserinfoPage.vue create mode 100644 jeepay-ui-manager/src/views/dashboard/Analysis.vue create mode 100644 jeepay-ui-manager/src/views/dashboard/empty.vue create mode 100644 jeepay-ui-manager/src/views/dashboard/index.css create mode 100644 jeepay-ui-manager/src/views/dashboard/index.less create mode 100644 jeepay-ui-manager/src/views/ent/AddOrEdit.vue create mode 100644 jeepay-ui-manager/src/views/ent/EntPage.vue create mode 100644 jeepay-ui-manager/src/views/exception/403.vue create mode 100644 jeepay-ui-manager/src/views/exception/404.vue create mode 100644 jeepay-ui-manager/src/views/exception/500.vue create mode 100644 jeepay-ui-manager/src/views/isv/AddOrEdit.vue create mode 100644 jeepay-ui-manager/src/views/isv/IsvList.vue create mode 100644 jeepay-ui-manager/src/views/isv/IsvPayIfConfigList.vue create mode 100644 jeepay-ui-manager/src/views/mch/AddOrEdit.vue create mode 100644 jeepay-ui-manager/src/views/mch/Detail.vue create mode 100644 jeepay-ui-manager/src/views/mch/MchList.vue create mode 100644 jeepay-ui-manager/src/views/mch/MchPayConfigAddOrEdit.vue create mode 100644 jeepay-ui-manager/src/views/mch/MchPayIfConfigList.vue create mode 100644 jeepay-ui-manager/src/views/mch/MchPayPassageAddOrEdit.vue create mode 100644 jeepay-ui-manager/src/views/order/notify/MchNotifyList.vue create mode 100644 jeepay-ui-manager/src/views/order/pay/PayOrderList.vue create mode 100644 jeepay-ui-manager/src/views/order/refund/RefundOrderList.vue create mode 100644 jeepay-ui-manager/src/views/payconfig/payIfDefine/AddOrEdit.vue create mode 100644 jeepay-ui-manager/src/views/payconfig/payIfDefine/List.vue create mode 100644 jeepay-ui-manager/src/views/payconfig/payWay/AddOrEdit.vue create mode 100644 jeepay-ui-manager/src/views/payconfig/payWay/List.vue create mode 100644 jeepay-ui-manager/src/views/role/Add.vue create mode 100644 jeepay-ui-manager/src/views/role/AddOrEdit.vue create mode 100644 jeepay-ui-manager/src/views/role/RoleDist.vue create mode 100644 jeepay-ui-manager/src/views/role/RolePage.vue create mode 100644 jeepay-ui-manager/src/views/sys/config/SysConfig.vue create mode 100644 jeepay-ui-manager/src/views/sys/log/SysLog.vue create mode 100644 jeepay-ui-manager/src/views/sysuser/AddOrEdit.vue create mode 100644 jeepay-ui-manager/src/views/sysuser/RoleDist.vue create mode 100644 jeepay-ui-manager/src/views/sysuser/SysUserPage.vue create mode 100644 jeepay-ui-manager/src/views/user/Login.vue create mode 100644 jeepay-ui-manager/tests/unit/.eslintrc.js create mode 100644 jeepay-ui-manager/vue.config.js create mode 100644 jeepay-ui-merchant/.browserslistrc create mode 100644 jeepay-ui-merchant/.env create mode 100644 jeepay-ui-merchant/.env.development create mode 100644 jeepay-ui-merchant/.eslintrc.js create mode 100644 jeepay-ui-merchant/babel.config.js create mode 100644 jeepay-ui-merchant/package.json create mode 100644 jeepay-ui-merchant/postcss.config.js create mode 100644 jeepay-ui-merchant/public/imgs/defava_f.png create mode 100644 jeepay-ui-merchant/public/imgs/defava_m.png create mode 100644 jeepay-ui-merchant/public/imgs/favicon.ico create mode 100644 jeepay-ui-merchant/public/imgs/logo.svg create mode 100644 jeepay-ui-merchant/public/index.html create mode 100644 jeepay-ui-merchant/src/App.vue create mode 100644 jeepay-ui-merchant/src/api/login.js create mode 100644 jeepay-ui-merchant/src/api/manage.js create mode 100644 jeepay-ui-merchant/src/assets/images/background.png create mode 100644 jeepay-ui-merchant/src/assets/logo-j.svg create mode 100644 jeepay-ui-merchant/src/assets/logo.svg create mode 100644 jeepay-ui-merchant/src/assets/styles/color.css create mode 100644 jeepay-ui-merchant/src/assets/styles/color.less create mode 100644 jeepay-ui-merchant/src/assets/svg/403.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/404.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/500.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/add-icon.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/background.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/backgroundold.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/code.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/empty.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/jeepay.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/lock.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/mini-logo.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/more.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/operate.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/scroll_down.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/scroll_left.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/scroll_right.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/scroll_up.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/select-code.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/select-lock.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/select-user.svg create mode 100644 jeepay-ui-merchant/src/assets/svg/user.svg create mode 100644 jeepay-ui-merchant/src/components/GlobalFooter/index.vue create mode 100644 jeepay-ui-merchant/src/components/GlobalHeader/AvatarDropdown.vue create mode 100644 jeepay-ui-merchant/src/components/GlobalHeader/RightContent.vue create mode 100644 jeepay-ui-merchant/src/components/GlobalLoad/GlobalLoad.vue create mode 100644 jeepay-ui-merchant/src/components/JeepayCard/JeepayCard.vue create mode 100644 jeepay-ui-merchant/src/components/JeepayTable/JeepayTable.vue create mode 100644 jeepay-ui-merchant/src/components/JeepayTable/JeepayTableColState.vue create mode 100644 jeepay-ui-merchant/src/components/JeepayTable/JeepayTableColumns.vue create mode 100644 jeepay-ui-merchant/src/components/JeepayTextUp/JeepayTextUp.vue create mode 100644 jeepay-ui-merchant/src/components/JeepayUpload/JeepayUpload.vue create mode 100644 jeepay-ui-merchant/src/components/NProgress/nprogress.less create mode 100644 jeepay-ui-merchant/src/config/appConfig.js create mode 100644 jeepay-ui-merchant/src/core/bootstrap.js create mode 100644 jeepay-ui-merchant/src/core/lazy_use.js create mode 100644 jeepay-ui-merchant/src/core/use.js create mode 100644 jeepay-ui-merchant/src/global.less create mode 100644 jeepay-ui-merchant/src/http/HttpRequest.js create mode 100644 jeepay-ui-merchant/src/http/request.js create mode 100644 jeepay-ui-merchant/src/layouts/BasicLayout.less create mode 100644 jeepay-ui-merchant/src/layouts/BasicLayout.vue create mode 100644 jeepay-ui-merchant/src/layouts/BlankLayout.vue create mode 100644 jeepay-ui-merchant/src/layouts/PageView.vue create mode 100644 jeepay-ui-merchant/src/layouts/RouteView.vue create mode 100644 jeepay-ui-merchant/src/layouts/UserLayout.vue create mode 100644 jeepay-ui-merchant/src/layouts/index.js create mode 100644 jeepay-ui-merchant/src/main.js create mode 100644 jeepay-ui-merchant/src/permission.js create mode 100644 jeepay-ui-merchant/src/router/generator-routers.js create mode 100644 jeepay-ui-merchant/src/router/index.js create mode 100644 jeepay-ui-merchant/src/store/index.js create mode 100644 jeepay-ui-merchant/src/store/modules/async-router.js create mode 100644 jeepay-ui-merchant/src/store/modules/user.js create mode 100644 jeepay-ui-merchant/src/utils/domUtil.js create mode 100644 jeepay-ui-merchant/src/utils/filter.js create mode 100644 jeepay-ui-merchant/src/utils/infoBox.js create mode 100644 jeepay-ui-merchant/src/utils/jeepayStorageWrapper.js create mode 100644 jeepay-ui-merchant/src/utils/screenLog.js create mode 100644 jeepay-ui-merchant/src/utils/util.js create mode 100644 jeepay-ui-merchant/src/utils/utils.less create mode 100644 jeepay-ui-merchant/src/views/current/AvatarModal.vue create mode 100644 jeepay-ui-merchant/src/views/current/UserinfoPage.vue create mode 100644 jeepay-ui-merchant/src/views/dashboard/Analysis.vue create mode 100644 jeepay-ui-merchant/src/views/dashboard/Workplace.less create mode 100644 jeepay-ui-merchant/src/views/dashboard/empty.vue create mode 100644 jeepay-ui-merchant/src/views/dashboard/index.css create mode 100644 jeepay-ui-merchant/src/views/dashboard/index.less create mode 100644 jeepay-ui-merchant/src/views/exception/403.vue create mode 100644 jeepay-ui-merchant/src/views/exception/404.vue create mode 100644 jeepay-ui-merchant/src/views/exception/500.vue create mode 100644 jeepay-ui-merchant/src/views/order/pay/PayOrderList.vue create mode 100644 jeepay-ui-merchant/src/views/order/refund/RefundOrderList.vue create mode 100644 jeepay-ui-merchant/src/views/pay/MchPayPassageAddOrEdit.vue create mode 100644 jeepay-ui-merchant/src/views/pay/PayConfigList.vue create mode 100644 jeepay-ui-merchant/src/views/pay/PayPassageList.vue create mode 100644 jeepay-ui-merchant/src/views/role/AddOrEdit.vue create mode 100644 jeepay-ui-merchant/src/views/role/RoleDist.vue create mode 100644 jeepay-ui-merchant/src/views/role/RolePage.vue create mode 100644 jeepay-ui-merchant/src/views/sysuser/AddOrEdit.vue create mode 100644 jeepay-ui-merchant/src/views/sysuser/RoleDist.vue create mode 100644 jeepay-ui-merchant/src/views/sysuser/SysUserPage.vue create mode 100644 jeepay-ui-merchant/src/views/user/Login.vue create mode 100644 jeepay-ui-merchant/tests/unit/.eslintrc.js create mode 100644 jeepay-ui-merchant/vue.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a1187db --- /dev/null +++ b/.gitignore @@ -0,0 +1,55 @@ +# [ java 字节码 ] +*.class + +# [ 日志文件 ] +*.log + +# [ 打包压缩文件 ] +*.jar +*.war +*.zip +*.tar.gz +*.rar + +# [ java 虚拟机异常日志 see http://www.java.com/en/download/help/error_hotspot.xml ] +hs_err_pid* + +# [ 操作系统缓存和备份 ] +tmp/ +*.tmp +*.bak +*.swp +*~.nib + +# [ eclipse ] +.metadata +bin/ +.settings +.classpath +.project + +# [ IDEA ] +.idea/ +*.iml + +# [ MAVEN ] +target/ + +# [Jrebel] +rebel.xml + +# ################################################ 前端 ################### +# [npm包管理依赖] +node_modules/ + +# [dist目录] +dist/ + +# [HBuilderX 编译目录 ] +unpackage/ + +# [vscode IDE] +.vscode/ + +# [package-lock.json 无需提交 ] +package-lock.json \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3462706 --- /dev/null +++ b/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/README.md b/README.md index af95ef8..cfc8715 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,152 @@ -# jeepay-ui -jeepay对应的前端UI项目 +

+ +

+

+ 适合互联网企业使用的开源支付系统 +

+

+ 👉 https://www.jeepay.vip 👈 +

+ +

+ + + + + + + + + + + star + + + github star + +

+ +
+

+ + + +

+ +------------------------------------------------------------------------------- + +## 📚 项目介绍 + +Jeepay是一套适合互联网企业使用的开源支付系统,支持多渠道服务商和普通商户模式。已对接`微信支付`,`支付宝`,`云闪付`官方接口,支持聚合码支付。 + +Jeepay使用`Spring Boot`和`Ant Design Vue`开发,集成`Spring Security`实现权限管理功能,是一套非常实用的web开发框架。 + +### 🎁 名称的由来 + +Jeepay = Jee + pay,是由原XxPay支付系统作者带领团队开发,“Jee”是公司计全科技名称的表示,pay表示支付。中文名称为计全支付,释为:计出万全、支付安全,让支付更加方便安全。 + + +### 🍟 项目体验 + +- Jeepay支付流程体验:[https://www.jeequan.com/demo/jeepay_cashier.html](https://www.jeequan.com/demo/jeepay_cashier.html "Jeepay支付体验") +- Jeepay运营平台和商户系统演体验:[https://www.jeequan.com/doc/detail_84.html](https://www.jeequan.com/doc/detail_84.html "Jeepay支付系统体验") +- Jeepay项目文档:[https://www.jeepay.vip](https://www.jeepay.vip "Jeepay项目文档") + +### 🍎 项目特点 + +* 支持多渠道对接,支付网关自动路由 +* 已对接`微信`服务商和普通商户接口,支持`V2`和`V3`接口 +* 已对接`支付宝`服务商和普通商户接口,支持RSA和RSA2签名 +* 已对接`云闪付`服务商接口,可选择多家支付机构 +* 提供http形式接口,提供各语言的`sdk`实现,方便对接 +* 接口请求和响应数据采用签名机制,保证交易安全可靠 +* 系统安全,支持`分布式`部署,`高并发` +* 管理端包括`运营平台`和`商户系统` +* 管理平台操作界面简洁、易用 +* 支付平台到商户系统的订单通知使用MQ实现,保证了高可用,消息可达 +* 支付渠道的接口参数配置界面自动化生成 +* 使用`spring security`实现权限管理 +* 前后端分离架构,方便二次开发 +* 由原`XxPay`团队开发,有着多年支付系统开发经验 + +## 🥞 系统架构 + +> Jeepay计全支付系统架构图 + +![Jeepay系统架构图](https://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/jeepay_framework.png "Jeepay系统架构图") + +> 核心技术栈 + +| 软件名称 | 描述 | 版本 +|---|---|--- +|Jdk | Java环境 | 1.8 +|Spring Boot | 开发框架 | 2.4.5 +|Redis | 分布式缓存 | 3.2.8 或 高版本 +|MySQL | 数据库 | 5.7.X +|ActiveMQ | 消息中间件 | 5.15.8 或 高版本 +|[Ant Design Vue](https://www.antdv.com/docs/vue/introduce-cn/) | Ant Design的Vue实现,前端开发使用 | 2.1.2 +|[MyBatis-Plus](https://mp.baomidou.com/) | MyBatis增强工具 | 3.4.2 +|[WxJava](https://gitee.com/binary/weixin-java-tools) | 微新开发Java SDK | 4.0.0 +|[Hutool](https://www.hutool.cn/) | Java工具类库 | 5.6.6 + +> 项目结构 + +```lua +jeepay -- https://gitee.com/jeequan/jeepay + +jeepay-ui +├── jeepay-ui-manager -- 运营平台前端vue代码 +├── jeepay-ui-merchant -- 商户系统前端vue代码 +└── jeepay-ui-cashier -- 支付收银台vue代码 +``` + +> 开发部署 + +- 系统开发:[https://www.jeepay.vip/#/develop/dev_serv](https://www.jeepay.vip/#/develop/dev_serv) +- 通道对接:[https://www.jeepay.vip/#/develop/dev_channel](https://www.jeepay.vip/#/develop/dev_channel) +- 线上部署:[https://www.jeepay.vip/#/develop/deploy](https://www.jeepay.vip/#/develop/deploy) +- 接口文档:[https://www.jeepay.vip/#/interface/payment_api](https://www.jeepay.vip/#/interface/payment_api) + +## 🍿 功能模块 + +> Jeepay运营平台功能 + +![Jeepay运营平台功能](https://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/jeepay_mgr.png "Jeepay运营平台功能") + +> Jeepay商户系统功能 + +![Jeepay商户系统功能](https://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/jeepay_mch.png "Jeepay商户系统功能") + +## 🍯 系统截图 + +`以下截图是从实际已完成功能界面截取,截图时间为:2021-05-29 02:05` + +![Jeepay演示界面](http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/yanshi/001.png "Jeepay演示界面") + +![Jeepay演示界面](http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/yanshi/002.png "Jeepay演示界面") + +![Jeepay演示界面](http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/yanshi/005.png "Jeepay演示界面") + +![Jeepay演示界面](http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/yanshi/006.png "Jeepay演示界面") + +![Jeepay演示界面](http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/yanshi/009.png "Jeepay演示界面") + +![Jeepay演示界面](http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/yanshi/010.png "Jeepay演示界面") + +![Jeepay演示界面](http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/yanshi/011.png "Jeepay演示界面") + +![Jeepay演示界面](http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/yanshi/012.png "Jeepay演示界面") + +![Jeepay演示界面](http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/yanshi/013.png "Jeepay演示界面") + +![Jeepay演示界面](http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/yanshi/014.png "Jeepay演示界面") + +![Jeepay演示界面](http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/yanshi/015.png "Jeepay演示界面") + +![Jeepay演示界面](http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/yanshi/022.png "Jeepay演示界面") + +## 🥪 关于我们 +*** +微信扫描下面二维码,关注官方公众号:计全科技,获取更多精彩内容。 + +![计全科技公众号](http://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/jee-qrcode.jpg "计全科技公众号") \ No newline at end of file diff --git a/jeepay-ui-cashier/.env b/jeepay-ui-cashier/.env new file mode 100644 index 0000000..0deec75 --- /dev/null +++ b/jeepay-ui-cashier/.env @@ -0,0 +1,3 @@ +NODE_ENV=production +VUE_APP_BASE_URL=/ +VUE_APP_API_BASE_URL= \ No newline at end of file diff --git a/jeepay-ui-cashier/.env.development b/jeepay-ui-cashier/.env.development new file mode 100644 index 0000000..fe44d39 --- /dev/null +++ b/jeepay-ui-cashier/.env.development @@ -0,0 +1,3 @@ +NODE_ENV=development +VUE_APP_BASE_URL=/ +VUE_APP_API_BASE_URL=http://192.168.0.199:8030 \ No newline at end of file diff --git a/jeepay-ui-cashier/.gitignore b/jeepay-ui-cashier/.gitignore new file mode 100644 index 0000000..403adbc --- /dev/null +++ b/jeepay-ui-cashier/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules +/dist + + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/jeepay-ui-cashier/.postcssrc.js b/jeepay-ui-cashier/.postcssrc.js new file mode 100644 index 0000000..4abbaef --- /dev/null +++ b/jeepay-ui-cashier/.postcssrc.js @@ -0,0 +1,21 @@ +/* + * @Author: your name + * @Date: 2020-12-14 16:32:48 + * @LastEditors: 王会峰 + * @LastEditTime: 2020-12-24 16:02:58 + * @FilePath: \pay\.postcssrc.js + * @SendWord: 永无BUG vite⚡ + */ +// https://github.com/michael-ciniawsky/postcss-load-config + +module.exports = { + "plugins": { + "postcss-import": {}, + "postcss-url": {}, + // to edit target browsers: use "browserslist" field in package.json + "autoprefixer": {}, + "postcss-px2rem": { + "remUnit": 75 + } + } +} \ No newline at end of file diff --git a/jeepay-ui-cashier/README.md b/jeepay-ui-cashier/README.md new file mode 100644 index 0000000..fa0a278 --- /dev/null +++ b/jeepay-ui-cashier/README.md @@ -0,0 +1,24 @@ +# jeepay-ui-cashier + +## Project setup +``` +npm install +``` + +### Compiles and hot-reloads for development +``` +npm run serve +``` + +### Compiles and minifies for production +``` +npm run build +``` + +### Lints and fixes files +``` +npm run lint +``` + +### Customize configuration +See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/jeepay-ui-cashier/babel.config.js b/jeepay-ui-cashier/babel.config.js new file mode 100644 index 0000000..e955840 --- /dev/null +++ b/jeepay-ui-cashier/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/jeepay-ui-cashier/package.json b/jeepay-ui-cashier/package.json new file mode 100644 index 0000000..749f300 --- /dev/null +++ b/jeepay-ui-cashier/package.json @@ -0,0 +1,49 @@ +{ + "name": "jeepay-ui-cashier", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "amfe-flexible": "^2.2.1", + "axios": "^0.19.0", + "core-js": "^3.6.5", + "lib-flexible": "^0.3.2", + "postcss-px2rem": "^0.3.0", + "px2rem-loader": "^0.1.9", + "vue": "^2.6.11", + "vue-router": "^3.2.0" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "~4.5.0", + "@vue/cli-plugin-eslint": "~4.5.0", + "@vue/cli-plugin-router": "^4.5.13", + "@vue/cli-service": "~4.5.0", + "babel-eslint": "^10.1.0", + "eslint": "^6.7.2", + "eslint-plugin-vue": "^6.2.2", + "vue-template-compiler": "^2.6.11" + }, + "eslintConfig": { + "root": true, + "env": { + "node": true + }, + "extends": [ + "plugin:vue/essential", + "eslint:recommended" + ], + "parserOptions": { + "parser": "babel-eslint" + }, + "rules": {} + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ] +} diff --git a/jeepay-ui-cashier/public/favicon.ico b/jeepay-ui-cashier/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..cdce95c51a5f2d58a2aae069431b1fd3d8459998 GIT binary patch literal 4286 zcmeI0v2wyN3_z93z(|KSXIRSEv42oLAtdbWFLdkF=1w$r7;^FT z+KV}1M^W@-MTs#08GRND;BVO802Bc5Ktd{5lCZvQbWUqnnHQ{PUs%u3k@dX6kks=x z&6m`ZubtzM8N_mJ%*L^iF@)HxEAJkq4{faat<8q7Y3D6@{y4QmQ}=bzv4cCLPZ(fdEN=S#k3eb>Yxy8lWU%V{5qv=>ZWCujaE^C|DwDG!G;yW!_g t4D)Q+`wa6Y!whozDLo;XlH8L#k$jLqm%LjyqGz3U&5wOUe@pBE@*}0ffEfS) literal 0 HcmV?d00001 diff --git a/jeepay-ui-cashier/public/index.html b/jeepay-ui-cashier/public/index.html new file mode 100644 index 0000000..13853ea --- /dev/null +++ b/jeepay-ui-cashier/public/index.html @@ -0,0 +1,17 @@ + + + + + + + + Jeepay-收银台 + + + +
+ + + diff --git a/jeepay-ui-cashier/src/App.vue b/jeepay-ui-cashier/src/App.vue new file mode 100644 index 0000000..855c4d3 --- /dev/null +++ b/jeepay-ui-cashier/src/App.vue @@ -0,0 +1,28 @@ + + + diff --git a/jeepay-ui-cashier/src/api/api.js b/jeepay-ui-cashier/src/api/api.js new file mode 100644 index 0000000..4b68a1e --- /dev/null +++ b/jeepay-ui-cashier/src/api/api.js @@ -0,0 +1,58 @@ +import request from '@/http/request' +import wayCode from "@/utils/wayCode"; +import channelUserIdUtil from "@/utils/channelUserId"; +import config from '@/config' + +/** 获取url **/ +export function getRedirectUrl () { + return request.request({ + url: '/api/cashier/redirectUrl', + method: 'POST', + data: { wayCode: wayCode.getPayWay().wayCode, token: config.cacheToken } + }) +} + +/** 获取url **/ +export function getChannelUserId (redirectData) { + return request.request({ + url: '/api/cashier/channelUserId', + method: 'POST', + data: Object.assign({ wayCode: wayCode.getPayWay().wayCode, token: config.cacheToken }, redirectData) + }) +} + +/** 调起支付接口, 获取支付数据包 **/ +export function getPayPackage (amount) { + return request.request({ + url: '/api/cashier/pay', + method: 'POST', + data: { + wayCode: wayCode.getPayWay().wayCode, + token: config.cacheToken, + amount: amount, + channelUserId: channelUserIdUtil.getChannelUserId() + } + }) +} + +/** 调起支付接口, 获取订单信息 **/ +export function getPayOrderInfo () { + return request.request({ + url: '/api/cashier/payOrderInfo', + method: 'POST', + data: { + token: config.cacheToken + } + }) +} + +/** 取消订单 **/ +export function cancelPay () { + return request.request({ + url: '/api/cashier/cancelPay', + method: 'POST', + data: { + token: config.cacheToken + } + }) +} diff --git a/jeepay-ui-cashier/src/assets/icon/S.svg b/jeepay-ui-cashier/src/assets/icon/S.svg new file mode 100644 index 0000000..ce32df7 --- /dev/null +++ b/jeepay-ui-cashier/src/assets/icon/S.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-cashier/src/assets/icon/error.svg b/jeepay-ui-cashier/src/assets/icon/error.svg new file mode 100644 index 0000000..2085e42 --- /dev/null +++ b/jeepay-ui-cashier/src/assets/icon/error.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-cashier/src/assets/icon/wx.svg b/jeepay-ui-cashier/src/assets/icon/wx.svg new file mode 100644 index 0000000..213f4fa --- /dev/null +++ b/jeepay-ui-cashier/src/assets/icon/wx.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-cashier/src/assets/images/empty.svg b/jeepay-ui-cashier/src/assets/images/empty.svg new file mode 100644 index 0000000..757aaa2 --- /dev/null +++ b/jeepay-ui-cashier/src/assets/images/empty.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-cashier/src/assets/images/loading.gif b/jeepay-ui-cashier/src/assets/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..5bb90fd6a49107a321c35b9cee4a7b810314b51f GIT binary patch literal 1787 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±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 Z??a(r1$!O}RS5l|EVP4MXcxKdKLPr>&CLJ+ literal 0 HcmV?d00001 diff --git a/jeepay-ui-cashier/src/assets/wx-zt/WeChatSansSS-Regular.ttf b/jeepay-ui-cashier/src/assets/wx-zt/WeChatSansSS-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9a4b070fcfcedd1fe3fe91bee9bd29ab9acb9733 GIT binary patch literal 12220 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 literal 0 HcmV?d00001 diff --git a/jeepay-ui-cashier/src/assets/wx-zt/WeChatSansStd-Light.ttf b/jeepay-ui-cashier/src/assets/wx-zt/WeChatSansStd-Light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..30f1d27198ffc47d576163c7f2f4301062cdfd0a GIT binary patch literal 12472 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 literal 0 HcmV?d00001 diff --git a/jeepay-ui-cashier/src/assets/wx-zt/WeChatSansStd-Medium.ttf b/jeepay-ui-cashier/src/assets/wx-zt/WeChatSansStd-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..35d77976c01176696d482bf238e6e3918d6760ba GIT binary patch literal 12240 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 ADgXcg literal 0 HcmV?d00001 diff --git a/jeepay-ui-cashier/src/assets/wx-zt/WeChatSansStd-Regular.ttf b/jeepay-ui-cashier/src/assets/wx-zt/WeChatSansStd-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7dd4c31991a8b4f229e844d2309d42f407d9e761 GIT binary patch literal 12452 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 literal 0 HcmV?d00001 diff --git a/jeepay-ui-cashier/src/config/index.js b/jeepay-ui-cashier/src/config/index.js new file mode 100644 index 0000000..2284663 --- /dev/null +++ b/jeepay-ui-cashier/src/config/index.js @@ -0,0 +1,24 @@ +/* + * 全局定义信息 + * + * @author terrfly + * @site https://www.jeepay.vip + * @date 2021/5/8 07:18 + */ + +const errorPageRouteName = 'Error' //错误页面名称定义 +const passGuardRouteList = [errorPageRouteName] // 不进入路由守卫的name + +/** 定义支付方式 **/ +const payWay = { + WXPAY : {wayCode: "WX_JSAPI", routeName: "CashierWxpay"}, + ALIPAY : {wayCode: "ALI_JSAPI", routeName: "CashierAlipay"} +} + +export default { + errorPageRouteName: errorPageRouteName, + passGuardRouteList: passGuardRouteList, + urlTokenName: "jeepayToken", //URL传递的token名称 + payWay: payWay, + cacheToken: "" +} \ No newline at end of file diff --git a/jeepay-ui-cashier/src/config/rem.js b/jeepay-ui-cashier/src/config/rem.js new file mode 100644 index 0000000..9e7a8e3 --- /dev/null +++ b/jeepay-ui-cashier/src/config/rem.js @@ -0,0 +1,15 @@ +// 基准大小 +const baseSize = 32 +// 设置 rem 函数 +function setRem () { + // 当前页面宽度相对于 750 宽的缩放比例,可根据自己需要修改。 + const scale = document.documentElement.clientWidth / 750 + // 设置页面根节点字体大小 + document.documentElement.style.fontSize = (baseSize * Math.min(scale, 2)) + 'px' +} +// 初始化 +setRem() +// 改变窗口大小时重新设置 rem +window.onresize = function () { + setRem() +} \ No newline at end of file diff --git a/jeepay-ui-cashier/src/http/HttpRequest.js b/jeepay-ui-cashier/src/http/HttpRequest.js new file mode 100644 index 0000000..d14cc7e --- /dev/null +++ b/jeepay-ui-cashier/src/http/HttpRequest.js @@ -0,0 +1,81 @@ +/** + * Http请求包装对象 + * 参考: iview https://gitee.com/icarusion/iview-admin/blob/master/src/libs/axios.js + * + * @author terrfly + * @site https://www.jeepay.vip + * @date 2021/5/8 07:18 + */ + +import axios from 'axios' +class HttpRequest { + constructor (baseUrl = process.env.VUE_APP_API_BASE_URL) { + this.baseUrl = baseUrl + this.queue = {} // 发送队列, 格式为: {请求url: true}, 可以做一些验证之类 + } + // 基础配置信息 + baseConfig () { + const headers = {} + return { + baseURL: this.baseUrl, + headers: headers + } + } + destroy (url) { + delete this.queue[url] + } + interceptors (instance, url, showErrorMsg, showLoading) { + // 请求拦截 + instance.interceptors.request.use(config => { + // 添加全局的loading... + if (!Object.keys(this.queue).length && showLoading) { + //console.log("") + } + this.queue[url] = true + return config + }, error => { + return Promise.reject(error) + }) + + // 响应拦截 + instance.interceptors.response.use(res => { + this.destroy(url, showLoading) + const resData = res.data // 接口实际返回数据 格式为:{code: '', msg: '', data: ''}, res.data 是axios封装对象的返回数据; + + if (resData.code !== 0) { // 相应结果不为0, 说明异常 + if (showErrorMsg) { + // + } + + return Promise.reject(resData) + } else { + return resData.data + } + }, error => { + this.destroy(url, showLoading) + let errorInfo = error.response && error.response.data && error.response.data.data + if (!errorInfo) { + errorInfo = error.response.data + } + + if (showErrorMsg) { + //Vue.prototype.$message.error(JSON.stringify(errorInfo)) // 显示异常信息 + } + + return Promise.reject(errorInfo) + }) + } + // interceptorsFlag: 是否进行自定义拦截器处理,默认为: true + // showErrorMsg 发送请求出现异常是否全局提示错误信息 + // showLoading 发送请求前后显示全局loading + request (options, interceptorsFlag = true, showErrorMsg = true, showLoading = false) { + const instance = axios.create() + options = Object.assign(this.baseConfig(), options) + if (interceptorsFlag) { // 注入 req, respo 拦截器 + this.interceptors(instance, options.url, showErrorMsg, showLoading) + } + + return instance(options) + } +} +export default HttpRequest diff --git a/jeepay-ui-cashier/src/http/request.js b/jeepay-ui-cashier/src/http/request.js new file mode 100644 index 0000000..7b66cad --- /dev/null +++ b/jeepay-ui-cashier/src/http/request.js @@ -0,0 +1,4 @@ +import HttpRequest from '@/http/HttpRequest' + +const request = new HttpRequest() +export default request diff --git a/jeepay-ui-cashier/src/main.js b/jeepay-ui-cashier/src/main.js new file mode 100644 index 0000000..b036230 --- /dev/null +++ b/jeepay-ui-cashier/src/main.js @@ -0,0 +1,57 @@ +import Vue from 'vue' +import App from './App.vue' +import router from './router' +import wayCode from './utils/wayCode'; +import config from './config' +import 'amfe-flexible' +Vue.config.productionTip = false + +/** + * 路由守卫 + * + * @author terrfly + * @site https://www.jeepay.vip + * @date 2021/5/8 07:18 + */ +router.beforeEach((to, from, next) => { + + console.log("进入路由守卫",from, to) + + // from: 当前导航正要离开的路由 + // to: 即将要进入的目标路由对象 + + // 如果在免登录页面则直接放行 + if (config.errorPageRouteName.includes(to.name)) { + // 在免登录名单,直接进入 + next() + return false + } + + //获取不到参数 + let token = to.params[config.urlTokenName]; + // let token = 'test'; // 不提交 + if(token){ //放置token信息 + config.cacheToken = token; + } + + if(!config.cacheToken) { + next({ name: config.errorPageRouteName, params: { errInfo: "token参数有误!" } }) + return false; + } + + //获取不到支付类型, 需要跳转到错误页面 + if( ! wayCode.getPayWay() ) { + next({ name: config.errorPageRouteName, params: { errInfo: "不支持的支付方式!" } }) + return false; + } + + next() +}) + + +Vue.prototype.$config = config; + +new Vue({ + router, + render: h => h(App) +}).$mount('#app') diff --git a/jeepay-ui-cashier/src/router/index.js b/jeepay-ui-cashier/src/router/index.js new file mode 100644 index 0000000..57fbe31 --- /dev/null +++ b/jeepay-ui-cashier/src/router/index.js @@ -0,0 +1,42 @@ +/** + * 路由配置信息 + * + * @author terrfly + * @site https://www.jeepay.vip + * @date 2021/5/8 07:18 + */ + +import Vue from 'vue' +import VueRouter from 'vue-router' + +// hack router push callback +// [解决 vue-router跳转相同路径报错 ] +const originalPush = VueRouter.prototype.push +VueRouter.prototype.push = function push (location, onResolve, onReject) { + if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject) + return originalPush.call(this, location).catch(err => err) +} + + +Vue.use(VueRouter) + +const routes = [ + {path: '/hub/:jeepayToken', name: 'Hub', component: () => import('../views/Hub.vue')}, //自动分发器 + {path: '/error', name: 'Error', component: () => import('../views/Error.vue')}, + {path: '/oauth2Callback/:jeepayToken', name: 'Oauth2Callback', component: () => import('../views/Oauth2Callback.vue')}, //oauth回调地址 + {path: '/cashier', name: 'Cashier', component: () => import('../views/Cashier.vue'), //收银台(该地址无意义) + children: [ + { path: '/cashier/wxpay', name: 'CashierWxpay', component: () => import('../views/payway/Wxpay.vue') }, + { path: '/cashier/alipay', name: 'CashierAlipay', component: () => import('../views/payway/Alipay.vue') }, + { path: '/cashier/ysfpay', name: 'CashierYsfpay', component: () => import('../views/payway/Ysfpay.vue') } + ] + } +] + +const router = new VueRouter({ + mode: 'hash', //history 需要nginx适配 hash:是#的格式。 + base: "", + routes +}) + +export default router diff --git a/jeepay-ui-cashier/src/utils/channelUserId.js b/jeepay-ui-cashier/src/utils/channelUserId.js new file mode 100644 index 0000000..599a7eb --- /dev/null +++ b/jeepay-ui-cashier/src/utils/channelUserId.js @@ -0,0 +1,19 @@ +/** + * 获取渠道用户 工具类 + * + * @author terrfly + * @site https://www.jeepay.vip + * @date 2021/5/8 07:18 + */ +const getChannelUserId = function () { + return localStorage.getItem("channelUserId") +} + +const setChannelUserId = function (channelUserId) { + localStorage.setItem("channelUserId", channelUserId) +} + +export default { + getChannelUserId: getChannelUserId, + setChannelUserId: setChannelUserId +} diff --git a/jeepay-ui-cashier/src/utils/wayCode.js b/jeepay-ui-cashier/src/utils/wayCode.js new file mode 100644 index 0000000..a25766b --- /dev/null +++ b/jeepay-ui-cashier/src/utils/wayCode.js @@ -0,0 +1,36 @@ +/** + * 获取支付方式工具类 + * + * @author terrfly + * @site https://www.jeepay.vip + * @date 2021/5/8 07:18 + */ + +import config from '@/config' + +const getToPageRouteName = function () { + const payWay = getPayWay(); + return payWay? payWay.routeName : null +} + +const getPayWay = function () { + + const userAgent = navigator.userAgent; + + if(userAgent.indexOf("MicroMessenger") >= 0){ + return config.payWay.WXPAY; + } + + if(userAgent.indexOf("AlipayClient") >= 0){ + return config.payWay.ALIPAY; + } + + return null; + +} + + +export default { getToPageRouteName: getToPageRouteName, + getPayWay: getPayWay + +} diff --git a/jeepay-ui-cashier/src/views/Cashier.vue b/jeepay-ui-cashier/src/views/Cashier.vue new file mode 100644 index 0000000..e6b4740 --- /dev/null +++ b/jeepay-ui-cashier/src/views/Cashier.vue @@ -0,0 +1,15 @@ + + + diff --git a/jeepay-ui-cashier/src/views/Error.vue b/jeepay-ui-cashier/src/views/Error.vue new file mode 100644 index 0000000..fb667f1 --- /dev/null +++ b/jeepay-ui-cashier/src/views/Error.vue @@ -0,0 +1,38 @@ + + + + diff --git a/jeepay-ui-cashier/src/views/Hub.vue b/jeepay-ui-cashier/src/views/Hub.vue new file mode 100644 index 0000000..811f009 --- /dev/null +++ b/jeepay-ui-cashier/src/views/Hub.vue @@ -0,0 +1,61 @@ + + + + diff --git a/jeepay-ui-cashier/src/views/Oauth2Callback.vue b/jeepay-ui-cashier/src/views/Oauth2Callback.vue new file mode 100644 index 0000000..48b0bfc --- /dev/null +++ b/jeepay-ui-cashier/src/views/Oauth2Callback.vue @@ -0,0 +1,56 @@ + + + diff --git a/jeepay-ui-cashier/src/views/dialog/dialog.vue b/jeepay-ui-cashier/src/views/dialog/dialog.vue new file mode 100644 index 0000000..dcb38ed --- /dev/null +++ b/jeepay-ui-cashier/src/views/dialog/dialog.vue @@ -0,0 +1,133 @@ + + + + + \ No newline at end of file diff --git a/jeepay-ui-cashier/src/views/dialog/index.js b/jeepay-ui-cashier/src/views/dialog/index.js new file mode 100644 index 0000000..b272ce5 --- /dev/null +++ b/jeepay-ui-cashier/src/views/dialog/index.js @@ -0,0 +1,39 @@ +/* + * @Author: your name + * @Date: 2020-12-23 09:05:40 + * @LastEditors: 王会峰 + * @LastEditTime: 2020-12-23 09:12:16 + * @FilePath: \pay\src\components\dialog\index.js + * @SendWord: 永无BUG vite⚡ + */ +import Vue from 'vue' +import Dialog from './dialog.vue' + +const dialog = Vue.extend(Dialog) + +Dialog.install = function(options, type) { + if (options === undefined || options === null) { + options = { + content: '' + } + } else if (typeof options === 'string' || typeof options === 'number') { + options = { + content: options + } + if (type != undefined && options != null) { + options.type = type; + } + } + + let instance = new dialog({ + data: options + }).$mount() + // document.querySelector('#app') + + document.body.appendChild(instance.$el) + Vue.nextTick(() => { + instance.visible = true + }) +} + +export default Dialog \ No newline at end of file diff --git a/jeepay-ui-cashier/src/views/keyboard/keyboard.vue b/jeepay-ui-cashier/src/views/keyboard/keyboard.vue new file mode 100644 index 0000000..6341d71 --- /dev/null +++ b/jeepay-ui-cashier/src/views/keyboard/keyboard.vue @@ -0,0 +1,374 @@ + + + + + + \ No newline at end of file diff --git a/jeepay-ui-cashier/src/views/payway/Alipay.vue b/jeepay-ui-cashier/src/views/payway/Alipay.vue new file mode 100644 index 0000000..4c862e1 --- /dev/null +++ b/jeepay-ui-cashier/src/views/payway/Alipay.vue @@ -0,0 +1,149 @@ + + + + \ No newline at end of file diff --git a/jeepay-ui-cashier/src/views/payway/Wxpay.vue b/jeepay-ui-cashier/src/views/payway/Wxpay.vue new file mode 100644 index 0000000..a327212 --- /dev/null +++ b/jeepay-ui-cashier/src/views/payway/Wxpay.vue @@ -0,0 +1,203 @@ + + + + \ No newline at end of file diff --git a/jeepay-ui-cashier/src/views/payway/Ysfpay.vue b/jeepay-ui-cashier/src/views/payway/Ysfpay.vue new file mode 100644 index 0000000..431b7dc --- /dev/null +++ b/jeepay-ui-cashier/src/views/payway/Ysfpay.vue @@ -0,0 +1,108 @@ + + + + \ No newline at end of file diff --git a/jeepay-ui-cashier/src/views/payway/pay.css b/jeepay-ui-cashier/src/views/payway/pay.css new file mode 100644 index 0000000..3623bae --- /dev/null +++ b/jeepay-ui-cashier/src/views/payway/pay.css @@ -0,0 +1,323 @@ +@font-face { + font-family: "wxFirstFont"; + src: url("../../assets/wx-zt/WeChatSansSS-Bold.ttf"); /* IE9 */ +} +@keyframes blink { + 0% { + opacity: 0; + } + + 50% { + opacity: 1; + } + + 100% { + opacity: 0; + } +} +* { + box-sizing: border-box; +} +body { + background-color: #ededed; +} +.header { + box-sizing: border-box; + display: flex; + width: 100%; + height: 88px; + padding: 50px; + justify-content: space-between; + align-items: center; +} +.margin-top-30 { + margin-top: 30px; +} + +.header-text { + width: calc(100% - 120px); + height: 50px; + line-height: 50px; + text-align: left; + height: 50px; + font-size: 36px; + font-family: PingFang SC, PingFang SC-Medium; + font-weight: 500; + color: #323232; + letter-spacing: 1px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.header-img { + flex-shrink: 0; + width: 80px; + height: 80px; + border-radius: 40px; + /* background-color: #ff7b7b; */ + overflow: hidden; +} +.header-img img { + width: 100%; + height: 100%; +} +.plus-input { + padding-top: 60px; + display: flex; + flex-shrink: 0; + justify-content: safe; + margin: 0 auto; + border-bottom: 1px solid #cccccc; + width: calc(100vw - 140px); + min-width: 160px; + height: 180px; +} +.plus-input .S { + position: relative; + width: 30px; + height: 40px; + margin: 15px 15px 15px 0; +} +.plus-input .S img { + position: absolute; + top: 15px; + left: 0; + width: 100%; + height: 100%; + /* margin-top: 10px; */ +} +.plus-input input { + height: 98px; + width: 90%; + font-size: 70px; + font-family: wxFirstFont SC, PingFang SC, PingFang SC-Medium; + font-weight: 800; + text-align: left; + color: #000000; + letter-spacing: 2px; + border: none; + outline: none; + /* background-color: #ededed; */ + background-color: rgba(220, 20, 60, 0); +} + +.ttt { + display: flex; + align-items: center; + height: 98px; + width: 4px; + font-size: 70px; + font-family: wxFirstFont SC, PingFang SC, PingFang SC-Medium; + font-weight: 800; + text-align: center; + color: #000000; + letter-spacing: 2px; + border: none; + outline: none; + background-color: #ededed00; +} +.input-c { + display: flex; + align-items: center; + + height: 98px; + width: 40px; + font-size: 70px; + font-family: wxFirstFont SC, PingFang SC, PingFang SC-Medium; + font-weight: 800; + text-align: center; + color: #000000; + letter-spacing: 2px; + border: none; + outline: none; + background-color: #ededed00; + /* background-color: rgb(255, 7, 57); */ +} +.input-c-div-1 { + flex-shrink: 0; + width: 36px; + padding-left: 2px; + text-align: center; + /* width: auto; */ +} +.input-c-div { + position: relative; + flex-shrink: 0; + margin-left: 5px; + margin-right: 5px; + width: auto; + height: 66px; + /* background: #07c160; */ + animation: blink 1s linear infinite; + border: 1px solid #07c160; +} + +.placeholder { + color: #6b6b6b; + font-weight: 400; + text-align: left; + padding-top: 4px; + font-size: 60px; +} +.plus-input input::-webkit-input-placeholder { + /* placeholder颜色 */ + color: #6b6b6b; + font-weight: 400; + /* placeholder字体大小 */ + /* font-size: 12px; */ + /* placeholder位置 */ + text-align: left; +} +.plus-ul { + margin-top: 20px; + margin-bottom: 0; + padding: 30px; + width: 100%; +} +.plus-ul li { + position: relative; + background: #fafafa; + padding: 41px 30px; + display: flex; + justify-content: space-between; +} +.plus-li { + margin-bottom: 20px; + border-radius: 15px; +} +.border-radius-top { + border-radius: 15px 15px 0 0; +} +.border-radius-bottom { + border-radius: 0 0 15px 15px; +} +.xian { + position: absolute; + bottom: 0px; + right: 0; + width: calc(100% - 103px); + height: 1px; + background: #ebebeb; +} +.img-div { + display: flex; + flex-flow: row; +} +.img-div img { + width: 42px; + height: 42px; + margin-right: 30px; +} +.img-div .div-text { + height: 42px; + font-size: 30px; + font-family: PingFang SC, PingFang SC-Medium; + font-weight: 500; + text-align: left; + color: #323232; + letter-spacing: 1px; +} +.div-go { + display: flex; + flex-flow: row; + align-items: center; +} +.div-go img { + width: 30px; + height: 30px; +} +.div-go-div { + margin-right: 10px; + font-size: 27px; + font-family: PingFang SC, PingFang SC-Medium; + font-weight: 500; + text-align: right; + color: #808080; + letter-spacing: 1px; +} + +.pitch-on { + display: flex; + flex-flow: row; +} +.pitch-on-ok { + display: flex; + justify-content: center; + align-items: center; + border-radius: 21px; + width: 42px; + height: 42px; + background: #11c930; +} +.pitch-on-ok img { + width: 22px; + height: 16px; +} +.pitch-on-on { + border-radius: 21px; + width: 42px; + height: 42px; + background: rgba(17, 201, 48, 0); + border: 1px solid #bfbfbf; +} +.remark-k { + margin-top: 30px; + width: 100%; + display: flex; + justify-content: center; + font-size: 25px; + font-family: PingFang SC, PingFang SC-Medium; + font-weight: 500; + text-align: left; + color: #587cca; + letter-spacing: 1px; +} +.remark { + display: flex; + flex-flow: row; +} +.remark-hui { + width: auto; + height: 36px; + font-size: 25px; + font-family: PingFang SC, PingFang SC-Medium; + font-weight: 500; + text-align: left; + color: #808080; + letter-spacing: 1px; + margin-right: 30px; +} +.remark-hu { + font-size: 25px; + font-family: PingFang SC, PingFang SC-Medium; + font-weight: 500; + text-align: left; + color: #808080; + letter-spacing: 1px; + margin-right: 30px; +} +.keyboard-plus { + width: 100%; + position: fixed; + left: 0; + bottom: 0; +} +.bnt-pay { + position: fixed; + display: flex; + justify-content: center; + align-items: center; + bottom: 100px; + width: 100vw; + z-index: 1; +} +.bnt-pay-text { + width: 300px; + color: #fff; + height: 100px; + border-radius: 16px; + background-color: darkgreen; + text-align: center; + line-height: 100px; + font-size: 40px; +} \ No newline at end of file diff --git a/jeepay-ui-cashier/vue.config.js b/jeepay-ui-cashier/vue.config.js new file mode 100644 index 0000000..27db81a --- /dev/null +++ b/jeepay-ui-cashier/vue.config.js @@ -0,0 +1,20 @@ + +// vue.config.js +const vueConfig = { + + publicPath: process.env.VUE_APP_BASE_URL, // 前端资源访问根目录, 可配置到cdn目录下。 建议使用命令行环境变量进行替换。 + devServer: { + disableHostCheck: true //不检查域名是否正确 + }, + css: { + loaderOptions: { + postcss: { + plugins: [ + require('postcss-px2rem')({ remUnit: 75 }), // 换算的基数 + ] + } + } + } +} + +module.exports = vueConfig diff --git a/jeepay-ui-manager/.browserslistrc b/jeepay-ui-manager/.browserslistrc new file mode 100644 index 0000000..8f96043 --- /dev/null +++ b/jeepay-ui-manager/.browserslistrc @@ -0,0 +1,3 @@ +> 1% +last 2 versions +not ie <= 10 diff --git a/jeepay-ui-manager/.env b/jeepay-ui-manager/.env new file mode 100644 index 0000000..1e734a7 --- /dev/null +++ b/jeepay-ui-manager/.env @@ -0,0 +1,4 @@ +NODE_ENV=production +VUE_APP_PREVIEW=false +VUE_APP_BASE_URL=/ +VUE_APP_API_BASE_URL= \ No newline at end of file diff --git a/jeepay-ui-manager/.env.development b/jeepay-ui-manager/.env.development new file mode 100644 index 0000000..1134191 --- /dev/null +++ b/jeepay-ui-manager/.env.development @@ -0,0 +1,4 @@ +NODE_ENV=development +VUE_APP_PREVIEW=true +VUE_APP_BASE_URL=/ +VUE_APP_API_BASE_URL=http://localhost:9217 \ No newline at end of file diff --git a/jeepay-ui-manager/.eslintrc.js b/jeepay-ui-manager/.eslintrc.js new file mode 100644 index 0000000..2e7a313 --- /dev/null +++ b/jeepay-ui-manager/.eslintrc.js @@ -0,0 +1,100 @@ +/** + 默认eslint规则: + 代码末尾不能加分号 ;(强迫症的我受不了 哭) + 代码中不能存在多行空行;(这个我更也忍不了大哭) + tab键不能使用,必须换成两个空格;(超级不习惯) + 代码中不能存在声明了但未使用的变量;(这个我觉得可以有) + * **/ + +module.exports = { + root: true, + env: { + node: true + }, + 'extends': [ + 'plugin:vue/strongly-recommended', + '@vue/standard' + ], + rules: { + 'no-console': 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'generator-star-spacing': 'off', + 'no-mixed-operators': 0, + 'vue/max-attributes-per-line': [ + 2, + { + 'singleline': 5, //单行的情况下可以接受的属性数量 + 'multiline': { + 'max': 1, //多行的情况下每行最多属性数量 + 'allowFirstLine': false //不允许在多行的情况下第一行有属性 + } + } + ], + 'vue/attribute-hyphenation': 0, + 'vue/html-self-closing': 0, + 'vue/component-name-in-template-casing': 0, + 'vue/html-closing-bracket-spacing': 0, + 'vue/singleline-html-element-content-newline': 0, + 'vue/no-unused-components': 0, + 'vue/multiline-html-element-content-newline': 0, + 'vue/no-use-v-if-with-v-for': 0, + 'vue/html-closing-bracket-newline': 0, + 'vue/no-parsing-error': 0, + 'no-tabs': 0, + 'quotes': [ + 2, + 'single', + { + 'avoidEscape': true, + 'allowTemplateLiterals': true + } + ], + + /** + * 分号配置项: + * 第一个参数: + " off"或0 - 关闭规则 + " warn"或1 - 将该规则作为警告打开(不影响退出代码) + " error"或2 - 将规则作为错误打开(退出代码将为1) + * + *第二个参数 + always(默认):在语句末尾需要分号 + never:不允许加分号 + * + * 第三个参数: + "beforeStatementContinuationChars": "any"(默认)如果下一行语句以 [,(,/,+,或 - 开头,忽略语句末尾的分号(或缺失分号), + "beforeStatementContinuationChars": "always" 如果下一行语句以 [,(,/,+,或 - 开头,在语句末尾需要添加分号。 + "beforeStatementContinuationChars": "never" 如果该语句不会因为ASI而带来风险,那么即使它的下一行语句以 [,(,/,+,或 - 开头,也不允许在语句末尾添加分号。 + * **/ + 'semi': [ + 2, + 'never', + { + 'beforeStatementContinuationChars': 'never' + } + ], + 'no-delete-var': 2, + 'prefer-const': [ + 2, + { + 'ignoreReadBeforeAssign': false + } + ], + 'template-curly-spacing': 'off', + 'indent': 'off' + }, + parserOptions: { + parser: 'babel-eslint' + }, + overrides: [ + { + files: [ + '**/__tests__/*.{j,t}s?(x)', + '**/tests/unit/**/*.spec.{j,t}s?(x)' + ], + env: { + jest: true + } + } + ] +} diff --git a/jeepay-ui-manager/babel.config.js b/jeepay-ui-manager/babel.config.js new file mode 100644 index 0000000..c5ef55e --- /dev/null +++ b/jeepay-ui-manager/babel.config.js @@ -0,0 +1,37 @@ +const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV) + +const plugins = [] +if (IS_PROD) { + plugins.push('transform-remove-console') +} + +// lazy load ant-design-vue +// if your use import on Demand, Use this code +plugins.push(['import', { + 'libraryName': 'ant-design-vue', + 'libraryDirectory': 'es', + 'style': true // `style: true` 会加载 less 文件 +}]) + +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset', + [ + '@babel/preset-env', + { + 'useBuiltIns': 'entry', + 'corejs': 3 + } + ] + ], + 'plugins': [ + [ + 'import', + { + 'libraryName': 'ant-design-vue', + 'libraryDirectory': 'es', + 'style': 'css' + } + ] + ] +} diff --git a/jeepay-ui-manager/package.json b/jeepay-ui-manager/package.json new file mode 100644 index 0000000..03ff463 --- /dev/null +++ b/jeepay-ui-manager/package.json @@ -0,0 +1,69 @@ +{ + "name": "jeepay-ui-manager", + "version": "1.0.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "test:unit": "vue-cli-service test:unit", + "lint": "vue-cli-service lint", + "build:preview": "vue-cli-service build --mode preview", + "lint:nofix": "vue-cli-service lint --no-fix" + }, + "dependencies": { + "@ant-design-vue/pro-layout": "^1.0.7", + "@antv/data-set": "^0.10.2", + "@antv/g2plot": "^2.3.21", + "@antv/util": "^2.0.13", + "ant-design-vue": "^1.7.2", + "axios": "^0.19.0", + "core-js": "^3.1.2", + "enquire.js": "^2.1.6", + "js-base64": "^2.5.2", + "lodash.clonedeep": "^4.5.0", + "lodash.get": "^4.4.2", + "lodash.pick": "^4.4.0", + "md5": "^2.2.1", + "mockjs2": "1.0.8", + "moment": "^2.24.0", + "nprogress": "^0.2.0", + "store": "^2.0.12", + "viser-vue": "^2.4.6", + "vue": "^2.6.10", + "vue-clipboard2": "^0.2.1", + "vue-cropper": "0.4.9", + "vue-i18n": "^8.17.4", + "vue-quill-editor": "^3.0.6", + "vue-router": "^3.1.2", + "vue-svg-component-runtime": "^1.0.1", + "vuex": "^3.1.1", + "wangeditor": "^3.1.1" + }, + "devDependencies": { + "@ant-design/colors": "^3.2.1", + "@vue/cli-plugin-babel": "^4.0.4", + "@vue/cli-plugin-eslint": "^4.0.4", + "@vue/cli-plugin-router": "^4.0.4", + "@vue/cli-plugin-unit-jest": "^4.0.4", + "@vue/cli-plugin-vuex": "^4.0.4", + "@vue/cli-service": "^4.0.4", + "@vue/eslint-config-standard": "^4.0.0", + "@vue/test-utils": "^1.0.0-beta.29", + "babel-eslint": "^10.0.1", + "babel-plugin-import": "^1.12.2", + "babel-plugin-transform-remove-console": "^6.9.4", + "eslint": "^5.16.0", + "eslint-plugin-html": "^5.0.0", + "eslint-plugin-vue": "^5.2.3", + "git-revision-webpack-plugin": "^3.0.6", + "less": "^3.0.4", + "less-loader": "^5.0.0", + "opencollective": "^1.0.3", + "opencollective-postinstall": "^2.0.2", + "style-resources-loader": "^1.4.1", + "vue-cli-plugin-style-resources-loader": "^0.1.5", + "vue-svg-icon-loader": "^2.1.1", + "vue-template-compiler": "^2.6.10", + "webpack-theme-color-replacer": "^1.3.12" + } +} diff --git a/jeepay-ui-manager/postcss.config.js b/jeepay-ui-manager/postcss.config.js new file mode 100644 index 0000000..961986e --- /dev/null +++ b/jeepay-ui-manager/postcss.config.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + autoprefixer: {} + } +} diff --git a/jeepay-ui-manager/public/imgs/defava_f.png b/jeepay-ui-manager/public/imgs/defava_f.png new file mode 100644 index 0000000000000000000000000000000000000000..584898930bdc1472c7b536d1a7082350c12a60b1 GIT binary patch literal 6113 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 literal 0 HcmV?d00001 diff --git a/jeepay-ui-manager/public/imgs/defava_m.png b/jeepay-ui-manager/public/imgs/defava_m.png new file mode 100644 index 0000000000000000000000000000000000000000..287ff9ced6c132061ee4a60c3599579984faceac GIT binary patch literal 6077 zcmZu#cQjnlwa92>%2jVV2pbZKSkJdvC0oV7o*fF<@X6*J1nEn0xvu}d$;q>YuNGVc8Ntf7; zmnKiug>4Fb=YC%d^c|MjH68#2eRoa!jtT+54_W1dq4;<1$66_Rf#`MUF2GzyS)Khk znmR1piT&1J*-|xj{Rg-I_{uQ4e%a2b*xjhu-0-2KiwBgJHno;imd=+}ZkE%1G%;fn zhRcIo5SC#egiknhF*XR-MnIne@L?zqO1M0b#a|u-3=fKiwz(vg^5FzXHN}1hB1L&1 z`0m56ePBQ+G)1hg`K1u9^Z%JVe-@)jMIH?%UwSC6A|?~}JlvM3HH z6F`3MDFGIrIL9PIDCqHFsy#t&o*hYuZUL}4h7cJIdJ+tQmw!zudUbC&MJtDC4k4Zl zcSzg{hC%@(!JqoYy9KD2b~!OFqMhog2KDtJ>(*OtHpMhG2;$@PPhn7Yg+~&K$A9f| za_NMbK1Ynh+VT`$HOn?maK% zZHso**5MO6z)6tmk{fwL1qz0=ZI_cFZcjvSvwj>z(mr7E(N(5ic)|*BeYgExE!27F z{DmQrgP$cTBCcxNj35^manzpTzxNy37Ic7a#7(t8?9GgJ z2!V0zvx)Dt7k3Iw=TIJKDOM-|U!W1DavQmPz9qc9i3V^A`+^A@iNl*NRF8F<3pTpn4>jIr8y>eS~`~BK578-a%s?aoLD)1*3 zZx7*Tk>+`sW7Mp;|9l=~?+yDEHoP1s969xRA_nTGKjcv8={64e(1b6Uea$B{i2C~f(@IiUUIz28phi~Qi4rUN{|E;q4zjQp(y^TWy6 zoIYa@%gydrW>FIq=W`nspN?zKq(^k}1UJVdfm@#`bFv#6@{Np|{;~7#pW{x>q>vLb zffLJVvUV8k7f(LR7|IW;9p7eAl>@ppKl+5Je{F?k98fCI=W$LXY@~Qzl9v?HHllM) z2yDLqJBgP9bp`aw(&y-X97F!TSIisZHeeTyf;FOP~w;kyHGAJEooX*PItCTJ!C+-}SA!`;ZkAT$8Qa>K1wX&3?LW)BEWY&FHxgS|@d#fdr2#zhu&5WX2P71Kpe)=YS%Tk)yMLWfN^7 zDJD@pW3d%{<-7#Ql?7KKz4ATA%A0kes7lKwrv5_}Nv~fI^U2>5rKS34 zV(Hqkpw`sfYR1*4f$Tf&_!DW;CO_M$LhoNMB&coP6;ThfGLIocslF(FW6%>#wv6?g zNPu@s=4*L zcfAzy^_oqSE+cV1gN@-c%)Wxv2Q=ft8ypof&|>sm##AjH8UTC~IX}U7QqTV@T;!1d z>NG0ZlY7%qUC?RcaTxi_+I}Ks3)E`T$Y)7aPjHoygLLN;!E*lZhSM4k73x@woYO>t-IJ_G|8a z7gx3FV>)gRF8dgAss|4<2J>t^8YJPTr_eyvs_SR2{!Wu?>U{7IjIZ^IAi&`^&QxpO zpY;iE?VW`<>7q^JbYMLhH@=X!62fQ!u*>0bjlm(&vL%%}`jI5OkjM6Bq&U}3FaL^oB6UNr<@%X4Q zV?kL}m^$@QvY7DNgB*L6B0t`|{RSf(3FO|u5w8>tNbMY8 zLdDSuIN#4Cy(& zxZri|*sSUp9T#g|WXwU{YhP}O4~p=t6)EBz23TFi9a9fLq?of|>1{VL-i%qGh#L_x z14ZLh{Cet((T9y)SniX@ic2I*_XbKT%(7B8rTkIdS6Y)Cb8Ff%u39t>(~dQr)NCQY zM-!rU2c-qQ>)Ui_I|MW|%e^C4ZR&x0yVYFHpSz(404(hZgVJ;rO*@%o!wg%_vtzI2>0AS^VEAZeDOWq{pGqsY2OF;YmH7*G!#<8Qs zi0Th)4Kq(PD@7=%%FKZ~5=M||{%vBzXy^s4tXwF${*-mgthWrmAlPgN?Mbdgn`i?MjU4N}3MmpwW}~)gU3M ziuoF6gO*yUC%mq+aZ}g0qg9I4h@6Ah;jz17Vwd>yfTO~x!JpL(NP&>lrq)*-6u8M6d2Kl)JLLFR`L9*uFSwd)U zTYyTKswY8XeKZt5+gf-z*{Vke$rF>Bz-rl{4&h~7{6cfSqk2bLgR@t011BAj1lKo`Xo;<+A!=_7NG$UuF#&;6%*397QMrYJ))7+HF(DVswjLcPh%XX zLnK`%!nTzeGlzLy$`CbOCr$<|vUjWbj|@oQEO?$oxxHPVk5CVknu>a||G2Wv&W7Rojr{*WZRwUXZZgG5=H7V~xWxAqIgBe~&_t8@CP&%xKxepr58il; z=Km45jA%!=ZV^kfQ|r@7V#Z+rG-xiHB!@D-mq&f(Yj}~G4Mzf;4}iXF66$~rWQ<@2 z=kF-r97;?5;SoWFK@;F)#=zLq$FtfA#g4|0n_m&QeTbsqtug#Z(M~ycjx%H5i|AD? z#?xm33{nBHL4KY+7W*=nD3j_3EHtur6yo=V^C@A%7k{v`z;?s1+Ue8N@JY1u6EIT? zLNb^4nOxG|LuU4Awk=q8V*!ZGMs-0_<9M@oHsD0Tx_U{g%)3(1bzrH_sjO1IeM$fJ zNCuTL%Xmm;Y>^IP%cBq?w(IThZa#UoRbAC+&3^^X9Cx$T(eR@C~K<63g_2%^$ zm>0*X>IR+e{K6OM5<_FrtFV@R4SPs!=0J#_iXeCnF=f<+`HTvCe$wqqpxX_m42tYH}&GwVR)xRfPzYFwXx{?1beSVd|WVAlB zxRh$f%qbn7z-s%$JfqA1fSYB)0ZsVdwQgg6X-a{iGnF|LcQ)8;b0sycRqc2ldLznp z>B8+$Cwn9W1P1S0Pz&GUGM^vvhaS^z^BR`#sDSH~Qnqs;Bw+QZap;oWPI9t&*ggv} z;(F8e#0g>coFVY}0_nKm%^b1YNm2L8d!4#Y+n>6h~Cu_m@#9~esG{?HM2Z2fqxYW*SVdevg)IWedW zV~*^8*{jM5%wZsR-^$=WK{$YV4@JH)@3C(XSTQK=uLDy-d3ZFkk3+9XGGxu$G6M>p zn57h&JX$5S-;NSv0rP0H5*- zAW6H(0^l+E>}J}aWr}Ngm0gWNSyhXIrN)Yw57NogZ8Oj2*`s#IVkf{hfB*vR%&AJ? zG<~}C9(m}?i?vC^4rWVY49WAufOtMs(je34Kr4EgBSsSIk%RS@)@(mU1Boe6a22SnW$ejLg3@qKwhRVQ^Q>(eWx zZ$Zp^`=eI1UpOnPO1)e%zz5Gh#oP|Eeqt`n%xx%JDWCAT;wr^6^60(9&L}Wed(_1& z__8HJ{W!*7Nd7LN;%dz*e!uo~Co4xH>KW#!u-1LeTK6b`QqT%{BZUD~n}qcwlW6#` z@d*R4z%g+T)m{B&4lL)Ldj{PYzbIQs6uOIVFKw+*nK7(SrQI8Xtbx>WX!cH6Q3+9` z#DyN%7V&gOcevB~hSzYa8c`K-F+{5Q(4;pTNz698XSB*ub7=2cX_CAp|1rR$<0V>P z7@&yJY2L!E^2P5~))sAoYpO=ZV73yVK7=WPfZ*C?dJcytLluhl#Gq;i9cWw^;w*L( zs%l`USey+2D?P`!tFZPc(0KwvlW`G1HCpEyVQ0eYM=^h+uWkPAsn;6x_MX(qgiFrf_Q~YiW$8=5V(f!d)YN7@6^DF! zPK_1ZAwq=ZnDECDD2EO015bDM)AH&Lyn~tbt1DLjrH^e0*d zV5w#1E^LqrS_xQrKKsH; zcuW$0a|xi3L#g__F3Iip?@(OaAg=PCvLxcq1z_Kv1b!zSyxcW5gst<@d-)#foT0ZM{)!Y@es(Whvi*7_V>ZB_8YjPvLWq{A{QZol za``w68XF%-ihie=e#h=TbU_vwL8OsvTQ**!^eR7+Bz1<8vt{V1kCZh4Ywc3+kvgIV}>?iu8#K2*TDN||?Q82`Q&c5ve{ zSBRm5p->Q~t$A#-V5UoZRJim25RS;>(kp|eUr~Q{w=4Dh^A zak3xkz_@Y#WsoR-v-tx)F|;V}U|x`nqk?ZKYq_-##$QtryWzz=m!nkvk4aFTe(=Ws z_|e#T;P#j`ORuizpZ$9(w!4vA5Po~s9>$ucfJh1oqoBLY%ax<_j)z(4fc&|JR7sT;v)sM)x*7`;YxbMhtK8t>xw}S}dcWH*% zO~(FBl22pHHplUgqN-4V;T)QO6OeuI0-%Gp@tVp!M~VO67!_v7;1GFCBZ}fb7Q=65 z`Uy#a>mYvRe`NF2)j>!?gD8fPD>!RpRzqqO1oR7L5}k$%K;PC5LPd)pFKpM9Mnol0 q;|6(i-=gBFVir$wKRr1AS}tKt#$`(M$`JQI9#2h43sIq98T?;^D@+3b literal 0 HcmV?d00001 diff --git a/jeepay-ui-manager/public/imgs/favicon.ico b/jeepay-ui-manager/public/imgs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..cdce95c51a5f2d58a2aae069431b1fd3d8459998 GIT binary patch literal 4286 zcmeI0v2wyN3_z93z(|KSXIRSEv42oLAtdbWFLdkF=1w$r7;^FT z+KV}1M^W@-MTs#08GRND;BVO802Bc5Ktd{5lCZvQbWUqnnHQ{PUs%u3k@dX6kks=x z&6m`ZubtzM8N_mJ%*L^iF@)HxEAJkq4{faat<8q7Y3D6@{y4QmQ}=bzv4cCLPZ(fdEN=S#k3eb>Yxy8lWU%V{5qv=>ZWCujaE^C|DwDG!G;yW!_g t4D)Q+`wa6Y!whozDLo;XlH8L#k$jLqm%LjyqGz3U&5wOUe@pBE@*}0ffEfS) literal 0 HcmV?d00001 diff --git a/jeepay-ui-manager/public/imgs/logo.svg b/jeepay-ui-manager/public/imgs/logo.svg new file mode 100644 index 0000000..7e60317 --- /dev/null +++ b/jeepay-ui-manager/public/imgs/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/public/index.html b/jeepay-ui-manager/public/index.html new file mode 100644 index 0000000..f9da76f --- /dev/null +++ b/jeepay-ui-manager/public/index.html @@ -0,0 +1,36 @@ + + + + + + + + 运营平台 - Jeepay计全支付 + + + <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %> + + <% } %> + + + +
+
+ <% { %> + + <% } %> +
+ +
+
计全科技
+
+
+ + <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %> + + <% } %> + + + diff --git a/jeepay-ui-manager/src/App.vue b/jeepay-ui-manager/src/App.vue new file mode 100644 index 0000000..92650ff --- /dev/null +++ b/jeepay-ui-manager/src/App.vue @@ -0,0 +1,31 @@ + + + diff --git a/jeepay-ui-manager/src/api/login.js b/jeepay-ui-manager/src/api/login.js new file mode 100644 index 0000000..5831030 --- /dev/null +++ b/jeepay-ui-manager/src/api/login.js @@ -0,0 +1,35 @@ +import request from '@/http/request' +import { Base64 } from 'js-base64' + +// 登录认证接口 +export function login ({ username, password, vercode, vercodeToken }) { + const data = { + ia: Base64.encode(username), // 账号 + ip: Base64.encode(password), // 密码 + vc: Base64.encode(vercode), // 验证码值 + vt: Base64.encode(vercodeToken) // 验证码token + } + return request.request({ + url: '/api/anon/auth/validate', + method: 'post', + data: data + }, true, false, false) +} + +// 获取图形验证码信息接口 +export function vercode () { + return request.request({ url: '/api/anon/auth/vercode', method: 'get' }, true, true, true) +} + +// 获取当前用户信息 +export function getInfo () { + return request.request({ + url: '/api/current/user', + method: 'get' + }) +} + +// 退出接口 +export function logout () { + return new Promise(resolve => { resolve() }) +} diff --git a/jeepay-ui-manager/src/api/manage.js b/jeepay-ui-manager/src/api/manage.js new file mode 100644 index 0000000..62cb407 --- /dev/null +++ b/jeepay-ui-manager/src/api/manage.js @@ -0,0 +1,275 @@ +import request from '@/http/request' + +/* + * 全系列 restful api格式, 定义通用req对象 + * + * @author terrfly + * @site https://www.jeepay.vip + * @date 2021/5/8 07:18 + */ +export const req = { + + // 通用列表查询接口 + list: (url, params) => { + return request.request({ url: url, method: 'GET', params: params }, true, true, false) + }, + + // 通用新增接口 + add: (url, data) => { + return request.request({ url: url, method: 'POST', data: data }, true, true, false) + }, + + // 通用查询单条数据接口 + getById: (url, bizId) => { + return request.request({ url: url + '/' + bizId, method: 'GET' }, true, true, false) + }, + + // 通用修改接口 + updateById: (url, bizId, data) => { + return request.request({ url: url + '/' + bizId, method: 'PUT', data: data }, true, true, false) + }, + + // 通用删除接口 + delById: (url, bizId) => { + return request.request({ url: url + '/' + bizId, method: 'DELETE' }, true, true, false) + } +} + +// 全系列 restful api格式 (全局loading方式) +export const reqLoad = { + + // 通用列表查询接口 + list: (url, params) => { + return request.request({ url: url, method: 'GET', params: params }, true, true, true) + }, + + // 通用新增接口 + add: (url, data) => { + return request.request({ url: url, method: 'POST', data: data }, true, true, true) + }, + + // 通用查询单条数据接口 + getById: (url, bizId) => { + return request.request({ url: url + '/' + bizId, method: 'GET' }, true, true, true) + }, + + // 通用修改接口 + updateById: (url, bizId, data) => { + return request.request({ url: url + '/' + bizId, method: 'PUT', data: data }, true, true, true) + }, + + // 通用删除接口 + delById: (url, bizId) => { + return request.request({ url: url + '/' + bizId, method: 'DELETE' }, true, true, true) + } +} + +/** 角色管理页面 **/ +export const API_URL_ENT_LIST = '/api/sysEnts' +export const API_URL_ROLE_LIST = '/api/sysRoles' +export const API_URL_ROLE_ENT_RELA_LIST = '/api/sysRoleEntRelas' +export const API_URL_SYS_USER_LIST = '/api/sysUsers' +export const API_URL_USER_ROLE_RELA_LIST = '/api/sysUserRoleRelas' + +/** 服务商、商户管理 **/ +export const API_URL_ISV_LIST = '/api/isvInfo' +export const API_URL_MCH_LIST = '/api/mchInfo' +/** 支付订单管理 **/ +export const API_URL_PAY_ORDER_LIST = '/api/payOrder' +/** 退款订单管理 **/ +export const API_URL_REFUND_ORDER_LIST = '/api/refundOrder' +/** 商户通知管理 **/ +export const API_URL_MCH_NOTIFY_LIST = '/api/mchNotify' +/** 系统日志 **/ +export const API_URL_SYS_LOG = 'api/sysLog' +/** 系统配置 **/ +export const API_URL_SYS_CONFIG = 'api/sysConfigs' +/** 首页统计 **/ +export const API_URL_MAIN_STATISTIC = 'api/mainChart' + +/** 支付接口定义页面 **/ +export const API_URL_IFDEFINES_LIST = '/api/payIfDefines' +export const API_URL_PAYWAYS_LIST = '/api/payWays' +/** 服务商、商户支付参数配置 **/ +export const API_URL_ISV_PAYCONFIGS_LIST = '/api/isv/payConfigs' +export const API_URL_MCH_PAYCONFIGS_LIST = '/api/mch/payConfigs' +/** 商户支付通道配置 **/ +export const API_URL_MCH_PAYPASSAGE_LIST = '/api/mch/payPassages' + +/** 上传图片/文件地址 **/ +export const upload = { + avatar: request.baseUrl + '/api/ossFiles/avatar', + ifBG: request.baseUrl + '/api/ossFiles/ifBG', + cert: request.baseUrl + '/api/ossFiles/cert' +} + +const api = { + user: '/user', + role_list: '/role', + service: '/service', + permission: '/permission', + permissionNoPager: '/permission/no-pager', + orgTree: '/org/tree' +} + +export default api + +/** 获取权限树状结构图 **/ +export function getEntTree (system) { + return request.request({ url: '/api/sysEnts/showTree?system=' + system, method: 'GET' }) +} + +/** 更新用户角色信息 */ +export function uSysUserRoleRela (sysUserId, roleIdList) { + return request.request({ + url: 'api/sysUserRoleRelas/relas/' + sysUserId, + method: 'POST', + data: { roleIdListStr: JSON.stringify(roleIdList) } + }) +} + +export function getRoleList (parameter) { + return request({ + url: '/api/sysRoles', + method: 'get', + params: parameter + }) +} + +export function getServiceList (parameter) { + return request({ + url: api.service, + method: 'get', + params: parameter + }) +} + +export function getPermissions (parameter) { + return request({ + url: api.permissionNoPager, + method: 'get', + params: parameter + }) +} + +export function getOrgTree (parameter) { + return request({ + url: api.orgTree, + method: 'get', + params: parameter + }) +} + +// id == 0 add post +// id != 0 update put +export function saveService (parameter) { + return request({ + url: api.service, + method: parameter.id === 0 ? 'post' : 'put', + data: parameter + }) +} + +export function saveSub (sub) { + return request({ + url: '/sub', + method: sub.id === 0 ? 'post' : 'put', + data: sub + }) +} + +export function getIsvPayConfigUnique (infoId, ifCode) { + return request.request({ + url: '/api/isv/payConfigs/' + infoId + '/' + ifCode, + method: 'get' + }) +} + +export function getMcgPayConfigUnique (infoId, ifCode) { + return request.request({ + url: '/api/mch/payConfigs/' + infoId + '/' + ifCode, + method: 'get' + }) +} + +export function getAvailablePayInterfaceList (mchNo, wayCode) { + return request.request({ + url: '/api/mch/payPassages/availablePayInterface/' + mchNo + '/' + wayCode, + method: 'GET' + }) +} + +export function getPayAmountWeek () { + return request.request({ + url: API_URL_MAIN_STATISTIC + '/payAmountWeek', + method: 'GET' + }) +} + +export function getNumCount () { + return request.request({ + url: API_URL_MAIN_STATISTIC + '/numCount', + method: 'GET' + }) +} + +export function getPayCount (parameter) { + return request.request({ + url: API_URL_MAIN_STATISTIC + '/payCount', + method: 'GET', + params: parameter + }) +} + +export function getPayType (parameter) { + return request.request({ + url: API_URL_MAIN_STATISTIC + '/payTypeCount', + method: 'GET', + params: parameter + }) +} + +export function getMainUserInfo (parameter) { + return request.request({ + url: API_URL_MAIN_STATISTIC + '/' + parameter, + method: 'GET' + }) +} + +export function updateUserPass (parameter) { + return request.request({ + url: '/api/current/modifyPwd', + method: 'put', + data: parameter + }) +} + +export function updateUserInfo (parameter) { + return request.request({ + url: '/api/current/user', + method: 'put', + data: parameter + }) +} + +export function getUserInfo () { + return request.request({ + url: '/api/current/user', + method: 'get' + }) +} + +export function getConfigs (parameter) { + return request.request({ + url: API_URL_SYS_CONFIG + '/' + parameter, + method: 'GET' + }) +} + +export function getEntBySystem (entId, system) { + return request.request({ + url: '/api/sysEnts/bySystem', + method: 'GET', + params: { entId: entId, system: system } + }) +} diff --git a/jeepay-ui-manager/src/assets/logo-j.svg b/jeepay-ui-manager/src/assets/logo-j.svg new file mode 100644 index 0000000..ac7edf7 --- /dev/null +++ b/jeepay-ui-manager/src/assets/logo-j.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/jeepay-ui-manager/src/assets/logo.svg b/jeepay-ui-manager/src/assets/logo.svg new file mode 100644 index 0000000..7e60317 --- /dev/null +++ b/jeepay-ui-manager/src/assets/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/styles/color.css b/jeepay-ui-manager/src/assets/styles/color.css new file mode 100644 index 0000000..e69de29 diff --git a/jeepay-ui-manager/src/assets/styles/color.less b/jeepay-ui-manager/src/assets/styles/color.less new file mode 100644 index 0000000..786843e --- /dev/null +++ b/jeepay-ui-manager/src/assets/styles/color.less @@ -0,0 +1,17 @@ +@jee-theme: #1A53FF; //主题色 + +@jee-back: #F0F2F5; //主要背景色 + +@jee-card-back: #FFF; //卡片底色 + +@jee-theme-mask: rgba(26,83,255,0.1); //主体遮罩色(10% 透明度) + +@jee-strengthen: #596380; //强化色 + +@jee-theme-hover: #0033CC; //主题Hover + +@jee-warning: #FF4B33; //危险,强化警告色 + +@jee-inside-link: #1A79FF; //内部链接 + +@jee-external-link: #AE1B6E; //外部链接 diff --git a/jeepay-ui-manager/src/assets/svg/403.svg b/jeepay-ui-manager/src/assets/svg/403.svg new file mode 100644 index 0000000..c552ca6 --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/403.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/404.svg b/jeepay-ui-manager/src/assets/svg/404.svg new file mode 100644 index 0000000..3854e5b --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/500.svg b/jeepay-ui-manager/src/assets/svg/500.svg new file mode 100644 index 0000000..ffa8b08 --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/500.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/add-icon-hover.svg b/jeepay-ui-manager/src/assets/svg/add-icon-hover.svg new file mode 100644 index 0000000..ec8469e --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/add-icon-hover.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/add-icon.svg b/jeepay-ui-manager/src/assets/svg/add-icon.svg new file mode 100644 index 0000000..6f167ab --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/add-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/background.svg b/jeepay-ui-manager/src/assets/svg/background.svg new file mode 100644 index 0000000..6fcadcc --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/background.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/backgroundold.svg b/jeepay-ui-manager/src/assets/svg/backgroundold.svg new file mode 100644 index 0000000..89c2597 --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/backgroundold.svg @@ -0,0 +1,69 @@ + + + + Group 21 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/code.svg b/jeepay-ui-manager/src/assets/svg/code.svg new file mode 100644 index 0000000..5f9154e --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/empty.svg b/jeepay-ui-manager/src/assets/svg/empty.svg new file mode 100644 index 0000000..757aaa2 --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/empty.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/jeepay.svg b/jeepay-ui-manager/src/assets/svg/jeepay.svg new file mode 100644 index 0000000..2acc4c6 --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/jeepay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/lock.svg b/jeepay-ui-manager/src/assets/svg/lock.svg new file mode 100644 index 0000000..e16119f --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/mini-logo.svg b/jeepay-ui-manager/src/assets/svg/mini-logo.svg new file mode 100644 index 0000000..47e17a2 --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/mini-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/more.svg b/jeepay-ui-manager/src/assets/svg/more.svg new file mode 100644 index 0000000..558442e --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/more.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/operate.svg b/jeepay-ui-manager/src/assets/svg/operate.svg new file mode 100644 index 0000000..ba110c8 --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/operate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/scroll_down.svg b/jeepay-ui-manager/src/assets/svg/scroll_down.svg new file mode 100644 index 0000000..f8288fe --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/scroll_down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/scroll_left.svg b/jeepay-ui-manager/src/assets/svg/scroll_left.svg new file mode 100644 index 0000000..ca7632e --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/scroll_left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/scroll_right.svg b/jeepay-ui-manager/src/assets/svg/scroll_right.svg new file mode 100644 index 0000000..222198f --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/scroll_right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/scroll_up.svg b/jeepay-ui-manager/src/assets/svg/scroll_up.svg new file mode 100644 index 0000000..6f84cdd --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/scroll_up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/select-code.svg b/jeepay-ui-manager/src/assets/svg/select-code.svg new file mode 100644 index 0000000..8d9ad51 --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/select-code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/select-lock.svg b/jeepay-ui-manager/src/assets/svg/select-lock.svg new file mode 100644 index 0000000..d2771b0 --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/select-lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/select-user.svg b/jeepay-ui-manager/src/assets/svg/select-user.svg new file mode 100644 index 0000000..1f3338a --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/select-user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/assets/svg/user.svg b/jeepay-ui-manager/src/assets/svg/user.svg new file mode 100644 index 0000000..738fd9d --- /dev/null +++ b/jeepay-ui-manager/src/assets/svg/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-manager/src/components/GlobalFooter/index.vue b/jeepay-ui-manager/src/components/GlobalFooter/index.vue new file mode 100644 index 0000000..59caf52 --- /dev/null +++ b/jeepay-ui-manager/src/components/GlobalFooter/index.vue @@ -0,0 +1,20 @@ + + + diff --git a/jeepay-ui-manager/src/components/GlobalHeader/AvatarDropdown.vue b/jeepay-ui-manager/src/components/GlobalHeader/AvatarDropdown.vue new file mode 100644 index 0000000..bb1a52c --- /dev/null +++ b/jeepay-ui-manager/src/components/GlobalHeader/AvatarDropdown.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/jeepay-ui-manager/src/components/GlobalHeader/RightContent.vue b/jeepay-ui-manager/src/components/GlobalHeader/RightContent.vue new file mode 100644 index 0000000..36d2be8 --- /dev/null +++ b/jeepay-ui-manager/src/components/GlobalHeader/RightContent.vue @@ -0,0 +1,55 @@ + + + diff --git a/jeepay-ui-manager/src/components/GlobalLoad/GlobalLoad.vue b/jeepay-ui-manager/src/components/GlobalLoad/GlobalLoad.vue new file mode 100644 index 0000000..b984a98 --- /dev/null +++ b/jeepay-ui-manager/src/components/GlobalLoad/GlobalLoad.vue @@ -0,0 +1,30 @@ + + + diff --git a/jeepay-ui-manager/src/components/JeepayCard/JeepayCard.vue b/jeepay-ui-manager/src/components/JeepayCard/JeepayCard.vue new file mode 100644 index 0000000..0b68dc4 --- /dev/null +++ b/jeepay-ui-manager/src/components/JeepayCard/JeepayCard.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/jeepay-ui-manager/src/components/JeepayTable/JeepayTable.vue b/jeepay-ui-manager/src/components/JeepayTable/JeepayTable.vue new file mode 100644 index 0000000..e828a26 --- /dev/null +++ b/jeepay-ui-manager/src/components/JeepayTable/JeepayTable.vue @@ -0,0 +1,119 @@ + + + diff --git a/jeepay-ui-manager/src/components/JeepayTable/JeepayTableColState.vue b/jeepay-ui-manager/src/components/JeepayTable/JeepayTableColState.vue new file mode 100644 index 0000000..e240209 --- /dev/null +++ b/jeepay-ui-manager/src/components/JeepayTable/JeepayTableColState.vue @@ -0,0 +1,57 @@ + + + + diff --git a/jeepay-ui-manager/src/components/JeepayTable/JeepayTableColumns.vue b/jeepay-ui-manager/src/components/JeepayTable/JeepayTableColumns.vue new file mode 100644 index 0000000..b52cc8e --- /dev/null +++ b/jeepay-ui-manager/src/components/JeepayTable/JeepayTableColumns.vue @@ -0,0 +1,43 @@ + + + diff --git a/jeepay-ui-manager/src/components/JeepayTextUp/JeepayTextUp.vue b/jeepay-ui-manager/src/components/JeepayTextUp/JeepayTextUp.vue new file mode 100644 index 0000000..a754e63 --- /dev/null +++ b/jeepay-ui-manager/src/components/JeepayTextUp/JeepayTextUp.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/jeepay-ui-manager/src/components/JeepayUpload/JeepayUpload.vue b/jeepay-ui-manager/src/components/JeepayUpload/JeepayUpload.vue new file mode 100644 index 0000000..e3216a8 --- /dev/null +++ b/jeepay-ui-manager/src/components/JeepayUpload/JeepayUpload.vue @@ -0,0 +1,86 @@ + + + diff --git a/jeepay-ui-manager/src/components/NProgress/nprogress.less b/jeepay-ui-manager/src/components/NProgress/nprogress.less new file mode 100644 index 0000000..13b40aa --- /dev/null +++ b/jeepay-ui-manager/src/components/NProgress/nprogress.less @@ -0,0 +1,74 @@ +/* Make clicks pass-through */ +#nprogress { + pointer-events: none; +} + +#nprogress .bar { + background: @primary-color; + + position: fixed; + z-index: 1031; + top: 0; + left: 0; + + width: 100%; + height: 2px; +} + +/* Fancy blur effect */ +#nprogress .peg { + display: block; + position: absolute; + right: 0px; + width: 100px; + height: 100%; + box-shadow: 0 0 10px @primary-color, 0 0 5px @primary-color; + opacity: 1.0; + + -webkit-transform: rotate(3deg) translate(0px, -4px); + -ms-transform: rotate(3deg) translate(0px, -4px); + transform: rotate(3deg) translate(0px, -4px); +} + +/* Remove these to get rid of the spinner */ +#nprogress .spinner { + display: block; + position: fixed; + z-index: 1031; + top: 15px; + right: 15px; +} + +#nprogress .spinner-icon { + width: 18px; + height: 18px; + box-sizing: border-box; + + border: solid 2px transparent; + border-top-color: @primary-color; + border-left-color: @primary-color; + border-radius: 50%; + + -webkit-animation: nprogress-spinner 400ms linear infinite; + animation: nprogress-spinner 400ms linear infinite; +} + +.nprogress-custom-parent { + overflow: hidden; + position: relative; +} + +.nprogress-custom-parent #nprogress .spinner, +.nprogress-custom-parent #nprogress .bar { + position: absolute; +} + +@-webkit-keyframes nprogress-spinner { + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(360deg); } +} +@keyframes nprogress-spinner { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + diff --git a/jeepay-ui-manager/src/config/appConfig.js b/jeepay-ui-manager/src/config/appConfig.js new file mode 100644 index 0000000..8e36138 --- /dev/null +++ b/jeepay-ui-manager/src/config/appConfig.js @@ -0,0 +1,36 @@ +/** + * 全局配置信息, 包含网站标题, 动态组件定义 + * + * @author terrfly + * @site https://www.jeepay.vip + * @date 2021/5/8 07:18 + */ + +/** 应用配置项 **/ +export default { + APP_TITLE: 'Jeepay运营平台', // 设置浏览器title + ACCESS_TOKEN_NAME: 'iToken' // 设置请求token的名字, 用于请求header 和 localstorage中存在名称 +} + +/** + * 与后端开发人员的路由名称及配置项 + * 组件名称 :{ 默认跳转路径(如果后端配置则已动态配置为准), 组件渲染 } + * */ +export const asyncRouteDefine = { + + 'CurrentUserInfo': { defaultPath: '/current/userinfo', component: () => import('@/views/current/UserinfoPage') }, // 用户设置 + + 'MainPage': { defaultPath: '/main', component: () => import('@/views/dashboard/Analysis') }, + 'SysUserPage': { defaultPath: '/users', component: () => import('@/views/sysuser/SysUserPage') }, + 'RolePage': { defaultPath: '/roles', component: () => import('@/views/role/RolePage') }, + 'EntPage': { defaultPath: '/ents', component: () => import('@/views/ent/EntPage') }, + 'PayWayPage': { defaultPath: '/payways', component: () => import('@/views/payconfig/payWay/List') }, + 'IfDefinePage': { defaultPath: '/ifdefines', component: () => import('@/views/payconfig/payIfDefine/List') }, + 'IsvListPage': { defaultPath: '/isv', component: () => import('@/views/isv/IsvList') }, // 服务商列表 + 'MchListPage': { defaultPath: '/mch', component: () => import('@/views/mch/MchList') }, // 商户列表 + 'PayOrderListPage': { defaultPath: '/payOrder', component: () => import('@/views/order/pay/PayOrderList') }, // 支付订单列表 + 'RefundOrderListPage': { defaultPath: '/refundOrder', component: () => import('@/views/order/refund/RefundOrderList') }, // 退款订单列表 + 'MchNotifyListPage': { defaultPath: '/notify', component: () => import('@/views/order/notify/MchNotifyList') }, // 商户通知列表 + 'SysConfigPage': { defaultPath: '/config', component: () => import('@/views/sys/config/SysConfig') }, // 系统配置 + 'SysLogPage': { defaultPath: '/log', component: () => import('@/views/sys/log/SysLog') } // 系统日志 +} diff --git a/jeepay-ui-manager/src/core/bootstrap.js b/jeepay-ui-manager/src/core/bootstrap.js new file mode 100644 index 0000000..077c21d --- /dev/null +++ b/jeepay-ui-manager/src/core/bootstrap.js @@ -0,0 +1,5 @@ +import { printANSI } from '@/utils/screenLog' + +export default function Initializer () { + printANSI() // 请自行移除该行. please remove this line +} diff --git a/jeepay-ui-manager/src/core/lazy_use.js b/jeepay-ui-manager/src/core/lazy_use.js new file mode 100644 index 0000000..e49fa11 --- /dev/null +++ b/jeepay-ui-manager/src/core/lazy_use.js @@ -0,0 +1,115 @@ +import Vue from 'vue' + +// base library +import { + ConfigProvider, + Layout, + Input, + InputNumber, + Button, + Switch, + Radio, + Checkbox, + Select, + Card, + Form, + FormModel, + Row, + Col, + Modal, + Table, + Tabs, + Icon, + Badge, + Popover, + Dropdown, + List, + Avatar, + Breadcrumb, + Steps, + Spin, + Menu, + Drawer, + Tooltip, + Alert, + Tag, + Divider, + DatePicker, + TimePicker, + Upload, + Progress, + Skeleton, + Popconfirm, + PageHeader, + Result, + Statistic, + Descriptions, + Space, + Pagination, + message, + notification, + Tree +} from 'ant-design-vue' +import Viser from 'viser-vue' + +// ext library +import VueCropper from 'vue-cropper' + +Vue.use(ConfigProvider) +Vue.use(Layout) +Vue.use(Input) +Vue.use(InputNumber) +Vue.use(Button) +Vue.use(Switch) +Vue.use(Radio) +Vue.use(Checkbox) +Vue.use(Select) +Vue.use(Card) +Vue.use(Form) +Vue.use(FormModel) +Vue.use(Row) +Vue.use(Col) +Vue.use(Modal) +Vue.use(Table) +Vue.use(Tabs) +Vue.use(Icon) +Vue.use(Badge) +Vue.use(Popover) +Vue.use(Dropdown) +Vue.use(List) +Vue.use(Avatar) +Vue.use(Breadcrumb) +Vue.use(Steps) +Vue.use(Spin) +Vue.use(Menu) +Vue.use(Drawer) +Vue.use(Tooltip) +Vue.use(Alert) +Vue.use(Tag) +Vue.use(Divider) +Vue.use(DatePicker) +Vue.use(TimePicker) +Vue.use(Upload) +Vue.use(Progress) +Vue.use(Skeleton) +Vue.use(Popconfirm) +Vue.use(PageHeader) +Vue.use(Result) +Vue.use(Statistic) +Vue.use(Descriptions) +Vue.use(Space) +Vue.use(Pagination) +Vue.use(Tree) + +Vue.prototype.$confirm = Modal.confirm +Vue.prototype.$message = message +Vue.prototype.$notification = notification +Vue.prototype.$info = Modal.info +Vue.prototype.$success = Modal.success +Vue.prototype.$error = Modal.error +Vue.prototype.$warning = Modal.warning + +Vue.use(Viser) +Vue.use(VueCropper) + +process.env.NODE_ENV !== 'production' && console.warn('[antd-pro] NOTICE: Antd use lazy-load.') diff --git a/jeepay-ui-manager/src/core/use.js b/jeepay-ui-manager/src/core/use.js new file mode 100644 index 0000000..f332c6f --- /dev/null +++ b/jeepay-ui-manager/src/core/use.js @@ -0,0 +1,20 @@ +import Vue from 'vue' + +// base library +import Antd from 'ant-design-vue' +import Viser from 'viser-vue' +import VueCropper from 'vue-cropper' +import 'ant-design-vue/dist/antd.less' + +// ext library +import VueClipboard from 'vue-clipboard2' +import './directives/action' + +VueClipboard.config.autoSetContainer = true + +Vue.use(Antd) +Vue.use(Viser) +Vue.use(VueClipboard) +Vue.use(VueCropper) + +process.env.NODE_ENV !== 'production' && console.warn('[antd-pro] WARNING: Antd now use fulled imported.') diff --git a/jeepay-ui-manager/src/global.less b/jeepay-ui-manager/src/global.less new file mode 100644 index 0000000..d9ad49a --- /dev/null +++ b/jeepay-ui-manager/src/global.less @@ -0,0 +1,372 @@ +@import '../node_modules/ant-design-vue/es/style/themes/default.less'; +// @import './default.less'; + +html, +body, +#app, #root { + height: 100%; + font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,PingFang SC,Hiragino Sans GB,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol; + letter-spacing: 0.4px; +} +// jee主题颜色class列表, 用于文字颜色 +.jee-theme { + color: @jee-theme; //主题色 +} +.jee-back { + color: @jee-back; //主要背景色 +} +.jee-card-back { + color: @jee-card-back; //卡片底色 +} +.jee-theme-mask { + color: @jee-theme-mask; //主体遮罩色(10% 透明度) +} +.jee-strengthen { + color: @jee-strengthen;//强化色 +} +.jee-theme-hover { + color: @jee-theme-hover;//主题Hover +} +.jee-warning { + color: @jee-warning; //危险,强化警告色 +} +.jee-inside-link { + color: @jee-inside-link; //内部链接 +} +.jee-external-link { + color: @jee-external-link; //外部链接 +} +// jee主题颜色class列表, 用于文字颜色 +.jee-theme { + color: @jee-theme; //主题色 +} +.jee-back { + color: @jee-back; //主要背景色 +} +.jee-card-back { + color: @jee-card-back; //卡片底色 +} +.jee-theme-mask { + color: @jee-theme-mask; //主体遮罩色(10% 透明度) +} +.jee-strengthen { + color: @jee-strengthen;//强化色 +} +.jee-theme-hover { + color: @jee-theme-hover;//主题Hover +} +.jee-warning { + color: @jee-warning; //危险,强化警告色 +} +.jee-inside-link { + color: @jee-inside-link; //内部链接 +} +.jee-external-link { + color: @jee-external-link; //外部链接 +} + +// jee主题颜色class列表, 用于背景颜色 +.jee-theme-back-color { + background-color: @jee-theme; //主题色 +} +.jee-back-color { + background-color: @jee-back; //主要背景色 +} +.jee-card-back-color { + background-color: @jee-card-back; //卡片底色 +} +.jee-theme-mask-back-color { + background-color: @jee-theme-mask; //主体遮罩色(10% 透明度) +} +.jee-strengthen-back-color { + background-color: @jee-strengthen;//强化色 +} +.jee-theme-hover-back-color { + background-color: @jee-theme-hover;//主题Hover +} +.jee-warning-back-color { + background-color: @jee-warning; //危险,强化警告色 +} +.jee-inside-link-back-color { + background-color: @jee-inside-link; //内部链接 +} +.jee-external-link-back-color { + background-color: @jee-external-link; //外部链接 +} + +.colorWeak { + filter: invert(80%); +} + +.ant-layout{ + .layout-basic { + height: 100vh; + min-height: 100vh; + } +} + +canvas { + display: block; +} + +body { + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + background: #f0f2f5; +} + +ul, ol { + list-style: none; +} +// 滚动条高度 和宽度 +::-webkit-scrollbar { + width: 10px; + height: 10px; +} +// 滚动条颜色 +::-webkit-scrollbar-thumb { + background: #B3B3B3; +} +// 滑块区域底色 +::-webkit-scrollbar-track { + background: rgba(0, 0, 0, 0.03) +} +// 滚动条hover色 +::-webkit-scrollbar-thumb:hover { + background: #A6A6A6; +} +// 滚动条选中色 +::-webkit-scrollbar-thumb:active { + background: #8C8C8C; +} +// 结合 表格组件中的 :scroll ,让表格在收缩时,展示滚动条 +.ant-table-body{ + overflow-x: auto !important; +} +// /*显示滚动条上方以及下方的渐增按钮*/ +// ::-webkit-scrollbar-button:start:decrement, +// ::-webkit-scrollbar-button:end:increment { +// display: block; +// } +// /* 定义垂直滚动条渐增按扭的样式 */ +// ::-webkit-scrollbar-button:vertical:end:increment { +// background-image: url(~@/assets/svg/scroll_down.svg); +// background-size: cover; +// background-position: center; +// } +// /* 定义垂直滚动条渐减按扭的样式 */ +// ::-webkit-scrollbar-button:vertical:start:decrement { +// background-image: url(~@/assets/svg/scroll_up.svg); +// background-size: cover; +// background-position: center; +// } +// /* 定义水平滚动条渐增按扭的样式 */ +// ::-webkit-scrollbar-button:horizontal:end:increment { +// background-image: url(~@/assets/svg/scroll_right.svg); +// background-size: cover; +// background-position: center; +// } +// /* 定义水平滚动条渐减按扭的样式 */ +// ::-webkit-scrollbar-button:horizontal:start:decrement { +// background-image: url(~@/assets/svg/scroll_left.svg); +// background-size: cover; +// background-position: center; +// } + +// 隐藏面包屑底下的标题 +.ant-page-header-heading { + display: none; +} + +// 数据列表 样式 +.table-alert { + margin-bottom: 16px; +} +// 数据列表 操作 +.table-operator { + margin-bottom: 18px; + + button { + margin-right: 8px; + } +} +// 数据列表 搜索条件 +.table-page-search-wrapper { + border-top-left-radius: 10px; + border-top-right-radius: 10px; + padding: 30px; + padding-bottom: 0; + border-bottom: 1px solid #e8e8e8; + background: #fafafa; + + .ant-form-inline { + .ant-form-item { + display: flex; + // margin-bottom: 24px; + margin-right: 0; + + .ant-form-item-control-wrapper { + flex: 1 1; + display: inline-block; + vertical-align: middle; + } + + > .ant-form-item-label { + line-height: 32px; + padding-right: 8px; + width: auto; + } + .ant-form-item-control { + height: 32px; + line-height: 32px; + } + } + } + + .table-page-search-submitButtons { + display: block; + margin-bottom: 24px; + white-space: nowrap; + } +} + +@media (max-width: @screen-xs) { + .ant-table { + width: 100%; + overflow-x: auto; + &-thead > tr, + &-tbody > tr { + > th, + > td { + white-space: pre; + > span { + display: block; + } + } + } + } +} + +// 修改侧边栏宽度为230 +.ant-pro-sider-menu-sider { + // min-width: 80px !important; + // max-width: 230px !important; + + // 去掉侧边栏阴影 + .light { + box-shadow: none; + } +} + +// 删除表格的内边距 +.ant-card-body { + padding: 0 !important; +} +// 增加内容区域的边框圆角 +.ant-card { + border-radius: 10px; + overflow: hidden; +} + +// 登录页输入框fcous hover事件,边框为jee主题蓝 +.ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled) { + border-color: @jee-theme +} +.ant-input:focus { + border-color: @jee-theme +} + +// 抽屉,按钮板块,居中 +.drawer-btn-center { + position: absolute; + right: 0px; + bottom: 0px; + width: 100%; + border-top: 1px solid rgb(233, 233, 233); + padding: 10px 16px; + background: rgb(255, 255, 255); + text-align: center; + z-index: 1; + + &:first-child { + margin-right: 80px; + } + button { + margin: 0; + padding: 3px 20px; + } +} + +.els { + overflow: hidden; + text-overflow:ellipsis; + white-space: nowrap +} + +// 内容区域去掉最外层的magin 24px ,改为 padding 15px +.ant-pro-basicLayout-content { + margin: 0 ; + padding: 15px; +} + +// 表格页面的间距 +.ant-table-pagination.ant-pagination { + margin: 20px; +} + +// 去掉表格边框线 +.ant-card-bordered { + border:none !important; +} + +.ant-table-align-left { + padding-left: 38px; +} +// 向下的30外边距 +.mg-b-30 { + margin-bottom: 30px +} + +// 表格,搜索框板块布局 +.table-head-ground { + display: flex; + justify-content: start; + flex-wrap: wrap; + .table-layer { + display: flex; + flex-wrap: wrap; + flex-grow: 1; + flex-shrink: 1; + } +} +.table-head-layout { + min-width: 220px; + max-width: 240px; + flex-grow: 1; + flex-shrink: 1; + margin-bottom:30px !important; + margin-right: 16px !important; +} + + +// 404 500 403 +.result-err { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 100vh; + width: 100%; + overflow: auto; + div { + margin: 20px 0; + text-align:center; + font-size: 16px; + p.big-text { + font-size: 36px; + font-weight: 700; + } + } + +} \ No newline at end of file diff --git a/jeepay-ui-manager/src/http/HttpRequest.js b/jeepay-ui-manager/src/http/HttpRequest.js new file mode 100644 index 0000000..e391b3a --- /dev/null +++ b/jeepay-ui-manager/src/http/HttpRequest.js @@ -0,0 +1,117 @@ +/** + * Http请求包装对象 + * 参考: iview https://gitee.com/icarusion/iview-admin/blob/master/src/libs/axios.js + * + * @author terrfly + * @site https://www.jeepay.vip + * @date 2021/5/8 07:18 + */ + +import axios from 'axios' +import storage from '@/utils/jeepayStorageWrapper' +import appConfig from '@/config/appConfig' +import { Vue } from 'vue' +import store from '@/store/index' +class HttpRequest { + constructor (baseUrl = process.env.VUE_APP_API_BASE_URL) { + this.baseUrl = baseUrl + this.queue = {} // 发送队列, 格式为: {请求url: true}, 可以做一些验证之类 + } + // 基础配置信息 + baseConfig () { + const headers = {} + headers[appConfig.ACCESS_TOKEN_NAME] = storage.getToken() + return { + baseURL: this.baseUrl, + headers: headers + } + } + destroy (url, showLoading) { + delete this.queue[url] + } + interceptors (instance, url, showErrorMsg, showLoading) { + // 请求拦截 + instance.interceptors.request.use(config => { + // 添加全局的loading... + if (!Object.keys(this.queue).length && showLoading) { + store.commit('showLoading') // 加载中显示loading组件 + } + this.queue[url] = true + return config + }, error => { + store.commit('hideLoading') // 报错关闭loading组件 + return Promise.reject(error) + }) + + // 响应拦截 + instance.interceptors.response.use(res => { + this.destroy(url, showLoading) + + if (showLoading) { + store.commit('hideLoading') // 报错关闭loading组件 + } + + const resData = res.data // 接口实际返回数据 格式为:{code: '', msg: '', data: ''}, res.data 是axios封装对象的返回数据; + + if (resData.code !== 0) { // 相应结果不为0, 说明异常 + if (showErrorMsg) { + Vue.prototype.$message.error(resData.msg) // 显示异常信息 + } + + return Promise.reject(resData) + } else { + return resData.data + } + }, error => { + this.destroy(url, showLoading) + + if (showLoading) { + store.commit('hideLoading') // 报错关闭loading组件 + } + + let errorInfo = error.response && error.response.data && error.response.data.data + if (!errorInfo) { + errorInfo = error.response.data + } + + if (error.response.status === 401) { // 无访问权限,会话超时, 提示用户信息 & 退出系统 + const toLoginTimeout = setTimeout(function () { + store.dispatch('Logout').then(() => { + window.location.reload() + }) + }, 3000) + + Vue.prototype.$infoBox.confirmDanger( + '会话超时,请重新登录', '3s后将自动退出...', + () => { + store.dispatch('Logout').then(() => { + window.location.reload() + }) + }, + () => { + clearTimeout(toLoginTimeout) + }, + { okText: '重新登录', cancelText: '关闭对话' }) + } else { + if (showErrorMsg) { + Vue.prototype.$message.error(JSON.stringify(errorInfo)) // 显示异常信息 + } + } + + return Promise.reject(errorInfo) + }) + } + // interceptorsFlag: 是否进行自定义拦截器处理,默认为: true + // showErrorMsg 发送请求出现异常是否全局提示错误信息 + // showLoading 发送请求前后显示全局loading + request (options, interceptorsFlag = true, showErrorMsg = true, showLoading = false) { + const instance = axios.create() + options = Object.assign(this.baseConfig(), options) + if (interceptorsFlag) { // 注入 req, respo 拦截器 + this.interceptors(instance, options.url, showErrorMsg, showLoading) + } + + return instance(options) + } +} +export default HttpRequest diff --git a/jeepay-ui-manager/src/http/request.js b/jeepay-ui-manager/src/http/request.js new file mode 100644 index 0000000..7b66cad --- /dev/null +++ b/jeepay-ui-manager/src/http/request.js @@ -0,0 +1,4 @@ +import HttpRequest from '@/http/HttpRequest' + +const request = new HttpRequest() +export default request diff --git a/jeepay-ui-manager/src/layouts/BasicLayout.less b/jeepay-ui-manager/src/layouts/BasicLayout.less new file mode 100644 index 0000000..d193ad1 --- /dev/null +++ b/jeepay-ui-manager/src/layouts/BasicLayout.less @@ -0,0 +1,59 @@ +@import "~ant-design-vue/es/style/themes/default.less"; + +// 清除头部栏下方阴影 +.ant-layout-header, .ant-pro-basicLayout .ant-layout-header:not(.ant-pro-top-menu) { + background: initial; +} +// 清除头部栏下方阴影 修改背景色 +.ant-pro-global-header { + background: initial; + box-shadow: initial; +} +// 面包屑导航部分 修改背景色 +.ant-pro-page-header-wrap-page-header-warp { + background: initial; +} + +//左上角 logo 图标样式 +.ant-pro-sider-menu-logo { + padding-left: 30px; +} +.ant-pro-sider-menu-logo svg { + height: 26px; + width: initial; +} + +.ant-pro-global-header-index-right { + margin-right: 8px; + + &.ant-pro-global-header-index-dark { + .ant-pro-global-header-index-action { + color: hsla(0, 0%, 100%, .85); + + &:hover { + background: #1890ff; + } + } + } + + .ant-pro-account-avatar { + .antd-pro-global-header-index-avatar { + margin: ~'calc((@{layout-header-height} - 24px) / 2)' 0; + margin-right: 8px; + color: @primary-color; + vertical-align: top; + background: rgba(255, 255, 255, 0.85); + } + } + + .menu { + .anticon { + margin-right: 8px; + } + + .ant-dropdown-menu-item { + min-width: 100px; + } + } +} + diff --git a/jeepay-ui-manager/src/layouts/BasicLayout.vue b/jeepay-ui-manager/src/layouts/BasicLayout.vue new file mode 100644 index 0000000..6bacdf4 --- /dev/null +++ b/jeepay-ui-manager/src/layouts/BasicLayout.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/jeepay-ui-manager/src/layouts/BlankLayout.vue b/jeepay-ui-manager/src/layouts/BlankLayout.vue new file mode 100644 index 0000000..1bfbfbf --- /dev/null +++ b/jeepay-ui-manager/src/layouts/BlankLayout.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/jeepay-ui-manager/src/layouts/PageView.vue b/jeepay-ui-manager/src/layouts/PageView.vue new file mode 100644 index 0000000..86df485 --- /dev/null +++ b/jeepay-ui-manager/src/layouts/PageView.vue @@ -0,0 +1,12 @@ + + + diff --git a/jeepay-ui-manager/src/layouts/RouteView.vue b/jeepay-ui-manager/src/layouts/RouteView.vue new file mode 100644 index 0000000..984e2a8 --- /dev/null +++ b/jeepay-ui-manager/src/layouts/RouteView.vue @@ -0,0 +1,32 @@ + diff --git a/jeepay-ui-manager/src/layouts/UserLayout.vue b/jeepay-ui-manager/src/layouts/UserLayout.vue new file mode 100644 index 0000000..5c5b652 --- /dev/null +++ b/jeepay-ui-manager/src/layouts/UserLayout.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/jeepay-ui-manager/src/layouts/index.js b/jeepay-ui-manager/src/layouts/index.js new file mode 100644 index 0000000..1d62d6c --- /dev/null +++ b/jeepay-ui-manager/src/layouts/index.js @@ -0,0 +1,7 @@ +import UserLayout from './UserLayout' +import BlankLayout from './BlankLayout' +import BasicLayout from './BasicLayout' +import RouteView from './RouteView' +import PageView from './PageView' + +export { UserLayout, BasicLayout, BlankLayout, RouteView, PageView } diff --git a/jeepay-ui-manager/src/main.js b/jeepay-ui-manager/src/main.js new file mode 100644 index 0000000..04642c0 --- /dev/null +++ b/jeepay-ui-manager/src/main.js @@ -0,0 +1,43 @@ +// with polyfills +import 'core-js/stable' +import 'regenerator-runtime/runtime' + +import Vue from 'vue' +import App from './App.vue' +import router from './router' +import store from './store/' +import ProLayout, { PageHeaderWrapper } from '@ant-design-vue/pro-layout' + +import bootstrap from './core/bootstrap' +import './core/lazy_use' // use lazy load components +import './permission' // permission control 路由守卫 +import './utils/filter' // global filter +import './global.less' // global style +import 'ant-design-vue/dist/antd.less' +import infoBox from '@/utils/infoBox' + +Vue.config.productionTip = false + +// mount axios to `Vue.$http` and `this.$http` +// use pro-layout components +Vue.component('pro-layout', ProLayout) +Vue.component('page-container', PageHeaderWrapper) +Vue.component('page-header-wrapper', PageHeaderWrapper) + +/** + * @description 全局注册权限验证 + */ +Vue.prototype.$access = (entId) => { + // eslint-disable-next-line eqeqeq + return store.state.user.accessList.some(item => item == entId) +} + +Vue.prototype.$infoBox = infoBox + +new Vue({ + router, + store, + // init localstorage, vuex + created: bootstrap, + render: h => h(App) +}).$mount('#app') diff --git a/jeepay-ui-manager/src/permission.js b/jeepay-ui-manager/src/permission.js new file mode 100644 index 0000000..aec7379 --- /dev/null +++ b/jeepay-ui-manager/src/permission.js @@ -0,0 +1,63 @@ +import router from './router' +import store from './store' +import storage from '@/utils/jeepayStorageWrapper' +import NProgress from 'nprogress' // progress bar +import '@/components/NProgress/nprogress.less' // progress bar custom style +import { setDocumentTitle } from '@/utils/domUtil' +import { getInfo } from '@/api/login' +import appConfig from '@/config/appConfig' + +NProgress.configure({ showSpinner: false }) // NProgress Configuration + +const allowList = ['login', 'register', 'registerResult'] // no redirect allowList +const loginRoutePath = '/user/login' + +// 路由守卫 +router.beforeEach((to, from, next) => { + NProgress.start() // start progress bar + + to.meta && (typeof to.meta.title !== 'undefined' && setDocumentTitle(`${to.meta.title} - ${appConfig.APP_TITLE}`)) // 设置浏览器标题 + + // 如果在免登录页面则直接放行 + if (allowList.includes(to.name)) { + // 在免登录名单,直接进入 + next() + NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it + return false + } + + // 不包含Token 则直接跳转到登录页面 + if (!storage.getToken()) { + next({ path: loginRoutePath, query: { redirect: to.fullPath } }) + NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it + return false + } + + // 以下为包含Token的情况 + // 如果用户信息不存在, 则重新获取 [用户登录成功 & 强制刷新浏览器时 会执行该函数] + if (!store.state.user.userId) { + // request login userInfo + + getInfo().then(bizData => { + store.commit('SET_USER_INFO', bizData) // 调用vuex设置用户基本信息 + + // 动态添加路由 + store.dispatch('GenerateRoutes', {}).then(() => { + router.addRoutes(store.state.asyncRouter.addRouters) + }) + + next() + }).catch(() => { + // 失败时,获取用户信息失败时,调用登出,来清空历史保留信息 + store.dispatch('Logout').then(() => { + next({ path: loginRoutePath, query: { redirect: to.fullPath } }) + }) + }) + } else { + next() + } +}) + +router.afterEach(() => { + NProgress.done() // finish progress bar +}) diff --git a/jeepay-ui-manager/src/router/generator-routers.js b/jeepay-ui-manager/src/router/generator-routers.js new file mode 100644 index 0000000..ec6665e --- /dev/null +++ b/jeepay-ui-manager/src/router/generator-routers.js @@ -0,0 +1,136 @@ +import { BasicLayout, BlankLayout, PageView, RouteView } from '@/layouts' +import store from '@/store' +import { asyncRouteDefine } from '@/config/appConfig' + +// 前端路由表 = 基础定义 + 动态组件 +const constantRouterComponents = Object.assign({ + // 基础页面 layout 必须引入 + BasicLayout: { component: BasicLayout }, + BlankLayout: { component: BlankLayout }, + RouteView: { component: RouteView }, + PageView: { component: PageView }, + '403': () => import('@/views/exception/403'), + '404': () => import('@/views/exception/404'), + '500': () => import('@/views/exception/500') + }, asyncRouteDefine) + +// 前端未找到页面路由 +const notFoundRouter = { + path: '*', component: () => import('@/views/exception/404') +} + +// 根级菜单 +const rootRouter = { + name: 'index', + path: '/', + component: BasicLayout, + redirect: redirectFunc, // 根页面【/】默认跳转 地址 + children: [], + meta: { title: '主页' } +} + +// 动态跳转路径 func +function redirectFunc () { + let mainPageUri = '' + store.state.user.allMenuRouteTree.forEach(item => { + if (item.entId === 'ENT_C_MAIN') { // 当前用户是否拥有主页权限, 如果有直接跳转到该路径 + mainPageUri = item.menuUri + return false + } + }) + + if (mainPageUri) { + return mainPageUri + } + + return getOneUri(store.state.user.allMenuRouteTree) +} + +// 获取到第一个uri (递归查找) +function getOneUri (item) { + let result = '' + for (let i = 0; i < item.length; i++) { + if (item[i].menuUri && item[i].entType === 'ML') { + return item[i].menuUri + } + + if (item[i].children) { + result = getOneUri(item[i].children) + if (result) { + return result + } + } + } + return result +} + +/** + * 动态生成菜单 + * @param token + * @returns {Promise} + */ +export const generatorDynamicRouter = () => { + return new Promise((resolve, reject) => { + // 根据树状结构生成路由格式 + rootRouter.children = generator(store.state.user.allMenuRouteTree) + + // 构建完整路由 + resolve([rootRouter, notFoundRouter]) + }) +} + +/** + * 格式化树形结构数据 生成 vue-router 层级路由表 + * + * @param routerMap + * @returns {*} + */ +export const generator = (allMenuRouteTreeArray) => { + const menuResult = [] + + // 遍历map + allMenuRouteTreeArray.map(item => { + const defComponent = constantRouterComponents[item.componentName || item.entId] + + // 找不到组件 || 其他菜单 + if (!defComponent) { + return + } + + // 跳转uri + let path = item.menuUri || defComponent.defaultPath + + // 没有配置path, 如果为目录则允许为空, 否则不在加载此配置 + if (!path) { + if (item.children && item.children.length > 0) { + path = `/${item.entId}` + } else { + return // 不再加载此配置项 + } + } + + const currentRouter = { + // 如果路由设置了 path,则作为默认 path,否则 路由地址 为默认配置 + path: path, + // 路由名称,建议唯一 + name: item.entId, + // 该路由对应页面的 组件 :方案2 (动态加载) + component: ((defComponent && defComponent.component) || (() => import(`@/views/${item.componentName}`))), + // meta: 页面标题, 菜单图标, 页面权限(供指令权限用,可去掉) + meta: { + title: item.entName, + icon: item.menuIcon, + keepAlive: false + }, + hidden: item.entType === 'MO' // 当其他菜单时需要隐藏显示 + } + // 是否有子菜单,并递归处理 + if (item.children && item.children.length > 0) { + // Recursion + currentRouter.children = generator(item.children) + } + menuResult.push(currentRouter) + }) + + return menuResult +} diff --git a/jeepay-ui-manager/src/router/index.js b/jeepay-ui-manager/src/router/index.js new file mode 100644 index 0000000..416b5c4 --- /dev/null +++ b/jeepay-ui-manager/src/router/index.js @@ -0,0 +1,29 @@ +import Vue from 'vue' +import Router from 'vue-router' +import { UserLayout } from '@/layouts' + +// hack router push callback +// [解决 vue-router跳转相同路径报错 ] +const originalPush = Router.prototype.push +Router.prototype.push = function push (location, onResolve, onReject) { + if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject) + return originalPush.call(this, location).catch(err => err) +} + +Vue.use(Router) + +// 纯静态路由配置项 +const constantRouterMap = [ + { + path: '/user', + component: UserLayout, + children: [ + { path: 'login', name: 'login', component: () => import('@/views/user/Login') } + ] + } +] + +export default new Router({ + mode: 'history', + routes: constantRouterMap +}) diff --git a/jeepay-ui-manager/src/store/index.js b/jeepay-ui-manager/src/store/index.js new file mode 100644 index 0000000..e4aff3e --- /dev/null +++ b/jeepay-ui-manager/src/store/index.js @@ -0,0 +1,32 @@ +import Vue from 'vue' +import Vuex from 'vuex' + +import user from './modules/user' + +// default router permission control +import asyncRouter from './modules/async-router' + +Vue.use(Vuex) + +export default new Vuex.Store({ + modules: { + user, // 用户相关状态机 + asyncRouter // 动态菜单 + }, + state: { + // 定义全局loading 为false + globalLoading: false + }, + mutations: { + // 显示与关闭 全局 loading + showLoading (state) { + state.globalLoading = true + }, + hideLoading (state) { + state.globalLoading = false + } + }, + actions: { + + } +}) diff --git a/jeepay-ui-manager/src/store/modules/async-router.js b/jeepay-ui-manager/src/store/modules/async-router.js new file mode 100644 index 0000000..6282ce6 --- /dev/null +++ b/jeepay-ui-manager/src/store/modules/async-router.js @@ -0,0 +1,27 @@ +/** + * 向后端请求用户的菜单,动态生成路由 + */ +import { generatorDynamicRouter } from '@/router/generator-routers' + +const asyncRouter = { + state: { + addRouters: [] + }, + mutations: { + SET_ROUTERS: (state, routers) => { + state.addRouters = routers + } + }, + actions: { + GenerateRoutes ({ commit }, data) { + return new Promise(resolve => { + generatorDynamicRouter().then(routers => { + commit('SET_ROUTERS', routers) + resolve() + }) + }) + } + } +} + +export default asyncRouter diff --git a/jeepay-ui-manager/src/store/modules/user.js b/jeepay-ui-manager/src/store/modules/user.js new file mode 100644 index 0000000..42ceb33 --- /dev/null +++ b/jeepay-ui-manager/src/store/modules/user.js @@ -0,0 +1,78 @@ +import storage from '@/utils/jeepayStorageWrapper' +import { login, logout } from '@/api/login' +import appConfig from '@/config/appConfig' + +const user = { + state: { + token: '', + userName: '', // 真实姓名 + userId: '', // 用户ID + avatarImgPath: '', // 头像 + allMenuRouteTree: [], // 全部动态 router + accessList: [], // 用户权限集合 + isAdmin: '', // 是否是超级管理员 + loginUsername: '', // 登录用户名 + state: '', // 用户状态 + system: '', // 所属系统 + telphone: '', // 手机号 + sex: '' // 性别 + }, + + mutations: { + SET_TOKEN: (state, token) => { + state.token = token + }, + // 设置头像 + SET_AVATAR (state, avatarPath) { + state.avatarImgPath = avatarPath + }, + // 设置用户信息 + SET_USER_INFO: (state, userInfo) => { + state.userId = userInfo.sysUserId // 用户ID + state.userName = userInfo.realname // 真实姓名 + state.avatarImgPath = userInfo.avatarUrl // 头像 + state.accessList = userInfo.entIdList // 权限集合 + state.allMenuRouteTree = userInfo.allMenuRouteTree // 全部路由集合 + state.isAdmin = userInfo.isAdmin // 是否是超级管理员 + state.loginUsername = userInfo.loginUsername // 登录用户名 + state.state = userInfo.state // 用户状态 + state.system = userInfo.system // 所属系统 + state.telphone = userInfo.telphone // 手机号 + state.sex = userInfo.sex // 性别 + } + }, + + actions: { + // 登录 + Login ({ commit }, { loginParams, isSaveStorage }) { + return new Promise((resolve, reject) => { + login(loginParams).then(bizData => { + storage.setToken(bizData[appConfig.ACCESS_TOKEN_NAME], isSaveStorage) + commit('SET_TOKEN', bizData[appConfig.ACCESS_TOKEN_NAME]) + resolve() + }).catch(error => { + reject(error) + }) + }) + }, + + // 登出 + Logout ({ commit, state }) { + return new Promise((resolve) => { + logout(state.token).then(() => { + commit('SET_TOKEN', '') + storage.cleanToken() + location.reload() // 退出时 重置缓存 + resolve() + }).catch(() => { + resolve() + }).finally(() => { + + }) + }) + } + + } +} + +export default user diff --git a/jeepay-ui-manager/src/utils/domUtil.js b/jeepay-ui-manager/src/utils/domUtil.js new file mode 100644 index 0000000..f820754 --- /dev/null +++ b/jeepay-ui-manager/src/utils/domUtil.js @@ -0,0 +1,17 @@ +export const setDocumentTitle = function (title) { + document.title = title + const ua = navigator.userAgent + // eslint-disable-next-line + const regex = /\bMicroMessenger\/([\d\.]+)/ + if (regex.test(ua) && /ip(hone|od|ad)/i.test(ua)) { + const i = document.createElement('iframe') + i.src = '/favicon.ico' + i.style.display = 'none' + i.onload = function () { + setTimeout(function () { + i.remove() + }, 9) + } + document.body.appendChild(i) + } +} diff --git a/jeepay-ui-manager/src/utils/filter.js b/jeepay-ui-manager/src/utils/filter.js new file mode 100644 index 0000000..45702c6 --- /dev/null +++ b/jeepay-ui-manager/src/utils/filter.js @@ -0,0 +1,20 @@ +import Vue from 'vue' +import moment from 'moment' +import 'moment/locale/zh-cn' +moment.locale('zh-cn') + +Vue.filter('NumberFormat', function (value) { + if (!value) { + return '0' + } + const intPartFormat = value.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') // 将整数部分逢三一断 + return intPartFormat +}) + +Vue.filter('dayjs', function (dataStr, pattern = 'YYYY-MM-DD HH:mm:ss') { + return moment(dataStr).format(pattern) +}) + +Vue.filter('moment', function (dataStr, pattern = 'YYYY-MM-DD HH:mm:ss') { + return moment(dataStr).format(pattern) +}) diff --git a/jeepay-ui-manager/src/utils/infoBox.js b/jeepay-ui-manager/src/utils/infoBox.js new file mode 100644 index 0000000..ca59a8a --- /dev/null +++ b/jeepay-ui-manager/src/utils/infoBox.js @@ -0,0 +1,33 @@ +/** + * 通用信息弹层 + * + * @author terrfly + * @site https://www.jeepay.vip + * @date 2021/5/8 07:18 + */ +import { Modal } from 'ant-design-vue' + +// 确认提示: 标题, 内容, 点击确定回调函数, 取消回调, 扩展参数 +export const confirmResult = { + confirm: function (title, content, okFunc, cancelFunc = (() => {}), extConfig = {}) { + Modal.confirm( + Object.assign({ + okText: '确定', + cancelText: '取消', + title: title || '提示', + content: content, + onOk: okFunc, + onCancel: cancelFunc, + confirmLoading: true + }, extConfig)) + }, + confirmPrimary: function (title, content, okFunc, cancelFunc = (() => {}), extConfig = {}) { + this.confirm(title, content, okFunc, cancelFunc, Object.assign({ okType: 'primary' }, extConfig)) + }, + + confirmDanger: function (title, content, okFunc, cancelFunc = (() => {}), extConfig = {}) { + this.confirm(title, content, okFunc, cancelFunc, Object.assign({ okType: 'danger' }, extConfig)) + } +} + +export default confirmResult diff --git a/jeepay-ui-manager/src/utils/jeepayStorageWrapper.js b/jeepay-ui-manager/src/utils/jeepayStorageWrapper.js new file mode 100644 index 0000000..7da8c45 --- /dev/null +++ b/jeepay-ui-manager/src/utils/jeepayStorageWrapper.js @@ -0,0 +1,34 @@ +/** + * storage 存储包装类 + * + * @author terrfly + * @site https://www.jeepay.vip + * @date 2021/5/8 07:18 + */ +import storage from 'store' +import appConfig from '@/config/appConfig' + +var SESSION_TOKEN = '' + +const wrapper = { + + /* 获取当前Token **/ + getToken: () => { + return SESSION_TOKEN || storage.get(appConfig.ACCESS_TOKEN_NAME) + }, + + /* 清空Token **/ + cleanToken: () => { + SESSION_TOKEN = '' + storage.remove(appConfig.ACCESS_TOKEN_NAME) + }, + + /* 设置token信息 **/ + setToken (tokenVal, isSaveStorage) { + SESSION_TOKEN = tokenVal + if (isSaveStorage) { + storage.set(appConfig.ACCESS_TOKEN_NAME, tokenVal, 7 * 24 * 60 * 60 * 1000) + } + } +} +export default wrapper diff --git a/jeepay-ui-manager/src/utils/screenLog.js b/jeepay-ui-manager/src/utils/screenLog.js new file mode 100644 index 0000000..ff48ac3 --- /dev/null +++ b/jeepay-ui-manager/src/utils/screenLog.js @@ -0,0 +1,18 @@ +/* eslint-disable */ +export const printANSI = () => { + let text = ` + __ + / /___ ___ ____ ____ ___ __ + __ / // _ \\/ _ \\/ __ \\/ __ \`/ / / / +/ /_/ // __/ __/ /_/ / /_/ / /_/ / +\\____/ \\___/\\___/ .___/\\__,_/\\__, / + /_/ /____/ + :: Jeepay :: (v1.0.0.RELEASE) + 适合互联网企业使用的开源支付系统 : https://www.jeepay.vip +` + +console.log(`%c${text}`, 'color: #fc4d50') + +console.log('%cThanks for using Jeepay!', 'color: #fff; font-size: 14px; font-weight: 300; text-shadow:#000 1px 0 0,#000 0 1px 0,#000 -1px 0 0,#000 0 -1px 0;') + +} diff --git a/jeepay-ui-manager/src/utils/util.js b/jeepay-ui-manager/src/utils/util.js new file mode 100644 index 0000000..afbc127 --- /dev/null +++ b/jeepay-ui-manager/src/utils/util.js @@ -0,0 +1,12 @@ +export function timeFix () { + const time = new Date() + const hour = time.getHours() + return hour < 9 ? '早上好' : hour <= 11 ? '上午好' : hour <= 13 ? '中午好' : hour < 20 ? '下午好' : '晚上好' +} + +export function isIE () { + const bw = window.navigator.userAgent + const compare = (s) => bw.indexOf(s) >= 0 + const ie11 = (() => 'ActiveXObject' in window)() + return compare('MSIE') || ie11 +} diff --git a/jeepay-ui-manager/src/utils/utils.less b/jeepay-ui-manager/src/utils/utils.less new file mode 100644 index 0000000..ba75a67 --- /dev/null +++ b/jeepay-ui-manager/src/utils/utils.less @@ -0,0 +1,50 @@ +.textOverflow() { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + word-break: break-all; +} + +.textOverflowMulti(@line: 3, @bg: #fff) { + position: relative; + max-height: @line * 1.5em; + margin-right: -1em; + padding-right: 1em; + overflow: hidden; + line-height: 1.5em; + text-align: justify; + &::before { + position: absolute; + right: 14px; + bottom: 0; + padding: 0 1px; + background: @bg; + content: '...'; + } + &::after { + position: absolute; + right: 14px; + width: 1em; + height: 1em; + margin-top: 0.2em; + background: white; + content: ''; + } +} + +// mixins for clearfix +// ------------------------ +.clearfix() { + zoom: 1; + &::before, + &::after { + display: table; + content: ' '; + } + &::after { + clear: both; + height: 0; + font-size: 0; + visibility: hidden; + } +} \ No newline at end of file diff --git a/jeepay-ui-manager/src/views/current/AvatarModal.vue b/jeepay-ui-manager/src/views/current/AvatarModal.vue new file mode 100644 index 0000000..c822a1e --- /dev/null +++ b/jeepay-ui-manager/src/views/current/AvatarModal.vue @@ -0,0 +1,202 @@ + + + + diff --git a/jeepay-ui-manager/src/views/current/UserinfoPage.vue b/jeepay-ui-manager/src/views/current/UserinfoPage.vue new file mode 100644 index 0000000..a330ce6 --- /dev/null +++ b/jeepay-ui-manager/src/views/current/UserinfoPage.vue @@ -0,0 +1,265 @@ + + + diff --git a/jeepay-ui-manager/src/views/dashboard/Analysis.vue b/jeepay-ui-manager/src/views/dashboard/Analysis.vue new file mode 100644 index 0000000..9bd2094 --- /dev/null +++ b/jeepay-ui-manager/src/views/dashboard/Analysis.vue @@ -0,0 +1,772 @@ + + + + + diff --git a/jeepay-ui-manager/src/views/dashboard/empty.vue b/jeepay-ui-manager/src/views/dashboard/empty.vue new file mode 100644 index 0000000..d406f7b --- /dev/null +++ b/jeepay-ui-manager/src/views/dashboard/empty.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/jeepay-ui-manager/src/views/dashboard/index.css b/jeepay-ui-manager/src/views/dashboard/index.css new file mode 100644 index 0000000..743aa38 --- /dev/null +++ b/jeepay-ui-manager/src/views/dashboard/index.css @@ -0,0 +1,162 @@ +#chart-card { + width: 100%; +} +#chart-card .top-left { + min-height: 250px; +} +#chart-card .chart-data { + min-height: 100px; + height: 100%; + width: 100%; + border-radius: 6px; + background-color: #fff; +} +#chart-card .chart-top, +#chart-card .chart-bottom { + display: flex; + flex-direction: row; + flex-wrap: wrap; +} +#chart-card .chart-top .middle-smaller, +#chart-card .chart-bottom .middle-smaller, +#chart-card .chart-top .middle-larger, +#chart-card .chart-bottom .middle-larger { + height: 100%; +} +#chart-card .chart-top .top-left, +#chart-card .chart-bottom .top-left { + min-height: 238px; +} +#chart-card .chart-item { + width: 100%; + box-sizing: border-box; + padding: 12px; +} +@media screen and (max-width: 767px) { + #chart-card .chart-top .top-left { + order: 1; + } + #chart-card .chart-top .top-middle { + order: 2; + width: 100%; + } + #chart-card .chart-top .top-middle .middle-top, + #chart-card .chart-top .top-middle .middle-bottom { + display: flex; + flex-direction: column; + } + #chart-card .chart-top .top-middle .middle-top .middle-larger, + #chart-card .chart-top .top-middle .middle-bottom .middle-larger, + #chart-card .chart-top .top-middle .middle-top .middle-smaller, + #chart-card .chart-top .top-middle .middle-bottom .middle-smaller { + width: 100%; + } + #chart-card .chart-top .top-right { + order: 0; + } +} +@media screen and (min-width: 768px) { + #chart-card .top-left, + #chart-card .top-middle { + order: 1; + } + #chart-card .top-middle { + width: 100%; + } + #chart-card .top-middle .middle-top, + #chart-card .top-middle .middle-bottom { + display: flex; + flex-direction: row; + } + #chart-card .top-middle .middle-top .middle-larger, + #chart-card .top-middle .middle-bottom .middle-larger { + flex-grow: 1; + } + #chart-card .top-middle .middle-top .middle-smaller, + #chart-card .top-middle .middle-bottom .middle-smaller { + max-width: 170px; + min-width: 150px; + } + #chart-card .top-right { + order: 0; + } +} +@media screen and (min-width: 1200px) { + #chart-card .top-left { + order: 1; + width: 50%; + } + #chart-card .top-middle { + width: 50%; + order: 2; + } + #chart-card .top-middle .middle-top, + #chart-card .top-middle .middle-bottom { + display: flex; + flex-direction: row; + } + #chart-card .top-middle .middle-top .middle-larger, + #chart-card .top-middle .middle-bottom .middle-larger { + flex-grow: 1; + } + #chart-card .top-middle .middle-top .middle-smaller, + #chart-card .top-middle .middle-bottom .middle-smaller { + max-width: 170px; + min-width: 150px; + } + #chart-card .top-right { + width: 100%; + order: 0; + } +} +@media screen and (min-width: 1500px) { + #chart-card { + flex-direction: row; + } + #chart-card .chart-top { + width: 100%; + order: 0; + flex-wrap: nowrap; + } + #chart-card .chart-top .top-left, + #chart-card .chart-top .top-middle { + width: 500px; + min-width: 460px; + order: 0; + } + #chart-card .chart-top .top-middle { + order: 1; + } + #chart-card .chart-top .top-middle .middle-top, + #chart-card .chart-top .top-middle .middle-bottom { + display: flex; + width: 100%; + height: 50%; + flex-wrap: nowrap; + } + #chart-card .chart-top .top-middle .middle-smaller { + min-width: 170px; + } + #chart-card .chart-top .top-middle .middle-larger { + width: 200px; + flex-grow: 1; + } + #chart-card .chart-top .top-right { + order: 2; + flex-grow: 1; + } + #chart-card .chart-bottom { + order: 1; + width: 100%; + flex-wrap: nowrap; + } + #chart-card .chart-bottom .bottom-right { + flex-shrink: 1; + max-width: 500px; + min-width: 330px; + } + #chart-card .chart-bottom .bottom-left { + min-width: 900px; + flex-grow: 1; + } +} diff --git a/jeepay-ui-manager/src/views/dashboard/index.less b/jeepay-ui-manager/src/views/dashboard/index.less new file mode 100644 index 0000000..5073a06 --- /dev/null +++ b/jeepay-ui-manager/src/views/dashboard/index.less @@ -0,0 +1,167 @@ +#chart-card { + width: 100%; + .top-left { + min-height: 250px; + } + .chart-data { + min-height: 100px; + height: 100%; + width: 100%; + border-radius: 6px; + background-color: #fff; + } + .chart-top, .chart-bottom { + display: flex; + flex-direction: row; + flex-wrap: wrap; + + .middle-smaller, .middle-larger { // 较小的区域 + height: 100%; + } + .top-left { + min-height: 238px; + } + } + .chart-item { + width: 100%; + box-sizing: border-box; + padding: 12px; + } +} +@media screen and (max-width:767px){ +#chart-card { + .chart-top { + .top-left { + order: 1; + } + .top-middle { + order: 2; + width: 100%; + + .middle-top, .middle-bottom { + display: flex; + flex-direction: column; + + .middle-larger, .middle-smaller { + width: 100%; + } + } + + } + .top-right { + order: 0; + } + } +} +} +@media screen and (min-width:768px){ +#chart-card { + .top-left, .top-middle { + order: 1; + } + .top-middle { + width: 100%; + .middle-top, .middle-bottom { + display: flex; + flex-direction: row; + + .middle-larger { + flex-grow: 1; // 设置为1,存在剩余空间放大 + } + .middle-smaller { + max-width: 170px; + min-width: 150px; + } + } + } + + .top-right { + order: 0; + } +} +} + +@media screen and (min-width:1200px){ +#chart-card { + .top-left { + order: 1; + width: 50%; + } + .top-middle { + width: 50%; + order: 2; + + .middle-top, .middle-bottom { + display: flex; + flex-direction: row; + + .middle-larger { + flex-grow: 1; // 设置为1,存在剩余空间放大 + } + .middle-smaller { + max-width: 170px; + min-width: 150px; + } + } + } + + .top-right { + width: 100%; + order: 0; + } + } +} + +@media screen and (min-width:1500px){ + #chart-card { + flex-direction: row; + + .chart-top { + width:100%; + order: 0; + flex-wrap: nowrap; // 禁止换行 + + .top-left, .top-middle { + width:500px; + min-width: 460px; + order: 0; + } + .top-middle { + order: 1; + .middle-top, .middle-bottom { + display: flex; + width: 100%; + height: 50%; + flex-wrap: nowrap; // 禁止换行 + } + .middle-smaller { // 较小的区域 + min-width: 170px; + } + .middle-larger { // 较大的区域 + width: 200px; + flex-grow: 1; // 设置为1,存在剩余空间放大 + } + } + .top-right { + order: 2; + flex-grow: 1; // 设置为1,存在剩余空间放大 + } + } + + .chart-bottom { + order: 1; + width:100%; + + flex-wrap: nowrap; + .bottom-right { + flex-shrink: 1; + max-width: 500px; + min-width: 330px; + } + .bottom-left { + min-width: 900px; + flex-grow: 1; // 设置为1,存在剩余空间放大 + } + } + } +} \ No newline at end of file diff --git a/jeepay-ui-manager/src/views/ent/AddOrEdit.vue b/jeepay-ui-manager/src/views/ent/AddOrEdit.vue new file mode 100644 index 0000000..a7508da --- /dev/null +++ b/jeepay-ui-manager/src/views/ent/AddOrEdit.vue @@ -0,0 +1,105 @@ + + + diff --git a/jeepay-ui-manager/src/views/ent/EntPage.vue b/jeepay-ui-manager/src/views/ent/EntPage.vue new file mode 100644 index 0000000..b2decf2 --- /dev/null +++ b/jeepay-ui-manager/src/views/ent/EntPage.vue @@ -0,0 +1,105 @@ + + diff --git a/jeepay-ui-manager/src/views/exception/403.vue b/jeepay-ui-manager/src/views/exception/403.vue new file mode 100644 index 0000000..6df8f43 --- /dev/null +++ b/jeepay-ui-manager/src/views/exception/403.vue @@ -0,0 +1,22 @@ + + + diff --git a/jeepay-ui-manager/src/views/exception/404.vue b/jeepay-ui-manager/src/views/exception/404.vue new file mode 100644 index 0000000..824644c --- /dev/null +++ b/jeepay-ui-manager/src/views/exception/404.vue @@ -0,0 +1,22 @@ + + + diff --git a/jeepay-ui-manager/src/views/exception/500.vue b/jeepay-ui-manager/src/views/exception/500.vue new file mode 100644 index 0000000..08f2dc1 --- /dev/null +++ b/jeepay-ui-manager/src/views/exception/500.vue @@ -0,0 +1,22 @@ + + + diff --git a/jeepay-ui-manager/src/views/isv/AddOrEdit.vue b/jeepay-ui-manager/src/views/isv/AddOrEdit.vue new file mode 100644 index 0000000..25d230b --- /dev/null +++ b/jeepay-ui-manager/src/views/isv/AddOrEdit.vue @@ -0,0 +1,174 @@ + + + diff --git a/jeepay-ui-manager/src/views/isv/IsvList.vue b/jeepay-ui-manager/src/views/isv/IsvList.vue new file mode 100644 index 0000000..5e860a0 --- /dev/null +++ b/jeepay-ui-manager/src/views/isv/IsvList.vue @@ -0,0 +1,118 @@ + + diff --git a/jeepay-ui-manager/src/views/isv/IsvPayIfConfigList.vue b/jeepay-ui-manager/src/views/isv/IsvPayIfConfigList.vue new file mode 100644 index 0000000..e83f373 --- /dev/null +++ b/jeepay-ui-manager/src/views/isv/IsvPayIfConfigList.vue @@ -0,0 +1,323 @@ + + + + + diff --git a/jeepay-ui-manager/src/views/mch/AddOrEdit.vue b/jeepay-ui-manager/src/views/mch/AddOrEdit.vue new file mode 100644 index 0000000..5b257e9 --- /dev/null +++ b/jeepay-ui-manager/src/views/mch/AddOrEdit.vue @@ -0,0 +1,272 @@ + + + + diff --git a/jeepay-ui-manager/src/views/mch/Detail.vue b/jeepay-ui-manager/src/views/mch/Detail.vue new file mode 100644 index 0000000..ab2f6d5 --- /dev/null +++ b/jeepay-ui-manager/src/views/mch/Detail.vue @@ -0,0 +1,163 @@ + + + diff --git a/jeepay-ui-manager/src/views/mch/MchList.vue b/jeepay-ui-manager/src/views/mch/MchList.vue new file mode 100644 index 0000000..8a74b55 --- /dev/null +++ b/jeepay-ui-manager/src/views/mch/MchList.vue @@ -0,0 +1,144 @@ + + diff --git a/jeepay-ui-manager/src/views/mch/MchPayConfigAddOrEdit.vue b/jeepay-ui-manager/src/views/mch/MchPayConfigAddOrEdit.vue new file mode 100644 index 0000000..fb1f602 --- /dev/null +++ b/jeepay-ui-manager/src/views/mch/MchPayConfigAddOrEdit.vue @@ -0,0 +1,268 @@ + + + + diff --git a/jeepay-ui-manager/src/views/mch/MchPayIfConfigList.vue b/jeepay-ui-manager/src/views/mch/MchPayIfConfigList.vue new file mode 100644 index 0000000..256efbc --- /dev/null +++ b/jeepay-ui-manager/src/views/mch/MchPayIfConfigList.vue @@ -0,0 +1,246 @@ + + + + + diff --git a/jeepay-ui-manager/src/views/mch/MchPayPassageAddOrEdit.vue b/jeepay-ui-manager/src/views/mch/MchPayPassageAddOrEdit.vue new file mode 100644 index 0000000..8d1e372 --- /dev/null +++ b/jeepay-ui-manager/src/views/mch/MchPayPassageAddOrEdit.vue @@ -0,0 +1,219 @@ + + + + diff --git a/jeepay-ui-manager/src/views/order/notify/MchNotifyList.vue b/jeepay-ui-manager/src/views/order/notify/MchNotifyList.vue new file mode 100644 index 0000000..2526dc0 --- /dev/null +++ b/jeepay-ui-manager/src/views/order/notify/MchNotifyList.vue @@ -0,0 +1,263 @@ + + diff --git a/jeepay-ui-manager/src/views/order/pay/PayOrderList.vue b/jeepay-ui-manager/src/views/order/pay/PayOrderList.vue new file mode 100644 index 0000000..13f9eb9 --- /dev/null +++ b/jeepay-ui-manager/src/views/order/pay/PayOrderList.vue @@ -0,0 +1,393 @@ + + diff --git a/jeepay-ui-manager/src/views/order/refund/RefundOrderList.vue b/jeepay-ui-manager/src/views/order/refund/RefundOrderList.vue new file mode 100644 index 0000000..2ea6dc8 --- /dev/null +++ b/jeepay-ui-manager/src/views/order/refund/RefundOrderList.vue @@ -0,0 +1,389 @@ + + diff --git a/jeepay-ui-manager/src/views/payconfig/payIfDefine/AddOrEdit.vue b/jeepay-ui-manager/src/views/payconfig/payIfDefine/AddOrEdit.vue new file mode 100644 index 0000000..e6c2ef9 --- /dev/null +++ b/jeepay-ui-manager/src/views/payconfig/payIfDefine/AddOrEdit.vue @@ -0,0 +1,255 @@ + + + + + diff --git a/jeepay-ui-manager/src/views/payconfig/payIfDefine/List.vue b/jeepay-ui-manager/src/views/payconfig/payIfDefine/List.vue new file mode 100644 index 0000000..44b97b2 --- /dev/null +++ b/jeepay-ui-manager/src/views/payconfig/payIfDefine/List.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/jeepay-ui-manager/src/views/payconfig/payWay/AddOrEdit.vue b/jeepay-ui-manager/src/views/payconfig/payWay/AddOrEdit.vue new file mode 100644 index 0000000..8147f48 --- /dev/null +++ b/jeepay-ui-manager/src/views/payconfig/payWay/AddOrEdit.vue @@ -0,0 +1,80 @@ + + diff --git a/jeepay-ui-manager/src/views/payconfig/payWay/List.vue b/jeepay-ui-manager/src/views/payconfig/payWay/List.vue new file mode 100644 index 0000000..070b7f2 --- /dev/null +++ b/jeepay-ui-manager/src/views/payconfig/payWay/List.vue @@ -0,0 +1,114 @@ + + diff --git a/jeepay-ui-manager/src/views/role/Add.vue b/jeepay-ui-manager/src/views/role/Add.vue new file mode 100644 index 0000000..a8e094d --- /dev/null +++ b/jeepay-ui-manager/src/views/role/Add.vue @@ -0,0 +1,63 @@ + + + diff --git a/jeepay-ui-manager/src/views/role/AddOrEdit.vue b/jeepay-ui-manager/src/views/role/AddOrEdit.vue new file mode 100644 index 0000000..0e14ded --- /dev/null +++ b/jeepay-ui-manager/src/views/role/AddOrEdit.vue @@ -0,0 +1,105 @@ + + + diff --git a/jeepay-ui-manager/src/views/role/RoleDist.vue b/jeepay-ui-manager/src/views/role/RoleDist.vue new file mode 100644 index 0000000..42e4957 --- /dev/null +++ b/jeepay-ui-manager/src/views/role/RoleDist.vue @@ -0,0 +1,100 @@ + + + diff --git a/jeepay-ui-manager/src/views/role/RolePage.vue b/jeepay-ui-manager/src/views/role/RolePage.vue new file mode 100644 index 0000000..392a014 --- /dev/null +++ b/jeepay-ui-manager/src/views/role/RolePage.vue @@ -0,0 +1,123 @@ + + diff --git a/jeepay-ui-manager/src/views/sys/config/SysConfig.vue b/jeepay-ui-manager/src/views/sys/config/SysConfig.vue new file mode 100644 index 0000000..9a2f608 --- /dev/null +++ b/jeepay-ui-manager/src/views/sys/config/SysConfig.vue @@ -0,0 +1,79 @@ + + diff --git a/jeepay-ui-manager/src/views/sys/log/SysLog.vue b/jeepay-ui-manager/src/views/sys/log/SysLog.vue new file mode 100644 index 0000000..6626545 --- /dev/null +++ b/jeepay-ui-manager/src/views/sys/log/SysLog.vue @@ -0,0 +1,260 @@ + + diff --git a/jeepay-ui-manager/src/views/sysuser/AddOrEdit.vue b/jeepay-ui-manager/src/views/sysuser/AddOrEdit.vue new file mode 100644 index 0000000..9ee6482 --- /dev/null +++ b/jeepay-ui-manager/src/views/sysuser/AddOrEdit.vue @@ -0,0 +1,158 @@ + + + diff --git a/jeepay-ui-manager/src/views/sysuser/RoleDist.vue b/jeepay-ui-manager/src/views/sysuser/RoleDist.vue new file mode 100644 index 0000000..ecba44c --- /dev/null +++ b/jeepay-ui-manager/src/views/sysuser/RoleDist.vue @@ -0,0 +1,101 @@ + + + diff --git a/jeepay-ui-manager/src/views/sysuser/SysUserPage.vue b/jeepay-ui-manager/src/views/sysuser/SysUserPage.vue new file mode 100644 index 0000000..7ec4bca --- /dev/null +++ b/jeepay-ui-manager/src/views/sysuser/SysUserPage.vue @@ -0,0 +1,142 @@ + + diff --git a/jeepay-ui-manager/src/views/user/Login.vue b/jeepay-ui-manager/src/views/user/Login.vue new file mode 100644 index 0000000..36e132a --- /dev/null +++ b/jeepay-ui-manager/src/views/user/Login.vue @@ -0,0 +1,217 @@ + + + + + diff --git a/jeepay-ui-manager/tests/unit/.eslintrc.js b/jeepay-ui-manager/tests/unit/.eslintrc.js new file mode 100644 index 0000000..958d51b --- /dev/null +++ b/jeepay-ui-manager/tests/unit/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + env: { + jest: true + } +} diff --git a/jeepay-ui-manager/vue.config.js b/jeepay-ui-manager/vue.config.js new file mode 100644 index 0000000..c0207d8 --- /dev/null +++ b/jeepay-ui-manager/vue.config.js @@ -0,0 +1,127 @@ +const path = require('path') +const webpack = require('webpack') +const GitRevisionPlugin = require('git-revision-webpack-plugin') +const GitRevision = new GitRevisionPlugin() +const buildDate = JSON.stringify(new Date().toLocaleString()) + +function resolve (dir) { + return path.join(__dirname, dir) +} + +// check Git +function getGitHash () { + try { + return GitRevision.version() + } catch (e) { } + return 'unknown' +} + +const isProd = process.env.NODE_ENV === 'production' + +const assetsCDN = { + // webpack build externals + externals: { + vue: 'Vue', + 'vue-router': 'VueRouter', + vuex: 'Vuex', + axios: 'axios' + }, + css: [], + // https://unpkg.com/browse/vue@2.6.10/ + js: [ + '//cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.min.js', + '//cdn.jsdelivr.net/npm/vue-router@3.1.3/dist/vue-router.min.js', + '//cdn.jsdelivr.net/npm/vuex@3.1.1/dist/vuex.min.js', + '//cdn.jsdelivr.net/npm/axios@0.19.0/dist/axios.min.js' + ] +} + +// vue.config.js +const vueConfig = { + publicPath: process.env.VUE_APP_BASE_URL, // 前端资源访问根目录, 可配置到cdn目录下。 建议使用命令行环境变量进行替换。 + configureWebpack: { + // webpack plugins + plugins: [ + // Ignore all locale files of moment.js + new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), + new webpack.DefinePlugin({ + APP_VERSION: `"${require('./package.json').version}"`, + GIT_HASH: JSON.stringify(getGitHash()), + BUILD_DATE: buildDate + }) + ], + // if prod, add externals + externals: isProd ? assetsCDN.externals : {} + }, + + chainWebpack: (config) => { + config.resolve.alias + .set('@$', resolve('src')) + + const svgRule = config.module.rule('svg') + svgRule.uses.clear() + svgRule + .oneOf('inline') + .resourceQuery(/inline/) + .use('vue-svg-icon-loader') + .loader('vue-svg-icon-loader') + .end() + .end() + .oneOf('external') + .use('file-loader') + .loader('file-loader') + .options({ + name: 'assets/[name].[hash:8].[ext]' + }) + + // if prod is on + // assets require on cdn + if (isProd) { + config.plugin('html').tap(args => { + args[0].cdn = assetsCDN + return args + }) + } + }, + + css: { + loaderOptions: { + less: { + modifyVars: { + 'primary-color': '#1a53ff', + 'link-color': '#1A79FF', + 'border-radius-base': '4px' + }, + javascriptEnabled: true + } + } + }, + + devServer: { + // development server port 8000 + port: 8000 + // If you want to turn on the proxy, please remove the mockjs /src/main.jsL11 + // proxy: { + // '/api': { + // target: 'https://mock.ihx.me/mock/5baf3052f7da7e07e04a5116/antd-pro', + // ws: false, + // changeOrigin: true + // } + // } + }, + + // disable source map in production + productionSourceMap: false, + lintOnSave: undefined, + // babel-loader no-ignore node_modules/* + transpileDependencies: [], + + pluginOptions: { // 第三方插件配置 + 'style-resources-loader': { + preProcessor: 'less', + patterns: [path.resolve(__dirname, 'src/assets/styles/color.less')] // less所在文件路径 + } + } +} + +module.exports = vueConfig diff --git a/jeepay-ui-merchant/.browserslistrc b/jeepay-ui-merchant/.browserslistrc new file mode 100644 index 0000000..8f96043 --- /dev/null +++ b/jeepay-ui-merchant/.browserslistrc @@ -0,0 +1,3 @@ +> 1% +last 2 versions +not ie <= 10 diff --git a/jeepay-ui-merchant/.env b/jeepay-ui-merchant/.env new file mode 100644 index 0000000..1e734a7 --- /dev/null +++ b/jeepay-ui-merchant/.env @@ -0,0 +1,4 @@ +NODE_ENV=production +VUE_APP_PREVIEW=false +VUE_APP_BASE_URL=/ +VUE_APP_API_BASE_URL= \ No newline at end of file diff --git a/jeepay-ui-merchant/.env.development b/jeepay-ui-merchant/.env.development new file mode 100644 index 0000000..711f7d0 --- /dev/null +++ b/jeepay-ui-merchant/.env.development @@ -0,0 +1,4 @@ +NODE_ENV=development +VUE_APP_PREVIEW=true +VUE_APP_BASE_URL=/ +VUE_APP_API_BASE_URL=http://localhost:9218 \ No newline at end of file diff --git a/jeepay-ui-merchant/.eslintrc.js b/jeepay-ui-merchant/.eslintrc.js new file mode 100644 index 0000000..2e7a313 --- /dev/null +++ b/jeepay-ui-merchant/.eslintrc.js @@ -0,0 +1,100 @@ +/** + 默认eslint规则: + 代码末尾不能加分号 ;(强迫症的我受不了 哭) + 代码中不能存在多行空行;(这个我更也忍不了大哭) + tab键不能使用,必须换成两个空格;(超级不习惯) + 代码中不能存在声明了但未使用的变量;(这个我觉得可以有) + * **/ + +module.exports = { + root: true, + env: { + node: true + }, + 'extends': [ + 'plugin:vue/strongly-recommended', + '@vue/standard' + ], + rules: { + 'no-console': 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'generator-star-spacing': 'off', + 'no-mixed-operators': 0, + 'vue/max-attributes-per-line': [ + 2, + { + 'singleline': 5, //单行的情况下可以接受的属性数量 + 'multiline': { + 'max': 1, //多行的情况下每行最多属性数量 + 'allowFirstLine': false //不允许在多行的情况下第一行有属性 + } + } + ], + 'vue/attribute-hyphenation': 0, + 'vue/html-self-closing': 0, + 'vue/component-name-in-template-casing': 0, + 'vue/html-closing-bracket-spacing': 0, + 'vue/singleline-html-element-content-newline': 0, + 'vue/no-unused-components': 0, + 'vue/multiline-html-element-content-newline': 0, + 'vue/no-use-v-if-with-v-for': 0, + 'vue/html-closing-bracket-newline': 0, + 'vue/no-parsing-error': 0, + 'no-tabs': 0, + 'quotes': [ + 2, + 'single', + { + 'avoidEscape': true, + 'allowTemplateLiterals': true + } + ], + + /** + * 分号配置项: + * 第一个参数: + " off"或0 - 关闭规则 + " warn"或1 - 将该规则作为警告打开(不影响退出代码) + " error"或2 - 将规则作为错误打开(退出代码将为1) + * + *第二个参数 + always(默认):在语句末尾需要分号 + never:不允许加分号 + * + * 第三个参数: + "beforeStatementContinuationChars": "any"(默认)如果下一行语句以 [,(,/,+,或 - 开头,忽略语句末尾的分号(或缺失分号), + "beforeStatementContinuationChars": "always" 如果下一行语句以 [,(,/,+,或 - 开头,在语句末尾需要添加分号。 + "beforeStatementContinuationChars": "never" 如果该语句不会因为ASI而带来风险,那么即使它的下一行语句以 [,(,/,+,或 - 开头,也不允许在语句末尾添加分号。 + * **/ + 'semi': [ + 2, + 'never', + { + 'beforeStatementContinuationChars': 'never' + } + ], + 'no-delete-var': 2, + 'prefer-const': [ + 2, + { + 'ignoreReadBeforeAssign': false + } + ], + 'template-curly-spacing': 'off', + 'indent': 'off' + }, + parserOptions: { + parser: 'babel-eslint' + }, + overrides: [ + { + files: [ + '**/__tests__/*.{j,t}s?(x)', + '**/tests/unit/**/*.spec.{j,t}s?(x)' + ], + env: { + jest: true + } + } + ] +} diff --git a/jeepay-ui-merchant/babel.config.js b/jeepay-ui-merchant/babel.config.js new file mode 100644 index 0000000..e80ad97 --- /dev/null +++ b/jeepay-ui-merchant/babel.config.js @@ -0,0 +1,28 @@ +const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV) + +const plugins = [] +if (IS_PROD) { + plugins.push('transform-remove-console') +} + +// lazy load ant-design-vue +// if your use import on Demand, Use this code +plugins.push(['import', { + 'libraryName': 'ant-design-vue', + 'libraryDirectory': 'es', + 'style': true // `style: true` 会加载 less 文件 +}]) + +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset', + [ + '@babel/preset-env', + { + 'useBuiltIns': 'entry', + 'corejs': 3 + } + ] + ], + plugins +} diff --git a/jeepay-ui-merchant/package.json b/jeepay-ui-merchant/package.json new file mode 100644 index 0000000..86611fe --- /dev/null +++ b/jeepay-ui-merchant/package.json @@ -0,0 +1,71 @@ +{ + "name": "jeepay-ui-merchant", + "version": "1.0.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "test:unit": "vue-cli-service test:unit", + "lint": "vue-cli-service lint", + "build:preview": "vue-cli-service build --mode preview", + "lint:nofix": "vue-cli-service lint --no-fix" + }, + "dependencies": { + "@ant-design-vue/pro-layout": "^1.0.7", + "@antv/data-set": "^0.10.2", + "ant-design-vue": "^1.7.2", + "@antv/g2plot": "^2.3.21", + "@antv/util": "^2.0.13", + "axios": "^0.19.0", + "core-js": "^3.1.2", + "enquire.js": "^2.1.6", + "lodash.clonedeep": "^4.5.0", + "lodash.get": "^4.4.2", + "lodash.pick": "^4.4.0", + "md5": "^2.2.1", + "mockjs2": "1.0.8", + "moment": "^2.24.0", + "nprogress": "^0.2.0", + "store": "^2.0.12", + "viser-vue": "^2.4.6", + "vue": "^2.6.10", + "vue-clipboard2": "^0.2.1", + "vue-cropper": "0.4.9", + "vue-i18n": "^8.17.4", + "vue-quill-editor": "^3.0.6", + "vue-router": "^3.1.2", + "vue-svg-component-runtime": "^1.0.1", + "vuex": "^3.1.1", + "wangeditor": "^3.1.1", + "js-base64": "^2.5.2" + }, + "devDependencies": { + "@ant-design/colors": "^3.2.1", + "@vue/cli-plugin-babel": "^4.0.4", + "@vue/cli-plugin-eslint": "^4.0.4", + "@vue/cli-plugin-router": "^4.0.4", + "@vue/cli-plugin-unit-jest": "^4.0.4", + "@vue/cli-plugin-vuex": "^4.0.4", + "@vue/cli-service": "^4.0.4", + "@vue/eslint-config-standard": "^4.0.0", + "@vue/test-utils": "^1.0.0-beta.29", + "babel-eslint": "^10.0.1", + "babel-plugin-import": "^1.12.2", + "babel-plugin-transform-remove-console": "^6.9.4", + "eslint": "^5.16.0", + "eslint-plugin-html": "^5.0.0", + "eslint-plugin-vue": "^5.2.3", + "git-revision-webpack-plugin": "^3.0.6", + "image-webpack-loader": "^7.0.1", + "less": "^3.0.4", + "less-loader": "^5.0.0", + "opencollective": "^1.0.3", + "opencollective-postinstall": "^2.0.2", + "style-resources-loader": "^1.4.1", + "url-loader": "^4.1.1", + "vue-cli-plugin-style-resources-loader": "^0.1.5", + "vue-svg-icon-loader": "^2.1.1", + "vue-template-compiler": "^2.6.10", + "webpack-theme-color-replacer": "^1.3.12" + } +} diff --git a/jeepay-ui-merchant/postcss.config.js b/jeepay-ui-merchant/postcss.config.js new file mode 100644 index 0000000..961986e --- /dev/null +++ b/jeepay-ui-merchant/postcss.config.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + autoprefixer: {} + } +} diff --git a/jeepay-ui-merchant/public/imgs/defava_f.png b/jeepay-ui-merchant/public/imgs/defava_f.png new file mode 100644 index 0000000000000000000000000000000000000000..584898930bdc1472c7b536d1a7082350c12a60b1 GIT binary patch literal 6113 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 literal 0 HcmV?d00001 diff --git a/jeepay-ui-merchant/public/imgs/defava_m.png b/jeepay-ui-merchant/public/imgs/defava_m.png new file mode 100644 index 0000000000000000000000000000000000000000..287ff9ced6c132061ee4a60c3599579984faceac GIT binary patch literal 6077 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 literal 0 HcmV?d00001 diff --git a/jeepay-ui-merchant/public/imgs/favicon.ico b/jeepay-ui-merchant/public/imgs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..cdce95c51a5f2d58a2aae069431b1fd3d8459998 GIT binary patch literal 4286 zcmeI0v2wyN3_z93z(|KSXIRSEv42oLAtdbWFLdkF=1w$r7;^FT z+KV}1M^W@-MTs#08GRND;BVO802Bc5Ktd{5lCZvQbWUqnnHQ{PUs%u3k@dX6kks=x z&6m`ZubtzM8N_mJ%*L^iF@)HxEAJkq4{faat<8q7Y3D6@{y4QmQ}=bzv4cCLPZ(fdEN=S#k3eb>Yxy8lWU%V{5qv=>ZWCujaE^C|DwDG!G;yW!_g t4D)Q+`wa6Y!whozDLo;XlH8L#k$jLqm%LjyqGz3U&5wOUe@pBE@*}0ffEfS) literal 0 HcmV?d00001 diff --git a/jeepay-ui-merchant/public/imgs/logo.svg b/jeepay-ui-merchant/public/imgs/logo.svg new file mode 100644 index 0000000..7e60317 --- /dev/null +++ b/jeepay-ui-merchant/public/imgs/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/public/index.html b/jeepay-ui-merchant/public/index.html new file mode 100644 index 0000000..d9cb5c9 --- /dev/null +++ b/jeepay-ui-merchant/public/index.html @@ -0,0 +1,36 @@ + + + + + + + + 商户系统 - Jeepay计全支付 + + + <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %> + + <% } %> + + + +
+
+ <% { %> + + <% } %> +
+ +
+
计全科技
+
+
+ + <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %> + + <% } %> + + + diff --git a/jeepay-ui-merchant/src/App.vue b/jeepay-ui-merchant/src/App.vue new file mode 100644 index 0000000..92650ff --- /dev/null +++ b/jeepay-ui-merchant/src/App.vue @@ -0,0 +1,31 @@ + + + diff --git a/jeepay-ui-merchant/src/api/login.js b/jeepay-ui-merchant/src/api/login.js new file mode 100644 index 0000000..583d3cf --- /dev/null +++ b/jeepay-ui-merchant/src/api/login.js @@ -0,0 +1,35 @@ +import request from '@/http/request' +import { Base64 } from 'js-base64' + +// 登录认证接口 +export function login ({ username, password, vercode, vercodeToken }) { + const data = { + ia: Base64.encode(username), // 账号 + ip: Base64.encode(password), // 密码 + vc: Base64.encode(vercode), // 验证码值 + vt: Base64.encode(vercodeToken) // 验证码token + } + return request.request({ + url: '/api/anon/auth/validate', + method: 'post', + data: data + }, true, true, false) +} + +// 获取图形验证码信息接口 +export function vercode () { + return request.request({ url: '/api/anon/auth/vercode', method: 'get' }, true, true, true) +} + +// 获取当前用户信息 +export function getInfo () { + return request.request({ + url: '/api/current/user', + method: 'get' + }) +} + +// 退出接口 +export function logout () { + return new Promise(resolve => { resolve() }) +} diff --git a/jeepay-ui-merchant/src/api/manage.js b/jeepay-ui-merchant/src/api/manage.js new file mode 100644 index 0000000..3912125 --- /dev/null +++ b/jeepay-ui-merchant/src/api/manage.js @@ -0,0 +1,259 @@ +/* + * 全系列 restful api格式, 定义通用req对象 + * + * @author terrfly + * @site https://www.jeepay.vip + * @date 2021/5/8 07:18 + */ + +import request from '@/http/request' + +export const req = { + + // 通用列表查询接口 + list: (url, params) => { + return request.request({ url: url, method: 'GET', params: params }, true, true, false) + }, + + // 通用新增接口 + add: (url, data) => { + return request.request({ url: url, method: 'POST', data: data }, true, true, false) + }, + + // 通用查询单条数据接口 + getById: (url, bizId) => { + return request.request({ url: url + '/' + bizId, method: 'GET' }, true, true, false) + }, + + // 通用修改接口 + updateById: (url, bizId, data) => { + return request.request({ url: url + '/' + bizId, method: 'PUT', data: data }, true, true, false) + }, + + // 通用删除接口 + delById: (url, bizId) => { + return request.request({ url: url + '/' + bizId, method: 'DELETE' }, true, true, false) + } +} + +// 全系列 restful api格式 (全局loading方式) +export const reqLoad = { + + // 通用列表查询接口 + list: (url, params) => { + return request.request({ url: url, method: 'GET', params: params }, true, true, true) + }, + + // 通用新增接口 + add: (url, data) => { + return request.request({ url: url, method: 'POST', data: data }, true, true, true) + }, + + // 通用查询单条数据接口 + getById: (url, bizId) => { + return request.request({ url: url + '/' + bizId, method: 'GET' }, true, true, true) + }, + + // 通用修改接口 + updateById: (url, bizId, data) => { + return request.request({ url: url + '/' + bizId, method: 'PUT', data: data }, true, true, true) + }, + + // 通用删除接口 + delById: (url, bizId) => { + return request.request({ url: url + '/' + bizId, method: 'DELETE' }, true, true, true) + } +} + +/** 角色管理页面 **/ +export const API_URL_ENT_LIST = '/api/sysEnts' +export const API_URL_ROLE_LIST = '/api/sysRoles' +export const API_URL_ROLE_ENT_RELA_LIST = '/api/sysRoleEntRelas' +export const API_URL_SYS_USER_LIST = '/api/sysUsers' +export const API_URL_USER_ROLE_RELA_LIST = '/api/sysUserRoleRelas' +/** 首页统计 **/ +export const API_URL_MAIN_STATISTIC = 'api/mainChart' + +/** 支付订单管理 **/ +export const API_URL_PAY_ORDER_LIST = '/api/payOrder' +/** 退款订单管理 **/ +export const API_URL_REFUND_ORDER_LIST = '/api/refundOrder' +/** 支付方式列表 **/ +export const API_URL_PAYWAYS_LIST = '/api/payWays' +/** 商户支付参数配置 **/ +export const API_URL_MCH_PAYCONFIGS_LIST = '/api/mch/payConfigs' +/** 商户支付通道配置 **/ +export const API_URL_MCH_PAYPASSAGE_LIST = '/api/mch/payPassages' + +/** 上传图片/文件地址 **/ +export const upload = { + avatar: request.baseUrl + '/api/ossFiles/avatar', + cert: request.baseUrl + '/api/ossFiles/cert' +} + +const api = { + user: '/user', + role_list: '/role', + service: '/service', + permission: '/permission', + permissionNoPager: '/permission/no-pager', + orgTree: '/org/tree' +} + +export default api + +/** 获取权限树状结构图 **/ +export function getEntTree (system) { + return request.request({ url: '/api/sysEnts/showTree?system=' + system, method: 'GET' }) +} + +/** 更新用户角色信息 */ +export function uSysRoleEntRela (sysRoleId, entIdList) { + return request.request({ + url: 'api/sysRoleEntRelas/relas/' + sysRoleId, + method: 'POST', + data: { entIdListStr: JSON.stringify(entIdList) } + }) +} + +/** 更新用户角色信息 */ +export function uSysUserRoleRela (sysUserId, roleIdList) { + return request.request({ + url: 'api/sysUserRoleRelas/relas/' + sysUserId, + method: 'POST', + data: { roleIdListStr: JSON.stringify(roleIdList) } + }) +} + +export function getRoleList (parameter) { + return request({ + url: '/api/sysRoles', + method: 'get', + params: parameter + }) +} + +export function getServiceList (parameter) { + return request({ + url: api.service, + method: 'get', + params: parameter + }) +} + +export function getPermissions (parameter) { + return request({ + url: api.permissionNoPager, + method: 'get', + params: parameter + }) +} + +export function getOrgTree (parameter) { + return request({ + url: api.orgTree, + method: 'get', + params: parameter + }) +} + +// id == 0 add post +// id != 0 update put +export function saveService (parameter) { + return request({ + url: api.service, + method: parameter.id === 0 ? 'post' : 'put', + data: parameter + }) +} + +export function saveSub (sub) { + return request({ + url: '/sub', + method: sub.id === 0 ? 'post' : 'put', + data: sub + }) +} + +export function getIsvPayConfigUnique (infoId, ifCode) { + return request.request({ + url: '/api/isv/payConfigs/' + infoId + '/' + ifCode, + method: 'get' + }) +} + +/** 根据支付接口查询支付参数配置 **/ +export function getMcgPayConfigUnique (ifCode) { + return request.request({ + url: '/api/mch/payConfigs/' + ifCode, + method: 'get' + }) +} + +/** 根据支付方式查询可用支付接口 **/ +export function getAvailablePayInterfaceList (wayCode) { + return request.request({ + url: '/api/mch/payPassages/availablePayInterface/' + wayCode, + method: 'GET' + }) +} + +export function getPayAmountWeek () { + return request.request({ + url: API_URL_MAIN_STATISTIC + '/payAmountWeek', + method: 'GET' + }) +} + +export function getNumCount () { + return request.request({ + url: API_URL_MAIN_STATISTIC + '/numCount', + method: 'GET' + }) +} + +export function getPayCount (parameter) { + return request.request({ + url: API_URL_MAIN_STATISTIC + '/payCount', + method: 'GET', + params: parameter + }) +} + +export function getPayType (parameter) { + return request.request({ + url: API_URL_MAIN_STATISTIC + '/payTypeCount', + method: 'GET', + params: parameter + }) +} + +export function getMainUserInfo () { + return request.request({ + url: API_URL_MAIN_STATISTIC, + method: 'GET' + }) +} + +export function updateUserPass (parameter) { + return request.request({ + url: '/api/current/modifyPwd', + method: 'put', + data: parameter + }) +} + +export function updateUserInfo (parameter) { + return request.request({ + url: '/api/current/user', + method: 'put', + data: parameter + }) +} + +export function getUserInfo () { + return request.request({ + url: '/api/current/user', + method: 'get' + }) +} diff --git a/jeepay-ui-merchant/src/assets/images/background.png b/jeepay-ui-merchant/src/assets/images/background.png new file mode 100644 index 0000000000000000000000000000000000000000..742834541244aab449ebd274b6639b9710c13545 GIT binary patch literal 267104 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%0DCtlRr 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

`35mfpsU za=HKWnXvE&VP1ub(4}|UIX{3NwjFJ90|br;3HmouC9_axhoDMt^thGMNeIiqM0Y@mNbvz-Fquoi&BK>AInY_Klv zt0G-M++3Dc=j5g#|MUh7A3r<4(%aM)-tBJ7R`MfabaUWR)g-r=&Hna>Z$^_623<5uyh;%$+ zzXJSFq-7kPCYQg{1X603!j$!!M(XeU3ONtcw0Lz+;9Z~TDI#-uKm_BCCiH`~B-ssW z@fQe1&GWV3@KFQx6~gNaDgh9{UZ+p`0lJjvJs^H3^hwiwNgu_<5t)F%YnKD%VqJpr z+vBKB`CxO!bsofU zFort1sh7AV?#iKK&F#Y%zZRV0F&M~&aCg}f*U~U2|=dQ)9g1%$j~=r zdqMrsRY#t&)RyzHn~u9n>NP83{+ku|Zh7-!u#|=a7l>stbAT&Rz^Xvpk_Z%unXf(! z9Ao@6zV4`ePQcb<=(?BqSBCvInL+ld>#ew^(p>-tWnI8eu=x0bg$^$3Qw$KmjFy5y zQ_Wl85&A-uyZwv$!aNT-KQSf2{nb>*CgEKXwj2ILFC652OfG1u(Y(97Qy`e&D<0o> zmBU8B^1d5KT%D>v&`{+2X}ia91BOF`isp7kc*0$2GA}6wq4CIrQvCsK3YSp^ zZui-YCr>C^`&D5I2))fZ00+V0iRnshAdqAaL&ZURVN?dF@5Mf?8)OemwOQD_Em=W; zxk0Fu2thvfWLdrY+7)!ry;S0mwA>PxAN8^~h-GN&_!(OJCxl*_8EUR%Ep~t5+;yCP z)~Drq)+}hb)O+;t(~oNd|6+S25LVfQxUo(Q`JzuhJ3Ua330{<1UJBT^S^#?3q4VYP zI;WCYeJu)3hPqH<>tsY~(qH#;P0B7$r{o8w@xL;P_{8CFQb0zbvMi`J=!FAz-@&%3 zOhD`Ksp|Z610Bu1CHXtQfI>E^ntS2Vb=z7^jr7M@UcQ5<#~h#K&qr4}DC)^F74tQ9 z@7%DYm|651x+;EjjyNruXj7y&J56E8w0Cynh)~p+^Z(q+;>cjgaQv8WTzdlGTDNzC zz@%m3z+bU{M&g9ghWXEca!n#wGo1iM>lp4puEvkpKxoCAnQjM5y-RW`15s}|U_v(> zP=Wve^yi!-xd((=W|Hu_qk8Z8|9^twY~HWeZM=cQ;<*K8W4jKZB;3hy52p%&W6Hl}Utsn!`!tAp6be1BfD%-^D^UK|kYok? zgQsT_5cBK4LL0<0PCC{uqy*`hgNhG-GpLBl1#7@-`BojAUg|A9a}E8XkE42GXwquk z9kHlad_^}2(nhTh>&r52QOKvamQJ5jxJX39#ZeO&NU+<6r_S`!0&4hP9I2#iutbh| zzZK86mBkaC*M}`%(d4JbC^vw+ZZiwsk^A+OSV=+)-0P2L`!~Rv13G)A?>O)vF=`jq zH$VUwUt)RlAtBSW{wl#mUiKhg<;hk0cbZu@ZU&pjO@r7R`8VsN21fHuMbGnRU~;Sb zWY}lo-+`R}&Djv=2U|Yzfw&8APa`jMX&h)cr}!zq5dcTME1U=PHK<=$~p%~OpRuM8=5thavPYk=c(9%jTZ^ZdX}BsQb5{SshaQ+xdE6lYiAA26pD&uLR9rymUlWWvF?VOhR|~q zx(ryWje%Fm+@KkFmHHYkD{Dp)$6!_<=K2PNdv=_v`vWBX?4keMZc{ik_tdJS27;I@ zX+wzS4A74wCkV7^h=(F+S&QNC_(X>kBFG(y+gdIBfuDZSp+=&y?EeU337WI{#@T__=m!P$LetVZH$kMWZapL3VX2 z+wKKVzQOo7fXZIT*qE0JKi`&>7>7w`JeR~TIG&?$&!firUa1Q2wLR7JM|H=%dno4< zs2)X>hd8tsVWE*{9wevxvjWp{9X;_YkdON$H-39Og&^+#QFBid5guinz%vKtkK17W z2%+I(ccStOM3{Ao#Bi2&Dn1ZJn|ieh9=-!@rCkQc0+gg0D0{9BXn4LyD~h zySFJQpSmVgC)$SICr2qC-nQUJooideROzMs_FPqfA?I2Q-rX3zUmISbdoQu|9 z3G`<%22hReR9gZ0Uu}ipf3+2~E$2B0b}6H1U!K^yd<(l#c8{8@N`*-Kisv3d9Sgd$ z_)F5)q99r28ZyI=KL2r66QD)ry+n@XKDlxrx8fe}m73da2ld5h5jMW~5y1ju55VGx zQdrc2gUEpL_E#w$Ko~^}yqnVOlM5oH6+0LOg0GO7#E#tGFH%m@W((-jf1mcI`zX{a z1swynbixA%10i}~*p{reo9hPQ*Gva#pkD+`+6MxYwzcS}a8?@lHxsy&LCT`x{3T)C z=U;#^EdAzJ&VUWK*?sLx>gL6tK78h}&<{!aY9)=->x`NtRdDK?E2*aFBGe0x^7e#@ z*-33_BmLjoJZ}uwujg#dkdAu#mVkD5d)@4kFNm|WOyD7r(xvtVXcJtw`qPy`{)(g& z1Wuhboi#Yr%{yz`@+(U=qdATu>FLee9(~rpp?UH0bQ`8t!22H2c<%mtqmL=~)<>c^ zfzIIdj0GQQ*$u_F*JTR*?39(F26GFJRVZ3%C|h5{xQd2c@OHh(ug8;vSA)tkp7kNP zwhB-E0%ZK}+?jZ+&PKLogJ}S}^CiD=FU20kr!|!W_hu1iUK2TMH>p2*YqH}HU#`m& z_@~f7#~bqVw}ak?cKbfjDHTp<&3HJMmQ4t)!%I!W~zXDhm|t53sq zr+V4PycdsoVjD58*)1NP2RF1Enx~yHlEj^7wmYy51t6iwT>ez=P;V^(CFA?R&e1O)w2@)Jbv0bWi6=tif`z~fU{N1PplF@;6#8%! zd^+-$8Q$WYk`T;m$=#&WwvYXTI&Rp&3w+aZ%S7121YdNQV)s9kRZ6+ zkT<#sNIsHY_{pheEm^O5Q9kI!Z}gaRgE|(J#L;gOXYM~6-ZQi6wJD=(d1$sOyDHYxuIQl?z`q2Hx;KvME- zXuM#>``Hhx$i`wM6L2TQ-k1^Tn?_CsS5LDTs*)BpCrJSob!nFC_3ZZ5__ocaNy@}U zk22{%KJ;A7SwXWiK1S2wvEIPBpttU`BnrJH&n#C8$~8ZS+sFR@0MF%-X1q_*X}K;3 z<=UBsi#307{J2ZCB%FJ^Q2RCrVA~I(*j>yxt&gXyRLR_Xu6oyZhEyMi)v)s%wA zQM!qy%BBD0yZV3SyMP{4xlLWH&VFkw1DmMhpV#z3xJ^*n(W-Cb#PKm-7*7?45f@N& z&}j3s25$sTuf0Ti;srF^JB3XGM_FUnnfkpSJoy!c&ZH^0DqRg?**T8VKY@qzmfCj?n< zIHT+e>0I}%AV@b>n6|JG5ph%P`O_6CB7_wwLjLYX zHvDfjKW7uFEk9T=yFpIb%G;UwE+-|YyOcdSA34btfs6&q8U71mUF(I#bIKV zuj((U|3|Juw`|Q`$8)v7Y631c^FOtHO14ith^JGV@V=KP?hQtORSCB`>j#_2ukf>j zQ1VAJ1mhOqwv^Z(DuMMQ{ENF_{Kc!L3Aq8L9~G1|>mdCn@|RNt5hTlUibPF%)CHc2 zLGuo;CFrfdYpMsodEJdd@v6*&=ehCfjv3OgFP%D}M1yu~7~Asn#uak%xc2RB`#Pxq zbuF#f@j^v;`0QbE4C&S}bUZB34ZntPuCl_wN32L1@vjz10v{@U{rIG`rbpdt>~Z`R z;xr_nNqQd}g?g=X_*8ehRIyDz@#5Z*QHlL6&BZIzHHjPp1YQC~Jlj{Rgg%PaOKhqe zyAhF-9jdiSfcHI3A1{Dj>!^%aIg4Z^fYC_rc0bwiO_l)@sB_xULqh^yxj9+Fp17A6{0QaBu!|&QSOz#ZxtDW-+<~pO3-av}UESZ>(I5JN< zS?y8;|J@fIv-!o#Y3FxQadGJOqt$PeLFVS@FOzeZ;Ak|Luf;*;r=Aqs;)`(%*&83$ zFNr`nzSgdPyduTBRnPR5fv|ESiTcBqR4$7aCrnX)}RyYy&d0aDipmB_nuHTLLef*%tQ5Fk=C zAo4>O^OW`E;J^**U70`Gl_xrYuWfNLjIUp zGP1{sT`W<_`nAo2KxW3w|Irs2z7p!L!DuNc`p--v)%E5P+Itumi2!<`_sp$6$D41Gre_=6GJj^OWV0Cm=A*XE=}xXxU@H*=N?R~#0hQ+2TBV^^>3rSap%pA` zKy(M{V`=koGvj)R6fRyywat-RLUM||~K>JN}y z!E_zRsn!X`2a|VGS0uY_iNqO7DLqhOjnmT$o0~&>VBv1RjQrb?xz*lPS1)Hg+DlSi zIxrqnCvgeYH{bL{JmB8jM$yR7^A9hVzE#0mO}XR`*pXfeC2EuC}yczxqOUL{tN(8g%#nT z>ji>Z(127qB6~LDfOu5f_5{8SvUM+~cXt-R{^mdQ0{`)4;6HA$BY0H6Di9vdS1RpX zhBsgR6?I>_I8PDJ`$b!}sFUY{#WD%(60qlXJdlo1@p$B=%XjEp$|zeK)N8$VjN1?y zP>K_4hGd3eQZWmEj@|3(TZBoriYXmf-p>2mlENk0hqt#~-76TbDY?MljBJOT7qMH1 zw`Gbttr+#D;c*5@*S-F1RyG%3L}{Sr?G${{-_+nQRPgw*oOZGGmfg4^B*$?Y+o3LelFz4HaVHDx`AM`AxhXswB$asn1=S}<-?BaGW7*vWNf^MDrWeMrrNui;)# z_ukjW&8N@7k0Hu2Kb?aju(LJ&>KnRnXV%_|{T-kvf0CXNEJsUbQK#p7gV;Is1AI+d`p{vL8o zzPn?N4xcVf&yM$ROyV(P5v?$(FywM}_s1Y*w^xQaXvnaLem*IO!EZ2?uRpDCS_kgf zu3K}@z+_ZPu$R^)++t(CEYoxEH*pc3`Mpva;I2P%^i|847VLsQ)~m^J+%6Rr9Hnsb zHybWc0i(0iX`f||H|zH2gDB31?PUkwZ?+_rq~(NMh*z&1Aozn-58cWe_lXd@Lbs~G zvP>`Y$dg-Fm;J_gI>Lx*@B*B#ZY&gliL%auwo=wuMEQ7a`|_y7E_&8A&|fy~lNnV0 z=xp)Y~1*c}`n(*s;o6E&7wQD2ng?nL-5q-CD9&$+h}1)31dP#PIGjBC*sG0+r9=vj-Ch1aibQCu%U8G~p+ayhk&*06PI$M)-BZmV|>o zuPz>J}`pnWd6+bh5K?YaMUYp?zVi+tHlgxt!ehcjMm zn_)ljE`|Ceokh;P>HY0bhttpPn@1Y@?pvRoPZT~clF^ODpg#-oZJ0IZ&yc%Prc+adugN0 zqRKUncE`JW>JCB3|7#QiGHq!TBDK0)oUH6n+Zu1VAVS7!QN{lFyU;v(Ve^OYJ$LUv z%P!+^UX=aVF;3B{8A;T!Mz4^rbV4(G2X)<;cK0Bbdw{>S`&g`m-hS0)@sKZks@$ zcVvS~mA26n*u&jYXiDxUc&yOem-2zSOwO?GoEeXbj$6&$eC$lACvpLYWk&^@8rtxD z_QvsT@ukOpKyj%dfBTAioiJtnheMxjkoW%ZZ!wU@>JUC@!<*W^PGHJwQ)0j_&{@F% zL$1GfafzzgG2gv_#$)^WSFyG}cckCK2flX6U8_&pl67x>$ASva$4HNe9@-!7 zBb3<}OO)J>aJcUg4S5n}lpftWo%Wq;sKFb^VX8LU-g40qmI>U!^Pc%Hqa&_%TK0() zh-$4NKHpgNO!Hz)J$gt0WjYYg$#}u3)OyVE1kS3RPU%BMJ(qr;LKaJtU&kyxa5km_UF~2n{ zgRZ;Fgr#}D2>I&sdH!2lGxapu5U0Z62iIZMnrihb_-`cmXFWc^e>`epwSMHP>f;WqBW#fZbou=>A={LO;wsiD1V`+ zJJ*0nCssH0uj?!}YTM72q|RCxzEYyr(lW7KMi^sT7+iWA*kT`->0xFN!Hqr&Z@}#o zDYTz6y!q|F{8832M*`ebX_imFTWk|Eo z$bomA=xfw+t&8pI^4h`*xR)>sCtD-kaOHBZ^})s#XaC8~pP8f2{Fx9}WoE9L<4$a5 z@aA|M%vlz4w6}J945imbX5wz8-COVGUB7WVoe6Ar`sC)!qjtVZ+-`Gy5_{uZr4A%h ziEZIXCKcN2+0y4((43hv*MA*h>(=^U-mY*Pi0;b{`;C`6J>}SZlsC|CF$w4jk;{DQ@AMtksMdymsgUu$!&)KaoFmDPdIv(Rnv<7|-qirXD ze_80*BZX95c{MKGBnb^;sM)F$Z=g@Y{KzveYb%8?2bp(2Fj~*e+#N9~b`4+#)46UZpmQuud3l|z zP*g9d`Dk5K#cscGZHAck`3OmU7jkJg-2Lk5wo@-1Ljtt}o}#^*@Xw<-s@4B+_K63i;OI9^KBjC$*}k{wHg>vF0+~ zXq4Do=C$SYLaWX1QC5h8zC7rrapl48#>R=O=h5sQ?nF+o8M}atYuA>?Th|yzmu&iK zwi-HoWpDJ_t;1Gk1zeHB?yoJoI^g8w`e~rch6C|s1wQAZtV)D96iGf8l=~e?UTC0BoMr%JJ)YB++ zL|wcBTz_$5@ia?Sa$HTbIIZ?w-R%kOi3al7x(g(RjR8hC{a<8Od;^kxZH12vfnevR zGFzGhdoXxH~%c6z5o~|4Zy{)lVoG)DC8^NG4 zhv=iD)CB}8=xv}+cchiMXwN=WUQTW*G$Y)_yyZ$V*j?V#%s7X~LJkoyXxMqa#ZSwb z#TT##vyFBM-ghw*Ym6J#PtbPdN8cSCl2dE&vIoTC_&O2ltv?+XdbA?A&`l%V1s{lF z=|LvPLn2WVe)8T=J2Un4{6F4-TH;VXGuDj$V#0n790R7p-(RK5DG0Ml+u)?zuPzW5 z8CstK+x3`44P-_RLA@DT&Z-Rr#-TDKA7`*#H2&!gsBIL3K@7F*rg|uosmasQqFH%b z6Q)j%@1|ja_EVmVp)93r54-}1Ihy^r8NR-FB|Qdp4pHG&VLtY!(`j(KWI1YXg;QZ%v1~+O{R6UNL!2}X^joxaa zk-aRS9g6tv6QH^=Axd1dlm+!O%jGl%O%zYkFPYK_>+!5L7Y_QGeitXL0d1ZdTIC{f zHY>Vk1_b>MkRGiOn^el*q&Rtr7#P2+H%MxGvEb9agIfzC(am9>;83SY>*V-2!4k*7 zB7mSu2DCQ5#DM9lgPe^iRQS1D$L!c{pw5pb+E=+!b(*MY`fazV!m;03ugPCzi}-)* zPdr&sL0pW-KKEN|5jzQF8GyraxVt6{+vuTpwMkgnAcv5teQ#N_zON*yc+G>_v(zO% zU?sxAK0JsV9zzu1?;)C&UJ?e!AIB{Wrb-~Fh9tnjyPdt+J2}0ux4!P%!{f_7wCawp30WG`3Lg$C8pLk= zwaz255*NPlF5G(Cp~k1C=_T6?a%tZZ%{(*%9&00A<7B1xC9+bMBj~$8V^a%PYTxI0 zt8Dq?*{xZ&U{e^peBwJ3{P#E8(dGPwKY#oVk2j_d(Z&xaaM)>akdJ|;LJ@HKuw_AOM_%skbi#i;{&`M{IGIYUFMo=c~B~sQTz=b zXV4p?5)WAcP6)f%5>zKK?k|#-aw35-qSWksG;MEEJ=rpR^VC~*_v-P#rR_z_%u>$J zRI3evs4dp`$&+`n+#rZ&^2vaZlW5=Z6jBE8>aK8OWaF0d?lz@Z^?i6W#g(4_h`QdXk zWuVI1#+~7&-V-DDqxy;Oq%|w3k!zJrJA)frCx6@zZIgm(@VNeNc-SsFtRg)LQlttW zl$Ub%)+C)aYnE8KZVn9)4l*b2&T~JmmB%y5VXZsNDo2)=_g$Y2J$q@+PK3ukp7lCN zlMCNJftv=2X8!Jb*B)m}zZ$;q>qnoR%b@V=G3=Aqj;~xO(!CR9V~M8pVCKDQ$aB*Z zhD1p4(;d`vypubqg_QQ{AfJ}s>!p7^IzjOqo;6aE)dSvqMx<+YzoW&|Re4iU@DPgKK3!Ow42yrKQh zfPo-;Ozua9_b_`PQ|9tD-CxYq$`0jpZ|>dQAkVjrTsi;nj~Ts{H}!MPxH)eWoLnA% zJk903kmNt-oi^yna2MUThd;4Oiib2w^vf{Xqvdh?+U&P8-;Tz^q2@8_>X~V2SCK4Z zq@^Prvz}Us{%aU$V?EOg{YsKO6{6C&W!Qt0@P*zxSLbHpeiI)uR5`nYc$d;l76J^| zvsPd2y;-7NgEe2zF;-tf6506aWpy^ivwQcbm^e|S9-H-sQWT`p;4ul3_M-Pqo z2+ot(C)DSNO}r_cJYYh(Jce}_z!b>v*S{%{E&D^l5_*0Tg5L&WhVVtRT$qnEZIi3E zt;#hj_NdZ*NLogtA@LM(5GYmQ4Toav>odHj(F;?3f{ilY+pExBA2Wu8_-kuJGnxg8$w7aBDj*%H8XUm_meaRV?Z@!5bWL7 zcF_*E!2a|zk}?lISj)Kk52Tsz0=+_bGnhR3M`?x<;snNqo^!}$a6VCvcytQYUyMi6 zL1eTO#HN19a=y&xC>1xbM2+8obAGG2vq*=EtBh-u^Og-?7nj8yr{93X_l3oSQBNyx ztX{5sC13&Ja=N1EpaSI# z4Zgb{PP;3+daL)bU#{>tQkkb)>ywRKi!Fs&9e2UTs#}xlkp_&g@6p_z3JkC*diRJ* zq?to3R*n>-+X*KPtO=kqzw2)kd*)g3O&|c;qzh$|e{U#mzw(k~vM|Lz#*JO9C20EY z3Tq<(v9hHU%?4P#lAfU_&wms3njl>^o4P)C0xNqrk?y`5HaNKew%K2fktXrE%QkSs zy8$|ldi3Gd+V{pl6OS{Qa_|&LV_0mUhfErMhc~tPy0-%qR&D5j{~lGX9oBK;ob1rj z#4K1^5+27AM4$YG+5390lP=w!TJCJc$dog=t?vqVCFx$Wka_r8e<2`t2jow%BU=lI z?uB1_*IOj|#myPAj=Hd@lW_9(@(p}r9FG@TY*h^F>Mc9NSU!c@!=gvFRyM*H_BM{N zZY%5XEtD3M_gRwan{iW!`Iq}Oi(Owxazd6!4O(5Nw~$Xek@W4aRz4CW1GV?O6~Cn{ z4r)@`4azhx?W9 zvmA{bJjZSDfoY#=RcEB!Y}NkAy{Q4p98O(0>y9_ZCzjLbev%IL)*6>!>qh@X;ikk8U)8nI#G~^Kf2zD9e(!O7u?p!RF zC_TE)%yLDlNxj27x>w7jW^XHo5(0gi;A4V2dVaVMlMmb7^DVle7J%euCTM6@YgvT60aWh~(bUyd$P=gE@aOOBE%q5tmE0yb8T%od=qxF+nT*5>@KFidX$9M=@uK14I*` zabb7BX*Xa=Ihkw0^a49J$k?4Ltm}W)-G8?GS3&d{+Qk$djrVHdEPo6Bf8M|#?&)t) zlDW|V4~A{s;>rISQ9vTnOom@7G9MUGJaP%XrA(T+*`QbuY+#~&w*#+s>bfY`TH6bZ z7~||H(vxwsMuq%HxBq74K0XT*=UtBlnKSB<7Ln;p+nAznEx*MA0v$-_g=}9e<+FT~ z)OC?qtk%ENe8+lobboov9DlUC1%pCFvbQ!|k51eV?G=nL$m4|#o}sx^Q{3VH8_MXo z@R1RO=G*7`(YWDC?}PwGp$@FPci0cWnNQaZ?3POn5n5lDw_hDq=flslE11uI#G774 z+O8r+A8tD1ByW$-!Mq;Bm?v@0&Z}emIw#Nlh_o-xldl{q+u1pMH$G-NbT*KXVyvun zDE=@)xWqWhPY8-jJ|Gr+hd>(-5lI!%$AicjRN$=-cfdm-y(1gE7JHsD&=)ei=mi)7 zaWa9Dw6Z7Ez<|fSDagTWVuCG49(yACPa3phNb{g-G%j%ulC$<8n-<;?O=z<7^3YlLzS*Yug0#-Li)HAROd& zKfm#Zu^NW zvrqzzrOyo*W&`3tfP{^r?qH-d;Zx}3{DkESDFIT%woY0gO(0xmy^hvB>%j7&7))pOF>EFscU4I|b09MKzK!w(S z!s2XSAnnS>dif9-#|jT}rTydGDTkO2bfa4SBOl{@wk-ku4NT>9Dz3VsYa` zmM2TNxg6xq;zpyTXMjvvCi4|2-d(&&N}4{_2{B*IBMsqNnYUd=#^1&{cPxRzkb(oF z&D34Q0_f$0(=v;}*x`0_gxFFnrX|LRsXbznn)p}MZuy{Chp{J&{%yjH{ z7|g5gsO(_Ky)HfndlGI96&9*_8eDz|GFTymA9$9sI9Ev9U~0cpE6GMqZkg^+?CVnH ziC+f<6gn{)wFRD&Q?)8nHDdCki+KXn=Jj9)OnDDCt9if9y}eIy;kmV=kXNq)kvH#3 zGOduCtfg#*X!jd?-1o6SASuJ}J#*l=P50|aY5FYCvQ`0PK+$^5DHv$0FCf8yxX@Qp z$L(asocfk3MVRSQY1J)@%|j~6U0+2z_8kUI@8X4t*%pZZbzI9+G{B-)l8pnH$DDd_ z2kXxd!HN3PirJr*cz9yQc>lod5H6G_f!e=46SMeduJsY;rQ!wX+>e@cj3u!=gY*7$9M+r z?PPcmOXi!Cxvm2!W^?+*ghS)(tV!JBjtBXC!a&g`33c8eyx)ssG~@=%*?(=y=94z;Em6Qr89~st zHmZlC=I;1zeeS+N>j6Ax{-&6#gy?dErT$A@sl7SXzDZg zWfwS(A_+^H0|ezS z8O^XI&2aq&owQNX(cu&QvrjT|z7BX~?kbpL=KyVZayk@yMk#fxyE+F|a#UzT;r%rcEWZ8K8ZdVR)@}m|(K*KUr>{(kNP-VkSh;9lSr)`DW}dG(U}YSM(}* z-BzA(gT=L+{P0hGaU}2ujijSH|7be64M)G7c_TR?UgJf-v>Gl9;WlRJi_2(gB!vhVDs8-|VsPxezCy~{Ty@iwU%>EleC?oM<*SmV{cKj|J zFWPjpRmcjFXK?ctGl3k51RNdP$Q;(Q2E(+51}k6=i{5uWbG~CyesP3Ecee|nw7YFG zN?YKU;W0h_4hm-eCFVhx=f}G(j6&f4!C+5Pj|LyLK?AU!hUxS)er%sv23EEFh~ycD z(OpdV)z$A2eclLX7kR7<(5D<)2*R7gJy7Pn_4|g1jy(*)3l#fQbdfXt7kg)Deb4`; z6xf`m6ubo~1-i-mC4u)lN?g*cN_-#trE)k6W|e{UJT2sH&~TJ(Z}GkgBj2NiI#nuH z)7WR_(O@Gt5Ppd->hrdI+mkHZ_iP+!&tj|fV_OX9SaYYWPE{eMnpU5G*G!j7o3GR; zXsLrxt26xu={7N2{0&wRBE{_&fKYw;n@zFfO2#b-;kA~frjW}?@0$E$68 zW8mA7lQSef^f^3NU4^7B8XNT&>3c-b}8jFN|h*aFqxT&jnY z>D8`QhOT!9zE`V53?AXV>qEBNj!H{Pv*PmGh~(H*Y`q>IYL&Dy9+c=$$fqvc5(`G7 zDsKm$k?b`tA?+$i6aQISkZyCOR!A!;Pwa6$#6tZ`QW>KcLjMS>w=%Hh#{4E$o|N%3 zOlzG7rG5?5BY5T`QZad-<-O<>x7SJTrHv0mXRqwd;MO}&sL#1_ow=S;8Z#jrZ$gKZ zk2SyE+D0T;iuNY9Ob~vlLy~Ss1lMX9BuZjvr8#TXkb@~clUmWLP@`BwV(t3m)}O?7 zkJz(A6JK4-;_sNz#8ri#aPg1*`Vm^u{I1PcHB;i@BmT=<(S5Y!XYWtLTj;MnKi<1@ zw(RiiAH3jbP)k7QU8u|G|HIW^$2IlF{p0w?U=pLdK~O-6(J3K{K}aYa1Ejm9N2{cQ zl%%w@bd7-$O6TYhq&p=B--GY_zCXXm?_VB!Y@F-7&g=E8>pGityWj=9Jv!thF z3*)APnNW|E_B-wu@g zsiTR-KgJO+?l81Je6#=QuIuW9aL4_iKd*dk<=AP>6m+5F5f`H6+ZJpz{?o?`;^O2+S*rRF?SI5wyN3 z`H=w~K!Y$QUYLW*NkK(DGr)cjkTWgQ9X<0bs-m?xIicsRPkO!H*{z?YMoq~mSqb}j zr8H|l|E+0IsqE|RI?=z=%q0+VrVlgBL(TDxQOP4*Q7QVZ_}C5i`wT-@i{IZ#-HJLQ zplgj^$DL@s@8RZK&cfz!*!5z*xXKM=!MDr&yXCyf@{%9v-4q(QNv%|7x^7e`2*W%i zBc3)X-D8Y)H}9JlUwz(ky$7sRW$JftN>I9qCFN5B?DOk-4x+gqG9ZfdZ8m-_K?%blAIcsx1q6?ge^PIW&wXxbWkBE24l0WP&nR;#bCP3> z-10H98UISwq%E9YLqeH~!K!?j9atnil3Uam-E_XRPQmdj;GlIg>(dITvsIfPxJjDS z6JuFG1ktqxDHAW4sqBVtqrVC_hSmsIkr#>y!Oh!8q=ad4`t_{|ix`3xu zOsg?=zi{AU`+^-*fB$&z2)D*3J7&iguO_fn9y?=qe16^{B{>Asham?S%Aw@ z+|Rqn{iqPW?-Z^?*M?jPJ|LfFh2o|fv)WF}-TRgl3g(3^3@Rw~G0agv;I>!Cr_^D3 z$Onz}rBBlro#2EaOhH5ti8#dun`o2~h89{ekEMV*EA8dNkv|y)$)FW-N^7TYYmd&o zdohh^OT8k0uD0MW=&SO!v?FSr=UpZ+17=LZ5-q;|kiolZVt+69n$=0Qo=&Sge{h)u zSO4B2s_`Z>>tuHCf6hG*D-2 ztMY10C4g3sOnP*$46#La$FJAaP-j(`L8gA+tKIvEVvGJ4 zPptG9+r*2ozCT!2u!WY=WyL2pc3pRFmQfkXYYH+rSJsu*qC?*?3rSZahgQTV3y}ir z83r!!z-4$&yzm}J-`pG|+-;rHO!Yf1pF8qFP~^fHj{G0m7H%_Q(>2WLykX(4tYO=!Tm249Q>+#J zVs+zk!!SJ~L;bM(wXs{DnGAK4V{#h#>fe;q^0AnLF7%K$ zcWO^?J`|3$AmCr-RZDa>S+VDCU^QRZG0TXcYeX&Wy#_%Pw856oK>{D0T4&1Sx0Tqm zg#+WKS~=hFVV&lAgZLtmJh^5W4x{c;T3)2W9@xcr21Tir{Wp(PrX3iG+m@+BIFv;E zYDZSg60Pl76&59tmECY-@Dgp?^z~*rD@a${76*CgE|oVrzSUS9`7n9998h+Lzw$X!2hgQEh#iK*tryHTqEekllY60gJ4>mL|HpelbFHSZ7 zP0(!>fcTh^_d9&jF;c4vFQXI_njZKI>qtxROl>0dw**CGcmda*?=V(#);yI2OxMRf zI#jb1JowZ4`NiFbdzZkY3P-qRCDgq%wh1eZavuWuQ3SJawsP<<&S;`H8SH2v2O zNc>07cs!hIiI*J7q!Oc~WtDbwtuw&el7z)#knmtXnC;^FvV5@ITw3o!xg@gMPSk{- z{m!ALD)?=S&oPbdT1`|V;spjY zS~iA@o+ro+>{Pt=L)wvlC3?U}I=WdEbpCfyGn!0rE-xloS<%AOzxfP{XG>7dh9?p{ z*)0PETeOmP=QcCoRZ~k>36YKxwQSnp=d`VJJJ?A7v{#ek&uli+5#e9UR!1H8r}ZYc zi=*49yUaCGm_COf+Eeu-I)`ZRbk2Dw)*^8mo9CEbt}@gLYs9{7%WxSMppX`m_X!Z* zGZtKx2}$}5N8f*gm_WRK^6Y{I|Ni-ehOE8()5aw=iEf{om@zyd0*FLBSOwMCxT6?~ zSv(-$B6~o!tlfflpQL@T?ftN^9B+kgi01v>By&AV{=iA?mfHg+LVpQC&T|Szf783; z>B|FTHiD9lsP5a3uB(aN4<^M;-YI0LB~AwadTm-;cJHy7u-nB9>xIumtRkl1%9e`+ zr!{kzY|laoPO8M!#uk+fGR;$iDtk0~=Yj`l(V&%krbGXm1u!ldGxN{y7bsuQHM*d+ z+ltv^E?0JaN{<$^R$63DzM@ZQP%_?vF{VQ14M|2L#Lb_NTpo!8`Lqbc<@=QEm{eFP z7OvY(-5R9}TB<950Vr#_(Ma-=TaLpj!i7Bt$kU%o!bikNduumh*a9H(dK~W<5#}#R zDge8^9|gf7$vY;3<)#HObt!}GpgAv}S8Y^I#X_9e{uj5VyrCYUY6)?jF%kxbqT-VL z6=u}>8pSma0Gzsi8R~}$k^Zb8&T959C8j)52*n{9K>uUH0(98y?4DSo(JC}FAa!m& z4c|#fADzq!%b0Ghnb9!?SqULA8Euao>gt@Y78_$-t)+D-+^;tZWvR90c5uFNny-Ds zh4qfTXSZzQ?2?kJPk#+ZGDEn{yI69e&X0rA$;Ux+<_ibC^T)?wxYTD1mq&VRR>9|% zMgwM`d0Bq8bYUU$wpXSH4@t?YAMeqA;>EG4`SAXl(Fr7xE>~Q@0}l$q`Vx4!J>e+n zh*S$8ZnT9<;CBn4+okM%M`mE2EHDD)<5ARaqWHl) zF-M(_bi+^+00l;o;T7t|o9Fe<`D0(`#^15#ea?B9OFdQUuE{ybLGa^S|0sY|Upsx7 zTMs6$js!Cy&+LMHwthG?2{)EqNvjr4Fmptl*Y$ury`85d)aZ4r+P1UU)V3Ckjo9Mh zNMU-k#x1WgQ8`|pNI24bXr^h1v9jD2$1W4mtpd+h_7tnV*WN2a0?Kt>-);>7id+RTNubY#Oedf-Mo!uw&;VPFNG=iz z-Gj=Sv@~kcmK!sYHGO4VUZakhXwbl`s@hgDyTL{E{9F}=T)g-i4KjA_;Ueo)@8vlt zqoqjtB)a{9W`32Z7rz-qbogmRqI2%Wx=DwM1F#-6d=!;N6O#+L;O)izoDn1dSzrx!?JDLU*`QZh-;@7_<|d)3Z7&Cn!tjK~#rtL<>XaVza*zaK6Qi`)Q3C|T#K<(-EIr=`f)*dAGFF&YMu0eQt~R#s zdw2#scE$HGks8mqnciE!Q_DEJ@8DOn#n$y;i_IrpHK_j3-Jnrfg30&o*=s;~GtI}Fi! z!F>aH(gNt+ zpXz3U-?#eMnL(p=?j@mVK!^Td_nhB3cLXZ1#9J`LnqUAx(XHO2J`XBsw^wv%YUEvq zX(yG1J%!FUZPmawfyLaDU2@;#(+?CUHdY~=`a9y>9ws-4A5nQ9KwN`m@CH6N4%_J; z=w46YQYCX1;8$F(aiWP;rNqMZJ*7Q-`0b}xfs2r{6%02-vWzef*E9?U%Cmw^%M`yJw zj3U)|p6rK-!L0RAXTtN<$)hO2%@bG%t=dDSz2iHhyDcm@O%e~@iBa|tn(;d~jZtrY|3?Kb+pBMgy92;%}Cwu#13Ge^ISrvPX9^5_10$0B@{?XUja zOZOy6Z=gD$Vi@+aIChhi=nvrAS*=72)V>Q!kxM;~1vq17@3hGEb3vq2K7ct98;PUT zW@FC?gg2lklwA_?S<%8fo;y|$@bd=QFU#4Son=biA0`{aPyh7j`v;(pdU}_~Y(9Qq zPou$=WqH%tJN0c%TCV)$3?Fqn`2yP{I0|9`9eP2p@1jSIiUR{sT11F*n;Lo{rqIN;fu~`*xBRblQASrs{u|Geb8>Ksr7JE5~ z7B*j)Df~WdMl8)$F#un~B=RLLa9Doqkl%5whkXfiwr-vJ}^^e?a=k z+merw?Bh=T7|A!|G82y=m3C17Yfuj4tL-4)%1KH|dyGU8ct*O zF}@LiqoN1-dpA;0=(XwMP-flqlM3AeopI5?N}3AN`p$kB&QMA9ocZ6qr2_Jxrjd1k zvj~f(3yjHKyA}8M3yc+u?~bic@>pe$FMO3`rByv*E-}s+g=s!n;_gnW0Ot#gUNFbJ z$Qn>AWQ`Jy$zFkj(0k9)6>8VT%Lm3jix>O|?#B(HgwLvfC0aKu-9KRVuyrOz5YF$X zfcWI*%ff*2`6oNDNesIF@lvKQ@6j6{^pK*SeJOXztrkTiE%;m?ZjdV4cP`xjE4Wcl7Jb!*Uvf!EePBJy-j*u>_$b>p_j^2QUz#pjVUX~kQHh7Qf=2iYBWaU2rrFySS6XQm`PK(oNvmA%R0Ha1DjL4< zvF6Ko%KYNEMs@xfDTCxVrd3o>mXIqtN5PTGd?PK$tj3c1o{2{|4vF&F$+d*1=~E}M zg!s{EQ@`+p*Z3e4+?M{HW=SqSUP5a^<;HP6Aul7o2w)3YaicC#C$8A9M6ZE?E2AJ) ziA%J7q)3OZwBDNCh!_Q(G-YbutPks92+#}&)42j-9pBcU5T?)L&b*okNZN^9oY2au zq^FIu8Os#kV|{*R{}j#nVw-^Dp#w#7nov**c*_<7^gdYXWYFN+%-`QL_N2qS3rkxN$6xQ$YOuOTkaZE*Pqp33=e=lS zzlzEG;BT^4LV*NSqFG#54)($3DyBGnYak!AGrCy{4uh9XcjJ2R8++!earL64^Od8USFE-2gzK%Y-3xV#DCbj%P;w z&-h>nt_JcIXr80=U&BA278$|jI*;nQqfcrh*D3={Gq4-4Pb zQLYIMOkVNE?={IiqjNJ7E7?d3Vxxn)`e(J0v3u!!DNHC~&jv{?zl~UTC<>@wf?25fd z@S94F^8SD0;|)fECo^_9sa+QiNL}&fG!TiCtkGZRI`Be`_>n0q)&?KmP_Q4qZ+zZ^ zKpOzf35P35cz9x#p#y-o%XTS@F*UcSVhAJ&Bn+9!&r9opxOcs7yGBCfts z-s7yQx~~TP$2p^a=?kRmc-$ZRuQh3jq)sdGFjRK)R3guNK_t}uS}DRDT|ApUMmHZ% z-Wp;V1MSEp3)tfk5aLt&^T8IhgFzlspNd#3{SnX9B}HFfQDfNc+om z`p>=N8!M(A76C;)RBxgYYvUpH1E4Znzh{$1Dz6*_6C*z7F#zwx#?2_^sX!)e7#cM< zift0gY81&3RELrC8)sx)?dCwed7g-@Bv^vz5){8;BSn#-hdRPYQT$#y5l=J7s$pxR zy4>YojjAk%6#=0yqE~6iPXEJ6q56T-`{Vl&-xR8*vb#DRMc(Iyls! zqQsZKSri*~nr34ngSorj;y%JTR?ZUNG~x8Lbg~0|4!Y$LJkC6$HFBIPT5tD8-IE?2 zeScI`!hQmYP;Imgc|2AAgB(+QT+I1Ki-8jug@EzN_hZ<#^g>qK`2h)wx$>F%V9Fb) zRB|vJb2!RKl>dnZj#(J&XV!@un)Zh7>41=%UQVNdk8vVBjlVtew(q+u^02mci47c5 z8};hOPuf#|eRX@yM&7t8%w9N1(mO=#vTm7akT%O9U~PaUIp#edsPWKB)E5;r|6=S8 zvUO=cd00Ygdp?~FNlrHs>lKLOtyADM{#PK%y&^neP@Y4KO;9MX=y!rr^gDtmiG7eA z1oGwCJyFAj?@jlQXX{u+y6p=5#j?Eh-6!zjo4!7ScFuQ4t!IQGx)@y&33mPQjJ{Bs z8)6g&o;k$d;)Q47tUgic{19=M)^y^%^@^+9W)1H|v_aU6xjxrP+E`X0so=u5rOlkE zUHRyFqdl`Ea8xS>w+!Q-{)6T9pn)y;bSh>mHIQxXO(;06f#mjKjZWJw>7_phmt1n*I>CPw5g!9scP%i)RZJGtTGHW}}B?fSdCn3A4B96+YT zEKZ{)s0Qs_S)8Thkq1^|SATXLGEKXRV$V)%X8d@h2fp>+Z!UX-n2e^RxgDx0bwwAN zQPyHx{`NL+*L$GW#+0*iQ*|aAU!7eoR?av5_?nF{jM=<_UDg2XY6^~3qbyPj!&sQn zt`G1-B-}5CGms^ZSImRXhJl*fK`{RlFLOwCzPe=KLnOrdS{Sh(0B`tI!xprQTSo|a z)AJ5+L^<52E*>1@RkoX{amIhDo0Gs+>_4gbIf*Daja6s$3Rlr()_V|oUHa^qa#vXE z`oQ@G-xg*l#bR2QU(A1lb14Cl7#u(HlM zRhRTV+!zqY;8}o?(JIXIj+y6FPB=apj+FjPz@EVTk0;PRVL5=pjdB+D z+W}}??UjZ!Tg97T*t)tHmd7d>|ZvD0`yBkZ&P!C0W zMSnL0cR#>A+4aNAtn>%@1=%W$g%F60iz3(YFdR>)O63?ug9ieyvC^Wl51wHJA4ZaY z65HjaH3iXPT5R73a04Z?B?oBVnb1$d^_PiULB>6#U z0f?wz|Bpyac3PW}L%|_iigLAcI$=u>gdbbf-KMqQ&h!^W0I6?hqxnalxYGC8p%qC> z!+MI*s^*DTq0PI%ApHE|Khta%KvBNb1FX(AbA@7hZUM5 zv?Vo>AI#n$l?19Pj4W|R_IX!B#OQ?^NUV~+Ir!*UB|Cg}2^2@J-BwJJ7sI^HrKsK3mqVk5q|)q^S}^tDRrh-+rOP3D*?u% zC!SPiPB9@wVv9P$T~iF&0|K5!fo4|a6hUYrq`T<+LPJOr@H#VJ6X0EqaE zVDppKJ?%RUj#he#n9Zzko>XsK23J5QMI{0jMVQ_uF>16SGpnixWvrZT!tbMl*;1f? zQMYwbxKjW}8W7;rmxN?*SpY)IHUrvpTUqDLy;8EZfN&-oWq_sy9A+QF7C!Shf)k6T zHI(dc31(S(JR&P(Eueoi;bW6$<_rHYAdSEK-OYzzJ%u4Ihf4(hs#yfK z4I${z-MHi1Y;L+a6Kr>mV*@WA@qBUf&+1Zl_uckVnw%zIqy3E<-=BHe2g4sZRuDm`j0&zx3g8_`qYs;HgnRHj9(KBCA>YTd2ArA+2IA9AZ&M4N{ zr&S}_=h#!$QRh(O2Bw$MtZU|!l_5i{y`Z~UEw%}wzfTET_f6OC`%MOuK2k%No@ntuvUT=*&VS3mS`=gYT$#=8wFJ5-Z*7ktJ7GBV{ z)r_*$e0j2MJ)AN9DxK6b?qYLCoa}!Baz=)%M%()QtbkWx3ToP%7rgywnCk-?_5UCa zOvQ}O*6{0q?z4$~Ah6_MLLOAFPq0wk@%QzE0qDk#3rQB&o<11F!dCq0A-_mYt+T^i z?n=3=31(Q72opmZ7t8|FH~K3@@XJB!=LAKxW*w15)R^B1{eh(Pp)HW{# z{o_&;n@c@r20A3{VdG%(!)|C|kAz3BiT{j(kiI8^7l;`Rr=0PgrB9GB;8%Wf=YEnoev3zHGuDYgekadSe*XvF!} z5B}d93zBJ{Q)$l>&2b8czZP zS`+d&xgaM=6p3ZwIh9CKGr0xDtnW((OWo~p3vL_!Zh4e_r^4hK>+zT;n&%meTwj&Y z+ESfEA~nO6DM#kzA?-!c&kh6BJ0k;>j70v(OOB&0QaVM;BipU{KP0}i z1raIB%Ljt7UJBS$I&=%}p)@d~Z@z4nxpt?m&H;gFjLpB|NMY2z{?z2sA=cY!wELL+ zCn?b7r2=`~tt}oQ;e6`yJO((}R^WHivti zEcG@l-b=;bQd+NIh@Ens2XcZoZyoxtoE!dSS+&nF>NqgJw!W1o@`y2OY7OOJ+Gv28u;KrkB zG?MLZ8(E2c<9E<{%t>B7mq5S=RLpM6!fApRPE>3Dqa zmclHOaB2SS-oq0+BgW)i(%L6Wm~D-Vqq5a4r&hn0IyyS3uZ%K~A7nx8pqo zJ87ZCe8UC3Yc3xc2t)Nn{3{#P59EL`%@`DSyxCtVi1cb}|5ZdJCh?Pe8oC@BD=||gR>zO*rPp|FqzG?9}KKdDdVV01xe10(kaQWrmRJdGG?AO*G&FaLIR+QP)SMa|;kiK=Ik z0a-4ItUYhYTj51uqN@gf1i*SmVTZz9FugB%F5{HO*s{+c-CrH??*GXq)@PZIzxtlI z6cYqs!jsRe{}0@D*ckQOq=(Uu^9{)KR)+^{yzGZ|hmv;VU!B)$jx-cS+r7NynJ=iV z8fB!(cTA)E9^88{NATLy%aYj&WY<|<3%s!cMx0YBn>nM{N-MG_ibNfTshvjk&a|vkop(EvjqHfoW-r?&0U_b$|srgXr@0ZiZ`Be1#3zok=DMu@R z$?x83^e7`SlkbCaey&D&%y%hbh;S$pkDeXiC;&oNFgY%;EjU-+ct0sZK}AX@C+Fwf zvu9aEK^Z(DUa_WWbah?wqf0PEnM3b-s!LqRm?qy{uf~BR1`wz@G+_Y$0EevEu;`BQ zXWPq-eVEF*b*BdbsakRekA$CxtadB*D#Vg-x+X?>E;Hn;j_9X28UFUjH3ZAoe^lnh zETMI#kfK!4YCHGtt#Oc}N_N=?n_g&WuC${?oU;I?G&KY^q!?w< z7>t{;41YFFA!3mfu~uamz7p^aGJ*=kV@~<4!M*aA+WTEIp>O?EEeg8n^fOCo>Xd0a zlrHA}M$wI#R=@VlK_&xTiCgxu^yl(;l%xuOqhhRk=oww( zNM05C?nH*Uu&E2ruT#G+A|9UAb?;SC-71H0&?$T{1cgj!vzz|rBlz$$Nm=}+B3$K9 z%aVKa960LTh_-n-IdE>ksxADX54xc z=qFb4OD<-cxA@HG%TFJ>Z(-5ar%%0D`?Nb>6{P9WlAg)nxf#D)7r8YX@HQw_wA{e; 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%0AXK&$|d9_@YzmI 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 literal 0 HcmV?d00001 diff --git a/jeepay-ui-merchant/src/assets/logo-j.svg b/jeepay-ui-merchant/src/assets/logo-j.svg new file mode 100644 index 0000000..ac7edf7 --- /dev/null +++ b/jeepay-ui-merchant/src/assets/logo-j.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/jeepay-ui-merchant/src/assets/logo.svg b/jeepay-ui-merchant/src/assets/logo.svg new file mode 100644 index 0000000..7e60317 --- /dev/null +++ b/jeepay-ui-merchant/src/assets/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/styles/color.css b/jeepay-ui-merchant/src/assets/styles/color.css new file mode 100644 index 0000000..e69de29 diff --git a/jeepay-ui-merchant/src/assets/styles/color.less b/jeepay-ui-merchant/src/assets/styles/color.less new file mode 100644 index 0000000..786843e --- /dev/null +++ b/jeepay-ui-merchant/src/assets/styles/color.less @@ -0,0 +1,17 @@ +@jee-theme: #1A53FF; //主题色 + +@jee-back: #F0F2F5; //主要背景色 + +@jee-card-back: #FFF; //卡片底色 + +@jee-theme-mask: rgba(26,83,255,0.1); //主体遮罩色(10% 透明度) + +@jee-strengthen: #596380; //强化色 + +@jee-theme-hover: #0033CC; //主题Hover + +@jee-warning: #FF4B33; //危险,强化警告色 + +@jee-inside-link: #1A79FF; //内部链接 + +@jee-external-link: #AE1B6E; //外部链接 diff --git a/jeepay-ui-merchant/src/assets/svg/403.svg b/jeepay-ui-merchant/src/assets/svg/403.svg new file mode 100644 index 0000000..c552ca6 --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/403.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/404.svg b/jeepay-ui-merchant/src/assets/svg/404.svg new file mode 100644 index 0000000..3854e5b --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/500.svg b/jeepay-ui-merchant/src/assets/svg/500.svg new file mode 100644 index 0000000..ffa8b08 --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/500.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/add-icon.svg b/jeepay-ui-merchant/src/assets/svg/add-icon.svg new file mode 100644 index 0000000..6f167ab --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/add-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/background.svg b/jeepay-ui-merchant/src/assets/svg/background.svg new file mode 100644 index 0000000..6fcadcc --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/background.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/backgroundold.svg b/jeepay-ui-merchant/src/assets/svg/backgroundold.svg new file mode 100644 index 0000000..89c2597 --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/backgroundold.svg @@ -0,0 +1,69 @@ + + + + Group 21 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/code.svg b/jeepay-ui-merchant/src/assets/svg/code.svg new file mode 100644 index 0000000..5f9154e --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/empty.svg b/jeepay-ui-merchant/src/assets/svg/empty.svg new file mode 100644 index 0000000..757aaa2 --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/empty.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/jeepay.svg b/jeepay-ui-merchant/src/assets/svg/jeepay.svg new file mode 100644 index 0000000..2acc4c6 --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/jeepay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/lock.svg b/jeepay-ui-merchant/src/assets/svg/lock.svg new file mode 100644 index 0000000..e16119f --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/mini-logo.svg b/jeepay-ui-merchant/src/assets/svg/mini-logo.svg new file mode 100644 index 0000000..47e17a2 --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/mini-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/more.svg b/jeepay-ui-merchant/src/assets/svg/more.svg new file mode 100644 index 0000000..558442e --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/more.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/operate.svg b/jeepay-ui-merchant/src/assets/svg/operate.svg new file mode 100644 index 0000000..ba110c8 --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/operate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/scroll_down.svg b/jeepay-ui-merchant/src/assets/svg/scroll_down.svg new file mode 100644 index 0000000..f8288fe --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/scroll_down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/scroll_left.svg b/jeepay-ui-merchant/src/assets/svg/scroll_left.svg new file mode 100644 index 0000000..ca7632e --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/scroll_left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/scroll_right.svg b/jeepay-ui-merchant/src/assets/svg/scroll_right.svg new file mode 100644 index 0000000..222198f --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/scroll_right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/scroll_up.svg b/jeepay-ui-merchant/src/assets/svg/scroll_up.svg new file mode 100644 index 0000000..6f84cdd --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/scroll_up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/select-code.svg b/jeepay-ui-merchant/src/assets/svg/select-code.svg new file mode 100644 index 0000000..8d9ad51 --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/select-code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/select-lock.svg b/jeepay-ui-merchant/src/assets/svg/select-lock.svg new file mode 100644 index 0000000..d2771b0 --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/select-lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/select-user.svg b/jeepay-ui-merchant/src/assets/svg/select-user.svg new file mode 100644 index 0000000..1f3338a --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/select-user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/assets/svg/user.svg b/jeepay-ui-merchant/src/assets/svg/user.svg new file mode 100644 index 0000000..738fd9d --- /dev/null +++ b/jeepay-ui-merchant/src/assets/svg/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jeepay-ui-merchant/src/components/GlobalFooter/index.vue b/jeepay-ui-merchant/src/components/GlobalFooter/index.vue new file mode 100644 index 0000000..59caf52 --- /dev/null +++ b/jeepay-ui-merchant/src/components/GlobalFooter/index.vue @@ -0,0 +1,20 @@ + + + diff --git a/jeepay-ui-merchant/src/components/GlobalHeader/AvatarDropdown.vue b/jeepay-ui-merchant/src/components/GlobalHeader/AvatarDropdown.vue new file mode 100644 index 0000000..dd71413 --- /dev/null +++ b/jeepay-ui-merchant/src/components/GlobalHeader/AvatarDropdown.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/jeepay-ui-merchant/src/components/GlobalHeader/RightContent.vue b/jeepay-ui-merchant/src/components/GlobalHeader/RightContent.vue new file mode 100644 index 0000000..36d2be8 --- /dev/null +++ b/jeepay-ui-merchant/src/components/GlobalHeader/RightContent.vue @@ -0,0 +1,55 @@ + + + diff --git a/jeepay-ui-merchant/src/components/GlobalLoad/GlobalLoad.vue b/jeepay-ui-merchant/src/components/GlobalLoad/GlobalLoad.vue new file mode 100644 index 0000000..b984a98 --- /dev/null +++ b/jeepay-ui-merchant/src/components/GlobalLoad/GlobalLoad.vue @@ -0,0 +1,30 @@ + + + diff --git a/jeepay-ui-merchant/src/components/JeepayCard/JeepayCard.vue b/jeepay-ui-merchant/src/components/JeepayCard/JeepayCard.vue new file mode 100644 index 0000000..c04dc75 --- /dev/null +++ b/jeepay-ui-merchant/src/components/JeepayCard/JeepayCard.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/jeepay-ui-merchant/src/components/JeepayTable/JeepayTable.vue b/jeepay-ui-merchant/src/components/JeepayTable/JeepayTable.vue new file mode 100644 index 0000000..a15bc57 --- /dev/null +++ b/jeepay-ui-merchant/src/components/JeepayTable/JeepayTable.vue @@ -0,0 +1,119 @@ + + + diff --git a/jeepay-ui-merchant/src/components/JeepayTable/JeepayTableColState.vue b/jeepay-ui-merchant/src/components/JeepayTable/JeepayTableColState.vue new file mode 100644 index 0000000..e240209 --- /dev/null +++ b/jeepay-ui-merchant/src/components/JeepayTable/JeepayTableColState.vue @@ -0,0 +1,57 @@ + + + + diff --git a/jeepay-ui-merchant/src/components/JeepayTable/JeepayTableColumns.vue b/jeepay-ui-merchant/src/components/JeepayTable/JeepayTableColumns.vue new file mode 100644 index 0000000..5e629f2 --- /dev/null +++ b/jeepay-ui-merchant/src/components/JeepayTable/JeepayTableColumns.vue @@ -0,0 +1,42 @@ + + diff --git a/jeepay-ui-merchant/src/components/JeepayTextUp/JeepayTextUp.vue b/jeepay-ui-merchant/src/components/JeepayTextUp/JeepayTextUp.vue new file mode 100644 index 0000000..f36c59b --- /dev/null +++ b/jeepay-ui-merchant/src/components/JeepayTextUp/JeepayTextUp.vue @@ -0,0 +1,126 @@ + + + + + diff --git a/jeepay-ui-merchant/src/components/JeepayUpload/JeepayUpload.vue b/jeepay-ui-merchant/src/components/JeepayUpload/JeepayUpload.vue new file mode 100644 index 0000000..0505e58 --- /dev/null +++ b/jeepay-ui-merchant/src/components/JeepayUpload/JeepayUpload.vue @@ -0,0 +1,79 @@ + + + diff --git a/jeepay-ui-merchant/src/components/NProgress/nprogress.less b/jeepay-ui-merchant/src/components/NProgress/nprogress.less new file mode 100644 index 0000000..13b40aa --- /dev/null +++ b/jeepay-ui-merchant/src/components/NProgress/nprogress.less @@ -0,0 +1,74 @@ +/* Make clicks pass-through */ +#nprogress { + pointer-events: none; +} + +#nprogress .bar { + background: @primary-color; + + position: fixed; + z-index: 1031; + top: 0; + left: 0; + + width: 100%; + height: 2px; +} + +/* Fancy blur effect */ +#nprogress .peg { + display: block; + position: absolute; + right: 0px; + width: 100px; + height: 100%; + box-shadow: 0 0 10px @primary-color, 0 0 5px @primary-color; + opacity: 1.0; + + -webkit-transform: rotate(3deg) translate(0px, -4px); + -ms-transform: rotate(3deg) translate(0px, -4px); + transform: rotate(3deg) translate(0px, -4px); +} + +/* Remove these to get rid of the spinner */ +#nprogress .spinner { + display: block; + position: fixed; + z-index: 1031; + top: 15px; + right: 15px; +} + +#nprogress .spinner-icon { + width: 18px; + height: 18px; + box-sizing: border-box; + + border: solid 2px transparent; + border-top-color: @primary-color; + border-left-color: @primary-color; + border-radius: 50%; + + -webkit-animation: nprogress-spinner 400ms linear infinite; + animation: nprogress-spinner 400ms linear infinite; +} + +.nprogress-custom-parent { + overflow: hidden; + position: relative; +} + +.nprogress-custom-parent #nprogress .spinner, +.nprogress-custom-parent #nprogress .bar { + position: absolute; +} + +@-webkit-keyframes nprogress-spinner { + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(360deg); } +} +@keyframes nprogress-spinner { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + diff --git a/jeepay-ui-merchant/src/config/appConfig.js b/jeepay-ui-merchant/src/config/appConfig.js new file mode 100644 index 0000000..3a4ab43 --- /dev/null +++ b/jeepay-ui-merchant/src/config/appConfig.js @@ -0,0 +1,31 @@ +/** +* 全局配置信息, 包含网站标题, 动态组件定义 +* +* @author terrfly +* @site https://www.jeepay.vip +* @date 2021/5/8 07:18 +*/ + +/** 应用配置项 **/ +export default { + APP_TITLE: 'Jeepay商户系统', // 设置浏览器title + ACCESS_TOKEN_NAME: 'iToken' // 设置请求token的名字, 用于请求header 和 localstorage中存在名称 +} + +/** + * 与后端开发人员的路由名称及配置项 + * 组件名称 :{ 默认跳转路径(如果后端配置则已动态配置为准), 组件渲染 } + * */ +export const asyncRouteDefine = { + + 'CurrentUserInfo': { defaultPath: '/current/userinfo', component: () => import('@/views/current/UserinfoPage') }, // 用户设置 + + 'MainPage': { defaultPath: '/main', component: () => import('@/views/dashboard/Analysis') }, + 'SysUserPage': { defaultPath: '/users', component: () => import('@/views/sysuser/SysUserPage') }, + 'RolePage': { defaultPath: '/roles', component: () => import('@/views/role/RolePage') }, + + 'PayOrderListPage': { defaultPath: '/payOrder', component: () => import('@/views/order/pay/PayOrderList') }, // 支付订单列表 + 'RefundOrderListPage': { defaultPath: '/refundOrder', component: () => import('@/views/order/refund/RefundOrderList') }, // 退款订单列表 + 'PayConfigPage': { defaultPath: '/pay/config', component: () => import('@/views/pay/PayConfigList') }, // 支付参数配置 + 'PayPassagePage': { defaultPath: '/pay/passage', component: () => import('@/views/pay/PayPassageList') } // 支付通道配置 +} diff --git a/jeepay-ui-merchant/src/core/bootstrap.js b/jeepay-ui-merchant/src/core/bootstrap.js new file mode 100644 index 0000000..17f0ca8 --- /dev/null +++ b/jeepay-ui-merchant/src/core/bootstrap.js @@ -0,0 +1,6 @@ +import { printANSI } from '@/utils/screenLog' + +export default function Initializer () { + printANSI() // 请自行移除该行. please remove this line + // last step +} diff --git a/jeepay-ui-merchant/src/core/lazy_use.js b/jeepay-ui-merchant/src/core/lazy_use.js new file mode 100644 index 0000000..e49fa11 --- /dev/null +++ b/jeepay-ui-merchant/src/core/lazy_use.js @@ -0,0 +1,115 @@ +import Vue from 'vue' + +// base library +import { + ConfigProvider, + Layout, + Input, + InputNumber, + Button, + Switch, + Radio, + Checkbox, + Select, + Card, + Form, + FormModel, + Row, + Col, + Modal, + Table, + Tabs, + Icon, + Badge, + Popover, + Dropdown, + List, + Avatar, + Breadcrumb, + Steps, + Spin, + Menu, + Drawer, + Tooltip, + Alert, + Tag, + Divider, + DatePicker, + TimePicker, + Upload, + Progress, + Skeleton, + Popconfirm, + PageHeader, + Result, + Statistic, + Descriptions, + Space, + Pagination, + message, + notification, + Tree +} from 'ant-design-vue' +import Viser from 'viser-vue' + +// ext library +import VueCropper from 'vue-cropper' + +Vue.use(ConfigProvider) +Vue.use(Layout) +Vue.use(Input) +Vue.use(InputNumber) +Vue.use(Button) +Vue.use(Switch) +Vue.use(Radio) +Vue.use(Checkbox) +Vue.use(Select) +Vue.use(Card) +Vue.use(Form) +Vue.use(FormModel) +Vue.use(Row) +Vue.use(Col) +Vue.use(Modal) +Vue.use(Table) +Vue.use(Tabs) +Vue.use(Icon) +Vue.use(Badge) +Vue.use(Popover) +Vue.use(Dropdown) +Vue.use(List) +Vue.use(Avatar) +Vue.use(Breadcrumb) +Vue.use(Steps) +Vue.use(Spin) +Vue.use(Menu) +Vue.use(Drawer) +Vue.use(Tooltip) +Vue.use(Alert) +Vue.use(Tag) +Vue.use(Divider) +Vue.use(DatePicker) +Vue.use(TimePicker) +Vue.use(Upload) +Vue.use(Progress) +Vue.use(Skeleton) +Vue.use(Popconfirm) +Vue.use(PageHeader) +Vue.use(Result) +Vue.use(Statistic) +Vue.use(Descriptions) +Vue.use(Space) +Vue.use(Pagination) +Vue.use(Tree) + +Vue.prototype.$confirm = Modal.confirm +Vue.prototype.$message = message +Vue.prototype.$notification = notification +Vue.prototype.$info = Modal.info +Vue.prototype.$success = Modal.success +Vue.prototype.$error = Modal.error +Vue.prototype.$warning = Modal.warning + +Vue.use(Viser) +Vue.use(VueCropper) + +process.env.NODE_ENV !== 'production' && console.warn('[antd-pro] NOTICE: Antd use lazy-load.') diff --git a/jeepay-ui-merchant/src/core/use.js b/jeepay-ui-merchant/src/core/use.js new file mode 100644 index 0000000..f332c6f --- /dev/null +++ b/jeepay-ui-merchant/src/core/use.js @@ -0,0 +1,20 @@ +import Vue from 'vue' + +// base library +import Antd from 'ant-design-vue' +import Viser from 'viser-vue' +import VueCropper from 'vue-cropper' +import 'ant-design-vue/dist/antd.less' + +// ext library +import VueClipboard from 'vue-clipboard2' +import './directives/action' + +VueClipboard.config.autoSetContainer = true + +Vue.use(Antd) +Vue.use(Viser) +Vue.use(VueClipboard) +Vue.use(VueCropper) + +process.env.NODE_ENV !== 'production' && console.warn('[antd-pro] WARNING: Antd now use fulled imported.') diff --git a/jeepay-ui-merchant/src/global.less b/jeepay-ui-merchant/src/global.less new file mode 100644 index 0000000..a6c4ee2 --- /dev/null +++ b/jeepay-ui-merchant/src/global.less @@ -0,0 +1,375 @@ +@import '../node_modules/ant-design-vue/es/style/themes/default.less'; +// @import './default.less'; + +html, +body, +#app, #root { + height: 100%; + font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,PingFang SC,Hiragino Sans GB,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol; + letter-spacing: 0.4px; +} +// jee主题颜色class列表, 用于文字颜色 +.jee-theme { + color: @jee-theme; //主题色 +} +.jee-back { + color: @jee-back; //主要背景色 +} +.jee-card-back { + color: @jee-card-back; //卡片底色 +} +.jee-theme-mask { + color: @jee-theme-mask; //主体遮罩色(10% 透明度) +} +.jee-strengthen { + color: @jee-strengthen;//强化色 +} +.jee-theme-hover { + color: @jee-theme-hover;//主题Hover +} +.jee-warning { + color: @jee-warning; //危险,强化警告色 +} +.jee-inside-link { + color: @jee-inside-link; //内部链接 +} +.jee-external-link { + color: @jee-external-link; //外部链接 +} +// jee主题颜色class列表, 用于文字颜色 +.jee-theme { + color: @jee-theme; //主题色 +} +.jee-back { + color: @jee-back; //主要背景色 +} +.jee-card-back { + color: @jee-card-back; //卡片底色 +} +.jee-theme-mask { + color: @jee-theme-mask; //主体遮罩色(10% 透明度) +} +.jee-strengthen { + color: @jee-strengthen;//强化色 +} +.jee-theme-hover { + color: @jee-theme-hover;//主题Hover +} +.jee-warning { + color: @jee-warning; //危险,强化警告色 +} +.jee-inside-link { + color: @jee-inside-link; //内部链接 +} +.jee-external-link { + color: @jee-external-link; //外部链接 +} + +// jee主题颜色class列表, 用于背景颜色 +.jee-theme-back-color { + background-color: @jee-theme; //主题色 +} +.jee-back-color { + background-color: @jee-back; //主要背景色 +} +.jee-card-back-color { + background-color: @jee-card-back; //卡片底色 +} +.jee-theme-mask-back-color { + background-color: @jee-theme-mask; //主体遮罩色(10% 透明度) +} +.jee-strengthen-back-color { + background-color: @jee-strengthen;//强化色 +} +.jee-theme-hover-back-color { + background-color: @jee-theme-hover;//主题Hover +} +.jee-warning-back-color { + background-color: @jee-warning; //危险,强化警告色 +} +.jee-inside-link-back-color { + background-color: @jee-inside-link; //内部链接 +} +.jee-external-link-back-color { + background-color: @jee-external-link; //外部链接 +} + +.colorWeak { + filter: invert(80%); +} + +.ant-layout{ + .layout-basic { + height: 100vh; + min-height: 100vh; + } +} + +canvas { + display: block; +} + +body { + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + background: #f0f2f5; +} + +ul, +ol { + list-style: none; +} +// 滚动条高度 和宽度 +::-webkit-scrollbar { + width: 10px; + height: 10px; +} +// 滚动条颜色 +::-webkit-scrollbar-thumb { + background: #B3B3B3; +} +// 滑块区域底色 +::-webkit-scrollbar-track { + background: rgba(0,0,0,0.03); +} +// 滚动条hover色 +::-webkit-scrollbar-thumb:hover { + background: #A6A6A6; +} +// 滚动条选中色 +::-webkit-scrollbar-thumb:active { + background: #8C8C8C; +} +// 结合 表格组件中的 :scroll ,让表格在收缩时,展示滚动条 +.ant-table-body{ + overflow-x: auto !important; +} +// /*显示滚动条上方以及下方的渐增按钮*/ +// ::-webkit-scrollbar-button:start:decrement, +// ::-webkit-scrollbar-button:end:increment { +// display: block; +// } +// /* 定义垂直滚动条渐增按扭的样式 */ +// ::-webkit-scrollbar-button:vertical:end:increment { +// background-image: url(~@/assets/svg/scroll_down.svg); +// background-size: cover; +// background-position: center; +// } +// /* 定义垂直滚动条渐减按扭的样式 */ +// ::-webkit-scrollbar-button:vertical:start:decrement { +// background-image: url(~@/assets/svg/scroll_up.svg); +// background-size: cover; +// background-position: center; +// } +// /* 定义水平滚动条渐增按扭的样式 */ +// ::-webkit-scrollbar-button:horizontal:end:increment { +// background-image: url(~@/assets/svg/scroll_right.svg); +// background-size: cover; +// background-position: center; +// } +// /* 定义水平滚动条渐减按扭的样式 */ +// ::-webkit-scrollbar-button:horizontal:start:decrement { +// background-image: url(~@/assets/svg/scroll_left.svg); +// background-size: cover; +// background-position: center; +// } + +// 隐藏面包屑底下的标题 +.ant-page-header-heading { + display: none; +} + +// 数据列表 样式 +.table-alert { + margin-bottom: 16px; +} +// 数据列表 操作 +.table-operator { + margin-bottom: 18px; + + button { + margin-right: 8px; + } +} +// 数据列表 搜索条件 +.table-page-search-wrapper { + border-top-left-radius: 10px; + border-top-right-radius: 10px; + padding: 30px; + padding-bottom: 0; + border-bottom: 1px solid #e8e8e8; + background: #fafafa; + + .ant-form-inline { + .ant-form-item { + display: flex; + margin-bottom: 24px; + margin-right: 0; + + .ant-form-item-control-wrapper { + flex: 1 1; + display: inline-block; + vertical-align: middle; + } + + > .ant-form-item-label { + line-height: 32px; + padding-right: 8px; + width: auto; + } + .ant-form-item-control { + height: 32px; + line-height: 32px; + } + } + } + + .table-page-search-submitButtons { + display: block; + margin-bottom: 24px; + white-space: nowrap; + } +} + +@media (max-width: @screen-xs) { + .ant-table { + width: 100%; + overflow-x: auto; + &-thead > tr, + &-tbody > tr { + > th, + > td { + white-space: pre; + > span { + display: block; + } + } + } + } +} + +// 修改侧边栏宽度为230 +.ant-pro-sider-menu-sider { + // min-width: 80px !important; + // max-width: 230px !important; + + // 去掉侧边栏阴影 + .light { + box-shadow: none; + } +} + +// 删除表格的内边距 +.ant-card-body { + padding: 0 !important; +} +// 增加内容区域的边框圆角 +.ant-card { + border-radius: 10px; + overflow: hidden; +} + +// 登录页输入框fcous hover事件,边框为jee主题蓝 +.ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled) { + border-color: @jee-theme +} +.ant-input:focus { + border-color: @jee-theme +} + +// 抽屉,按钮板块,居中 +.drawer-btn-center { + position: absolute; + right: 0px; + bottom: 0px; + width: 100%; + border-top: 1px solid rgb(233, 233, 233); + padding: 10px 16px; + background: rgb(255, 255, 255); + text-align: center; + z-index: 1; + + &:first-child { + margin-right: 80px; + } + button { + margin: 0; + padding: 3px 20px; + } +} + +.els { + overflow: hidden; + text-overflow:ellipsis; + white-space: nowrap +} + +// 内容区域去掉最外层的magin 24px ,改为 padding 15px +.ant-pro-basicLayout-content { + margin: 0 ; + padding: 15px; +} + +// 表格页面的间距 +.ant-table-pagination.ant-pagination { + margin: 20px; +} + +// 去掉表格边框线 +.ant-card-bordered { + border:none; +} + +.ant-table-align-left { + padding-left: 38px; +} +// 向下的30外边距 +.mg-b-30 { + margin-bottom: 30px +} + +.ant-card-bordered { + border: none !important; +} + +// 表格,搜索框板块布局 +.table-head-ground { + display: flex; + justify-content: start; + flex-wrap: wrap; + .table-layer { + display: flex; + flex-wrap: wrap; + flex-grow: 1; + flex-shrink: 1; + } +} +.table-head-layout { + min-width: 220px; + max-width: 240px; + flex-grow: 1; + flex-shrink: 1; + margin-bottom:30px !important; + margin-right: 16px !important; +} + +// 404 500 403 +.result-err { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 100vh; + width: 100%; + overflow: auto; + div { + margin: 20px 0; + text-align:center; + font-size: 16px; + p.big-text { + font-size: 36px; + font-weight: 700; + } + } +} \ No newline at end of file diff --git a/jeepay-ui-merchant/src/http/HttpRequest.js b/jeepay-ui-merchant/src/http/HttpRequest.js new file mode 100644 index 0000000..0c5255d --- /dev/null +++ b/jeepay-ui-merchant/src/http/HttpRequest.js @@ -0,0 +1,116 @@ +/** + * Http请求包装对象 + * 参考: iview https://gitee.com/icarusion/iview-admin/blob/master/src/libs/axios.js + * + * @author terrfly + * @site https://www.jeepay.vip + * @date 2021/5/8 07:18 + */ +import axios from 'axios' +import storage from '@/utils/jeepayStorageWrapper' +import appConfig from '@/config/appConfig' +import Vue from 'vue' +import store from '@/store/index' +class HttpRequest { + constructor (baseUrl = process.env.VUE_APP_API_BASE_URL) { + this.baseUrl = baseUrl + this.queue = {} // 发送队列, 格式为: {请求url: true}, 可以做一些验证之类 + } + // 基础配置信息 + baseConfig () { + const headers = {} + headers[appConfig.ACCESS_TOKEN_NAME] = storage.getToken() + return { + baseURL: this.baseUrl, + headers: headers + } + } + destroy (url, showLoading) { + delete this.queue[url] + } + interceptors (instance, url, showErrorMsg, showLoading) { + // 请求拦截 + instance.interceptors.request.use(config => { + // 添加全局的loading... + if (!Object.keys(this.queue).length && showLoading) { + store.commit('showLoading') // 加载中显示loading组件 + } + this.queue[url] = true + return config + }, error => { + store.commit('hideLoading') // 报错关闭loading组件 + return Promise.reject(error) + }) + + // 响应拦截 + instance.interceptors.response.use(res => { + this.destroy(url, showLoading) + + if (showLoading) { + store.commit('hideLoading') // 报错关闭loading组件 + } + + const resData = res.data // 接口实际返回数据 格式为:{code: '', msg: '', data: ''}, res.data 是axios封装对象的返回数据; + + if (resData.code !== 0) { // 相应结果不为0, 说明异常 + if (showErrorMsg) { + Vue.prototype.$message.error(resData.msg) // 显示异常信息 + } + + return Promise.reject(resData) + } else { + return resData.data + } + }, error => { + this.destroy(url, showLoading) + + if (showLoading) { + store.commit('hideLoading') // 报错关闭loading组件 + } + + let errorInfo = error.response && error.response.data && error.response.data.data + if (!errorInfo) { + errorInfo = error.response.data + } + + if (error.response.status === 401) { // 无访问权限,会话超时, 提示用户信息 & 退出系统 + const toLoginTimeout = setTimeout(function () { + store.dispatch('Logout').then(() => { + window.location.reload() + }) + }, 3000) + + Vue.prototype.$infoBox.confirmDanger( + '会话超时,请重新登录', '3s后将自动退出...', + () => { + store.dispatch('Logout').then(() => { + window.location.reload() + }) + }, + () => { + clearTimeout(toLoginTimeout) + }, + { okText: '重新登录', cancelText: '关闭对话' }) + } else { + if (showErrorMsg) { + Vue.prototype.$message.error(JSON.stringify(errorInfo)) // 显示异常信息 + } + } + + return Promise.reject(errorInfo) + }) + } + // interceptorsFlag: 是否进行自定义拦截器处理,默认为: true + // showErrorMsg 发送请求出现异常是否全局提示错误信息 + // showLoading 发送请求前后显示全局loading + request (options, interceptorsFlag = true, showErrorMsg = true, showLoading = false) { + const instance = axios.create() + options = Object.assign(this.baseConfig(), options) + if (interceptorsFlag) { // 注入 req, respo 拦截器 + this.interceptors(instance, options.url, showErrorMsg, showLoading) + } + + return instance(options) + } +} +export default HttpRequest diff --git a/jeepay-ui-merchant/src/http/request.js b/jeepay-ui-merchant/src/http/request.js new file mode 100644 index 0000000..7b66cad --- /dev/null +++ b/jeepay-ui-merchant/src/http/request.js @@ -0,0 +1,4 @@ +import HttpRequest from '@/http/HttpRequest' + +const request = new HttpRequest() +export default request diff --git a/jeepay-ui-merchant/src/layouts/BasicLayout.less b/jeepay-ui-merchant/src/layouts/BasicLayout.less new file mode 100644 index 0000000..d193ad1 --- /dev/null +++ b/jeepay-ui-merchant/src/layouts/BasicLayout.less @@ -0,0 +1,59 @@ +@import "~ant-design-vue/es/style/themes/default.less"; + +// 清除头部栏下方阴影 +.ant-layout-header, .ant-pro-basicLayout .ant-layout-header:not(.ant-pro-top-menu) { + background: initial; +} +// 清除头部栏下方阴影 修改背景色 +.ant-pro-global-header { + background: initial; + box-shadow: initial; +} +// 面包屑导航部分 修改背景色 +.ant-pro-page-header-wrap-page-header-warp { + background: initial; +} + +//左上角 logo 图标样式 +.ant-pro-sider-menu-logo { + padding-left: 30px; +} +.ant-pro-sider-menu-logo svg { + height: 26px; + width: initial; +} + +.ant-pro-global-header-index-right { + margin-right: 8px; + + &.ant-pro-global-header-index-dark { + .ant-pro-global-header-index-action { + color: hsla(0, 0%, 100%, .85); + + &:hover { + background: #1890ff; + } + } + } + + .ant-pro-account-avatar { + .antd-pro-global-header-index-avatar { + margin: ~'calc((@{layout-header-height} - 24px) / 2)' 0; + margin-right: 8px; + color: @primary-color; + vertical-align: top; + background: rgba(255, 255, 255, 0.85); + } + } + + .menu { + .anticon { + margin-right: 8px; + } + + .ant-dropdown-menu-item { + min-width: 100px; + } + } +} + diff --git a/jeepay-ui-merchant/src/layouts/BasicLayout.vue b/jeepay-ui-merchant/src/layouts/BasicLayout.vue new file mode 100644 index 0000000..90c141b --- /dev/null +++ b/jeepay-ui-merchant/src/layouts/BasicLayout.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/jeepay-ui-merchant/src/layouts/BlankLayout.vue b/jeepay-ui-merchant/src/layouts/BlankLayout.vue new file mode 100644 index 0000000..1bfbfbf --- /dev/null +++ b/jeepay-ui-merchant/src/layouts/BlankLayout.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/jeepay-ui-merchant/src/layouts/PageView.vue b/jeepay-ui-merchant/src/layouts/PageView.vue new file mode 100644 index 0000000..86df485 --- /dev/null +++ b/jeepay-ui-merchant/src/layouts/PageView.vue @@ -0,0 +1,12 @@ + + + diff --git a/jeepay-ui-merchant/src/layouts/RouteView.vue b/jeepay-ui-merchant/src/layouts/RouteView.vue new file mode 100644 index 0000000..9e9d98b --- /dev/null +++ b/jeepay-ui-merchant/src/layouts/RouteView.vue @@ -0,0 +1,32 @@ + diff --git a/jeepay-ui-merchant/src/layouts/UserLayout.vue b/jeepay-ui-merchant/src/layouts/UserLayout.vue new file mode 100644 index 0000000..3c97dba --- /dev/null +++ b/jeepay-ui-merchant/src/layouts/UserLayout.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/jeepay-ui-merchant/src/layouts/index.js b/jeepay-ui-merchant/src/layouts/index.js new file mode 100644 index 0000000..1d62d6c --- /dev/null +++ b/jeepay-ui-merchant/src/layouts/index.js @@ -0,0 +1,7 @@ +import UserLayout from './UserLayout' +import BlankLayout from './BlankLayout' +import BasicLayout from './BasicLayout' +import RouteView from './RouteView' +import PageView from './PageView' + +export { UserLayout, BasicLayout, BlankLayout, RouteView, PageView } diff --git a/jeepay-ui-merchant/src/main.js b/jeepay-ui-merchant/src/main.js new file mode 100644 index 0000000..0796e6c --- /dev/null +++ b/jeepay-ui-merchant/src/main.js @@ -0,0 +1,43 @@ +// with polyfills +import 'core-js/stable' +import 'regenerator-runtime/runtime' + +import Vue from 'vue' +import App from './App.vue' +import router from './router' +import store from './store/' +import ProLayout, { PageHeaderWrapper } from '@ant-design-vue/pro-layout' + +import bootstrap from './core/bootstrap' +import './core/lazy_use' // use lazy load components +import './permission' // permission control 路由守卫 +import './utils/filter' // global filter + +import './global.less' // global style +import 'ant-design-vue/dist/antd.less' +import infoBox from '@/utils/infoBox' + +Vue.config.productionTip = false + +// use pro-layout components +Vue.component('pro-layout', ProLayout) +Vue.component('page-container', PageHeaderWrapper) +Vue.component('page-header-wrapper', PageHeaderWrapper) + +/** + * @description 全局注册权限验证 + */ +Vue.prototype.$access = (entId) => { + // eslint-disable-next-line eqeqeq + return store.state.user.accessList.some(item => item == entId) +} + +Vue.prototype.$infoBox = infoBox + +new Vue({ + router, + store, + // init localstorage, vuex + created: bootstrap, + render: h => h(App) +}).$mount('#app') diff --git a/jeepay-ui-merchant/src/permission.js b/jeepay-ui-merchant/src/permission.js new file mode 100644 index 0000000..cce65b3 --- /dev/null +++ b/jeepay-ui-merchant/src/permission.js @@ -0,0 +1,65 @@ +import router from './router' +import store from './store' +import storage from '@/utils/jeepayStorageWrapper' +import NProgress from 'nprogress' // progress bar +import '@/components/NProgress/nprogress.less' // progress bar custom style +import { setDocumentTitle, domTitle } from '@/utils/domUtil' + +import { getInfo } from '@/api/login' + +NProgress.configure({ showSpinner: false }) // NProgress Configuration + +const allowList = ['login', 'register', 'registerResult'] // no redirect allowList +const loginRoutePath = '/user/login' + +// 路由守卫 +router.beforeEach((to, from, next) => { + NProgress.start() // start progress bar + + to.meta && (typeof to.meta.title !== 'undefined' && setDocumentTitle(`${to.meta.title} - ${domTitle}`)) // 设置浏览器标题 + + // 如果在免登录页面则直接放行 + if (allowList.includes(to.name)) { + // 在免登录名单,直接进入 + next() + NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it + return false + } + + // 不包含Token 则直接跳转到登录页面 + if (!storage.getToken()) { + next({ path: loginRoutePath, query: { redirect: to.fullPath } }) + NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it + return false + } + + // 以下为包含Token的情况 + // 如果用户信息不存在, 则重新获取 [用户登录成功 & 强制刷新浏览器时 会执行该函数] + if (!store.state.user.userId) { + // request login userInfo + + getInfo().then(bizData => { + store.commit('SET_USER_INFO', bizData) // 调用vuex设置用户基本信息 + // TODO 生成菜单 + + store.dispatch('GenerateRoutes', {}).then(() => { + // 根据roles权限生成可访问的路由表 + // 动态添加可访问路由表 + router.addRoutes(store.state.asyncRouter.addRouters) + }) + + next() + }).catch(() => { + // 失败时,获取用户信息失败时,调用登出,来清空历史保留信息 + store.dispatch('Logout').then(() => { + next({ path: loginRoutePath, query: { redirect: to.fullPath } }) + }) + }) + } else { + next() + } +}) + +router.afterEach(() => { + NProgress.done() // finish progress bar +}) diff --git a/jeepay-ui-merchant/src/router/generator-routers.js b/jeepay-ui-merchant/src/router/generator-routers.js new file mode 100644 index 0000000..96f4386 --- /dev/null +++ b/jeepay-ui-merchant/src/router/generator-routers.js @@ -0,0 +1,139 @@ +// eslint-disable-next-line +import * as loginService from '@/api/login' +// eslint-disable-next-line +import { BasicLayout, BlankLayout, PageView, RouteView } from '@/layouts' +import store from '@/store' +import { asyncRouteDefine } from '@/config/appConfig' + +// 前端路由表 = 基础定义 + 动态组件 +const constantRouterComponents = Object.assign({ + // 基础页面 layout 必须引入 + BasicLayout: { component: BasicLayout }, + BlankLayout: { component: BlankLayout }, + RouteView: { component: RouteView }, + PageView: { component: PageView }, + '403': () => import('@/views/exception/403'), + '404': () => import('@/views/exception/404'), + '500': () => import('@/views/exception/500') +}, asyncRouteDefine) + +// 前端未找到页面路由(固定不用改) +const notFoundRouter = { + path: '*', component: () => import('@/views/exception/404') +} + +// 根级菜单 +const rootRouter = { + name: 'index', + path: '/', + component: BasicLayout, + redirect: redirectFunc, // 根页面【/】默认跳转 地址 + children: [], + meta: { title: '主页' } +} + +// 动态跳转路径 func +function redirectFunc () { + let mainPageUri = '' + store.state.user.allMenuRouteTree.forEach(item => { + if (item.entId === 'ENT_MCH_MAIN') { // 当前用户是否拥有主页权限, 如果有直接跳转到该路径 + mainPageUri = item.menuUri + return false + } + }) + + if (mainPageUri) { + return mainPageUri + } + + return getOneUri(store.state.user.allMenuRouteTree) +} + +// 获取到第一个uri (递归查找) +function getOneUri (item) { + let result = '' + for (let i = 0; i < item.length; i++) { + if (item[i].menuUri && item[i].entType === 'ML') { + return item[i].menuUri + } + + if (item[i].children) { + result = getOneUri(item[i].children) + if (result) { + return result + } + } + } + return result +} + +/** + * 动态生成菜单 + * @param token + * @returns {Promise} + */ +export const generatorDynamicRouter = () => { + return new Promise((resolve, reject) => { + // 根据树状结构生成路由格式 + rootRouter.children = generator(store.state.user.allMenuRouteTree) + + // 构建完整路由 + resolve([rootRouter, notFoundRouter]) + }) +} + +/** + * 格式化树形结构数据 生成 vue-router 层级路由表 + * + * @param routerMap + * @returns {*} + */ +export const generator = (allMenuRouteTreeArray) => { + const menuResult = [] + + // 遍历map + allMenuRouteTreeArray.map(item => { + const defComponent = constantRouterComponents[item.componentName || item.entId] + + // 找不到组件 || 其他菜单 + if (!defComponent) { + return + } + + // 跳转uri + let path = item.menuUri || defComponent.defaultPath + + // 没有配置path, 如果为目录则允许为空, 否则不在加载此配置 + if (!path) { + if (item.children && item.children.length > 0) { + path = `/${item.entId}` + } else { + return // 不再加载此配置项 + } + } + + const currentRouter = { + // 如果路由设置了 path,则作为默认 path,否则 路由地址 为默认配置 + path: path, + // 路由名称,建议唯一 + name: item.entId, + // 该路由对应页面的 组件 :方案2 (动态加载) + component: ((defComponent && defComponent.component) || (() => import(`@/views/${item.componentName}`))), + // meta: 页面标题, 菜单图标, 页面权限(供指令权限用,可去掉) + meta: { + title: item.entName, + icon: item.menuIcon, + keepAlive: false + }, + hidden: item.entType === 'MO' // 当其他菜单时需要隐藏显示 + } + // 是否有子菜单,并递归处理 + if (item.children && item.children.length > 0) { + // Recursion + currentRouter.children = generator(item.children) + } + menuResult.push(currentRouter) + }) + + return menuResult +} diff --git a/jeepay-ui-merchant/src/router/index.js b/jeepay-ui-merchant/src/router/index.js new file mode 100644 index 0000000..416b5c4 --- /dev/null +++ b/jeepay-ui-merchant/src/router/index.js @@ -0,0 +1,29 @@ +import Vue from 'vue' +import Router from 'vue-router' +import { UserLayout } from '@/layouts' + +// hack router push callback +// [解决 vue-router跳转相同路径报错 ] +const originalPush = Router.prototype.push +Router.prototype.push = function push (location, onResolve, onReject) { + if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject) + return originalPush.call(this, location).catch(err => err) +} + +Vue.use(Router) + +// 纯静态路由配置项 +const constantRouterMap = [ + { + path: '/user', + component: UserLayout, + children: [ + { path: 'login', name: 'login', component: () => import('@/views/user/Login') } + ] + } +] + +export default new Router({ + mode: 'history', + routes: constantRouterMap +}) diff --git a/jeepay-ui-merchant/src/store/index.js b/jeepay-ui-merchant/src/store/index.js new file mode 100644 index 0000000..539a1be --- /dev/null +++ b/jeepay-ui-merchant/src/store/index.js @@ -0,0 +1,29 @@ +import Vue from 'vue' +import Vuex from 'vuex' +import user from './modules/user' +import asyncRouter from './modules/async-router' + +Vue.use(Vuex) + +export default new Vuex.Store({ + modules: { + user, // 用户相关状态机 + asyncRouter // 动态菜单 + }, + state: { + // 定义全局loading 为false + globalLoading: false + }, + mutations: { + // 显示与关闭 全局 loading + showLoading (state) { + state.globalLoading = true + }, + hideLoading (state) { + state.globalLoading = false + } + }, + actions: { + + } +}) diff --git a/jeepay-ui-merchant/src/store/modules/async-router.js b/jeepay-ui-merchant/src/store/modules/async-router.js new file mode 100644 index 0000000..6282ce6 --- /dev/null +++ b/jeepay-ui-merchant/src/store/modules/async-router.js @@ -0,0 +1,27 @@ +/** + * 向后端请求用户的菜单,动态生成路由 + */ +import { generatorDynamicRouter } from '@/router/generator-routers' + +const asyncRouter = { + state: { + addRouters: [] + }, + mutations: { + SET_ROUTERS: (state, routers) => { + state.addRouters = routers + } + }, + actions: { + GenerateRoutes ({ commit }, data) { + return new Promise(resolve => { + generatorDynamicRouter().then(routers => { + commit('SET_ROUTERS', routers) + resolve() + }) + }) + } + } +} + +export default asyncRouter diff --git a/jeepay-ui-merchant/src/store/modules/user.js b/jeepay-ui-merchant/src/store/modules/user.js new file mode 100644 index 0000000..0fba4ff --- /dev/null +++ b/jeepay-ui-merchant/src/store/modules/user.js @@ -0,0 +1,75 @@ +import storage from '@/utils/jeepayStorageWrapper' +import { login, logout } from '@/api/login' +import appConfig from '@/config/appConfig' + +const user = { + state: { + token: '', + userName: '', // 用户名 + userId: '', // 用户ID + avatarImgPath: '', // 头像 + allMenuRouteTree: [], // 全部动态 router + accessList: [], // 用户权限集合 + isAdmin: '', // 是否是超级管理员 + loginUsername: '', // 登录用户名 + state: '', // 用户状态 + system: '', // 所属系统 + telphone: '' // 手机号 + }, + + mutations: { + SET_TOKEN: (state, token) => { + state.token = token + }, + // 设置头像 + SET_AVATAR (state, avatarPath) { + state.avatarImgPath = avatarPath + }, + // 设置用户信息 + SET_USER_INFO: (state, userInfo) => { + state.userId = userInfo.sysUserId // 用户ID + state.userName = userInfo.realname // 昵称 + state.avatarImgPath = userInfo.avatarUrl // 头像 + state.accessList = userInfo.entIdList // 权限集合 + state.allMenuRouteTree = userInfo.allMenuRouteTree // 全部路由集合 + state.isAdmin = userInfo.isAdmin // 是否是超级管理员 + state.loginUsername = userInfo.loginUsername // 登录用户名 + state.state = userInfo.state // 用户状态 + state.system = userInfo.system // 所属系统 + state.telphone = userInfo.telphone // 手机号 + } + }, + + actions: { + // 登录 + Login ({ commit }, { loginParams, isSaveStorage }) { + return new Promise((resolve, reject) => { + login(loginParams).then(bizData => { + storage.setToken(bizData[appConfig.ACCESS_TOKEN_NAME], isSaveStorage) + commit('SET_TOKEN', bizData[appConfig.ACCESS_TOKEN_NAME]) + resolve() + }).catch(error => { + reject(error) + }) + }) + }, + + // 登出 + Logout ({ commit, state }) { + return new Promise((resolve) => { + logout(state.token).then(() => { + commit('SET_TOKEN', '') + storage.cleanToken() + location.reload() // 退出时 重置缓存 + resolve() + }).catch(() => { + resolve() + }).finally(() => { + }) + }) + } + + } +} + +export default user diff --git a/jeepay-ui-merchant/src/utils/domUtil.js b/jeepay-ui-merchant/src/utils/domUtil.js new file mode 100644 index 0000000..f820754 --- /dev/null +++ b/jeepay-ui-merchant/src/utils/domUtil.js @@ -0,0 +1,17 @@ +export const setDocumentTitle = function (title) { + document.title = title + const ua = navigator.userAgent + // eslint-disable-next-line + const regex = /\bMicroMessenger\/([\d\.]+)/ + if (regex.test(ua) && /ip(hone|od|ad)/i.test(ua)) { + const i = document.createElement('iframe') + i.src = '/favicon.ico' + i.style.display = 'none' + i.onload = function () { + setTimeout(function () { + i.remove() + }, 9) + } + document.body.appendChild(i) + } +} diff --git a/jeepay-ui-merchant/src/utils/filter.js b/jeepay-ui-merchant/src/utils/filter.js new file mode 100644 index 0000000..45702c6 --- /dev/null +++ b/jeepay-ui-merchant/src/utils/filter.js @@ -0,0 +1,20 @@ +import Vue from 'vue' +import moment from 'moment' +import 'moment/locale/zh-cn' +moment.locale('zh-cn') + +Vue.filter('NumberFormat', function (value) { + if (!value) { + return '0' + } + const intPartFormat = value.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') // 将整数部分逢三一断 + return intPartFormat +}) + +Vue.filter('dayjs', function (dataStr, pattern = 'YYYY-MM-DD HH:mm:ss') { + return moment(dataStr).format(pattern) +}) + +Vue.filter('moment', function (dataStr, pattern = 'YYYY-MM-DD HH:mm:ss') { + return moment(dataStr).format(pattern) +}) diff --git a/jeepay-ui-merchant/src/utils/infoBox.js b/jeepay-ui-merchant/src/utils/infoBox.js new file mode 100644 index 0000000..ca59a8a --- /dev/null +++ b/jeepay-ui-merchant/src/utils/infoBox.js @@ -0,0 +1,33 @@ +/** + * 通用信息弹层 + * + * @author terrfly + * @site https://www.jeepay.vip + * @date 2021/5/8 07:18 + */ +import { Modal } from 'ant-design-vue' + +// 确认提示: 标题, 内容, 点击确定回调函数, 取消回调, 扩展参数 +export const confirmResult = { + confirm: function (title, content, okFunc, cancelFunc = (() => {}), extConfig = {}) { + Modal.confirm( + Object.assign({ + okText: '确定', + cancelText: '取消', + title: title || '提示', + content: content, + onOk: okFunc, + onCancel: cancelFunc, + confirmLoading: true + }, extConfig)) + }, + confirmPrimary: function (title, content, okFunc, cancelFunc = (() => {}), extConfig = {}) { + this.confirm(title, content, okFunc, cancelFunc, Object.assign({ okType: 'primary' }, extConfig)) + }, + + confirmDanger: function (title, content, okFunc, cancelFunc = (() => {}), extConfig = {}) { + this.confirm(title, content, okFunc, cancelFunc, Object.assign({ okType: 'danger' }, extConfig)) + } +} + +export default confirmResult diff --git a/jeepay-ui-merchant/src/utils/jeepayStorageWrapper.js b/jeepay-ui-merchant/src/utils/jeepayStorageWrapper.js new file mode 100644 index 0000000..7da8c45 --- /dev/null +++ b/jeepay-ui-merchant/src/utils/jeepayStorageWrapper.js @@ -0,0 +1,34 @@ +/** + * storage 存储包装类 + * + * @author terrfly + * @site https://www.jeepay.vip + * @date 2021/5/8 07:18 + */ +import storage from 'store' +import appConfig from '@/config/appConfig' + +var SESSION_TOKEN = '' + +const wrapper = { + + /* 获取当前Token **/ + getToken: () => { + return SESSION_TOKEN || storage.get(appConfig.ACCESS_TOKEN_NAME) + }, + + /* 清空Token **/ + cleanToken: () => { + SESSION_TOKEN = '' + storage.remove(appConfig.ACCESS_TOKEN_NAME) + }, + + /* 设置token信息 **/ + setToken (tokenVal, isSaveStorage) { + SESSION_TOKEN = tokenVal + if (isSaveStorage) { + storage.set(appConfig.ACCESS_TOKEN_NAME, tokenVal, 7 * 24 * 60 * 60 * 1000) + } + } +} +export default wrapper diff --git a/jeepay-ui-merchant/src/utils/screenLog.js b/jeepay-ui-merchant/src/utils/screenLog.js new file mode 100644 index 0000000..ce51de1 --- /dev/null +++ b/jeepay-ui-merchant/src/utils/screenLog.js @@ -0,0 +1,18 @@ +/* eslint-disable */ +export const printANSI = () => { + let text = ` + __ + / /___ ___ ____ ____ ___ __ + __ / // _ \\/ _ \\/ __ \\/ __ \`/ / / / +/ /_/ // __/ __/ /_/ / /_/ / /_/ / +\\____/ \\___/\\___/ .___/\\__,_/\\__, / + /_/ /____/ + :: Jeepay :: (v1.0.0.RELEASE) + 适合互联网企业使用的开源支付系统 : https://www.jeepay.vip +` + + console.log(`%c${text}`, 'color: #fc4d50') + + console.log('%cThanks for using Jeepay!', 'color: #fff; font-size: 14px; font-weight: 300; text-shadow:#000 1px 0 0,#000 0 1px 0,#000 -1px 0 0,#000 0 -1px 0;') + +} diff --git a/jeepay-ui-merchant/src/utils/util.js b/jeepay-ui-merchant/src/utils/util.js new file mode 100644 index 0000000..afbc127 --- /dev/null +++ b/jeepay-ui-merchant/src/utils/util.js @@ -0,0 +1,12 @@ +export function timeFix () { + const time = new Date() + const hour = time.getHours() + return hour < 9 ? '早上好' : hour <= 11 ? '上午好' : hour <= 13 ? '中午好' : hour < 20 ? '下午好' : '晚上好' +} + +export function isIE () { + const bw = window.navigator.userAgent + const compare = (s) => bw.indexOf(s) >= 0 + const ie11 = (() => 'ActiveXObject' in window)() + return compare('MSIE') || ie11 +} diff --git a/jeepay-ui-merchant/src/utils/utils.less b/jeepay-ui-merchant/src/utils/utils.less new file mode 100644 index 0000000..ba75a67 --- /dev/null +++ b/jeepay-ui-merchant/src/utils/utils.less @@ -0,0 +1,50 @@ +.textOverflow() { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + word-break: break-all; +} + +.textOverflowMulti(@line: 3, @bg: #fff) { + position: relative; + max-height: @line * 1.5em; + margin-right: -1em; + padding-right: 1em; + overflow: hidden; + line-height: 1.5em; + text-align: justify; + &::before { + position: absolute; + right: 14px; + bottom: 0; + padding: 0 1px; + background: @bg; + content: '...'; + } + &::after { + position: absolute; + right: 14px; + width: 1em; + height: 1em; + margin-top: 0.2em; + background: white; + content: ''; + } +} + +// mixins for clearfix +// ------------------------ +.clearfix() { + zoom: 1; + &::before, + &::after { + display: table; + content: ' '; + } + &::after { + clear: both; + height: 0; + font-size: 0; + visibility: hidden; + } +} \ No newline at end of file diff --git a/jeepay-ui-merchant/src/views/current/AvatarModal.vue b/jeepay-ui-merchant/src/views/current/AvatarModal.vue new file mode 100644 index 0000000..40d3550 --- /dev/null +++ b/jeepay-ui-merchant/src/views/current/AvatarModal.vue @@ -0,0 +1,202 @@ + + + + diff --git a/jeepay-ui-merchant/src/views/current/UserinfoPage.vue b/jeepay-ui-merchant/src/views/current/UserinfoPage.vue new file mode 100644 index 0000000..5a8284e --- /dev/null +++ b/jeepay-ui-merchant/src/views/current/UserinfoPage.vue @@ -0,0 +1,253 @@ + + + diff --git a/jeepay-ui-merchant/src/views/dashboard/Analysis.vue b/jeepay-ui-merchant/src/views/dashboard/Analysis.vue new file mode 100644 index 0000000..508192a --- /dev/null +++ b/jeepay-ui-merchant/src/views/dashboard/Analysis.vue @@ -0,0 +1,749 @@ + + + + + diff --git a/jeepay-ui-merchant/src/views/dashboard/Workplace.less b/jeepay-ui-merchant/src/views/dashboard/Workplace.less new file mode 100644 index 0000000..005b73a --- /dev/null +++ b/jeepay-ui-merchant/src/views/dashboard/Workplace.less @@ -0,0 +1,107 @@ +@import '~ant-design-vue/es/style/themes/default.less'; + +.text-overflow() { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + word-break: break-all; +} + +// mixins for clearfix +// ------------------------ +.clearfix() { + zoom: 1; + &::before, + &::after { + display: table; + content: ' '; + } + &::after { + clear: both; + height: 0; + font-size: 0; + visibility: hidden; + } +} + + +.page-header-content { + display: flex; + + .avatar { + flex: 0 1 72px; + + & > span { + display: block; + width: 72px; + height: 72px; + border-radius: 72px; + } + } + + .content { + position: relative; + top: 4px; + flex: 1 1 auto; + margin-left: 24px; + color: @text-color-secondary; + line-height: 22px; + + .content-title { + margin-bottom: 12px; + color: @heading-color; + font-weight: 500; + font-size: 20px; + line-height: 28px; + } + } +} + +.extra-content { + .clearfix(); + float: right; + white-space: nowrap; + + .stat-item { + position: relative; + display: inline-block; + padding: 0 32px; + + > p:first-child { + margin-bottom: 4px; + color: @text-color-secondary; + font-size: @font-size-base; + line-height: 22px; + } + + > p { + margin: 0; + color: @heading-color; + font-size: 30px; + line-height: 38px; + + > span { + color: @text-color-secondary; + font-size: 20px; + } + } + + &::after { + position: absolute; + top: 8px; + right: 0; + width: 1px; + height: 40px; + background-color: @border-color-split; + content: ''; + } + + &:last-child { + padding-right: 0; + + &::after { + display: none; + } + } + } +} \ No newline at end of file diff --git a/jeepay-ui-merchant/src/views/dashboard/empty.vue b/jeepay-ui-merchant/src/views/dashboard/empty.vue new file mode 100644 index 0000000..d406f7b --- /dev/null +++ b/jeepay-ui-merchant/src/views/dashboard/empty.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/jeepay-ui-merchant/src/views/dashboard/index.css b/jeepay-ui-merchant/src/views/dashboard/index.css new file mode 100644 index 0000000..d59c3bd --- /dev/null +++ b/jeepay-ui-merchant/src/views/dashboard/index.css @@ -0,0 +1,159 @@ +#chart-card { + width: 100%; +} +#chart-card .chart-data { + min-height: 100px; + height: 100%; + width: 100%; + border-radius: 6px; + background-color: #fff; +} +#chart-card .chart-top, +#chart-card .chart-bottom { + display: flex; + flex-direction: row; + flex-wrap: wrap; +} +#chart-card .chart-top .middle-smaller, +#chart-card .chart-bottom .middle-smaller, +#chart-card .chart-top .middle-larger, +#chart-card .chart-bottom .middle-larger { + height: 100%; +} +#chart-card .chart-top .top-left, +#chart-card .chart-bottom .top-left { + min-height: 238px; +} +#chart-card .chart-item { + width: 100%; + box-sizing: border-box; + padding: 12px; +} +@media screen and (max-width: 767px) { + #chart-card .chart-top .top-left { + order: 1; + } + #chart-card .chart-top .top-middle { + order: 2; + width: 100%; + } + #chart-card .chart-top .top-middle .middle-top, + #chart-card .chart-top .top-middle .middle-bottom { + display: flex; + flex-direction: column; + } + #chart-card .chart-top .top-middle .middle-top .middle-larger, + #chart-card .chart-top .top-middle .middle-bottom .middle-larger, + #chart-card .chart-top .top-middle .middle-top .middle-smaller, + #chart-card .chart-top .top-middle .middle-bottom .middle-smaller { + width: 100%; + } + #chart-card .chart-top .top-right { + order: 0; + } +} +@media screen and (min-width: 768px) { + #chart-card .top-left, + #chart-card .top-middle { + order: 1; + } + #chart-card .top-middle { + width: 100%; + } + #chart-card .top-middle .middle-top, + #chart-card .top-middle .middle-bottom { + display: flex; + flex-direction: row; + } + #chart-card .top-middle .middle-top .middle-larger, + #chart-card .top-middle .middle-bottom .middle-larger { + flex-grow: 1; + } + #chart-card .top-middle .middle-top .middle-smaller, + #chart-card .top-middle .middle-bottom .middle-smaller { + max-width: 170px; + min-width: 130px; + } + #chart-card .top-right { + order: 0; + } +} +@media screen and (min-width: 1200px) { + #chart-card .top-left { + order: 1; + width: 50%; + } + #chart-card .top-middle { + width: 50%; + order: 2; + } + #chart-card .top-middle .middle-top, + #chart-card .top-middle .middle-bottom { + display: flex; + flex-direction: row; + } + #chart-card .top-middle .middle-top .middle-larger, + #chart-card .top-middle .middle-bottom .middle-larger { + flex-grow: 1; + } + #chart-card .top-middle .middle-top .middle-smaller, + #chart-card .top-middle .middle-bottom .middle-smaller { + max-width: 170px; + min-width: 130px; + } + #chart-card .top-right { + width: 100%; + order: 0; + } +} +@media screen and (min-width: 1500px) { + #chart-card { + flex-direction: row; + } + #chart-card .chart-top { + width: 100%; + order: 0; + flex-wrap: nowrap; + } + #chart-card .chart-top .top-left, + #chart-card .chart-top .top-middle { + width: 500px; + min-width: 460px; + order: 0; + } + #chart-card .chart-top .top-middle { + order: 1; + } + #chart-card .chart-top .top-middle .middle-top, + #chart-card .chart-top .top-middle .middle-bottom { + display: flex; + width: 100%; + height: 50%; + flex-wrap: nowrap; + } + #chart-card .chart-top .top-middle .middle-smaller { + width: 150px; + min-width: 150px; + } + #chart-card .chart-top .top-middle .middle-larger { + width: 300px; + flex-grow: 1; + } + #chart-card .chart-top .top-right { + order: 2; + flex-grow: 1; + } + #chart-card .chart-bottom { + order: 1; + width: 100%; + flex-wrap: nowrap; + } + #chart-card .chart-bottom .bottom-right { + max-width: 500px; + min-width: 330px; + } + #chart-card .chart-bottom .bottom-left { + min-width: 900px; + flex-grow: 1; + } +} diff --git a/jeepay-ui-merchant/src/views/dashboard/index.less b/jeepay-ui-merchant/src/views/dashboard/index.less new file mode 100644 index 0000000..47fb624 --- /dev/null +++ b/jeepay-ui-merchant/src/views/dashboard/index.less @@ -0,0 +1,165 @@ +#chart-card { + width: 100%; + + .chart-data { + min-height: 100px; + height: 100%; + width: 100%; + border-radius: 6px; + background-color: #fff; + } + .chart-top, .chart-bottom { + display: flex; + flex-direction: row; + flex-wrap: wrap; + + .middle-smaller, .middle-larger { // 较小的区域 + height: 100%; + } + .top-left { + min-height: 238px; + } + } + .chart-item { + width: 100%; + box-sizing: border-box; + padding: 12px; + } +} +@media screen and (max-width:767px){ +#chart-card { + .chart-top { + .top-left { + order: 1; + } + .top-middle { + order: 2; + width: 100%; + + .middle-top, .middle-bottom { + display: flex; + flex-direction: column; + + .middle-larger, .middle-smaller { + width: 100%; + } + } + + } + .top-right { + order: 0; + } + } +} +} +@media screen and (min-width:768px){ +#chart-card { + .top-left, .top-middle { + order: 1; + } + .top-middle { + width: 100%; + .middle-top, .middle-bottom { + display: flex; + flex-direction: row; + + .middle-larger { + flex-grow: 1; // 设置为1,存在剩余空间放大 + } + .middle-smaller { + max-width: 170px; + min-width: 130px; + } + } + } + + .top-right { + order: 0; + } +} +} + +@media screen and (min-width:1200px){ +#chart-card { + .top-left { + order: 1; + width: 50%; + } + .top-middle { + width: 50%; + order: 2; + + .middle-top, .middle-bottom { + display: flex; + flex-direction: row; + + .middle-larger { + flex-grow: 1; // 设置为1,存在剩余空间放大 + } + .middle-smaller { + max-width: 170px; + min-width: 130px; + } + } + } + + .top-right { + width: 100%; + order: 0; + } + } +} + +@media screen and (min-width:1500px){ + #chart-card { + flex-direction: row; + + .chart-top { + width:100%; + order: 0; + flex-wrap: nowrap; // 禁止换行 + + .top-left, .top-middle { + width:500px; + min-width: 460px; + order: 0; + } + .top-middle { + order: 1; + .middle-top, .middle-bottom { + display: flex; + width: 100%; + height: 50%; + flex-wrap: nowrap; // 禁止换行 + } + .middle-smaller { // 较小的区域 + width: 150px; + min-width: 150px; + } + .middle-larger { // 较大的区域 + width: 300px; + flex-grow: 1; // 设置为1,存在剩余空间放大 + } + } + .top-right { + order: 2; + flex-grow: 1; // 设置为1,存在剩余空间放大 + } + } + + .chart-bottom { + order: 1; + width:100%; + + flex-wrap: nowrap; + .bottom-right { + max-width: 500px; + min-width: 330px; + } + .bottom-left { + min-width: 900px; + flex-grow: 1; // 设置为1,存在剩余空间放大 + } + } + } +} \ No newline at end of file diff --git a/jeepay-ui-merchant/src/views/exception/403.vue b/jeepay-ui-merchant/src/views/exception/403.vue new file mode 100644 index 0000000..6df8f43 --- /dev/null +++ b/jeepay-ui-merchant/src/views/exception/403.vue @@ -0,0 +1,22 @@ + + + diff --git a/jeepay-ui-merchant/src/views/exception/404.vue b/jeepay-ui-merchant/src/views/exception/404.vue new file mode 100644 index 0000000..824644c --- /dev/null +++ b/jeepay-ui-merchant/src/views/exception/404.vue @@ -0,0 +1,22 @@ + + + diff --git a/jeepay-ui-merchant/src/views/exception/500.vue b/jeepay-ui-merchant/src/views/exception/500.vue new file mode 100644 index 0000000..08f2dc1 --- /dev/null +++ b/jeepay-ui-merchant/src/views/exception/500.vue @@ -0,0 +1,22 @@ + + + diff --git a/jeepay-ui-merchant/src/views/order/pay/PayOrderList.vue b/jeepay-ui-merchant/src/views/order/pay/PayOrderList.vue new file mode 100644 index 0000000..d99e6e9 --- /dev/null +++ b/jeepay-ui-merchant/src/views/order/pay/PayOrderList.vue @@ -0,0 +1,367 @@ + + diff --git a/jeepay-ui-merchant/src/views/order/refund/RefundOrderList.vue b/jeepay-ui-merchant/src/views/order/refund/RefundOrderList.vue new file mode 100644 index 0000000..8978871 --- /dev/null +++ b/jeepay-ui-merchant/src/views/order/refund/RefundOrderList.vue @@ -0,0 +1,375 @@ + + diff --git a/jeepay-ui-merchant/src/views/pay/MchPayPassageAddOrEdit.vue b/jeepay-ui-merchant/src/views/pay/MchPayPassageAddOrEdit.vue new file mode 100644 index 0000000..2410773 --- /dev/null +++ b/jeepay-ui-merchant/src/views/pay/MchPayPassageAddOrEdit.vue @@ -0,0 +1,194 @@ + + + + diff --git a/jeepay-ui-merchant/src/views/pay/PayConfigList.vue b/jeepay-ui-merchant/src/views/pay/PayConfigList.vue new file mode 100644 index 0000000..44ad50d --- /dev/null +++ b/jeepay-ui-merchant/src/views/pay/PayConfigList.vue @@ -0,0 +1,301 @@ + + + + + diff --git a/jeepay-ui-merchant/src/views/pay/PayPassageList.vue b/jeepay-ui-merchant/src/views/pay/PayPassageList.vue new file mode 100644 index 0000000..b9b3924 --- /dev/null +++ b/jeepay-ui-merchant/src/views/pay/PayPassageList.vue @@ -0,0 +1,95 @@ + + diff --git a/jeepay-ui-merchant/src/views/role/AddOrEdit.vue b/jeepay-ui-merchant/src/views/role/AddOrEdit.vue new file mode 100644 index 0000000..4153bc8 --- /dev/null +++ b/jeepay-ui-merchant/src/views/role/AddOrEdit.vue @@ -0,0 +1,105 @@ + + + diff --git a/jeepay-ui-merchant/src/views/role/RoleDist.vue b/jeepay-ui-merchant/src/views/role/RoleDist.vue new file mode 100644 index 0000000..529a860 --- /dev/null +++ b/jeepay-ui-merchant/src/views/role/RoleDist.vue @@ -0,0 +1,100 @@ + + + diff --git a/jeepay-ui-merchant/src/views/role/RolePage.vue b/jeepay-ui-merchant/src/views/role/RolePage.vue new file mode 100644 index 0000000..81514eb --- /dev/null +++ b/jeepay-ui-merchant/src/views/role/RolePage.vue @@ -0,0 +1,124 @@ + + diff --git a/jeepay-ui-merchant/src/views/sysuser/AddOrEdit.vue b/jeepay-ui-merchant/src/views/sysuser/AddOrEdit.vue new file mode 100644 index 0000000..9ee6482 --- /dev/null +++ b/jeepay-ui-merchant/src/views/sysuser/AddOrEdit.vue @@ -0,0 +1,158 @@ + + + diff --git a/jeepay-ui-merchant/src/views/sysuser/RoleDist.vue b/jeepay-ui-merchant/src/views/sysuser/RoleDist.vue new file mode 100644 index 0000000..518ab39 --- /dev/null +++ b/jeepay-ui-merchant/src/views/sysuser/RoleDist.vue @@ -0,0 +1,101 @@ + + + diff --git a/jeepay-ui-merchant/src/views/sysuser/SysUserPage.vue b/jeepay-ui-merchant/src/views/sysuser/SysUserPage.vue new file mode 100644 index 0000000..a591782 --- /dev/null +++ b/jeepay-ui-merchant/src/views/sysuser/SysUserPage.vue @@ -0,0 +1,146 @@ + + diff --git a/jeepay-ui-merchant/src/views/user/Login.vue b/jeepay-ui-merchant/src/views/user/Login.vue new file mode 100644 index 0000000..57652c2 --- /dev/null +++ b/jeepay-ui-merchant/src/views/user/Login.vue @@ -0,0 +1,224 @@ + + + + + diff --git a/jeepay-ui-merchant/tests/unit/.eslintrc.js b/jeepay-ui-merchant/tests/unit/.eslintrc.js new file mode 100644 index 0000000..958d51b --- /dev/null +++ b/jeepay-ui-merchant/tests/unit/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + env: { + jest: true + } +} diff --git a/jeepay-ui-merchant/vue.config.js b/jeepay-ui-merchant/vue.config.js new file mode 100644 index 0000000..3f97d9b --- /dev/null +++ b/jeepay-ui-merchant/vue.config.js @@ -0,0 +1,130 @@ +const path = require('path') +const webpack = require('webpack') +const GitRevisionPlugin = require('git-revision-webpack-plugin') +const GitRevision = new GitRevisionPlugin() +const buildDate = JSON.stringify(new Date().toLocaleString()) + +function resolve (dir) { + return path.join(__dirname, dir) +} + +// check Git +function getGitHash () { + try { + return GitRevision.version() + } catch (e) { } + return 'unknown' +} + +const isProd = process.env.NODE_ENV === 'production' + +const assetsCDN = { + // webpack build externals + externals: { + vue: 'Vue', + 'vue-router': 'VueRouter', + vuex: 'Vuex', + axios: 'axios' + }, + css: [], + // https://unpkg.com/browse/vue@2.6.10/ + js: [ + '//cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.min.js', + '//cdn.jsdelivr.net/npm/vue-router@3.1.3/dist/vue-router.min.js', + '//cdn.jsdelivr.net/npm/vuex@3.1.1/dist/vuex.min.js', + '//cdn.jsdelivr.net/npm/axios@0.19.0/dist/axios.min.js' + ] +} + +// vue.config.js +const vueConfig = { + publicPath: process.env.VUE_APP_BASE_URL, // 前端资源访问根目录, 可配置到cdn目录下。 建议使用命令行环境变量进行替换。 + configureWebpack: { + // webpack plugins + plugins: [ + // Ignore all locale files of moment.js + new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), + new webpack.DefinePlugin({ + APP_VERSION: `"${require('./package.json').version}"`, + GIT_HASH: JSON.stringify(getGitHash()), + BUILD_DATE: buildDate + }) + ], + // 代码调试 + devtool: 'source-map', + // if prod, add externals + externals: isProd ? assetsCDN.externals : {} + }, + + chainWebpack: (config) => { + config.resolve.alias + .set('@$', resolve('src')) + + const svgRule = config.module.rule('svg') + svgRule.test(/\.(png|jpe?g|gif|svg)(\?.*)?$/) + svgRule.uses.clear() + svgRule + .oneOf('inline') + .resourceQuery(/inline/) + .use('vue-svg-icon-loader') + .loader('vue-svg-icon-loader') + .end() + .end() + .oneOf('external') + .use('file-loader') + .loader('file-loader') + .options({ + name: 'assets/[name].[hash:8].[ext]' + }) + + // if prod is on + // assets require on cdn + if (isProd) { + config.plugin('html').tap(args => { + args[0].cdn = assetsCDN + return args + }) + } + }, + + css: { + loaderOptions: { + less: { + modifyVars: { + 'primary-color': '#1a53ff', + 'link-color': '#1A79FF', + 'border-radius-base': '4px' + }, + javascriptEnabled: true + } + } + }, + + devServer: { + // development server port 8000 + port: 8000 + // If you want to turn on the proxy, please remove the mockjs /src/main.jsL11 + // proxy: { + // '/api': { + // target: 'https://mock.ihx.me/mock/5baf3052f7da7e07e04a5116/antd-pro', + // ws: false, + // changeOrigin: true + // } + // } + }, + + // disable source map in production + productionSourceMap: false, + lintOnSave: undefined, + // babel-loader no-ignore node_modules/* + transpileDependencies: [], + + pluginOptions: { // 第三方插件配置 + 'style-resources-loader': { + preProcessor: 'less', + patterns: [path.resolve(__dirname, 'src/assets/styles/color.less')] // less所在文件路径 + } + } +} + +module.exports = vueConfig