初始化jeepay-ui项目
|
|
@ -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
|
||||||
|
|
@ -0,0 +1,165 @@
|
||||||
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
|
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||||
|
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.
|
||||||
154
README.md
|
|
@ -1,2 +1,152 @@
|
||||||
# jeepay-ui
|
<p align="center">
|
||||||
jeepay对应的前端UI项目
|
<a href="https://www.jeepay.vip"><img src="https://jeequan.oss-cn-beijing.aliyuncs.com/jeepay/img/jeepay_logo.svg"></a>
|
||||||
|
</p>
|
||||||
|
<p align="center">
|
||||||
|
<strong>适合互联网企业使用的开源支付系统</strong>
|
||||||
|
</p>
|
||||||
|
<p align="center">
|
||||||
|
👉 <a href="https://www.jeepay.vip">https://www.jeepay.vip</a> 👈
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a target="_blank" href="https://spring.io/projects/spring-boot">
|
||||||
|
<img src="https://img.shields.io/badge/spring%20boot-2.4.5-yellowgreen" />
|
||||||
|
</a>
|
||||||
|
<a target="_blank" href="https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html">
|
||||||
|
<img src="https://img.shields.io/badge/JDK-8+-green.svg" />
|
||||||
|
</a>
|
||||||
|
<a target="_blank" href="http://www.gnu.org/licenses/lgpl.html">
|
||||||
|
<img src="https://img.shields.io/badge/license-LGPL--3.0-blue" />
|
||||||
|
</a>
|
||||||
|
<a href='https://gitee.com/jeequan/jeepay/stargazers' target="_blank">
|
||||||
|
<img src='https://gitee.com/jeequan/jeepay/badge/star.svg?theme=gvp' alt='star'></img>
|
||||||
|
</a>
|
||||||
|
<a target="_blank" href='https://github.com/jeequan/jeepay'>
|
||||||
|
<img src="https://img.shields.io/github/stars/jeequan/jeepay.svg?style=social" alt="github star"/>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://jq.qq.com/?_wv=1027&k=94WnXmdL">
|
||||||
|
<img src="https://img.shields.io/badge/qq%E7%BE%A4%E2%91%A0-635647058-critical"/>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
## 📚 项目介绍
|
||||||
|
|
||||||
|
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计全支付系统架构图
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
> 核心技术栈
|
||||||
|
|
||||||
|
| 软件名称 | 描述 | 版本
|
||||||
|
|---|---|---
|
||||||
|
|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商户系统功能
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 🍯 系统截图
|
||||||
|
|
||||||
|
`以下截图是从实际已完成功能界面截取,截图时间为:2021-05-29 02:05`
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 🥪 关于我们
|
||||||
|
***
|
||||||
|
微信扫描下面二维码,关注官方公众号:计全科技,获取更多精彩内容。
|
||||||
|
|
||||||
|

|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
NODE_ENV=production
|
||||||
|
VUE_APP_BASE_URL=/
|
||||||
|
VUE_APP_API_BASE_URL=
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
NODE_ENV=development
|
||||||
|
VUE_APP_BASE_URL=/
|
||||||
|
VUE_APP_API_BASE_URL=http://192.168.0.199:8030
|
||||||
|
|
@ -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?
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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/).
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
module.exports = {
|
||||||
|
presets: [
|
||||||
|
'@vue/cli-plugin-babel/preset'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -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"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 4.2 KiB |
|
|
@ -0,0 +1,17 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
||||||
|
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
||||||
|
<title>Jeepay-收银台</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<noscript>
|
||||||
|
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
||||||
|
</noscript>
|
||||||
|
<div id="app"></div>
|
||||||
|
<!-- built files will be auto injected -->
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
<template>
|
||||||
|
<div id="app">
|
||||||
|
<router-view/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
#app {
|
||||||
|
font-family: Avenir, Helvetica, Arial, sans-serif;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
text-align: center;
|
||||||
|
color: #2c3e50;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav {
|
||||||
|
padding: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav a {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #2c3e50;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav a.router-link-exact-active {
|
||||||
|
color: #42b983;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="29" height="40" viewBox="0 0 29 40"><defs><style>.a{fill:#1a1311;}</style></defs><path class="a" d="M2406.045,4386.261h-7.672l-6.828,14.395-6.828-14.395h-7.672l9.439,19.9H2379.3v5.3h8.516v3.515H2379.3v5.3h8.516v5.984h7.451v-5.984h8.516v-5.3h-8.516v-3.515h8.516v-5.3h-7.181Z" transform="translate(-2377.045 -4386.261)"/></svg>
|
||||||
|
After Width: | Height: | Size: 372 B |
|
|
@ -0,0 +1 @@
|
||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621938740892" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2364" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M512 981.333333C252.8 981.333333 42.666667 771.2 42.666667 512S252.8 42.666667 512 42.666667s469.333333 210.133333 469.333333 469.333333-210.133333 469.333333-469.333333 469.333333z m44.245333-469.333333l159.914667-159.914667a31.274667 31.274667 0 1 0-44.245333-44.245333L512 467.754667 352.085333 307.84a31.274667 31.274667 0 1 0-44.245333 44.245333L467.754667 512l-159.914667 159.914667a31.274667 31.274667 0 1 0 44.245333 44.245333L512 556.245333l159.914667 159.914667a31.274667 31.274667 0 1 0 44.245333-44.245333L556.245333 512z" fill="#FF4B33" p-id="2365"></path></svg>
|
||||||
|
After Width: | Height: | Size: 950 B |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="42" height="42" viewBox="0 0 42 42"><defs><style>.a{fill:url(#a);}.b{fill:#e7ffe6;}.c{clip-path:url(#b);}.d{clip-path:url(#d);}</style><linearGradient id="a" x1="1" x2="0" y2="1" gradientUnits="objectBoundingBox"><stop offset="0" stop-color="#10d832"/><stop offset="1" stop-color="#00ac34"/></linearGradient><clipPath id="b"><rect class="a" width="42" height="42" rx="8" transform="translate(60 783)"/></clipPath><clipPath id="d"><rect class="b" width="37.233" height="33.096"/></clipPath></defs><g class="c" transform="translate(-60 -783)"><rect class="a" width="42" height="42" rx="8" transform="translate(60 783)"/><g transform="matrix(0.966, -0.259, 0.259, 0.966, -5641.551, -2527.47)"><g transform="translate(4642 4685)"><g class="d" transform="translate(0 0)"><path class="b" d="M4655.413,4706.173a1.167,1.167,0,0,1-.558.13,1.219,1.219,0,0,1-1.08-.65l-.088-.17-3.4-7.459a.642.642,0,0,1,.564-.867.688.688,0,0,1,.387.129l4.008,2.863a2.085,2.085,0,0,0,1.033.3,1.677,1.677,0,0,0,.646-.13l18.795-8.408a19.851,19.851,0,0,0-15.215-6.592c-10.259,0-18.621,6.98-18.621,15.6a14.731,14.731,0,0,0,6.421,11.789,1.289,1.289,0,0,1,.515,1,1.194,1.194,0,0,1-.087.389c-.3,1.168-.82,3.079-.82,3.163a1.55,1.55,0,0,0-.088.478.59.59,0,0,0,.6.607.49.49,0,0,0,.346-.129l4.05-2.385a2.052,2.052,0,0,1,.991-.3,2.3,2.3,0,0,1,.557.088,21.579,21.579,0,0,0,6.082.867c10.256,0,18.621-6.98,18.621-15.6a13.763,13.763,0,0,0-2.112-7.24l-21.417,12.439Zm0,0" transform="translate(-4641.886 -4685.302)"/></g></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621586617012" class="icon" viewBox="0 0 1146 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6384" xmlns:xlink="http://www.w3.org/1999/xlink" width="17.90625" height="16"><defs><style type="text/css"></style></defs><path d="M0 788.389381a507.469027 108.743363 0 1 0 1014.938053 0 507.469027 108.743363 0 1 0-1014.938053 0Z" fill="#F3F3F8" p-id="6385"></path><path d="M321.880354 246.303717h367.915044l174.714337 220.749026s-174.895575 180.151504-352.328496 179.607788-357.584425-181.238938-357.584425-181.238938z" fill="#FBFBFD" p-id="6386"></path><path d="M797.451327 815.575221H217.486726a63.433628 63.433628 0 0 1-63.433629-63.433628V471.221239h166.558584l14.680354 29.360708A81.738761 81.738761 0 0 0 416.849558 579.964602h199.362831a63.614867 63.614867 0 0 0 63.433629-60.533806L711.72531 471.221239h149.159646v280.920354A63.433628 63.433628 0 0 1 797.451327 815.575221z" fill="#FBFBFD" p-id="6387"></path><path d="M797.451327 806.513274a54.371681 54.371681 0 0 0 54.371682-54.371681v-271.858407h-135.385487L688.707965 522.330619a72.495575 72.495575 0 0 1-72.495576 66.69593H416.849558a90.619469 90.619469 0 0 1-90.61947-86.088496l-11.236814-22.654867H163.115044v271.858407a54.371681 54.371681 0 0 0 54.371682 54.371681h579.964601m0 18.123894H217.486726a72.495575 72.495575 0 0 1-72.495576-72.495575v-289.982301h181.238938l18.123894 36.247788a72.495575 72.495575 0 0 0 72.495576 72.495575h199.362831a54.371681 54.371681 0 0 0 54.371682-54.371682l36.247787-54.371681h163.115045v289.982301a72.495575 72.495575 0 0 1-72.495576 72.495575z" fill="#E2E2EE" p-id="6388"></path><path d="M863.059823 467.958938L684.539469 253.734513H330.398584L151.87823 467.958938l-13.774159-11.599292L322.061593 235.610619h370.814867l183.957522 220.749027z" fill="#E2E2EE" p-id="6389"></path></svg>
|
||||||
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
|
@ -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: ""
|
||||||
|
}
|
||||||
|
|
@ -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()
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
import HttpRequest from '@/http/HttpRequest'
|
||||||
|
|
||||||
|
const request = new HttpRequest()
|
||||||
|
export default request
|
||||||
|
|
@ -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')
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
<template>
|
||||||
|
<router-view></router-view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
console.log("进入cashier页面");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
<template>
|
||||||
|
<div class="center">
|
||||||
|
<img src="../assets/icon/error.svg" alt="">
|
||||||
|
<p>支付失败,请重新扫码进入!</p>
|
||||||
|
<p>错误: {{msg}}</p>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
// 分发器页面, 用户扫码后进入的第一个页面:
|
||||||
|
// 判断是否存在channelUserId, 如果存在则直接跳到 对应的支付页面,如果不存在则重定向到对应的页面。
|
||||||
|
export default {
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
msg: "请重新扫码进入!",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.msg = this.$route.params.errInfo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="css" scoped>
|
||||||
|
.center {
|
||||||
|
margin-top:30%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
font-size: 36px;
|
||||||
|
margin-top: 50px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
<template>
|
||||||
|
<div class="jump">
|
||||||
|
<!-- <p style="24px">
|
||||||
|
正在跳转到支付页面,请稍候~
|
||||||
|
</p> -->
|
||||||
|
<img src="@/assets/images/loading.gif" alt="" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {getRedirectUrl} from '@/api/api';
|
||||||
|
import config from "@/config";
|
||||||
|
|
||||||
|
// 分发器页面, 用户扫码后进入的第一个页面:
|
||||||
|
// 判断是否存在channelUserId, 如果存在则直接跳到 对应的支付页面,如果不存在则重定向到对应的页面。
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
|
||||||
|
console.log("正在跳转", this.$router.params)
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-constant-condition
|
||||||
|
// if( true ){
|
||||||
|
// this.$router.push({name: "CashierAlipay"})
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
//TODO 需要获取到不同的商户的userId
|
||||||
|
// if(channelUserId.getChannelUserId()){// 存在
|
||||||
|
//
|
||||||
|
// //重定向到对应的支付页面
|
||||||
|
// this.$router.push({name: wayCodeUtils.getPayWay().routeName})
|
||||||
|
// return ;
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
|
const that = this;
|
||||||
|
//以下为不存在
|
||||||
|
getRedirectUrl().then(res => {
|
||||||
|
location.href = res;
|
||||||
|
}).catch(res => {
|
||||||
|
that.$router.push({name: config.errorPageRouteName, params: {errInfo: res.msg}})
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="css" scoped>
|
||||||
|
.jump {
|
||||||
|
height:100vh;
|
||||||
|
width: 100vw;
|
||||||
|
display:flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,56 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<!-- <p style="font-size:16px;">获取用户ID信息</p> -->
|
||||||
|
<p style="font-size:16px;">正在跳转...</p>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
import {getChannelUserId} from '@/api/api'
|
||||||
|
import wayCodeUtils from '@/utils/wayCode'
|
||||||
|
import channelUserIdUtil from '@/utils/channelUserId'
|
||||||
|
import config from "@/config";
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
|
||||||
|
|
||||||
|
const allQuery = Object.assign({}, this.searchToObject(), this.$route.query)
|
||||||
|
|
||||||
|
const that = this;
|
||||||
|
getChannelUserId(allQuery).then(res => {
|
||||||
|
|
||||||
|
//设置channelUserId
|
||||||
|
channelUserIdUtil.setChannelUserId(res);
|
||||||
|
|
||||||
|
this.$router.push({name: wayCodeUtils.getPayWay().routeName})
|
||||||
|
}).catch(res => {
|
||||||
|
that.$router.push({name: config.errorPageRouteName, params: {errInfo: res.msg}})
|
||||||
|
});
|
||||||
|
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
searchToObject: function() {
|
||||||
|
|
||||||
|
if(!window.location.search){
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
var pairs = window.location.search.substring(1).split("&"),
|
||||||
|
result = {},
|
||||||
|
pair,
|
||||||
|
i;
|
||||||
|
for ( i in pairs ) {
|
||||||
|
if ( pairs[i] === "" ) continue;
|
||||||
|
pair = pairs[i].split("=");
|
||||||
|
result[ decodeURIComponent( pair[0] ) ] = decodeURIComponent( pair[1] );
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,133 @@
|
||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2020-12-23 09:04:09
|
||||||
|
* @LastEditors: 王会峰
|
||||||
|
* @LastEditTime: 2021-01-13 11:04:20
|
||||||
|
* @FilePath: \pay\src\components\dialog\dialog.vue
|
||||||
|
* @SendWord: 永无BUG vite⚡
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="dialog">
|
||||||
|
<div class="dialog-box">
|
||||||
|
<div class="dialog-remark">添加备注</div>
|
||||||
|
<div class="dialog-input">
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
placeholder="最多输入10个字"
|
||||||
|
maxlength="10"
|
||||||
|
v-model="remarkC2"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="dialog-bnt">
|
||||||
|
<div class="dialog-bnt-l" @click="myDialogStateFn(false)">取消</div>
|
||||||
|
<div class="dialog-bnt-r" @click="myDialogStateFn(true)">确认</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "MyDialog",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// remark: "",
|
||||||
|
remarkC: "",
|
||||||
|
remarkC2: "",
|
||||||
|
};
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
remark: {
|
||||||
|
type: String,
|
||||||
|
default: () => "",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
/* mounted() {
|
||||||
|
this.remarkC = this.remark
|
||||||
|
}, */
|
||||||
|
created() {
|
||||||
|
this.remarkC = this.remark;
|
||||||
|
this.remarkC2 = this.remark;
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
myDialogStateFn(remarkSate) {
|
||||||
|
let remark = this.remarkC2;
|
||||||
|
let remarkC = this.remarkC;
|
||||||
|
this.$emit("myDialogStateFn", remarkSate ? remark + "" : remarkC + "");
|
||||||
|
!remarkSate && (this.remarkC2 = remarkC);
|
||||||
|
remarkSate && (this.remarkC = remark);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="css" scoped>
|
||||||
|
.dialog {
|
||||||
|
z-index: 999;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
position: fixed;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
background: rgba(0, 0, 0, 0.6);
|
||||||
|
}
|
||||||
|
.dialog-box {
|
||||||
|
width: 600px;
|
||||||
|
height: 359px;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 15px;
|
||||||
|
padding: 50px 0;
|
||||||
|
}
|
||||||
|
.dialog-remark {
|
||||||
|
width: 100%;
|
||||||
|
height: 46px;
|
||||||
|
font-size: 33px;
|
||||||
|
font-family: PingFang SC, PingFang SC-Bold;
|
||||||
|
font-weight: 700;
|
||||||
|
text-align: center;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.dialog-input {
|
||||||
|
margin: 50px auto;
|
||||||
|
width: 510px;
|
||||||
|
height: 60px;
|
||||||
|
border-bottom: 1px solid #cccccc;
|
||||||
|
}
|
||||||
|
.dialog-input input {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
width: 100%;
|
||||||
|
height: 46px;
|
||||||
|
font-size: 33px;
|
||||||
|
font-family: PingFang SC, PingFang SC-Regular;
|
||||||
|
font-weight: 400;
|
||||||
|
text-align: left;
|
||||||
|
border: none;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialog-bnt {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
width: 100%;
|
||||||
|
border-top: 1px solid #e5e5e5;
|
||||||
|
}
|
||||||
|
.dialog-bnt div {
|
||||||
|
width: 50%;
|
||||||
|
height: 100px;
|
||||||
|
font-size: 30px;
|
||||||
|
font-family: PingFang SC, PingFang SC-Medium;
|
||||||
|
font-weight: 500;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 100px;
|
||||||
|
}
|
||||||
|
.dialog-bnt-l {
|
||||||
|
color: #b2b2b2;
|
||||||
|
border-right: 1px solid #e5e5e5;
|
||||||
|
}
|
||||||
|
.dialog-bnt-r {
|
||||||
|
/* border-left: 1px solid #e5e5e5; */
|
||||||
|
color: #587cca;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1,374 @@
|
||||||
|
<!--
|
||||||
|
* @Author: your name
|
||||||
|
* @Date: 2020-12-23 10:46:37
|
||||||
|
* @LastEditors: 王会峰
|
||||||
|
* @LastEditTime: 2020-12-30 11:02:25
|
||||||
|
* @FilePath: \pay\src\components\keyboard\keyboard.vue
|
||||||
|
* @SendWord: 永无BUG vite⚡
|
||||||
|
-->
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="keyboard">
|
||||||
|
<div class="keyboard-top">
|
||||||
|
<div class="triangle-topleft-k"></div>
|
||||||
|
<div class="keyboard-tite">@小新支付</div>
|
||||||
|
<div class="triangle-topleft-k" @click="concealSateFn">
|
||||||
|
<div
|
||||||
|
class="triangle-topleft"
|
||||||
|
:style="
|
||||||
|
concealSate ? '' : 'transform:rotate(-135deg);margin-top: 12px;'
|
||||||
|
"
|
||||||
|
></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="keyboard-main"
|
||||||
|
v-show="concealSate"
|
||||||
|
style="transition: all 1s ease"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
v-for="(item, index) in numberList"
|
||||||
|
:key="index"
|
||||||
|
class="keyborad-key"
|
||||||
|
>
|
||||||
|
<!-- @click="onKeyboard(it, $event)" -->
|
||||||
|
<div
|
||||||
|
ref="number"
|
||||||
|
class="number"
|
||||||
|
v-for="(it, ind) in item"
|
||||||
|
:key="ind"
|
||||||
|
@touchstart.prevent="goTouchstart(it, $event)"
|
||||||
|
@touchend.prevent="goTouchend(it, $event)"
|
||||||
|
>
|
||||||
|
{{ it != "del" ? it : "" }}
|
||||||
|
<template class="" v-if="it == 'del'">
|
||||||
|
<!-- <div class="jiao"></div>
|
||||||
|
<div class="juxing"></div> -->
|
||||||
|
<img src="../../assets/icon/del.png" alt="" />
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="keyborad-key">
|
||||||
|
<div
|
||||||
|
class="number"
|
||||||
|
@touchstart.prevent="goTouchstart('dot', $event)"
|
||||||
|
@touchend.prevent="goTouchend('dot', $event)"
|
||||||
|
>
|
||||||
|
<div class="dot"></div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="number zero"
|
||||||
|
@touchstart.prevent="goTouchstart('zero', $event)"
|
||||||
|
@touchend.prevent="goTouchend('zero', $event)"
|
||||||
|
>
|
||||||
|
0
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
:class="paymentClassFn"
|
||||||
|
:style="'background:' + typeColor + ';'"
|
||||||
|
@click="payment"
|
||||||
|
>
|
||||||
|
<div>付款</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "Keyboard",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
timeOutEvent: 0, //记录触摸时长
|
||||||
|
tiemIntervalEvent: 0,
|
||||||
|
concealSateC: true,
|
||||||
|
numberList: [
|
||||||
|
[1, 2, 3, "del"],
|
||||||
|
[4, 5, 6],
|
||||||
|
[7, 8, 9],
|
||||||
|
],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
paymentClassFn() {
|
||||||
|
// `this` 指向 vm 实例
|
||||||
|
let className1 = this.concealSate ? "payment" : "paymentConceal";
|
||||||
|
let className2 = this.money != -1 && this.money != "" ? "" : "opacityS";
|
||||||
|
return className1 + " " + className2;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
typeColor: {
|
||||||
|
type: String,
|
||||||
|
default: "#07c160",
|
||||||
|
},
|
||||||
|
money: {
|
||||||
|
type: String | Number,
|
||||||
|
default: -1,
|
||||||
|
},
|
||||||
|
concealSate: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.concealSateC = this.concealSate;
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
f() {},
|
||||||
|
payment() {
|
||||||
|
this.$emit("payment");
|
||||||
|
},
|
||||||
|
concealSateFn() {
|
||||||
|
// this.concealSateC = !this.concealSateC;
|
||||||
|
this.$emit("conceal");
|
||||||
|
},
|
||||||
|
onKeyboard(item, $event) {
|
||||||
|
/* setTimeout(() => {
|
||||||
|
$event.style.background = "#fafafa";
|
||||||
|
}, 100); */
|
||||||
|
// animation: heartBeat 0.2s;
|
||||||
|
if (item == "del") {
|
||||||
|
this.$emit("delTheAmount", item);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let obj = {
|
||||||
|
zero: 0,
|
||||||
|
dot: ".",
|
||||||
|
};
|
||||||
|
if (typeof item != "number") {
|
||||||
|
item = obj[item];
|
||||||
|
}
|
||||||
|
this.$emit("enterTheAmount", item);
|
||||||
|
},
|
||||||
|
|
||||||
|
goTouchstart(it, $event) {
|
||||||
|
if (
|
||||||
|
$event.srcElement.localName == "img" ||
|
||||||
|
$event.srcElement.className == "dot"
|
||||||
|
) {
|
||||||
|
$event = $event.target.parentNode;
|
||||||
|
} else {
|
||||||
|
$event = $event.target;
|
||||||
|
}
|
||||||
|
$event.style.background = "rgba(197, 197, 197, 0.7)";
|
||||||
|
let _this = this;
|
||||||
|
clearTimeout(_this.timeOutEvent);
|
||||||
|
_this.timeOutEvent = setTimeout(function () {
|
||||||
|
_this.timeOutEvent = 0;
|
||||||
|
if (it == "del") {
|
||||||
|
clearInterval(_this.tiemIntervalEvent);
|
||||||
|
_this.delLong(it);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 处理长按事件...
|
||||||
|
}, 600);
|
||||||
|
},
|
||||||
|
//手如果在600毫秒内就释放,则取消长按事件
|
||||||
|
goTouchend(it, $event) {
|
||||||
|
console.log("goTouchend");
|
||||||
|
if (
|
||||||
|
$event.srcElement.localName == "img" ||
|
||||||
|
$event.srcElement.className == "dot"
|
||||||
|
) {
|
||||||
|
$event = $event.target.parentNode;
|
||||||
|
} else {
|
||||||
|
$event = $event.target;
|
||||||
|
}
|
||||||
|
$event.style.background = "#fafafa";
|
||||||
|
let _this = this;
|
||||||
|
clearTimeout(_this.timeOutEvent);
|
||||||
|
clearInterval(_this.tiemIntervalEvent);
|
||||||
|
if (_this.timeOutEvent !== 0) {
|
||||||
|
// 处理单击事件
|
||||||
|
this.onKeyboard(it, $event);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 长按退格
|
||||||
|
delLong(item) {
|
||||||
|
// 定时触发
|
||||||
|
this.tiemIntervalEvent = setInterval(() => {
|
||||||
|
this.$emit("delTheAmount", item);
|
||||||
|
}, 200);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="css" scoped>
|
||||||
|
@keyframes switchColor {
|
||||||
|
0% {
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
background-color: #bbbbbb;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "wxFirstFont";
|
||||||
|
src: url("../../assets/wx-zt/WeChatSansSS-Bold.ttf"); /* IE9 */
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.keyboard {
|
||||||
|
position: relative;
|
||||||
|
background-color: #ffffff;
|
||||||
|
}
|
||||||
|
.keyboard-top {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 60px;
|
||||||
|
background: #fafafa;
|
||||||
|
border: 1px solid #e1e2e6;
|
||||||
|
border-bottom: 0px solid #e1e2e6;
|
||||||
|
}
|
||||||
|
.keyboard-tite {
|
||||||
|
/* margin-right: -40px; */
|
||||||
|
font-size: 22px;
|
||||||
|
font-family: wxFirstFont SC, PingFang SC, PingFang SC-Medium;
|
||||||
|
font-weight: 500;
|
||||||
|
text-align: center;
|
||||||
|
color: #bbbdbf;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.triangle-topleft-k {
|
||||||
|
width: 200px;
|
||||||
|
/* height: 100%; */
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
.triangle-topleft {
|
||||||
|
margin-top: -15px;
|
||||||
|
margin-right: 30px;
|
||||||
|
transform: rotate(45deg);
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border-bottom: 18px solid #b2b2b2;
|
||||||
|
border-left: 18px solid transparent;
|
||||||
|
}
|
||||||
|
.keyboard-main {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.keyborad-key {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: wrap;
|
||||||
|
}
|
||||||
|
/* .del {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: nowrap;
|
||||||
|
} */
|
||||||
|
.jiao {
|
||||||
|
margin-top: 4px;
|
||||||
|
margin-right: -16px;
|
||||||
|
width: 28px;
|
||||||
|
height: 28px;
|
||||||
|
transform: rotate(-45deg);
|
||||||
|
border-top: 3px solid #2c2c2c;
|
||||||
|
border-left: 3px solid #2c2c2c;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.juxing {
|
||||||
|
width: 40px;
|
||||||
|
height: 37px;
|
||||||
|
border: 3px solid #2c2c2c;
|
||||||
|
border-left: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.keyboard-main .number {
|
||||||
|
/* flex-grow: 1; */
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
/* width: 187px; */
|
||||||
|
width: 25%;
|
||||||
|
height: 100px;
|
||||||
|
background: #fafafa;
|
||||||
|
border: 1px solid #e1e2e6;
|
||||||
|
border-bottom: none;
|
||||||
|
border-left: none;
|
||||||
|
font-size: 56px;
|
||||||
|
font-family: PingFang SC, PingFang SC-Medium;
|
||||||
|
font-weight: 500;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 100px;
|
||||||
|
color: #242526;
|
||||||
|
letter-spacing: 2px;
|
||||||
|
}
|
||||||
|
.number img {
|
||||||
|
height: 37px;
|
||||||
|
width: 51px;
|
||||||
|
}
|
||||||
|
/* .number:active {
|
||||||
|
|
||||||
|
background-color: rgba(197, 197, 197, 0.527);
|
||||||
|
} */
|
||||||
|
.dot {
|
||||||
|
width: 6px;
|
||||||
|
height: 6px;
|
||||||
|
border-radius: 3px;
|
||||||
|
background-color: #242526 !important;
|
||||||
|
}
|
||||||
|
.keyboard-main .zero {
|
||||||
|
/* flex-grow: 2; */
|
||||||
|
width: 50%;
|
||||||
|
/* width: 374px; */
|
||||||
|
}
|
||||||
|
.payment {
|
||||||
|
flex-grow: 1;
|
||||||
|
position: absolute;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
width: calc(100vw / 4);
|
||||||
|
height: 300px;
|
||||||
|
background: #07c160;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
.paymentConceal {
|
||||||
|
flex-grow: 1;
|
||||||
|
position: absolute;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
right: 30px;
|
||||||
|
top: -180px;
|
||||||
|
/* width: 189px; */
|
||||||
|
width: calc(100vw / 4);
|
||||||
|
height: 150px;
|
||||||
|
background: #07c160;
|
||||||
|
border-radius: 10px;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
.payment div {
|
||||||
|
width: 100%;
|
||||||
|
font-size: 36px;
|
||||||
|
font-family: PingFang SC, PingFang SC-Medium;
|
||||||
|
font-weight: 500;
|
||||||
|
text-align: center;
|
||||||
|
color: #ffffff;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
}
|
||||||
|
.paymentConceal div {
|
||||||
|
width: 100%;
|
||||||
|
font-size: 36px;
|
||||||
|
font-family: PingFang SC, PingFang SC-Medium;
|
||||||
|
font-weight: 500;
|
||||||
|
text-align: center;
|
||||||
|
color: #ffffff;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
}
|
||||||
|
.opacityS {
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,149 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<header class="header">
|
||||||
|
<div class="header-text">付款给 {{ payOrderInfo.mchName }}</div>
|
||||||
|
<div class="header-img">
|
||||||
|
<img :src="avatar ? avatar : icon_member_default" alt="" />
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<div class="plus-input">
|
||||||
|
<!-- ¥字符 货币的符号-->
|
||||||
|
<div class="S">
|
||||||
|
<img src="../../assets/icon/S.svg" alt="" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 手写输入框 -->
|
||||||
|
<div class="input-c">
|
||||||
|
<div class="input-c-div-1">{{ payOrderInfo.amount/100 }}</div>
|
||||||
|
</div>
|
||||||
|
<!-- 手写输入框的提示文字 -->
|
||||||
|
<div v-show="!amount" class="placeholder">请输入金额</div>
|
||||||
|
</div>
|
||||||
|
<ul class="plus-ul" >
|
||||||
|
<!-- 支付板块 -->
|
||||||
|
<li style="border-radius:10px;">
|
||||||
|
<!-- 支付金额板块 -->
|
||||||
|
<div class="img-div">
|
||||||
|
<img :src="wxImg" alt="" />
|
||||||
|
<div class="div-text">
|
||||||
|
支付宝支付
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="bnt-pay">
|
||||||
|
<div
|
||||||
|
class="bnt-pay-text"
|
||||||
|
style="background-color:#1678ff"
|
||||||
|
@click="pay"
|
||||||
|
>
|
||||||
|
付款
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { getPayPackage, getPayOrderInfo } from '@/api/api'
|
||||||
|
import config from "@/config";
|
||||||
|
export default {
|
||||||
|
|
||||||
|
data: function (){
|
||||||
|
return {
|
||||||
|
merchantName: 'jeepay', // 付款的商户默认
|
||||||
|
avatar: require("../../assets/images/zfb.jpeg"), // 商户头像默认
|
||||||
|
amount: 1, // 支付金额默认
|
||||||
|
resData : {},
|
||||||
|
wxImg: require("../../assets/images/zfb.jpeg"), // 微信支付图片
|
||||||
|
payOrderInfo: {}, //订单信息
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
this.setPayOrderInfo(true); //获取订单信息 & 调起支付插件
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
setPayOrderInfo(isAutoPay){
|
||||||
|
const that = this
|
||||||
|
getPayOrderInfo().then(res => {
|
||||||
|
that.payOrderInfo = res
|
||||||
|
|
||||||
|
if(isAutoPay){
|
||||||
|
that.pay()
|
||||||
|
}
|
||||||
|
}).catch(res => {
|
||||||
|
that.$router.push({name: config.errorPageRouteName, params: {errInfo: res.msg}})
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
pay: function (){
|
||||||
|
|
||||||
|
let that = this;
|
||||||
|
getPayPackage(this.amount).then(res => {
|
||||||
|
|
||||||
|
//订单创建异常
|
||||||
|
if(res.code != '0') {
|
||||||
|
return alert(res.msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(res.data.orderState != 1 ) { //订单不是支付中,说明订单异常
|
||||||
|
return alert(res.data.errMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!window.AlipayJSBridge) {
|
||||||
|
document.addEventListener('AlipayJSBridgeReady', function(){
|
||||||
|
that.doAlipay(res.data.alipayTradeNo);
|
||||||
|
}, false);
|
||||||
|
}else{
|
||||||
|
that.doAlipay(res.data.alipayTradeNo);
|
||||||
|
}
|
||||||
|
|
||||||
|
}).catch(res => {
|
||||||
|
that.$router.push({name: config.errorPageRouteName, params: {errInfo: res.msg}})
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
doAlipay(alipayTradeNo){
|
||||||
|
|
||||||
|
const that = this
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-undef
|
||||||
|
AlipayJSBridge.call("tradePay", {
|
||||||
|
tradeNO: alipayTradeNo
|
||||||
|
}, function (data) {
|
||||||
|
if ("9000" == data.resultCode) {
|
||||||
|
// alert('支付成功!');
|
||||||
|
|
||||||
|
// //重定向
|
||||||
|
if(that.payOrderInfo.returnUrl){
|
||||||
|
location.href = that.payOrderInfo.returnUrl;
|
||||||
|
}else{
|
||||||
|
alert('支付成功!');
|
||||||
|
window.AlipayJSBridge.call('closeWebview')
|
||||||
|
}
|
||||||
|
|
||||||
|
//‘8000’:后台获取支付结果超时,暂时未拿到支付结果;
|
||||||
|
// ‘6004’:支付过程中网络出错, 暂时未拿到支付结果;
|
||||||
|
}else if("8000" == data.resultCode || "6004" == data.resultCode){ //其他
|
||||||
|
|
||||||
|
alert(JSON.stringify(data));
|
||||||
|
window.AlipayJSBridge.call('closeWebview')
|
||||||
|
|
||||||
|
}else{ ///其他异常信息, 需要取消订单
|
||||||
|
alert('用户已取消!');
|
||||||
|
window.AlipayJSBridge.call('closeWebview')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="css" scoped>
|
||||||
|
@import './pay.css';
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,203 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<header class="header">
|
||||||
|
<div class="header-text">付款给{{ payOrderInfo.mchName }}</div>
|
||||||
|
<div class="header-img">
|
||||||
|
<img :src="avatar ? avatar : icon_member_default" alt="" />
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<div class="plus-input">
|
||||||
|
<!-- ¥字符 货币的符号-->
|
||||||
|
<div class="S">
|
||||||
|
<img src="../../assets/icon/S.svg" alt="" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 输入框光标 -->
|
||||||
|
<!-- <div class="ttt">
|
||||||
|
<div
|
||||||
|
class="input-c-div"
|
||||||
|
style="background: #07c160"
|
||||||
|
></div>
|
||||||
|
</div> -->
|
||||||
|
|
||||||
|
<!-- 手写输入框 -->
|
||||||
|
<div class="input-c">
|
||||||
|
<div class="input-c-div-1">{{ payOrderInfo.amount/100 }}</div>
|
||||||
|
<!-- 数字金额后边的光标 -->
|
||||||
|
<!-- <div class="input-c-div" style="background:#07c160"></div> -->
|
||||||
|
</div>
|
||||||
|
<!-- 手写输入框的提示文字 -->
|
||||||
|
<div v-show="!amount" class="placeholder">请输入金额</div>
|
||||||
|
</div>
|
||||||
|
<ul class="plus-ul" >
|
||||||
|
<!-- 支付板块 -->
|
||||||
|
<li
|
||||||
|
style="border-radius:10px;"
|
||||||
|
>
|
||||||
|
<!-- 支付金额板块 -->
|
||||||
|
<div class="img-div">
|
||||||
|
<img :src="wxImg" alt="" />
|
||||||
|
<div class="div-text">
|
||||||
|
微信支付
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<!-- 备注板块 ,目前不需要添加备注,隐藏-->
|
||||||
|
<!-- <div class="remark-k" :class="payType != 'wx' ? 'margin-top-30' : ''">
|
||||||
|
<div class="remark">
|
||||||
|
<div class="remark-hui" v-show="remark">{{ remark }}</div>
|
||||||
|
<div @click="myDialogStateFn">{{ remark ? "修改" : "添加备注" }}</div>
|
||||||
|
</div>
|
||||||
|
</div> -->
|
||||||
|
<!-- dialog 对话框 目前不需要添加备注,隐藏-->
|
||||||
|
<!-- <MyDialog
|
||||||
|
v-show="myDialogState"
|
||||||
|
@myDialogStateFn="myDialogStateFn"
|
||||||
|
:remark="remark"
|
||||||
|
>
|
||||||
|
</MyDialog> -->
|
||||||
|
|
||||||
|
<!-- 键盘板块 目前不需要键盘 隐藏 -->
|
||||||
|
<!-- <div class="keyboard-plus" v-if="isAllowModifyAmount">
|
||||||
|
<Keyboard
|
||||||
|
@delTheAmount="delTheAmount"
|
||||||
|
@conceal="conceal"
|
||||||
|
@enterTheAmount="enterTheAmount"
|
||||||
|
@payment="payment"
|
||||||
|
:money="money"
|
||||||
|
:concealSate="concealSate"
|
||||||
|
:typeColor="typeColor[payType]"
|
||||||
|
></Keyboard>
|
||||||
|
</div> -->
|
||||||
|
|
||||||
|
<!-- jeepay中,付款的点击事件 由 payment 修改为 pay -->
|
||||||
|
<!-- jeepay中,付款页面是唯一的,颜色不在需要v-bind,去掉即可 -->
|
||||||
|
<!-- <div class="bnt-pay" v-if="!isAllowModifyAmount"> -->
|
||||||
|
<div class="bnt-pay">
|
||||||
|
<div
|
||||||
|
class="bnt-pay-text"
|
||||||
|
style="background-color:#07c160"
|
||||||
|
@click="pay"
|
||||||
|
>
|
||||||
|
付款
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// import MyDialog from "./../dialog/dialog"; // 添加备注弹出的对话框
|
||||||
|
// import Keyboard from "./../keyboard/keyboard"; // 手写键盘
|
||||||
|
import {getPayPackage, getPayOrderInfo }from '@/api/api'
|
||||||
|
import config from "@/config";
|
||||||
|
export default {
|
||||||
|
// 注册备注对话框,和 手写键盘组件,由于这里是直接掉起支付事件,所以目前不应用
|
||||||
|
// components: { MyDialog, Keyboard },
|
||||||
|
data: function (){
|
||||||
|
return {
|
||||||
|
merchantName: 'jeepay', // 付款的商户默认
|
||||||
|
avatar: require("../../assets/icon/wx.svg"), // 商户头像默认
|
||||||
|
amount: 1, // 支付金额默认
|
||||||
|
resData : {},
|
||||||
|
wxImg: require("../../assets/icon/wx.svg"), // 微信支付图片
|
||||||
|
payOrderInfo: {}, //订单信息
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
this.setPayOrderInfo(true); //获取订单信息 & 调起支付插件
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
setPayOrderInfo(isAutoPay){
|
||||||
|
const that = this
|
||||||
|
getPayOrderInfo().then(res => {
|
||||||
|
that.payOrderInfo = res
|
||||||
|
|
||||||
|
if(isAutoPay){
|
||||||
|
that.pay()
|
||||||
|
}
|
||||||
|
}).catch(res => {
|
||||||
|
that.$router.push({name: config.errorPageRouteName, params: {errInfo: res.msg}})
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// 支付事件
|
||||||
|
pay: function (){
|
||||||
|
// 该函数执行效果慢
|
||||||
|
let that = this;
|
||||||
|
getPayPackage(this.amount).then(res => {
|
||||||
|
|
||||||
|
if(res.code != '0') {
|
||||||
|
return alert(res.msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(res.data.orderState != 1 ) { //订单不是支付中,说明订单异常
|
||||||
|
return alert(res.data.errMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
that.resData = res.data;
|
||||||
|
if (typeof WeixinJSBridge == "undefined"){
|
||||||
|
if( document.addEventListener ){
|
||||||
|
document.addEventListener('WeixinJSBridgeReady', that.onBridgeReady, false);
|
||||||
|
}else if (document.attachEvent){
|
||||||
|
document.attachEvent('WeixinJSBridgeReady', that.onBridgeReady);
|
||||||
|
document.attachEvent('onWeixinJSBridgeReady', that.onBridgeReady);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
that.onBridgeReady();
|
||||||
|
}
|
||||||
|
|
||||||
|
}).catch(res => {
|
||||||
|
that.$router.push({name: config.errorPageRouteName, params: {errInfo: res.msg}})
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/* 唤醒微信支付*/
|
||||||
|
onBridgeReady() {
|
||||||
|
|
||||||
|
let that = this;
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-undef
|
||||||
|
WeixinJSBridge.invoke(
|
||||||
|
'getBrandWCPayRequest', JSON.parse(that.resData.payInfo),
|
||||||
|
function(res) {
|
||||||
|
if (res.err_msg == "get_brand_wcpay_request:ok") {
|
||||||
|
// 使用以上方式判断前端返回,微信团队郑重提示:
|
||||||
|
//res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
|
||||||
|
// //重定向
|
||||||
|
if(that.payOrderInfo.returnUrl){
|
||||||
|
location.href = that.payOrderInfo.returnUrl;
|
||||||
|
}else{
|
||||||
|
alert('支付成功!');
|
||||||
|
window.WeixinJSBridge.call('closeWindow')
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if (res.err_msg == "get_brand_wcpay_request:cancel") {
|
||||||
|
alert("支付取消");
|
||||||
|
window.WeixinJSBridge.call('closeWindow')
|
||||||
|
}
|
||||||
|
if (res.err_msg == "get_brand_wcpay_request:fail") {
|
||||||
|
alert('支付失败:' + JSON.stringify(res))
|
||||||
|
window.WeixinJSBridge.call('closeWindow')
|
||||||
|
}
|
||||||
|
if (res.err_msg == "total_fee") {
|
||||||
|
alert('缺少参数')
|
||||||
|
window.WeixinJSBridge.call('closeWindow')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="css" scoped>
|
||||||
|
@import './pay.css';
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<header class="header">
|
||||||
|
<div class="header-text">付款给{{ merchantName }}</div>
|
||||||
|
<div class="header-img">
|
||||||
|
<img :src="avatar ? avatar : icon_member_default" alt="" />
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<div class="plus-input">
|
||||||
|
<!-- ¥字符 货币的符号-->
|
||||||
|
<div class="S">
|
||||||
|
<img src="../../assets/icon/S.svg" alt="" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 手写输入框 -->
|
||||||
|
<div class="input-c">
|
||||||
|
<div class="input-c-div-1">{{ amount }}</div>
|
||||||
|
</div>
|
||||||
|
<!-- 手写输入框的提示文字 -->
|
||||||
|
<div v-show="!amount" class="placeholder">请输入金额</div>
|
||||||
|
</div>
|
||||||
|
<ul class="plus-ul" >
|
||||||
|
<!-- 支付板块 -->
|
||||||
|
<li style="border-radius:10px;">
|
||||||
|
<!-- 支付金额板块 -->
|
||||||
|
<div class="img-div">
|
||||||
|
<img :src="wxImg" alt="" />
|
||||||
|
<div class="div-text">
|
||||||
|
云闪付支付
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="bnt-pay">
|
||||||
|
<!-- <div
|
||||||
|
class="bnt-pay-text"
|
||||||
|
style="background-color:#ff534d"
|
||||||
|
@click="pay"
|
||||||
|
>
|
||||||
|
付款
|
||||||
|
</div> -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {getPayPackage}from '@/api/api'
|
||||||
|
import config from "@/config";
|
||||||
|
export default {
|
||||||
|
|
||||||
|
data: function (){
|
||||||
|
return {
|
||||||
|
merchantName: 'jeepay', // 付款的商户默认
|
||||||
|
avatar: require("../../assets/images/ysf.jpg"), // 商户头像默认
|
||||||
|
amount: 1, // 支付金额默认
|
||||||
|
resData : {},
|
||||||
|
wxImg: require("../../assets/images/ysf.jpg") // 微信支付图片
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
// this.pay(); //自动调起
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
pay: function (){
|
||||||
|
|
||||||
|
let that = this;
|
||||||
|
getPayPackage(this.amount).then(res => {
|
||||||
|
|
||||||
|
console.log(res)
|
||||||
|
|
||||||
|
if (!window.AlipayJSBridge) {
|
||||||
|
document.addEventListener('AlipayJSBridgeReady', function(){
|
||||||
|
that.doAlipay(res.alipayTradeNo);
|
||||||
|
}, false);
|
||||||
|
}else{
|
||||||
|
that.doAlipay(res.alipayTradeNo);
|
||||||
|
}
|
||||||
|
|
||||||
|
}).catch(res => {
|
||||||
|
that.$router.push({name: config.errorPageRouteName, params: {errInfo: res.msg}})
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
doAlipay(alipayTradeNo){
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-undef
|
||||||
|
AlipayJSBridge.call("tradePay", {
|
||||||
|
tradeNO: alipayTradeNo
|
||||||
|
}, function (data) {
|
||||||
|
if ("9000" == data.resultCode) {
|
||||||
|
alert('支付成功!');
|
||||||
|
}else{ //其他
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="css" scoped>
|
||||||
|
@import './pay.css';
|
||||||
|
</style>
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
> 1%
|
||||||
|
last 2 versions
|
||||||
|
not ie <= 10
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
NODE_ENV=production
|
||||||
|
VUE_APP_PREVIEW=false
|
||||||
|
VUE_APP_BASE_URL=/
|
||||||
|
VUE_APP_API_BASE_URL=
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
NODE_ENV=development
|
||||||
|
VUE_APP_PREVIEW=true
|
||||||
|
VUE_APP_BASE_URL=/
|
||||||
|
VUE_APP_API_BASE_URL=http://localhost:9217
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -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'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
module.exports = {
|
||||||
|
plugins: {
|
||||||
|
autoprefixer: {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="198" height="44" viewBox="0 0 198 44"><defs><clipPath id="a"><rect width="141" height="36" fill="#262626"/></clipPath><clipPath id="b"><rect width="48" height="44" transform="translate(0.013 -0.162)" fill="#1a53ff"/></clipPath></defs><g transform="translate(-3298 -941)"><g transform="translate(2668.271 -1127)"><g transform="translate(686.73 2076)" clip-path="url(#a)"><path d="M942.424,2095.354A5.627,5.627,0,0,0,936.7,2091H924.375l-.505,3.6h12.076a3.074,3.074,0,0,1,2.434,1.072,2.282,2.282,0,0,1-1.758,3.728h-8a7.611,7.611,0,0,0-7.3,6.4l-.393,2.8a5.432,5.432,0,0,0,5.5,6.4h5.6a8.888,8.888,0,0,0,4.583-1.322l-.185,1.322h3.6l1.124-8,1.067-7.6.281-2h0A5.815,5.815,0,0,0,942.424,2095.354ZM938.115,2103l-.225,1.6-.337,2.4a5.24,5.24,0,0,1-5.016,4.4h-5.6a2.379,2.379,0,0,1-2.406-2.8l.393-2.8a3.334,3.334,0,0,1,3.192-2.8h8a6,6,0,0,0,2.051-.368Z" transform="translate(-827.264 -2085)" fill="#262626"/><path d="M811,2091h-7.2a7.611,7.611,0,0,0-7.3,6.4l-.534,3.8-.505,3.6-.534,3.8a5.432,5.432,0,0,0,5.5,6.4h7.2a7.611,7.611,0,0,0,7.3-6.4l.028-.2h-3.6l-.028.2a3.333,3.333,0,0,1-3.192,2.8h-7.2a2.379,2.379,0,0,1-2.406-2.8l.534-3.8H815.46l.505-3.6.534-3.8A5.432,5.432,0,0,0,811,2091Zm-11.428,10.2.534-3.8a3.333,3.333,0,0,1,3.192-2.8h7.2a2.379,2.379,0,0,1,2.406,2.8l-.534,3.8Z" transform="translate(-751.638 -2085)" fill="#262626"/><path d="M749,2091h-7.2a7.611,7.611,0,0,0-7.3,6.4l-.534,3.8-.505,3.6-.534,3.8a5.432,5.432,0,0,0,5.5,6.4h7.2a7.611,7.611,0,0,0,7.3-6.4l.028-.2h-3.6l-.028.2a3.333,3.333,0,0,1-3.192,2.8h-7.2a2.379,2.379,0,0,1-2.406-2.8l.534-3.8H753.46l.505-3.6.534-3.8A5.432,5.432,0,0,0,749,2091Zm-11.428,10.2.534-3.8a3.333,3.333,0,0,1,3.192-2.8h7.2a2.379,2.379,0,0,1,2.406,2.8l-.534,3.8Z" transform="translate(-714.425 -2085)" fill="#262626"/><path d="M702.938,2076h-8l-.562,4h4l-1.911,13.6-.73,5.2a3.811,3.811,0,0,1-3.648,3.2h-4.8l-.562,4h4.8a8.564,8.564,0,0,0,8.208-7.2l2.641-18.8h0Z" transform="translate(-686.73 -2076)" fill="#262626"/><path d="M1001.279,2091l-.506,3.6-.73,5.2-1.067,7.6-.169,1.2a3.334,3.334,0,0,1-3.192,2.8h-7.2a2.379,2.379,0,0,1-2.405-2.8l1.236-8.8.73-5.2.506-3.6h-3.6l-2.472,17.6a5.432,5.432,0,0,0,5.5,6.4h7.2a6.958,6.958,0,0,0,2.89-.652l-.092.652a2.854,2.854,0,0,1-2.736,2.4H982.379l-.506,3.6h12.793a7.136,7.136,0,0,0,6.84-6l.9-6.4.169-1.2,2.3-16.4Z" transform="translate(-863.877 -2085)" fill="#262626"/><path d="M872.537,2091h-7.2a6.958,6.958,0,0,0-2.89.652l.091-.652h-3.6l-.9,6.4-1.574,11.2L854.73,2121h3.6l.934-6.652a5.789,5.789,0,0,0,2.707.652h7.2a7.611,7.611,0,0,0,7.3-6.4l1.574-11.2A5.432,5.432,0,0,0,872.537,2091Zm.326,17.6a3.333,3.333,0,0,1-3.192,2.8h-7.2a2.379,2.379,0,0,1-2.406-2.8l1.574-11.2a3.334,3.334,0,0,1,3.192-2.8h7.2a2.379,2.379,0,0,1,2.406,2.8Z" transform="translate(-787.565 -2085)" fill="#262626"/></g></g><g transform="translate(267.246 -836.852)"><g transform="translate(3030.741 1778.014)" clip-path="url(#b)"><path d="M3045.511,1838h0l-6.29,5.493a3.121,3.121,0,0,0,2.066,5.471h11.29a1.094,1.094,0,0,0,.833-1.808Z" transform="translate(-3034.172 -1805.125)" fill="#1a53ff" opacity="0.5"/><path d="M3034.916,1783.662l-4.332,30.7a6.588,6.588,0,0,0,6.541,7.494h2.454a1.1,1.1,0,0,0,1.089-.943l1.148-8.134a2.2,2.2,0,0,1,2.177-1.886h7.184a2.2,2.2,0,0,0,2.179-1.886l1.014-7.189a2.2,2.2,0,0,1,2.18-1.887h6.562a2.2,2.2,0,0,1,2.18,2.5l-1.194,8.465-1.371,9.717a1.1,1.1,0,0,0,1.087,1.246h4a6.6,6.6,0,0,0,6.541-5.662l4.332-30.7a6.586,6.586,0,0,0-6.54-7.492h-30.694A6.6,6.6,0,0,0,3034.916,1783.662Zm29.588,10.782h-6.559a2.2,2.2,0,0,1-2.182-2.5l.928-6.574a2.2,2.2,0,0,1,2.182-1.889h6.557a2.2,2.2,0,0,1,2.183,2.5l-.928,6.574A2.2,2.2,0,0,1,3064.5,1794.445Z" transform="translate(-3030.743 -1778.014)" fill="#1a53ff"/></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 3.7 KiB |
|
|
@ -0,0 +1,36 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh-cmn-Hans">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<link rel="icon" href="<%= BASE_URL %>imgs/favicon.ico">
|
||||||
|
<title>运营平台 - Jeepay计全支付</title>
|
||||||
|
<style>.first-loading-wrp{display:flex;justify-content:center;align-items:center;flex-direction:column;min-height:420px;height:100%}.first-loading-wrp>h1{font-size:128px}.first-loading-wrp .loading-wrp{padding:98px;display:flex;justify-content:center;align-items:center}.dot{animation:antRotate 1.2s infinite linear;transform:rotate(45deg);position:relative;display:inline-block;font-size:32px;width:32px;height:32px;box-sizing:border-box}.dot i{width:14px;height:14px;position:absolute;display:block;background-color:#1890ff;border-radius:100%;transform:scale(.75);transform-origin:50% 50%;opacity:.3;animation:antSpinMove 1s infinite linear alternate}.dot i:nth-child(1){top:0;left:0}.dot i:nth-child(2){top:0;right:0;-webkit-animation-delay:.4s;animation-delay:.4s}.dot i:nth-child(3){right:0;bottom:0;-webkit-animation-delay:.8s;animation-delay:.8s}.dot i:nth-child(4){bottom:0;left:0;-webkit-animation-delay:1.2s;animation-delay:1.2s}@keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@-webkit-keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@keyframes antSpinMove{to{opacity:1}}@-webkit-keyframes antSpinMove{to{opacity:1}}</style>
|
||||||
|
<!-- require cdn assets css -->
|
||||||
|
<% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %>
|
||||||
|
<link rel="stylesheet" href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" />
|
||||||
|
<% } %>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<noscript>
|
||||||
|
<strong>We're sorry but vue-antd-pro doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
||||||
|
</noscript>
|
||||||
|
<div id="app">
|
||||||
|
<div class="first-loading-wrp">
|
||||||
|
<% { %>
|
||||||
|
<img type="text/javascript" src="<%= BASE_URL %>imgs/logo.svg">
|
||||||
|
<% } %>
|
||||||
|
<div class="loading-wrp">
|
||||||
|
<span class="dot dot-spin"><i></i><i></i><i></i><i></i></span>
|
||||||
|
</div>
|
||||||
|
<div style="display: flex; justify-content: center; align-items: center;">计全科技</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- require cdn assets js -->
|
||||||
|
<% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %>
|
||||||
|
<script type="text/javascript" src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script>
|
||||||
|
<% } %>
|
||||||
|
<!-- built files will be auto injected -->
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
<template>
|
||||||
|
<a-config-provider :locale="locale">
|
||||||
|
<div id="app">
|
||||||
|
<router-view/>
|
||||||
|
<loading v-show="globalLoading"></loading>
|
||||||
|
</div>
|
||||||
|
</a-config-provider>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import zhCN from 'ant-design-vue/lib/locale-provider/zh_CN'
|
||||||
|
import Loading from './components/GlobalLoad/GlobalLoad' // 全局Loading组件
|
||||||
|
import { mapState } from 'vuex' // 引入vuex状态管理,mapState管理中存在全局loading
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
locale: zhCN
|
||||||
|
}
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
Loading // 注册全局loading 组件
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
// 全局 loading
|
||||||
|
...mapState([
|
||||||
|
'globalLoading'
|
||||||
|
])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -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() })
|
||||||
|
}
|
||||||
|
|
@ -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 }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip-path">
|
||||||
|
<rect id="矩形_2548" data-name="矩形 2548" width="32" height="32" transform="translate(6848 11598)" fill="#fff" stroke="#707070" stroke-width="1"/>
|
||||||
|
</clipPath>
|
||||||
|
<clipPath id="clip-path-2">
|
||||||
|
<rect id="矩形_2547" data-name="矩形 2547" width="32" height="29.211" transform="translate(0 0)" fill="#1953ff"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<g id="logo-jeepay" transform="translate(-6848 -11598)" clip-path="url(#clip-path)">
|
||||||
|
<g id="组_1000" data-name="组 1000" transform="translate(3462.959 9987.395)">
|
||||||
|
<g id="组_999" data-name="组 999" transform="translate(3385.041 1612)" clip-path="url(#clip-path-2)">
|
||||||
|
<path id="路径_4157" data-name="路径 4157" d="M3398.508,1679.5h0l-4.173,3.659a2.08,2.08,0,0,0,1.371,3.644h7.49a.729.729,0,0,0,.553-1.2Z" transform="translate(-3390.837 -1657.592)" fill="#1953ff" opacity="0.5"/>
|
||||||
|
<path id="路径_4158" data-name="路径 4158" d="M3387.958,1615.772l-2.874,20.448a4.382,4.382,0,0,0,4.339,4.991h1.628a.73.73,0,0,0,.723-.628l.762-5.418a1.459,1.459,0,0,1,1.445-1.256h4.765a1.46,1.46,0,0,0,1.446-1.256l.673-4.789a1.461,1.461,0,0,1,1.446-1.257h4.353a1.461,1.461,0,0,1,1.446,1.664l-.792,5.639-.91,6.473a.729.729,0,0,0,.722.83h2.655a4.382,4.382,0,0,0,4.339-3.772l2.874-20.448a4.381,4.381,0,0,0-4.338-4.991H3392.3A4.382,4.382,0,0,0,3387.958,1615.772Zm19.628,7.182h-4.351a1.462,1.462,0,0,1-1.447-1.665l.615-4.379a1.462,1.462,0,0,1,1.448-1.258h4.351a1.462,1.462,0,0,1,1.448,1.665l-.615,4.379A1.462,1.462,0,0,1,3407.586,1622.954Z" transform="translate(-3385.041 -1612)" fill="#1953ff"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="198" height="44" viewBox="0 0 198 44"><defs><clipPath id="a"><rect width="141" height="36" fill="#262626"/></clipPath><clipPath id="b"><rect width="48" height="44" transform="translate(0.013 -0.162)" fill="#1a53ff"/></clipPath></defs><g transform="translate(-3298 -941)"><g transform="translate(2668.271 -1127)"><g transform="translate(686.73 2076)" clip-path="url(#a)"><path d="M942.424,2095.354A5.627,5.627,0,0,0,936.7,2091H924.375l-.505,3.6h12.076a3.074,3.074,0,0,1,2.434,1.072,2.282,2.282,0,0,1-1.758,3.728h-8a7.611,7.611,0,0,0-7.3,6.4l-.393,2.8a5.432,5.432,0,0,0,5.5,6.4h5.6a8.888,8.888,0,0,0,4.583-1.322l-.185,1.322h3.6l1.124-8,1.067-7.6.281-2h0A5.815,5.815,0,0,0,942.424,2095.354ZM938.115,2103l-.225,1.6-.337,2.4a5.24,5.24,0,0,1-5.016,4.4h-5.6a2.379,2.379,0,0,1-2.406-2.8l.393-2.8a3.334,3.334,0,0,1,3.192-2.8h8a6,6,0,0,0,2.051-.368Z" transform="translate(-827.264 -2085)" fill="#262626"/><path d="M811,2091h-7.2a7.611,7.611,0,0,0-7.3,6.4l-.534,3.8-.505,3.6-.534,3.8a5.432,5.432,0,0,0,5.5,6.4h7.2a7.611,7.611,0,0,0,7.3-6.4l.028-.2h-3.6l-.028.2a3.333,3.333,0,0,1-3.192,2.8h-7.2a2.379,2.379,0,0,1-2.406-2.8l.534-3.8H815.46l.505-3.6.534-3.8A5.432,5.432,0,0,0,811,2091Zm-11.428,10.2.534-3.8a3.333,3.333,0,0,1,3.192-2.8h7.2a2.379,2.379,0,0,1,2.406,2.8l-.534,3.8Z" transform="translate(-751.638 -2085)" fill="#262626"/><path d="M749,2091h-7.2a7.611,7.611,0,0,0-7.3,6.4l-.534,3.8-.505,3.6-.534,3.8a5.432,5.432,0,0,0,5.5,6.4h7.2a7.611,7.611,0,0,0,7.3-6.4l.028-.2h-3.6l-.028.2a3.333,3.333,0,0,1-3.192,2.8h-7.2a2.379,2.379,0,0,1-2.406-2.8l.534-3.8H753.46l.505-3.6.534-3.8A5.432,5.432,0,0,0,749,2091Zm-11.428,10.2.534-3.8a3.333,3.333,0,0,1,3.192-2.8h7.2a2.379,2.379,0,0,1,2.406,2.8l-.534,3.8Z" transform="translate(-714.425 -2085)" fill="#262626"/><path d="M702.938,2076h-8l-.562,4h4l-1.911,13.6-.73,5.2a3.811,3.811,0,0,1-3.648,3.2h-4.8l-.562,4h4.8a8.564,8.564,0,0,0,8.208-7.2l2.641-18.8h0Z" transform="translate(-686.73 -2076)" fill="#262626"/><path d="M1001.279,2091l-.506,3.6-.73,5.2-1.067,7.6-.169,1.2a3.334,3.334,0,0,1-3.192,2.8h-7.2a2.379,2.379,0,0,1-2.405-2.8l1.236-8.8.73-5.2.506-3.6h-3.6l-2.472,17.6a5.432,5.432,0,0,0,5.5,6.4h7.2a6.958,6.958,0,0,0,2.89-.652l-.092.652a2.854,2.854,0,0,1-2.736,2.4H982.379l-.506,3.6h12.793a7.136,7.136,0,0,0,6.84-6l.9-6.4.169-1.2,2.3-16.4Z" transform="translate(-863.877 -2085)" fill="#262626"/><path d="M872.537,2091h-7.2a6.958,6.958,0,0,0-2.89.652l.091-.652h-3.6l-.9,6.4-1.574,11.2L854.73,2121h3.6l.934-6.652a5.789,5.789,0,0,0,2.707.652h7.2a7.611,7.611,0,0,0,7.3-6.4l1.574-11.2A5.432,5.432,0,0,0,872.537,2091Zm.326,17.6a3.333,3.333,0,0,1-3.192,2.8h-7.2a2.379,2.379,0,0,1-2.406-2.8l1.574-11.2a3.334,3.334,0,0,1,3.192-2.8h7.2a2.379,2.379,0,0,1,2.406,2.8Z" transform="translate(-787.565 -2085)" fill="#262626"/></g></g><g transform="translate(267.246 -836.852)"><g transform="translate(3030.741 1778.014)" clip-path="url(#b)"><path d="M3045.511,1838h0l-6.29,5.493a3.121,3.121,0,0,0,2.066,5.471h11.29a1.094,1.094,0,0,0,.833-1.808Z" transform="translate(-3034.172 -1805.125)" fill="#1a53ff" opacity="0.5"/><path d="M3034.916,1783.662l-4.332,30.7a6.588,6.588,0,0,0,6.541,7.494h2.454a1.1,1.1,0,0,0,1.089-.943l1.148-8.134a2.2,2.2,0,0,1,2.177-1.886h7.184a2.2,2.2,0,0,0,2.179-1.886l1.014-7.189a2.2,2.2,0,0,1,2.18-1.887h6.562a2.2,2.2,0,0,1,2.18,2.5l-1.194,8.465-1.371,9.717a1.1,1.1,0,0,0,1.087,1.246h4a6.6,6.6,0,0,0,6.541-5.662l4.332-30.7a6.586,6.586,0,0,0-6.54-7.492h-30.694A6.6,6.6,0,0,0,3034.916,1783.662Zm29.588,10.782h-6.559a2.2,2.2,0,0,1-2.182-2.5l.928-6.574a2.2,2.2,0,0,1,2.182-1.889h6.557a2.2,2.2,0,0,1,2.183,2.5l-.928,6.574A2.2,2.2,0,0,1,3064.5,1794.445Z" transform="translate(-3030.743 -1778.014)" fill="#1a53ff"/></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 3.7 KiB |
|
|
@ -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; //外部链接
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="308" height="230" viewBox="0 0 308 230"><defs><style>.a{fill:none;}.b{clip-path:url(#a);}.c{opacity:0.05;}.d{opacity:0.1;}.e{fill:#999691;}.f{fill:#ffd200;}.g{fill:#aeb8c2;}.h{fill:#ff4633;}.i{fill:#fff;}</style><clipPath id="a"><rect class="a" width="308" height="230" transform="translate(179 574)"/></clipPath></defs><g transform="translate(-179 -574)"><g class="b"><ellipse class="c" cx="154" cy="35" rx="154" ry="35" transform="translate(179 734)"/><ellipse class="d" cx="34" cy="7.727" rx="34" ry="7.727" transform="translate(354 774.773)"/><path class="e" d="M235.514,736.729H179V716.794l40.835-86.53H244.19l-40.835,86.53h32.159V683.575h21.607v33.219h11.958v19.935H257.121V757.8H235.514Z"/><path class="e" d="M290.391,714.573V673.478c0-27.189,18.694-45.883,45.883-45.883s45.884,18.694,45.884,45.883v41.095c0,27.2-18.694,45.883-45.884,45.883S290.391,741.777,290.391,714.573Zm69.979,1.515v-44.2a24.092,24.092,0,1,0-48.184,0v44.2a24.092,24.092,0,0,0,48.184,0Z"/><path class="e" d="M487,717.948c0,24.175-19.574,42.249-43.489,42.249-19.134,0-36.313-11.871-41.809-30.378l20.642-5.582A21.347,21.347,0,0,0,443.424,740,21.571,21.571,0,0,0,465.3,717.948c0-12.578-9.03-22.242-21.875-22.242a23.294,23.294,0,0,0-11.07,3.015l-9.744-16.833,36.847-31.532H406.664V630.264H484.88v20.193L456.089,678.08C475.663,682.075,487,698.548,487,717.948Z"/><path class="f" d="M487,649.66,179,736.34v-19L487,630.66Z"/><path d="M194.8,732l-12,3.126,2.394-19.628,12-3.126Z"/><path d="M218.8,725.241l-12,3.126,2.394-19.628,12-3.126Z"/><path d="M242.8,718.487l-12,3.126,2.394-19.628,12-3.126Z"/><path d="M266.8,711.733l-12,3.126,2.394-19.628,12-3.126Z"/><path d="M290.8,704.978l-12,3.126,2.394-19.628,12-3.126Z"/><path d="M314.8,698.224l-12,3.126,2.394-19.628,12-3.126Z"/><path d="M338.8,691.47l-12,3.126,2.394-19.628,12-3.126Z"/><path d="M362.8,684.715l-12,3.126,2.394-19.628,12-3.126Z"/><path d="M386.8,677.961l-12,3.126,2.394-19.628,12-3.126Z"/><path d="M410.8,671.207l-12,3.126L401.2,654.7l12-3.126Z"/><path d="M434.8,664.452l-12,3.126L425.2,647.95l12-3.126Z"/><path d="M458.8,657.7l-12,3.126L449.2,641.2l12-3.126Z"/><path d="M482.8,650.944l-12,3.126,2.394-19.628,12-3.126Z"/><path class="g" d="M386,650V782c0,.552.895,1,2,1s2-.448,2-1V650Z"/><rect class="h" width="80" height="80" rx="9.891" transform="translate(348 574)"/><path class="i" d="M388,584a30,30,0,1,0,30,30A30,30,0,0,0,388,584Zm0,55a25,25,0,1,1,25-25A25,25,0,0,1,388,639Z"/><rect class="i" width="25" height="5" transform="translate(375.5 611.5)"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.5 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="308" height="230" viewBox="0 0 308 230"><defs><style>.a{fill:none;}.b{clip-path:url(#a);}.c{opacity:0.05;}.d{fill:#f5f5f7;}.e{fill:#dce0e6;}.f{fill:#24285b;}.g{fill:#596380;}.h{fill:#ffd200;}.i{fill:#fff;}.j{fill:#97a3ad;}</style><clipPath id="a"><rect class="a" width="308" height="230" transform="translate(1010 582)"/></clipPath></defs><g transform="translate(-1010 -582)"><g class="b"><ellipse class="c" cx="154" cy="35" rx="154" ry="35" transform="translate(1010 742)"/><ellipse class="c" cx="121" cy="2" rx="121" ry="2" transform="translate(1043 752)"/><rect class="d" width="228.672" height="158.82" transform="translate(1049.664 582)"/><rect class="e" width="228.672" height="125.754" transform="translate(1049.664 615.066)"/><ellipse class="f" cx="4.398" cy="4.429" rx="4.398" ry="4.429" transform="translate(1063.711 592.142)"/><ellipse class="g" cx="4.398" cy="4.429" rx="4.398" ry="4.429" transform="translate(1076.794 592.142)"/><ellipse class="h" cx="4.398" cy="4.429" rx="4.398" ry="4.429" transform="translate(1089.123 592.142)"/><path class="i" d="M1111.9,664.221a2.54,2.54,0,0,1,0-3.575l0,0,14.97-15.067a2.5,2.5,0,0,1,3.545.2,2.542,2.542,0,0,1,0,3.369l-14.971,15.077A2.5,2.5,0,0,1,1111.9,664.221Z"/><path class="i" d="M1127.106,664.464l-14.97-15.077a2.541,2.541,0,0,1-.057-3.575,2.5,2.5,0,0,1,3.55-.057c.021.02.041.041.061.062l14.961,15.067a2.542,2.542,0,0,1,.066,3.575,2.5,2.5,0,0,1-3.549.067l-.062-.062Z"/><path class="i" d="M1194.91,664.221a2.54,2.54,0,0,1-.005-3.575l.005,0,14.97-15.067a2.5,2.5,0,0,1,3.544-.2,2.539,2.539,0,0,1,.2,3.569,2.483,2.483,0,0,1-.2.2l-14.96,15.077A2.517,2.517,0,0,1,1194.91,664.221Z"/><path class="i" d="M1210.151,664.464l-14.97-15.077a2.541,2.541,0,0,1-.057-3.575,2.5,2.5,0,0,1,3.549-.057l.062.062,14.96,15.067a2.541,2.541,0,0,1,.067,3.575,2.5,2.5,0,0,1-3.549.067l-.062-.062Z"/><path class="i" d="M1142.82,707.39a2.508,2.508,0,0,1-2.49-2.326c-.7-8.605,2.54-25.543,19.8-28.01,5.392-.759,9.9.485,13.394,3.721,8.2,7.594,7.39,23.561,7.36,24.269a2.514,2.514,0,1,1-5.02-.283h0c0-.142.713-14.258-5.743-20.225-2.37-2.184-5.4-2.973-9.288-2.426-16.948,2.335-15.573,21.72-15.5,22.56a2.523,2.523,0,0,1-2.3,2.72Z"/><ellipse cx="52.8" cy="12" rx="52.8" ry="12" transform="translate(1111.2 765)"/><path class="j" d="M1065.337,756.844H1010V737.324l39.985-84.729h23.855l-39.985,84.729h31.482V704.8H1086.5v32.527H1098.2v19.519H1086.5v20.635h-21.158Z"/><path class="j" d="M1285.134,756.844H1229.8V737.324l39.985-84.729h23.855l-39.985,84.729h31.482V704.8h21.158v32.527H1318v19.519h-11.709v20.635h-21.158Z"/><path class="j" d="M1142.457,787.955a23.67,23.67,0,0,1,42.566.054,115.012,115.012,0,0,0,21.241-3.822c-5.762-17.839-21.556-29.205-42.531-29.205-20.925,0-36.693,11.3-42.5,29.049A111.5,111.5,0,0,0,1142.457,787.955Z"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.8 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="308" height="230" viewBox="0 0 308 230"><defs><style>.a{fill:none;}.b{clip-path:url(#a);}.c{fill:#e6e6e6;}.d{fill:#f5f5f7;}.e{fill:#9294ad;}.f{fill:#ffd200;}.g{fill:#aeb8c2;}.h{fill:#dce0e6;}.i{fill:#24285b;}.j{fill:#ff4d4d;}.k{fill:#fff;}</style><clipPath id="a"><rect class="a" width="308" height="230" transform="translate(638 574)"/></clipPath></defs><g transform="translate(-638 -574)"><g class="b"><path class="c" d="M788,799.455H748.216v-3.017h36.743V742.822H788Z"/><path class="d" d="M879.86,659.975c-.944,0-1.868.06-2.781.15v-1.3a39.4,39.4,0,0,0-39.585-39.217h-1.675c-.724-25.9-22.5-46.31-48.642-45.593a47.1,47.1,0,0,0-46.021,48.19,46.481,46.481,0,0,0,1.192,9.239,39.2,39.2,0,0,0,1.492,78.363H879.85a24.909,24.909,0,1,0,0-49.815h0Z"/><path class="e" d="M724.522,702.141c0,23.811-20.829,42.683-44.952,42.683A42.973,42.973,0,0,1,638,713.341l20.651-5.468c2.582,10.23,12.107,16.579,21.72,16.579a22.462,22.462,0,0,0,22.61-22.311c0-12.346-10.326-22.223-22.61-22.223-9.88,0-16.2,4.321-19.672,8.289l-18.338-5.82,3.917-67.2h69.61v19.93h-50.56l-1.959,31.219a39.764,39.764,0,0,1,19.94-5.644C707.342,660.693,724.522,678.33,724.522,702.141Z"/><path class="e" d="M744.521,699.142V658.224c0-27.074,18.782-45.682,46.11-45.682s46.109,18.608,46.109,45.682v40.918c0,27.074-18.782,45.682-46.109,45.682S744.521,726.216,744.521,699.142Zm70.322,1.5V656.636a24.212,24.212,0,0,0-48.424,0v44.006a24.213,24.213,0,0,0,48.424,0Z"/><path class="e" d="M853.89,699.142V658.224c0-27.074,18.782-45.682,46.11-45.682s46.11,18.608,46.11,45.682v40.918c0,27.074-18.782,45.682-46.11,45.682S853.89,726.216,853.89,699.142Zm70.322,1.5V656.636a24.212,24.212,0,0,0-48.424,0v44.006a24.213,24.213,0,0,0,48.424,0Z"/><rect class="f" width="94.385" height="58.936" transform="translate(743.832 700.859)"/><rect class="g" width="94.385" height="58.936" transform="translate(743.832 700.859)"/><rect class="h" width="111.021" height="28.91" transform="translate(735.691 676.123)"/><rect class="i" width="66.239" height="6.727" transform="translate(748.216 686.741)"/><ellipse class="j" cx="5.542" cy="5.49" rx="5.542" ry="5.49" transform="translate(823.063 685.615)"/><rect class="h" width="111.021" height="28.91" transform="translate(735.691 710.975)"/><rect class="i" width="66.239" height="6.727" transform="translate(748.216 721.584)"/><ellipse class="k" cx="5.542" cy="5.49" rx="5.542" ry="5.49" transform="translate(823.063 720.468)"/><rect class="h" width="111.021" height="28.91" transform="translate(735.691 745.828)"/><rect class="i" width="66.239" height="6.727" transform="translate(748.216 756.437)"/><ellipse class="k" cx="5.542" cy="5.49" rx="5.542" ry="5.49" transform="translate(823.063 755.321)"/><rect class="c" width="36.581" height="3.017" transform="translate(786.482 796.438)"/><ellipse class="i" cx="5.988" cy="5.933" rx="5.988" ry="5.933" transform="translate(743.842 792.134)"/><ellipse class="i" cx="5.988" cy="5.933" rx="5.988" ry="5.933" transform="translate(817.074 792.134)"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 3.0 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="76" height="76" viewBox="0 0 76 76"><defs><style>.a{fill:#1953ff;}</style></defs><path class="a" d="M-1198-1084a6.007,6.007,0,0,1-6-6v-64a6.007,6.007,0,0,1,6-6h64a6.007,6.007,0,0,1,6,6v64a6.006,6.006,0,0,1-6,6Zm-4-70v64a4,4,0,0,0,4,4h64a4,4,0,0,0,4-4v-64a4,4,0,0,0-4-4h-64A4.005,4.005,0,0,0-1202-1154Zm35,47v-14h-14a1,1,0,0,1-1-1,1,1,0,0,1,1-1h14v-14a1,1,0,0,1,1-1,1,1,0,0,1,1,1v14h14a1,1,0,0,1,1,1,1,1,0,0,1-1,1h-14v14a1,1,0,0,1-1,1A1,1,0,0,1-1167-1107Z" transform="translate(1204 1160)"/></svg>
|
||||||
|
After Width: | Height: | Size: 543 B |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="76" height="76" viewBox="0 0 76 76"><defs><style>.a{fill:#ccced1;}</style></defs><path class="a" d="M-1198-1084a6.007,6.007,0,0,1-6-6v-64a6.007,6.007,0,0,1,6-6h64a6.007,6.007,0,0,1,6,6v64a6.006,6.006,0,0,1-6,6Zm-4-70v64a4,4,0,0,0,4,4h64a4,4,0,0,0,4-4v-64a4,4,0,0,0-4-4h-64A4.005,4.005,0,0,0-1202-1154Zm35,47v-14h-14a1,1,0,0,1-1-1,1,1,0,0,1,1-1h14v-14a1,1,0,0,1,1-1,1,1,0,0,1,1,1v14h14a1,1,0,0,1,1,1,1,1,0,0,1-1,1h-14v14a1,1,0,0,1-1,1A1,1,0,0,1-1167-1107Z" transform="translate(1204 1160)"/></svg>
|
||||||
|
After Width: | Height: | Size: 543 B |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1920" height="970" viewBox="0 0 1920 970"><defs><style>.a{fill:url(#a);}.b{clip-path:url(#b);}.c{filter:url(#n);}.d{filter:url(#k);}.e{filter:url(#h);}.f{filter:url(#e);}</style><linearGradient id="a" y1="0.383" x2="1" y2="0.589" gradientUnits="objectBoundingBox"><stop offset="0" stop-color="#f1f8ff"/><stop offset="1" stop-color="#f7fbfe"/></linearGradient><clipPath id="b"><rect class="a" width="1920" height="970"/></clipPath><filter id="e" x="-169" y="375" width="756" height="756" filterUnits="userSpaceOnUse"><feOffset dx="20" dy="-20" input="SourceAlpha"/><feGaussianBlur stdDeviation="30" result="f"/><feFlood flood-color="#211f47" flood-opacity="0.071"/><feComposite operator="in" in2="f"/><feComposite in="SourceGraphic"/></filter><filter id="h" x="1230" y="568" width="433" height="433" filterUnits="userSpaceOnUse"><feOffset dx="2" dy="-10" input="SourceAlpha"/><feGaussianBlur stdDeviation="30" result="i"/><feFlood flood-color="#211f47" flood-opacity="0.071"/><feComposite operator="in" in2="i"/><feComposite in="SourceGraphic"/></filter><filter id="k" x="1440" y="88.44" width="655.121" height="655.121" filterUnits="userSpaceOnUse"><feOffset dx="2" dy="30" input="SourceAlpha"/><feGaussianBlur stdDeviation="30" result="l"/><feFlood flood-color="#211f47" flood-opacity="0.122"/><feComposite operator="in" in2="l"/><feComposite in="SourceGraphic"/></filter><filter id="n" x="422.061" y="2.561" width="350.879" height="350.879" filterUnits="userSpaceOnUse"><feOffset dx="2" dy="10" input="SourceAlpha"/><feGaussianBlur stdDeviation="30" result="o"/><feFlood flood-color="#211f47" flood-opacity="0.122"/><feComposite operator="in" in2="o"/><feComposite in="SourceGraphic"/></filter></defs><g class="b"><rect class="a" width="1920" height="970"/><g class="f" transform="matrix(1, 0, 0, 1, 0, 0)"><circle class="a" cx="288" cy="288" r="288" transform="translate(-99 485)"/></g><g class="e" transform="matrix(1, 0, 0, 1, 0, 0)"><circle class="a" cx="126.5" cy="126.5" r="126.5" transform="translate(1318 668)"/></g><g class="d" transform="matrix(1, 0, 0, 1, 0, 0)"><rect class="a" width="335.961" height="335.961" rx="30" transform="translate(1528 386) rotate(-45)"/></g><g class="c" transform="matrix(1, 0, 0, 1, 0, 0)"><rect class="a" width="170.879" height="170.879" transform="translate(510.06 82.56)"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.4 KiB |
|
|
@ -0,0 +1,69 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg width="1361px" height="609px" viewBox="0 0 1361 609" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
|
||||||
|
<title>Group 21</title>
|
||||||
|
<desc>Created with Sketch.</desc>
|
||||||
|
<defs></defs>
|
||||||
|
<g id="Ant-Design-Pro-3.0" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="账户密码登录-校验" transform="translate(-79.000000, -82.000000)">
|
||||||
|
<g id="Group-21" transform="translate(77.000000, 73.000000)">
|
||||||
|
<g id="Group-18" opacity="0.8" transform="translate(74.901416, 569.699158) rotate(-7.000000) translate(-74.901416, -569.699158) translate(4.901416, 525.199158)">
|
||||||
|
<ellipse id="Oval-11" fill="#CFDAE6" opacity="0.25" cx="63.5748792" cy="32.468367" rx="21.7830479" ry="21.766008"></ellipse>
|
||||||
|
<ellipse id="Oval-3" fill="#CFDAE6" opacity="0.599999964" cx="5.98746479" cy="13.8668601" rx="5.2173913" ry="5.21330997"></ellipse>
|
||||||
|
<path d="M38.1354514,88.3520215 C43.8984227,88.3520215 48.570234,83.6838647 48.570234,77.9254015 C48.570234,72.1669383 43.8984227,67.4987816 38.1354514,67.4987816 C32.3724801,67.4987816 27.7006688,72.1669383 27.7006688,77.9254015 C27.7006688,83.6838647 32.3724801,88.3520215 38.1354514,88.3520215 Z" id="Oval-3-Copy" fill="#CFDAE6" opacity="0.45"></path>
|
||||||
|
<path d="M64.2775582,33.1704963 L119.185836,16.5654915" id="Path-12" stroke="#CFDAE6" stroke-width="1.73913043" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||||
|
<path d="M42.1431708,26.5002681 L7.71190162,14.5640702" id="Path-16" stroke="#E0B4B7" stroke-width="0.702678964" opacity="0.7" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"></path>
|
||||||
|
<path d="M63.9262187,33.521561 L43.6721326,69.3250951" id="Path-15" stroke="#BACAD9" stroke-width="0.702678964" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"></path>
|
||||||
|
<g id="Group-17" transform="translate(126.850922, 13.543654) rotate(30.000000) translate(-126.850922, -13.543654) translate(117.285705, 4.381889)" fill="#CFDAE6">
|
||||||
|
<ellipse id="Oval-4" opacity="0.45" cx="9.13482653" cy="9.12768076" rx="9.13482653" ry="9.12768076"></ellipse>
|
||||||
|
<path d="M18.2696531,18.2553615 C18.2696531,13.2142826 14.1798519,9.12768076 9.13482653,9.12768076 C4.08980114,9.12768076 0,13.2142826 0,18.2553615 L18.2696531,18.2553615 Z" id="Oval-4" transform="translate(9.134827, 13.691521) scale(-1, -1) translate(-9.134827, -13.691521) "></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="Group-14" transform="translate(216.294700, 123.725600) rotate(-5.000000) translate(-216.294700, -123.725600) translate(106.294700, 35.225600)">
|
||||||
|
<ellipse id="Oval-2" fill="#CFDAE6" opacity="0.25" cx="29.1176471" cy="29.1402439" rx="29.1176471" ry="29.1402439"></ellipse>
|
||||||
|
<ellipse id="Oval-2" fill="#CFDAE6" opacity="0.3" cx="29.1176471" cy="29.1402439" rx="21.5686275" ry="21.5853659"></ellipse>
|
||||||
|
<ellipse id="Oval-2-Copy" stroke="#CFDAE6" opacity="0.4" cx="179.019608" cy="138.146341" rx="23.7254902" ry="23.7439024"></ellipse>
|
||||||
|
<ellipse id="Oval-2" fill="#BACAD9" opacity="0.5" cx="29.1176471" cy="29.1402439" rx="10.7843137" ry="10.7926829"></ellipse>
|
||||||
|
<path d="M29.1176471,39.9329268 L29.1176471,18.347561 C23.1616351,18.347561 18.3333333,23.1796097 18.3333333,29.1402439 C18.3333333,35.1008781 23.1616351,39.9329268 29.1176471,39.9329268 Z" id="Oval-2" fill="#BACAD9"></path>
|
||||||
|
<g id="Group-9" opacity="0.45" transform="translate(172.000000, 131.000000)" fill="#E6A1A6">
|
||||||
|
<ellipse id="Oval-2-Copy-2" cx="7.01960784" cy="7.14634146" rx="6.47058824" ry="6.47560976"></ellipse>
|
||||||
|
<path d="M0.549019608,13.6219512 C4.12262681,13.6219512 7.01960784,10.722722 7.01960784,7.14634146 C7.01960784,3.56996095 4.12262681,0.670731707 0.549019608,0.670731707 L0.549019608,13.6219512 Z" id="Oval-2-Copy-2" transform="translate(3.784314, 7.146341) scale(-1, 1) translate(-3.784314, -7.146341) "></path>
|
||||||
|
</g>
|
||||||
|
<ellipse id="Oval-10" fill="#CFDAE6" cx="218.382353" cy="138.685976" rx="1.61764706" ry="1.61890244"></ellipse>
|
||||||
|
<ellipse id="Oval-10-Copy-2" fill="#E0B4B7" opacity="0.35" cx="179.558824" cy="175.381098" rx="1.61764706" ry="1.61890244"></ellipse>
|
||||||
|
<ellipse id="Oval-10-Copy" fill="#E0B4B7" opacity="0.35" cx="180.098039" cy="102.530488" rx="2.15686275" ry="2.15853659"></ellipse>
|
||||||
|
<path d="M28.9985381,29.9671598 L171.151018,132.876024" id="Path-11" stroke="#CFDAE6" opacity="0.8"></path>
|
||||||
|
</g>
|
||||||
|
<g id="Group-10" opacity="0.799999952" transform="translate(1054.100635, 36.659317) rotate(-11.000000) translate(-1054.100635, -36.659317) translate(1026.600635, 4.659317)">
|
||||||
|
<ellipse id="Oval-7" stroke="#CFDAE6" stroke-width="0.941176471" cx="43.8135593" cy="32" rx="11.1864407" ry="11.2941176"></ellipse>
|
||||||
|
<g id="Group-12" transform="translate(34.596774, 23.111111)" fill="#BACAD9">
|
||||||
|
<ellipse id="Oval-7" opacity="0.45" cx="9.18534718" cy="8.88888889" rx="8.47457627" ry="8.55614973"></ellipse>
|
||||||
|
<path d="M9.18534718,17.4450386 C13.8657264,17.4450386 17.6599235,13.6143199 17.6599235,8.88888889 C17.6599235,4.16345787 13.8657264,0.332739156 9.18534718,0.332739156 L9.18534718,17.4450386 Z" id="Oval-7"></path>
|
||||||
|
</g>
|
||||||
|
<path d="M34.6597385,24.809694 L5.71666084,4.76878945" id="Path-2" stroke="#CFDAE6" stroke-width="0.941176471"></path>
|
||||||
|
<ellipse id="Oval" stroke="#CFDAE6" stroke-width="0.941176471" cx="3.26271186" cy="3.29411765" rx="3.26271186" ry="3.29411765"></ellipse>
|
||||||
|
<ellipse id="Oval-Copy" fill="#F7E1AD" cx="2.79661017" cy="61.1764706" rx="2.79661017" ry="2.82352941"></ellipse>
|
||||||
|
<path d="M34.6312443,39.2922712 L5.06366663,59.785082" id="Path-10" stroke="#CFDAE6" stroke-width="0.941176471"></path>
|
||||||
|
</g>
|
||||||
|
<g id="Group-19" opacity="0.33" transform="translate(1282.537219, 446.502867) rotate(-10.000000) translate(-1282.537219, -446.502867) translate(1142.537219, 327.502867)">
|
||||||
|
<g id="Group-17" transform="translate(141.333539, 104.502742) rotate(275.000000) translate(-141.333539, -104.502742) translate(129.333539, 92.502742)" fill="#BACAD9">
|
||||||
|
<circle id="Oval-4" opacity="0.45" cx="11.6666667" cy="11.6666667" r="11.6666667"></circle>
|
||||||
|
<path d="M23.3333333,23.3333333 C23.3333333,16.8900113 18.1099887,11.6666667 11.6666667,11.6666667 C5.22334459,11.6666667 0,16.8900113 0,23.3333333 L23.3333333,23.3333333 Z" id="Oval-4" transform="translate(11.666667, 17.500000) scale(-1, -1) translate(-11.666667, -17.500000) "></path>
|
||||||
|
</g>
|
||||||
|
<circle id="Oval-5-Copy-6" fill="#CFDAE6" cx="201.833333" cy="87.5" r="5.83333333"></circle>
|
||||||
|
<path d="M143.5,88.8126685 L155.070501,17.6038544" id="Path-17" stroke="#BACAD9" stroke-width="1.16666667"></path>
|
||||||
|
<path d="M17.5,37.3333333 L127.466252,97.6449735" id="Path-18" stroke="#BACAD9" stroke-width="1.16666667"></path>
|
||||||
|
<polyline id="Path-19" stroke="#CFDAE6" stroke-width="1.16666667" points="143.902597 120.302281 174.935455 231.571342 38.5 147.510847 126.366941 110.833333"></polyline>
|
||||||
|
<path d="M159.833333,99.7453842 L195.416667,89.25" id="Path-20" stroke="#E0B4B7" stroke-width="1.16666667" opacity="0.6"></path>
|
||||||
|
<path d="M205.333333,82.1372105 L238.719406,36.1666667" id="Path-24" stroke="#BACAD9" stroke-width="1.16666667"></path>
|
||||||
|
<path d="M266.723424,132.231988 L207.083333,90.4166667" id="Path-25" stroke="#CFDAE6" stroke-width="1.16666667"></path>
|
||||||
|
<circle id="Oval-5" fill="#C1D1E0" cx="156.916667" cy="8.75" r="8.75"></circle>
|
||||||
|
<circle id="Oval-5-Copy-3" fill="#C1D1E0" cx="39.0833333" cy="148.75" r="5.25"></circle>
|
||||||
|
<circle id="Oval-5-Copy-2" fill-opacity="0.6" fill="#D1DEED" cx="8.75" cy="33.25" r="8.75"></circle>
|
||||||
|
<circle id="Oval-5-Copy-4" fill-opacity="0.6" fill="#D1DEED" cx="243.833333" cy="30.3333333" r="5.83333333"></circle>
|
||||||
|
<circle id="Oval-5-Copy-5" fill="#E0B4B7" cx="175.583333" cy="232.75" r="5.25"></circle>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 8.7 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="14" viewBox="0 0 14 14"><defs><style>.a{fill:#fff;stroke:#707070;}.b{fill:#596380;}.c{clip-path:url(#a);}.d{clip-path:url(#b);}</style><clipPath id="a"><rect class="a" width="14" height="14" transform="translate(796 520)"/></clipPath><clipPath id="b"><rect class="b" width="12" height="12" transform="translate(0)"/></clipPath></defs><g class="c" transform="translate(-796 -520)"><g transform="translate(-100 289.628)"><g class="d" transform="translate(897 231.372)"><path class="b" d="M1182.9,231.267h-3.343v3.745a2.254,2.254,0,0,1,0,4.508v3.75h3.343a2.291,2.291,0,0,0,2.258-2.308V233.58a2.289,2.289,0,0,0-2.258-2.313Zm0,0" transform="translate(-1173.16 -231.269)"/><path class="b" d="M903.133,235.581a1.657,1.657,0,0,0-.531.086v-4.3h-3.343A2.291,2.291,0,0,0,897,233.68v7.381a2.291,2.291,0,0,0,2.258,2.308H902.6v-4.293a1.713,1.713,0,0,0,.531.086,1.791,1.791,0,0,0,0-3.582Zm0,0" transform="translate(-897 -231.372)"/></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.0 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621586617012" class="icon" viewBox="0 0 1146 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6384" xmlns:xlink="http://www.w3.org/1999/xlink" width="17.90625" height="16"><defs><style type="text/css"></style></defs><path d="M0 788.389381a507.469027 108.743363 0 1 0 1014.938053 0 507.469027 108.743363 0 1 0-1014.938053 0Z" fill="#F3F3F8" p-id="6385"></path><path d="M321.880354 246.303717h367.915044l174.714337 220.749026s-174.895575 180.151504-352.328496 179.607788-357.584425-181.238938-357.584425-181.238938z" fill="#FBFBFD" p-id="6386"></path><path d="M797.451327 815.575221H217.486726a63.433628 63.433628 0 0 1-63.433629-63.433628V471.221239h166.558584l14.680354 29.360708A81.738761 81.738761 0 0 0 416.849558 579.964602h199.362831a63.614867 63.614867 0 0 0 63.433629-60.533806L711.72531 471.221239h149.159646v280.920354A63.433628 63.433628 0 0 1 797.451327 815.575221z" fill="#FBFBFD" p-id="6387"></path><path d="M797.451327 806.513274a54.371681 54.371681 0 0 0 54.371682-54.371681v-271.858407h-135.385487L688.707965 522.330619a72.495575 72.495575 0 0 1-72.495576 66.69593H416.849558a90.619469 90.619469 0 0 1-90.61947-86.088496l-11.236814-22.654867H163.115044v271.858407a54.371681 54.371681 0 0 0 54.371682 54.371681h579.964601m0 18.123894H217.486726a72.495575 72.495575 0 0 1-72.495576-72.495575v-289.982301h181.238938l18.123894 36.247788a72.495575 72.495575 0 0 0 72.495576 72.495575h199.362831a54.371681 54.371681 0 0 0 54.371682-54.371682l36.247787-54.371681h163.115045v289.982301a72.495575 72.495575 0 0 1-72.495576 72.495575z" fill="#E2E2EE" p-id="6388"></path><path d="M863.059823 467.958938L684.539469 253.734513H330.398584L151.87823 467.958938l-13.774159-11.599292L322.061593 235.610619h370.814867l183.957522 220.749027z" fill="#E2E2EE" p-id="6389"></path></svg>
|
||||||
|
After Width: | Height: | Size: 1.9 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="62.667" height="16" viewBox="0 0 62.667 16"><defs><style>.a{fill:#262626;}.b{clip-path:url(#a);}</style><clipPath id="a"><rect class="a" width="62.667" height="16"/></clipPath></defs><g transform="translate(-686.73 -2076)"><g class="b" transform="translate(686.73 2076)"><path class="a" d="M930.451,2092.935a2.5,2.5,0,0,0-2.543-1.935h-5.479l-.225,1.6h5.367a1.366,1.366,0,0,1,1.082.476,1.014,1.014,0,0,1-.781,1.657h-3.554a3.383,3.383,0,0,0-3.243,2.844l-.175,1.245a2.414,2.414,0,0,0,2.443,2.845h2.488a3.952,3.952,0,0,0,2.037-.588l-.082.588h1.6l.5-3.556.474-3.378.125-.889h0A2.585,2.585,0,0,0,930.451,2092.935Zm-1.915,3.4-.1.711-.15,1.067a2.329,2.329,0,0,1-2.229,1.956h-2.488a1.057,1.057,0,0,1-1.069-1.244l.175-1.245a1.482,1.482,0,0,1,1.419-1.244h3.554a2.665,2.665,0,0,0,.911-.163Z" transform="translate(-879.269 -2088.333)"/><path class="a" d="M802.041,2091h-3.2a3.383,3.383,0,0,0-3.242,2.844l-.237,1.689-.225,1.6-.237,1.689a2.414,2.414,0,0,0,2.443,2.845h3.2a3.383,3.383,0,0,0,3.242-2.845l.013-.089h-1.6l-.013.089a1.482,1.482,0,0,1-1.418,1.244h-3.2a1.057,1.057,0,0,1-1.069-1.244l.237-1.689h7.285l.225-1.6.237-1.689A2.414,2.414,0,0,0,802.041,2091Zm-5.079,4.533.237-1.689a1.482,1.482,0,0,1,1.419-1.244h3.2a1.057,1.057,0,0,1,1.069,1.244l-.237,1.689Z" transform="translate(-775.657 -2088.333)"/><path class="a" d="M740.041,2091h-3.2a3.383,3.383,0,0,0-3.242,2.844l-.237,1.689-.225,1.6-.237,1.689a2.415,2.415,0,0,0,2.444,2.845h3.2a3.383,3.383,0,0,0,3.242-2.845l.013-.089h-1.6l-.013.089a1.482,1.482,0,0,1-1.418,1.244h-3.2a1.057,1.057,0,0,1-1.069-1.244l.237-1.689h7.285l.225-1.6.237-1.689A2.414,2.414,0,0,0,740.041,2091Zm-5.079,4.533.237-1.689a1.482,1.482,0,0,1,1.418-1.244h3.2a1.057,1.057,0,0,1,1.069,1.244l-.237,1.689Z" transform="translate(-724.674 -2088.333)"/><path class="a" d="M693.933,2076H690.38l-.25,1.778h1.777l-.849,6.044-.325,2.311a1.694,1.694,0,0,1-1.621,1.423H686.98l-.25,1.777h2.132a3.806,3.806,0,0,0,3.648-3.2l1.174-8.355h0Z" transform="translate(-686.73 -2076)"/><path class="a" d="M990.5,2091l-.225,1.6-.325,2.311-.474,3.377-.075.533a1.482,1.482,0,0,1-1.418,1.244h-3.2a1.057,1.057,0,0,1-1.069-1.244l.549-3.911.325-2.311.225-1.6h-1.6l-1.1,7.822a2.414,2.414,0,0,0,2.443,2.845h3.2a3.094,3.094,0,0,0,1.284-.29l-.041.29a1.268,1.268,0,0,1-1.216,1.066H982.1l-.225,1.6h5.686a3.171,3.171,0,0,0,3.04-2.666l.4-2.845.075-.533L992.1,2091Z" transform="translate(-929.43 -2088.333)"/><path class="a" d="M862.644,2091h-3.2a3.094,3.094,0,0,0-1.285.29l.041-.29h-1.6l-.4,2.844-.7,4.978-.774,5.511h1.6l.415-2.956a2.574,2.574,0,0,0,1.2.29h3.2a3.383,3.383,0,0,0,3.242-2.845l.7-4.978A2.414,2.414,0,0,0,862.644,2091Zm.145,7.822a1.482,1.482,0,0,1-1.419,1.244h-3.2a1.057,1.057,0,0,1-1.069-1.244l.7-4.978a1.482,1.482,0,0,1,1.418-1.244h3.2a1.057,1.057,0,0,1,1.069,1.244Z" transform="translate(-824.879 -2088.333)"/></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.8 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="14" viewBox="0 0 14 14"><defs><style>.a{fill:#fff;stroke:#707070;}.b{fill:#596380;}.c{clip-path:url(#a);}.d{clip-path:url(#b);}</style><clipPath id="a"><rect class="a" width="14" height="14" transform="translate(786 458)"/></clipPath><clipPath id="b"><rect class="b" width="11" height="14"/></clipPath></defs><g class="c" transform="translate(-786 -458)"><g transform="translate(155.5 328)"><g transform="translate(632 130)"><g class="d" transform="translate(0)"><path class="b" d="M636.689,140.115V141.7a.687.687,0,1,0,1.374,0v-1.584a1.4,1.4,0,0,0,.687-1.21,1.374,1.374,0,1,0-2.748,0,1.4,1.4,0,0,0,.687,1.21Zm-2.061-4.7v-2.1a2.748,2.748,0,1,1,5.5,0v2.1H641.5a1.386,1.386,0,0,1,1.374,1.4V143.1a1.386,1.386,0,0,1-1.374,1.4h-8.243a1.386,1.386,0,0,1-1.374-1.4v-6.288a1.386,1.386,0,0,1,1.374-1.4Zm2.748-3.493a1.386,1.386,0,0,0-1.374,1.4v2.1h2.748v-2.1a1.386,1.386,0,0,0-1.374-1.4Zm0,0" transform="translate(-631.882 -130.511)"/></g></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.0 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="90.667" height="22" viewBox="0 0 90.667 22"><defs><clipPath id="a"><path d="M2404.472,992h-22.8l3.2-22h22.8Z" transform="translate(-2381.676 -970)" fill="#1a53ff"/></clipPath><clipPath id="b"><rect width="62.667" height="16" fill="#262626"/></clipPath></defs><g transform="translate(-30 -21)"><g transform="translate(30 21)"><g clip-path="url(#a)"><path d="M2388.177,1037.5h0l-6.5,5.5h11.4Z" transform="translate(-2381.676 -1021)" fill="#1a53ff" opacity="0.5"/><path d="M2384.881,970l-3.2,22h5.7l.8-5.5h5.7l.8-5.5h5.7l-.8,5.5-.8,5.5h5.7l3.2-22Zm15.9,8.25h-5.7l.8-5.5h5.7Z" transform="translate(-2381.677 -970)" fill="#1a53ff"/></g></g><g transform="translate(-628.729 -2051)"><g transform="translate(686.73 2076)" clip-path="url(#b)"><path d="M930.451,2092.935a2.5,2.5,0,0,0-2.543-1.935h-5.479l-.225,1.6h5.367a1.366,1.366,0,0,1,1.082.476,1.014,1.014,0,0,1-.781,1.657h-3.554a3.383,3.383,0,0,0-3.243,2.844l-.175,1.245a2.414,2.414,0,0,0,2.443,2.845h2.488a3.952,3.952,0,0,0,2.037-.588l-.082.588h1.6l.5-3.556.474-3.378.125-.889h0A2.585,2.585,0,0,0,930.451,2092.935Zm-1.915,3.4-.1.711-.15,1.067a2.329,2.329,0,0,1-2.229,1.956h-2.488a1.057,1.057,0,0,1-1.069-1.244l.175-1.245a1.482,1.482,0,0,1,1.419-1.244h3.554a2.665,2.665,0,0,0,.911-.163Z" transform="translate(-879.269 -2088.333)" fill="#262626"/><path d="M802.041,2091h-3.2a3.383,3.383,0,0,0-3.242,2.844l-.237,1.689-.225,1.6-.237,1.689a2.414,2.414,0,0,0,2.443,2.845h3.2a3.383,3.383,0,0,0,3.242-2.845l.013-.089h-1.6l-.013.089a1.482,1.482,0,0,1-1.418,1.244h-3.2a1.057,1.057,0,0,1-1.069-1.244l.237-1.689h7.285l.225-1.6.237-1.689A2.414,2.414,0,0,0,802.041,2091Zm-5.079,4.533.237-1.689a1.482,1.482,0,0,1,1.419-1.244h3.2a1.057,1.057,0,0,1,1.069,1.244l-.237,1.689Z" transform="translate(-775.657 -2088.333)" fill="#262626"/><path d="M740.041,2091h-3.2a3.383,3.383,0,0,0-3.242,2.844l-.237,1.689-.225,1.6-.237,1.689a2.415,2.415,0,0,0,2.444,2.845h3.2a3.383,3.383,0,0,0,3.242-2.845l.013-.089h-1.6l-.013.089a1.482,1.482,0,0,1-1.418,1.244h-3.2a1.057,1.057,0,0,1-1.069-1.244l.237-1.689h7.285l.225-1.6.237-1.689A2.414,2.414,0,0,0,740.041,2091Zm-5.079,4.533.237-1.689a1.482,1.482,0,0,1,1.418-1.244h3.2a1.057,1.057,0,0,1,1.069,1.244l-.237,1.689Z" transform="translate(-724.674 -2088.333)" fill="#262626"/><path d="M693.933,2076H690.38l-.25,1.778h1.777l-.849,6.044-.325,2.311a1.694,1.694,0,0,1-1.621,1.423H686.98l-.25,1.777h2.132a3.806,3.806,0,0,0,3.648-3.2l1.174-8.355h0Z" transform="translate(-686.73 -2076)" fill="#262626"/><path d="M990.5,2091l-.225,1.6-.325,2.311-.474,3.377-.075.533a1.482,1.482,0,0,1-1.418,1.244h-3.2a1.057,1.057,0,0,1-1.069-1.244l.549-3.911.325-2.311.225-1.6h-1.6l-1.1,7.822a2.414,2.414,0,0,0,2.443,2.845h3.2a3.094,3.094,0,0,0,1.284-.29l-.041.29a1.268,1.268,0,0,1-1.216,1.066H982.1l-.225,1.6h5.686a3.171,3.171,0,0,0,3.04-2.666l.4-2.845.075-.533L992.1,2091Z" transform="translate(-929.43 -2088.333)" fill="#262626"/><path d="M862.644,2091h-3.2a3.094,3.094,0,0,0-1.285.29l.041-.29h-1.6l-.4,2.844-.7,4.978-.774,5.511h1.6l.415-2.956a2.574,2.574,0,0,0,1.2.29h3.2a3.383,3.383,0,0,0,3.242-2.845l.7-4.978A2.414,2.414,0,0,0,862.644,2091Zm.145,7.822a1.482,1.482,0,0,1-1.419,1.244h-3.2a1.057,1.057,0,0,1-1.069-1.244l.7-4.978a1.482,1.482,0,0,1,1.418-1.244h3.2a1.057,1.057,0,0,1,1.069,1.244Z" transform="translate(-824.879 -2088.333)" fill="#262626"/></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 3.3 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1621851766037" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2360" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M243.2 512c0-49.664-39.936-89.6-89.6-89.6S64 462.336 64 512s39.936 89.6 89.6 89.6 89.6-39.936 89.6-89.6z m179.2 0c0 49.664 39.936 89.6 89.6 89.6s89.6-39.936 89.6-89.6-39.936-89.6-89.6-89.6-89.6 39.936-89.6 89.6z m358.4 0c0 49.664 39.936 89.6 89.6 89.6S960 561.664 960 512s-39.936-89.6-89.6-89.6c-49.152 0-89.6 39.936-89.6 89.6z" p-id="2361" fill="#2c2c2c"></path></svg>
|
||||||
|
After Width: | Height: | Size: 744 B |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="20.001" height="20" viewBox="0 0 20.001 20"><defs><style>.a{fill:#252626;}</style></defs><path class="a" d="M-3862-1142a3,3,0,0,1-3-3v-14a3,3,0,0,1,3-3h14a3,3,0,0,1,3,3v14a3,3,0,0,1-3,3Zm-1-17v14a1,1,0,0,0,1,1h14a1,1,0,0,0,1-1v-14a1,1,0,0,0-1-1h-14A1,1,0,0,0-3863-1159Zm11,12v-2a1,1,0,0,1,1-1,1,1,0,0,1,1,1v2a1,1,0,0,1-1,1A1,1,0,0,1-3852-1147Zm-4,0v-10a1,1,0,0,1,1-1,1,1,0,0,1,1,1v10a1,1,0,0,1-1,1A1,1,0,0,1-3856-1147Zm-4,0v-7a1,1,0,0,1,1-1,1,1,0,0,1,1,1v7a1,1,0,0,1-1,1A1,1,0,0,1-3860-1147Z" transform="translate(3865 1162)"/></svg>
|
||||||
|
After Width: | Height: | Size: 580 B |
|
|
@ -0,0 +1 @@
|
||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1619595883977" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3229" width="16" height="16" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M495.055 647.042a26.196 26.196 0 0 1-18.583-7.697L250.689 413.561c-10.263-10.263-10.263-26.903 0-37.166 10.263-10.263 26.903-10.263 37.166 0l207.2 207.2 207.2-207.2c10.263-10.263 26.904-10.263 37.167 0 10.262 10.263 10.262 26.903 0 37.166L513.638 639.345a26.196 26.196 0 0 1-18.583 7.697z" fill="#2c2c2c" p-id="3230"></path></svg>
|
||||||
|
After Width: | Height: | Size: 705 B |
|
|
@ -0,0 +1 @@
|
||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1619597015272" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5736" width="16" height="16" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M617.6 233.6c12.8-12.8 32-12.8 44.8 0 12.8 12.8 12.8 28.8 3.2 41.6l-3.2 3.2-233.6 233.6 233.6 233.6c12.8 12.8 12.8 28.8 3.2 41.6l-3.2 3.2c-12.8 12.8-28.8 12.8-41.6 3.2l-3.2-3.2-256-256c-12.8-12.8-12.8-28.8-3.2-41.6l3.2-3.2 256-256z" fill="#2c2c2c" p-id="5737"></path></svg>
|
||||||
|
After Width: | Height: | Size: 648 B |
|
|
@ -0,0 +1 @@
|
||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1619597331494" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1762" width="16" height="16" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M406.4 233.6c-12.8-12.8-32-12.8-44.8 0-12.8 12.8-12.8 28.8-3.2 41.6l3.2 3.2 233.6 233.6-233.6 233.6c-12.8 12.8-12.8 28.8-3.2 41.6l3.2 3.2c12.8 12.8 28.8 12.8 41.6 3.2l3.2-3.2 256-256c12.8-12.8 12.8-28.8 3.2-41.6l-3.2-3.2-256-256z" fill="#2c2c2c" p-id="1763"></path></svg>
|
||||||
|
After Width: | Height: | Size: 646 B |
|
|
@ -0,0 +1 @@
|
||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1619595944852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4607" width="16" height="16" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M495.055 308.698a26.196 26.196 0 0 0-18.583 7.697L250.689 542.179c-10.263 10.263-10.263 26.903 0 37.166s26.903 10.263 37.166 0l207.2-207.2 207.2 207.2c10.263 10.263 26.904 10.263 37.167 0 10.262-10.263 10.262-26.903 0-37.166L513.638 316.395a26.196 26.196 0 0 0-18.583-7.697z" fill="#2c2c2c" p-id="4608"></path></svg>
|
||||||
|
After Width: | Height: | Size: 691 B |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="14" viewBox="0 0 14 14"><defs><style>.a,.b{fill:#1a53ff;}.a{stroke:#707070;}.c{clip-path:url(#a);}.d{clip-path:url(#b);}</style><clipPath id="a"><rect class="a" width="14" height="14" transform="translate(796 520)"/></clipPath><clipPath id="b"><rect class="b" width="12" height="12" transform="translate(0)"/></clipPath></defs><g class="c" transform="translate(-796 -520)"><g transform="translate(-100 289.628)"><g class="d" transform="translate(897 231.372)"><path class="b" d="M1182.9,231.267h-3.343v3.745a2.254,2.254,0,0,1,0,4.508v3.75h3.343a2.291,2.291,0,0,0,2.258-2.308V233.58a2.289,2.289,0,0,0-2.258-2.313Zm0,0" transform="translate(-1173.16 -231.269)"/><path class="b" d="M903.133,235.581a1.657,1.657,0,0,0-.531.086v-4.3h-3.343A2.291,2.291,0,0,0,897,233.68v7.381a2.291,2.291,0,0,0,2.258,2.308H902.6v-4.293a1.713,1.713,0,0,0,.531.086,1.791,1.791,0,0,0,0-3.582Zm0,0" transform="translate(-897 -231.372)"/></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.0 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="14" viewBox="0 0 14 14"><defs><style>.a,.b{fill:#1a53ff;}.a{stroke:#707070;}.c{clip-path:url(#a);}.d{clip-path:url(#b);}</style><clipPath id="a"><rect class="a" width="14" height="14" transform="translate(786 458)"/></clipPath><clipPath id="b"><rect class="b" width="11" height="14"/></clipPath></defs><g class="c" transform="translate(-786 -458)"><g transform="translate(155.5 328)"><g transform="translate(632 130)"><g class="d" transform="translate(0)"><path class="b" d="M636.689,140.115V141.7a.687.687,0,1,0,1.374,0v-1.584a1.4,1.4,0,0,0,.687-1.21,1.374,1.374,0,1,0-2.748,0,1.4,1.4,0,0,0,.687,1.21Zm-2.061-4.7v-2.1a2.748,2.748,0,1,1,5.5,0v2.1H641.5a1.386,1.386,0,0,1,1.374,1.4V143.1a1.386,1.386,0,0,1-1.374,1.4h-8.243a1.386,1.386,0,0,1-1.374-1.4v-6.288a1.386,1.386,0,0,1,1.374-1.4Zm2.748-3.493a1.386,1.386,0,0,0-1.374,1.4v2.1h2.748v-2.1a1.386,1.386,0,0,0-1.374-1.4Zm0,0" transform="translate(-631.882 -130.511)"/></g></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.0 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="14" viewBox="0 0 14 14"><defs><style>.a,.b{fill:#1a53ff;}.a{stroke:#707070;}.c{clip-path:url(#a);}.d{clip-path:url(#b);}</style><clipPath id="a"><rect class="a" width="14" height="14" transform="translate(793 387)"/></clipPath><clipPath id="b"><rect class="b" width="13" height="14" transform="translate(0 0)"/></clipPath></defs><g class="c" transform="translate(-793 -387)"><g transform="translate(216.5 256)"><g class="d" transform="translate(577 131)"><path class="b" d="M740.84,134.733A3.714,3.714,0,1,0,744.554,131a3.724,3.724,0,0,0-3.714,3.733Zm0,0" transform="translate(-738.054 -131)"/><path class="b" d="M581.643,622.52h3.714a4.631,4.631,0,0,1,3.283,1.367,4.679,4.679,0,0,1,1.36,3.3v.933H577v-.933a4.679,4.679,0,0,1,1.36-3.3,4.631,4.631,0,0,1,3.283-1.367Zm0,0" transform="translate(-577 -614.12)"/></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 927 B |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="14" viewBox="0 0 14 14"><defs><style>.a,.b{fill:#596380;}.a{stroke:#707070;}.c{clip-path:url(#a);}.d{clip-path:url(#b);}</style><clipPath id="a"><rect class="a" width="14" height="14" transform="translate(793 387)"/></clipPath><clipPath id="b"><rect class="b" width="13" height="14" transform="translate(0 0)"/></clipPath></defs><g class="c" transform="translate(-793 -387)"><g transform="translate(216.5 256)"><g class="d" transform="translate(577 131)"><path class="b" d="M740.84,134.733A3.714,3.714,0,1,0,744.554,131a3.724,3.724,0,0,0-3.714,3.733Zm0,0" transform="translate(-738.054 -131)"/><path class="b" d="M581.643,622.52h3.714a4.631,4.631,0,0,1,3.283,1.367,4.679,4.679,0,0,1,1.36,3.3v.933H577v-.933a4.679,4.679,0,0,1,1.36-3.3,4.631,4.631,0,0,1,3.283-1.367Zm0,0" transform="translate(-577 -614.12)"/></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 927 B |
|
|
@ -0,0 +1,20 @@
|
||||||
|
<template>
|
||||||
|
<global-footer class="footer custom-render">
|
||||||
|
<template v-slot:links>
|
||||||
|
</template>
|
||||||
|
<template v-slot:copyright>
|
||||||
|
<a href="http://www.jeequan.com" target="_blank">@计全科技</a>
|
||||||
|
</template>
|
||||||
|
</global-footer>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { GlobalFooter } from '@ant-design-vue/pro-layout'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'ProGlobalFooter',
|
||||||
|
components: {
|
||||||
|
GlobalFooter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
<template>
|
||||||
|
<a-dropdown placement="bottomRight">
|
||||||
|
<span class="ant-pro-account-avatar">
|
||||||
|
<a-avatar size="small" :src="greetImg" class="antd-pro-global-header-index-avatar" />
|
||||||
|
<span>{{ currentUserName }}</span>
|
||||||
|
</span>
|
||||||
|
<template v-slot:overlay>
|
||||||
|
<a-menu class="ant-pro-drop-down menu" :selected-keys="[]">
|
||||||
|
|
||||||
|
<a-menu-item v-if="$access('ENT_C_USERINFO')" key="settings" @click="handleToSettings">
|
||||||
|
<a-icon type="setting" />
|
||||||
|
账户设置
|
||||||
|
</a-menu-item>
|
||||||
|
|
||||||
|
<a-menu-divider />
|
||||||
|
|
||||||
|
<a-menu-item key="logout" @click="handleLogout">
|
||||||
|
<a-icon type="logout" />
|
||||||
|
退出登录
|
||||||
|
</a-menu-item>
|
||||||
|
|
||||||
|
</a-menu>
|
||||||
|
</template>
|
||||||
|
</a-dropdown>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'AvatarDropdown',
|
||||||
|
props: {
|
||||||
|
},
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
// greetImg: '', // 头像图片地址
|
||||||
|
sex: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
// 返回用户名
|
||||||
|
currentUserName () {
|
||||||
|
return this.$store.state.user.userName
|
||||||
|
},
|
||||||
|
// 返回头像
|
||||||
|
greetImg () {
|
||||||
|
return this.$store.state.user.avatarImgPath
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleToSettings () {
|
||||||
|
this.$router.push({ name: 'ENT_C_USERINFO' })
|
||||||
|
},
|
||||||
|
handleLogout: function (e) {
|
||||||
|
this.$infoBox.confirmPrimary('确认退出?', '', () => {
|
||||||
|
this.$store.dispatch('Logout').then(() => {
|
||||||
|
this.$router.push({ name: 'login' })
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.ant-pro-drop-down {
|
||||||
|
/deep/ .action {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
/deep/ .ant-dropdown-menu-item {
|
||||||
|
min-width: 160px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
<template>
|
||||||
|
<div :class="wrpCls">
|
||||||
|
<avatar-dropdown :menu="showMenu" :current-user="currentUser" :class="prefixCls" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import AvatarDropdown from './AvatarDropdown'
|
||||||
|
// import store from '@/store'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'RightContent',
|
||||||
|
components: {
|
||||||
|
AvatarDropdown
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
prefixCls: {
|
||||||
|
type: String,
|
||||||
|
default: 'ant-pro-global-header-index-action'
|
||||||
|
},
|
||||||
|
isMobile: {
|
||||||
|
type: Boolean,
|
||||||
|
default: () => false
|
||||||
|
},
|
||||||
|
topMenu: {
|
||||||
|
type: Boolean,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
theme: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
showMenu: true,
|
||||||
|
currentUser: {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
wrpCls () {
|
||||||
|
return {
|
||||||
|
'ant-pro-global-header-index-right': true,
|
||||||
|
[`ant-pro-global-header-index-${(this.isMobile || !this.topMenu) ? 'light' : this.theme}`]: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
// console.log(store)
|
||||||
|
this.currentUser = {
|
||||||
|
name: 'dd'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
<template>
|
||||||
|
<div class="loading">
|
||||||
|
<div>
|
||||||
|
<a-spin size="large" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'GlobalLoad',
|
||||||
|
data () {
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style scoped>
|
||||||
|
.loading{
|
||||||
|
position: fixed;
|
||||||
|
top:0;
|
||||||
|
left:0;
|
||||||
|
z-index:100;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
text-align: center;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
background: rgba(255,255,255,0.25);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,123 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<a-row :gutter="[24,24]" style="width:100%">
|
||||||
|
<!-- 卡片默认新增框 -->
|
||||||
|
<a-col
|
||||||
|
:xxl="24/span.xxl"
|
||||||
|
:xl="24/span.xl"
|
||||||
|
:lg="24/span.lg"
|
||||||
|
:md="24/span.md"
|
||||||
|
:sm="24/span.sm"
|
||||||
|
:xs="24/span.xs"
|
||||||
|
@click="$emit('addJeepayCard')"
|
||||||
|
v-if="addAuthority"
|
||||||
|
>
|
||||||
|
<div class="jeepay-card-add" :style="{'height': height + 'px'}">
|
||||||
|
<div class="jeepay-card-add-top">
|
||||||
|
<img src="~@/assets/svg/add-icon.svg" alt="add-icon" class="jeepay-card-add-icon">
|
||||||
|
<img src="~@/assets/svg/add-icon-hover.svg" alt="add-icon" class="jeepay-card-add-icon-hover">
|
||||||
|
</div>
|
||||||
|
<div class="jeepay-card-add-text">
|
||||||
|
新增{{ name }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a-col>
|
||||||
|
<!-- 数据 -->
|
||||||
|
<a-col
|
||||||
|
v-for="(item, key) in cardList"
|
||||||
|
:key="key"
|
||||||
|
:xxl="24/span.xxl"
|
||||||
|
:xl="24/span.xl"
|
||||||
|
:lg="24/span.lg"
|
||||||
|
:md="24/span.md"
|
||||||
|
:sm="24/span.sm"
|
||||||
|
:xs="24/span.xs"
|
||||||
|
>
|
||||||
|
<slot name="cardContentSlot" :record="item"></slot>
|
||||||
|
<slot name="cardOpSlot" :record="item"></slot>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'JeepayCard',
|
||||||
|
props: {
|
||||||
|
span: { type: Object, default: () => ({ xxl: 6, xl: 4, lg: 4, md: 3, sm: 2, xs: 1 }) },
|
||||||
|
height: { type: Number, default: 200 },
|
||||||
|
name: { type: String, default: '' },
|
||||||
|
addAuthority: { type: Boolean, default: false },
|
||||||
|
reqCardListFunc: { type: Function, default: () => () => ({}) }
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
cardList: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created () {
|
||||||
|
this.refCardList()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
refCardList () {
|
||||||
|
const that = this
|
||||||
|
this.reqCardListFunc().then(resData => {
|
||||||
|
that.cardList = resData
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.jeepay-card-add {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
border: 2px dashed rgba(0, 0, 0, 0.15);
|
||||||
|
background: rgba(0, 0, 0, 0.03);
|
||||||
|
border-radius: 6px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.jeepay-card-add-top {
|
||||||
|
width: 80px;
|
||||||
|
height: 80px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.jeepay-card-add:hover {
|
||||||
|
border-color: rgba(25,83,255,0.3);
|
||||||
|
background: rgba(25,83,255,0.06);
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
.jeepay-card-add:hover .jeepay-card-add-icon {
|
||||||
|
opacity: 0;
|
||||||
|
transition: all 0.2s ease-in-out;
|
||||||
|
}
|
||||||
|
.jeepay-card-add:hover .jeepay-card-add-icon-hover {
|
||||||
|
opacity: 1;
|
||||||
|
transition: all 0.5s ease-in-out;
|
||||||
|
}
|
||||||
|
.jeepay-card-add:hover .jeepay-card-add-text {
|
||||||
|
color: rgba(25,83,255,1);
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
.jeepay-card-add-icon {
|
||||||
|
position: absolute;
|
||||||
|
width: 80px;
|
||||||
|
height: 80px;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
.jeepay-card-add-icon-hover {
|
||||||
|
position: absolute;
|
||||||
|
width: 80px;
|
||||||
|
height: 80px;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.jeepay-card-add-text {
|
||||||
|
padding-top: 5px;
|
||||||
|
font-size: 16px;
|
||||||
|
color: rgba(0, 0, 0, 0.35);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,119 @@
|
||||||
|
<!--
|
||||||
|
Jeepay 通用表格, 支持基础分页, 检索
|
||||||
|
|
||||||
|
@author terrfly
|
||||||
|
@site https://www.jeepay.vip
|
||||||
|
@date 2021/5/8 07:18
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<a-table
|
||||||
|
:columns="tableColumns"
|
||||||
|
:data-source="apiResData.records"
|
||||||
|
:pagination="pagination"
|
||||||
|
:loading="showLoading"
|
||||||
|
@change="handleTableChange"
|
||||||
|
:row-selection="rowSelection"
|
||||||
|
:rowKey="rowKey"
|
||||||
|
:scroll="{ x: scrollX }"
|
||||||
|
>
|
||||||
|
<!-- 自定义列插槽, 参考:https://github.com/feseed/admin-antd-vue/blob/master/src/components/ShTable.vue -->
|
||||||
|
<!-- eslint-disable-next-line -->
|
||||||
|
<template v-for="colCustom in columnsCustomSlots" :slot="colCustom.customRender" slot-scope="record">
|
||||||
|
<slot :name="colCustom.customRender" :record="record"></slot>
|
||||||
|
</template>
|
||||||
|
</a-table>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
export default {
|
||||||
|
|
||||||
|
name: 'JeepayTable', // 定义组件名称
|
||||||
|
|
||||||
|
// 传递数据参数 ( 父-->子 参数 )
|
||||||
|
props: {
|
||||||
|
initData: { type: Boolean, default: true }, // 初始化列表数据, 默认true
|
||||||
|
tableColumns: Array, // 表格数组列
|
||||||
|
reqTableDataFunc: { type: Function }, // 请求列表数据
|
||||||
|
currentChange: { type: Function, default: (v1, v2) => {} }, // 更新当前选择行事件, 默认空函数
|
||||||
|
searchData: Object, // 搜索条件参数
|
||||||
|
pageSize: { type: Number, default: 10 }, // 默认每页条数
|
||||||
|
rowSelection: Object, // checkbox选择
|
||||||
|
rowKey: { type: [String, Function] }, // 定义rowKey 如果不定义将会出现(树状结构出问题, checkbox不消失等)
|
||||||
|
scrollX: { type: Number, default: 800 } // 表格显示滚动条的宽度
|
||||||
|
},
|
||||||
|
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
apiResData: { total: 0, records: [] }, // 接口返回数据
|
||||||
|
iPage: { pageNumber: 1, pageSize: this.pageSize }, // 默认table 分页/排序请求后端格式
|
||||||
|
pagination: { total: 0, current: 1, pageSize: this.pageSize, showSizeChanger: true, showTotal: total => `共${total}条` }, // ATable 分页配置项
|
||||||
|
showLoading: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 计算属性
|
||||||
|
computed: {
|
||||||
|
columnsCustomSlots () { // 自定义列插槽 1. 过滤器仅获取到包含slot属性的元素, 2. 返回slot数组
|
||||||
|
return this.tableColumns.filter(item => item.scopedSlots).map(item => item.scopedSlots)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
if (this.initData) { // 是否自动加载数据
|
||||||
|
this.refTable(true)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleTableChange (pagination, filters, sorter) { // 分页、排序、筛选变化时触发
|
||||||
|
this.pagination = pagination
|
||||||
|
this.iPage = {
|
||||||
|
pageSize: pagination.pageSize, // 每页条数
|
||||||
|
pageNumber: pagination.current, // 当前页码
|
||||||
|
sortField: sorter.columnKey, // 排序字段
|
||||||
|
sortOrder: sorter.order, // 排序顺序
|
||||||
|
...filters // 过滤数据
|
||||||
|
}
|
||||||
|
this.refTable()
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询数据
|
||||||
|
refTable (isToFirst = false) {
|
||||||
|
const that = this
|
||||||
|
if (isToFirst) {
|
||||||
|
this.iPage.pageNumber = 1
|
||||||
|
this.pagination.current = 1
|
||||||
|
}
|
||||||
|
// 更新检索数据
|
||||||
|
this.showLoading = true
|
||||||
|
this.reqTableDataFunc(Object.assign({}, this.iPage, this.searchData)).then(resData => {
|
||||||
|
this.pagination.total = resData.total // 更新总数量
|
||||||
|
this.apiResData = resData // 列表数据更新
|
||||||
|
this.showLoading = false // 关闭loading
|
||||||
|
|
||||||
|
// 数据为0 ,并且为当前页面没有在第一页则需要自动跳转到上一页(解决,删除第二页数据全部删除后无数据的情况 )
|
||||||
|
if (resData.records.length === 0 && this.iPage.pageNumber > 1) {
|
||||||
|
that.$nextTick(() => {
|
||||||
|
// 最大页码
|
||||||
|
const maxPageNumber = (resData.total / this.iPage.pageSize) + ((resData.total % this.iPage.pageSize) === 0 ? 0 : 1)
|
||||||
|
if (maxPageNumber === 0) { // 已经无数据
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 跳转到的页码
|
||||||
|
const toPageSize = (this.iPage.pageNumber - 1) > maxPageNumber ? maxPageNumber : (this.iPage.pageNumber - 1)
|
||||||
|
|
||||||
|
this.iPage.pageNumber = toPageSize
|
||||||
|
this.pagination.current = toPageSize
|
||||||
|
that.refTable(false)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 请求成功后,关闭查询按钮的loading
|
||||||
|
that.$emit('btnLoadClose')
|
||||||
|
}).catch(res => {
|
||||||
|
this.showLoading = false
|
||||||
|
that.$emit('btnLoadClose')
|
||||||
|
}) // 关闭loading
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
<!--
|
||||||
|
Jeepay 通用状态切换按钮, 支持switch和badge两个格式, 根据权限进行判断
|
||||||
|
|
||||||
|
@author terrfly
|
||||||
|
@site https://www.jeepay.vip
|
||||||
|
@date 2021/5/8 07:18
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
|
||||||
|
<template v-if="!showSwitchType">
|
||||||
|
<div v-if="state == 0" ><a-badge status="error" text="停用" /></div>
|
||||||
|
<div v-else-if="state == 1" ><a-badge status="processing" text="启用" /></div>
|
||||||
|
<div v-else ><a-badge status="warning" text="未知" /></div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template v-if="showSwitchType">
|
||||||
|
<a-switch class="els" checked-children="启用" un-checked-children="停用" :checked="switchChecked" @change="onChangeInner" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'JeepayTableColState', // 定义组件名称
|
||||||
|
|
||||||
|
// 传递数据参数 ( 父-->子 参数 )
|
||||||
|
props: {
|
||||||
|
state: { type: Number, default: -1 }, // 初始化列表数据, 默认true
|
||||||
|
showSwitchType: { type: Boolean, default: false }, // 默认 badge
|
||||||
|
onChange: { type: Function, default: (checked) => { return new Promise(resolve => { resolve() }) } } // change回调事件
|
||||||
|
},
|
||||||
|
data: function () {
|
||||||
|
return { switchChecked: false }
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
this.switchChecked = this.state === 1
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
state: function (o, n) {
|
||||||
|
this.switchChecked = this.state === 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onChangeInner: function (checked) {
|
||||||
|
const that = this
|
||||||
|
this.switchChecked = checked
|
||||||
|
|
||||||
|
// 回调输出 0 和 1; 成功不需要处理, 失败需要经状态变更为原始状态
|
||||||
|
this.onChange((checked ? 1 : 0)).then().catch(res => {
|
||||||
|
that.$nextTick(() => { that.switchChecked = !checked })
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
<!--
|
||||||
|
Jeepay 通用列,添加更多菜单项
|
||||||
|
|
||||||
|
@author terrfly
|
||||||
|
@site https://www.jeepay.vip
|
||||||
|
@date 2021/5/8 07:18
|
||||||
|
-->
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'JeepayTableColumns', // 定义组件名称
|
||||||
|
render (createElement, context) {
|
||||||
|
const slots = []
|
||||||
|
this.$slots.default.map(item => {
|
||||||
|
if (item.tag) {
|
||||||
|
slots.push(item)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
if (slots.length <= 3) { // 小于等于三个直接渲染
|
||||||
|
return createElement(
|
||||||
|
'div',
|
||||||
|
{ style: 'display:flex; justify-content: space-evenly;' },
|
||||||
|
slots // 子节点数组
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
const firstEL = [slots[0], slots[1]]
|
||||||
|
const menuEL = []
|
||||||
|
for (let i = 2; i < slots.length; i++) {
|
||||||
|
menuEL.push(<a-menu-item>{slots[i]}</a-menu-item>)
|
||||||
|
}
|
||||||
|
return <div style="display:flex; justify-content: space-evenly;"> {firstEL}
|
||||||
|
<a-dropdown>
|
||||||
|
<a class="ant-dropdown-link" style="line-height:32px">更多<a-icon type="down" /></a>
|
||||||
|
<a-menu slot="overlay">
|
||||||
|
{menuEL}
|
||||||
|
</a-menu>
|
||||||
|
</a-dropdown>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,121 @@
|
||||||
|
<template>
|
||||||
|
<div class="jee-text-up table-head-layout">
|
||||||
|
<a-input required="required" :value="msg" @input="$emit('input', $event.target.value)">
|
||||||
|
</a-input>
|
||||||
|
<label>{{ placeholder }}</label>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'JeepayTextUp',
|
||||||
|
// props: ['msg', 'placeholder']
|
||||||
|
props: {
|
||||||
|
msg: { type: String, default: '' },
|
||||||
|
placeholder: { type: String, default: '' }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
// 文字上移 效果
|
||||||
|
.jee-text-up {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
input {
|
||||||
|
|
||||||
|
outline: 0;
|
||||||
|
text-indent: 60px;
|
||||||
|
transition: all .3s ease-in-out;
|
||||||
|
|
||||||
|
}
|
||||||
|
input::-webkit-input-placeholder {
|
||||||
|
color: #BFBFBF;
|
||||||
|
text-indent: 0;
|
||||||
|
}
|
||||||
|
input + label {
|
||||||
|
pointer-events: none;
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
bottom: 6px;
|
||||||
|
padding: 2px 11px;
|
||||||
|
color: #BFBFBF;
|
||||||
|
font-size: 13px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
transition: all .3s ease-in-out;
|
||||||
|
border-radius: 3px;
|
||||||
|
background: rgba(122, 184, 147, 0);
|
||||||
|
height: 20px;
|
||||||
|
line-height: 20px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
// 三角形
|
||||||
|
input + label:after {
|
||||||
|
position: absolute;
|
||||||
|
content: "";
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
top: 100%;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -3px;
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
border-right: 3px solid transparent;
|
||||||
|
transition: all .3s ease-in-out;
|
||||||
|
}
|
||||||
|
input:focus,
|
||||||
|
input:active,
|
||||||
|
input:valid + label {
|
||||||
|
text-indent: 0;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
input:focus + label,
|
||||||
|
input:active + label,
|
||||||
|
input:valid + label {
|
||||||
|
color: #fff;
|
||||||
|
background: @jee-theme;
|
||||||
|
transform: translateY(-33px);
|
||||||
|
}
|
||||||
|
input:focus + label:after,
|
||||||
|
input:active + label:after {
|
||||||
|
border-top: 4px solid @jee-theme;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:valid {
|
||||||
|
text-indent: 0; //文字不下移
|
||||||
|
}
|
||||||
|
input:valid + label{
|
||||||
|
background: #dadada; // 更换背景色
|
||||||
|
}
|
||||||
|
|
||||||
|
input:valid + label:after{ // 更换背景色
|
||||||
|
border-top: 4px solid #dadada;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 文字上移效果 初版
|
||||||
|
// .jee-text-up {
|
||||||
|
// position: relative;
|
||||||
|
|
||||||
|
// .jee-text-label {
|
||||||
|
// position: absolute;
|
||||||
|
// z-index: 1;
|
||||||
|
// left: 15px;
|
||||||
|
// top: 0px;
|
||||||
|
// transition: all .3s;
|
||||||
|
// color: #bfbfbf;
|
||||||
|
// pointer-events: none;
|
||||||
|
// height: 20px;
|
||||||
|
// line-height: 20px;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// input:focus + .jee-text-label, input:valid + .jee-text-label {
|
||||||
|
// top: -35px;
|
||||||
|
// padding: 1px 10px;
|
||||||
|
// border-radius: 5px;
|
||||||
|
// background: @jee-theme;
|
||||||
|
// color: #fff;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,86 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<a-upload
|
||||||
|
name="file"
|
||||||
|
:action="action"
|
||||||
|
:headers="headers"
|
||||||
|
:accept="accept"
|
||||||
|
:showUploadList="false"
|
||||||
|
:multiple="true"
|
||||||
|
:before-upload="beforeUpload"
|
||||||
|
@change="handleChange"
|
||||||
|
>
|
||||||
|
<slot name="uploadSlot" :loading="loading"></slot>
|
||||||
|
<!-- <img v-if="fileUrl && type === 'image'" :src="fileUrl" />
|
||||||
|
<a-input v-else-if="fileUrl && type === 'file'" :value="fileUrl" />
|
||||||
|
<a-button style="marginLeft:5px;"> <a-icon :type="loading ? 'loading' : 'upload'" /> {{ loading ? '正在上传' : '点击上传' }} </a-button> -->
|
||||||
|
</a-upload>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import appConfig from '@/config/appConfig'
|
||||||
|
import storage from '@/utils/jeepayStorageWrapper'
|
||||||
|
|
||||||
|
function getHeaders () {
|
||||||
|
const headers = {}
|
||||||
|
headers[appConfig.ACCESS_TOKEN_NAME] = storage.getToken() // token
|
||||||
|
return headers
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'JeepayUpload',
|
||||||
|
props: {
|
||||||
|
action: { type: String, default: '' },
|
||||||
|
accept: { type: String, default: '' },
|
||||||
|
size: { type: Number, default: 10 }, // 文件大小限制
|
||||||
|
num: { type: Number, default: 1 } // 文件数量限制
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
loading: false, // 上传状态
|
||||||
|
fileList: [],
|
||||||
|
headers: getHeaders() // 放入token
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created () {
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 上传回调
|
||||||
|
handleChange (info) {
|
||||||
|
// 限制文件数量
|
||||||
|
/* let fileList = [...info.fileList]
|
||||||
|
fileList = fileList.length > this.num ? fileList.splice(0 - this.num) : fileList // 取最新加入的元素
|
||||||
|
fileList = fileList.map(file => {
|
||||||
|
if (file.response) {
|
||||||
|
file.url = file.response.data
|
||||||
|
}
|
||||||
|
return file
|
||||||
|
}) */
|
||||||
|
const res = info.file.response
|
||||||
|
|
||||||
|
if (info.file.status === 'uploading') {
|
||||||
|
this.loading = true
|
||||||
|
}
|
||||||
|
if (info.file.status === 'done') {
|
||||||
|
if (res.code !== 0) {
|
||||||
|
this.$message.error(res.msg)
|
||||||
|
}
|
||||||
|
this.loading = false
|
||||||
|
this.$emit('uploadSuccess', res.data)
|
||||||
|
} else if (info.file.status === 'error') {
|
||||||
|
console.log(info)
|
||||||
|
this.$message.error(`上传失败`)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 上传图片前的校验
|
||||||
|
beforeUpload (file) {
|
||||||
|
const validate = file.size / 1024 / 1024 < this.size
|
||||||
|
if (!validate) {
|
||||||
|
this.$message.error('文件应小于' + this.size + 'M!')
|
||||||
|
}
|
||||||
|
return validate
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||