Browse Source

项目初始化

master
liaoxinyu 2 years ago
commit
4532695bf9
  1. 12
      .babelrc
  2. 16
      .editorconfig
  3. 5
      .eslintignore
  4. 29
      .eslintrc.js
  5. 41
      .gitignore
  6. 10
      .postcssrc.js
  7. 21
      LICENSE
  8. 52
      README 2.md
  9. 2
      README.md
  10. BIN
      build/55.lnk
  11. 41
      build/build.js
  12. 52
      build/check-versions.js
  13. BIN
      build/logo.png
  14. 142
      build/utils.js
  15. 28
      build/vue-loader.conf.js
  16. 110
      build/webpack.base.conf.js
  17. 166
      build/webpack.dev.conf.js
  18. 177
      build/webpack.prod.conf.js
  19. 9
      config/dev.env.js
  20. 107
      config/index.js
  21. 4
      config/prod.env.js
  22. 7
      icomoon/Read Me.txt
  23. 152
      icomoon/demo-files/demo.css
  24. 30
      icomoon/demo-files/demo.js
  25. 472
      icomoon/demo.html
  26. BIN
      icomoon/fonts/icomoon.eot
  27. 44
      icomoon/fonts/icomoon.svg
  28. BIN
      icomoon/fonts/icomoon.ttf
  29. BIN
      icomoon/fonts/icomoon.woff
  30. 1
      icomoon/selection.json
  31. 164
      icomoon/style.css
  32. 14
      jsconfig.json
  33. 14763
      package-lock.json
  34. 114
      package.json
  35. 100
      src/App.vue
  36. 251
      src/api/assets.js
  37. 9
      src/api/coinTrading.js
  38. 36
      src/api/college.js
  39. 11
      src/api/config.js
  40. 15
      src/api/contactUs.js
  41. 104
      src/api/contract.js
  42. 104
      src/api/custom/DataUpdater.js
  43. 119
      src/api/custom/Datafees.js
  44. 359
      src/api/custom/Model.js
  45. 197
      src/api/custom/Socket.js
  46. 102
      src/api/custom/servlet.js
  47. 31
      src/api/exchange.js
  48. 32
      src/api/home.js
  49. 56
      src/api/market.js
  50. 162
      src/api/member.js
  51. 111
      src/api/option.js
  52. 105
      src/api/order.js
  53. 63
      src/api/otc.js
  54. 65
      src/api/profile.js
  55. 101
      src/api/record.js
  56. 177
      src/api/server/Socket.js
  57. 168
      src/api/server/convention.js
  58. 196
      src/api/server/index.js
  59. 205
      src/api/setting.js
  60. 35
      src/api/subscride.js
  61. 155
      src/api/wallet.js
  62. BIN
      src/assets/fonts/opensans/OpenSans-Bold.ttf
  63. BIN
      src/assets/fonts/opensans/OpenSans-Regular.ttf
  64. BIN
      src/assets/fonts/overpass/Overpass-Bold.woff2
  65. BIN
      src/assets/fonts/overpass/Overpass-Light.woff2
  66. BIN
      src/assets/fonts/overpass/Overpass-Regular.woff2
  67. BIN
      src/assets/fonts/overpass/Overpass-SemiBold.woff2
  68. 45
      src/assets/i18n/cn/address.js
  69. 53
      src/assets/i18n/cn/application.js
  70. 109
      src/assets/i18n/cn/assets.js
  71. 130
      src/assets/i18n/cn/commom.js
  72. 18
      src/assets/i18n/cn/contact.js
  73. 26
      src/assets/i18n/cn/contactUs.js
  74. 37
      src/assets/i18n/cn/contractsAccount.js
  75. 27
      src/assets/i18n/cn/course.js
  76. 337
      src/assets/i18n/cn/exchange.js
  77. 92
      src/assets/i18n/cn/financial.js
  78. 23
      src/assets/i18n/cn/fundHistory.js
  79. 30
      src/assets/i18n/cn/historical.js
  80. 34
      src/assets/i18n/cn/home.js
  81. 31
      src/assets/i18n/cn/index.js
  82. 27
      src/assets/i18n/cn/invite.js
  83. 53
      src/assets/i18n/cn/login.js
  84. 12
      src/assets/i18n/cn/nav.js
  85. 41
      src/assets/i18n/cn/option.js
  86. 52
      src/assets/i18n/cn/order.js
  87. 63
      src/assets/i18n/cn/personalVer.js
  88. 111
      src/assets/i18n/cn/profile.js
  89. 89
      src/assets/i18n/cn/security.js
  90. 48
      src/assets/i18n/cn/setting.js
  91. 22
      src/assets/i18n/cn/subscride.js
  92. 26
      src/assets/i18n/cn/transfer.js
  93. 114
      src/assets/i18n/cn/wallet.js
  94. 45
      src/assets/i18n/en/address.js
  95. 109
      src/assets/i18n/en/assets.js
  96. 74
      src/assets/i18n/en/commom.js
  97. 25
      src/assets/i18n/en/contactUs.js
  98. 39
      src/assets/i18n/en/contractsAccount.js
  99. 343
      src/assets/i18n/en/exchange.js
  100. 89
      src/assets/i18n/en/financial.js

12
.babelrc

@ -0,0 +1,12 @@
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-2"
],
"plugins": ["transform-vue-jsx", "transform-runtime"]
}

16
.editorconfig

@ -0,0 +1,16 @@
root = true
[*]
# 字符编码
charset = utf-8
# 以空格形式缩进
indent_style = space
# 缩进的大小为4个空格
indent_size = 4
tab_width = 4
# 定义换行符
end_of_line = lf
# 文件结尾处插入新行
insert_final_newline = true
# 除去换行行首的任意空白字符
# trim_trailing_whitespace = true

5
.eslintignore

@ -0,0 +1,5 @@
/build/
/config/
/dist/
/*.js
/src

29
.eslintrc.js

@ -0,0 +1,29 @@
// https://eslint.org/docs/user-guide/configuring
module.exports = {
root: true,
parserOptions: {
parser: 'babel-eslint'
},
env: {
browser: true,
},
extends: [
// https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
// consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
'plugin:vue/essential',
// https://github.com/standard/standard/blob/master/docs/RULES-en.md
'standard'
],
// required to lint *.vue files
plugins: [
'vue'
],
// add your custom rules here
rules: {
// allow async-await
'generator-star-spacing': 'off',
// allow debugger during development
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
}
}

41
.gitignore

@ -0,0 +1,41 @@
# ---> Vue
# gitignore template for Vue.js projects
#
# Recommended template: Node.gitignore
# TODO: where does this rule come from?
docs/_book
# TODO: where does this rule come from?
test/
# ---> macOS
# General
.DS_Store
.AppleDouble
.LSOverride
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
.idea/
node_modules/
dist/
.history/

10
.postcssrc.js

@ -0,0 +1,10 @@
// 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": {}
}
}

21
LICENSE

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 lautin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

52
README 2.md

@ -0,0 +1,52 @@
# e-learn
> A Vue.js project
## Build Setup
``` bash
# install dependencies
npm install
# serve with hot reload at localhost:8080
npm run dev
# build for production with minification
npm run build
# build for production and view the bundle analyzer report
npm run build --report
```
### 服务器地址
+ 管理后台:http://211.149.170.186:8887/btwest/ cproot eukhw2tb
+
+ SSH账户:211.149.170.186 root eukhw2tb 22(000)
+ 功能模块:
- 账户中心:
- 账户信息
- 重置密码
- 实名认证
- 邀请好友
- 登录记录
- 我的钱包
- 资产
- 合约账户
- 期权账户
- 资金划转
- 充值提币
- 我的返佣
- 安全设置
- 交易密码
- google验证
- 邮箱验证
- sms验证
- 地址管理
-
For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).
markdown 预览的快捷键 ctrl+shift+v

2
README.md

@ -0,0 +1,2 @@
# jiaoyi

BIN
build/55.lnk

Binary file not shown.

41
build/build.js

@ -0,0 +1,41 @@
'use strict'
require('./check-versions')()
// 构建时 将环境变量设为production
process.env.NODE_ENV = 'production'
const ora = require('ora')
const rm = require('rimraf')
const path = require('path')
const chalk = require('chalk')
const webpack = require('webpack')
const config = require('../config')
const webpackConfig = require('./webpack.prod.conf')
const spinner = ora('building for production...')
spinner.start()
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
if (err) throw err
webpack(webpackConfig, (err, stats) => {
spinner.stop()
if (err) throw err
process.stdout.write(stats.toString({
colors: true,
modules: false,
children: false,
chunks: false,
chunkModules: false
}) + '\n\n')
if (stats.hasErrors()) {
console.log(chalk.red(' Build failed with errors.\n'))
process.exit(1)
}
console.log(chalk.cyan(' Build complete.\n'))
console.log(chalk.yellow(
' Tip: built files are meant to be served over an HTTP server.\n' +
' Opening index.html over file:// won\'t work.\n'
))
})
})

52
build/check-versions.js

@ -0,0 +1,52 @@
'use strict'
const chalk = require('chalk')
const semver = require('semver')
const packageConfig = require('../package.json')
const shell = require('shelljs')
function exec(cmd) {
return require('child_process').execSync(cmd).toString().trim()
}
const versionRequirements = [{
name: 'node',
currentVersion: semver.clean(process.version),
versionRequirement: packageConfig.engines.node
}]
if (shell.which('npm')) {
versionRequirements.push({
name: 'npm',
currentVersion: exec('npm --version'),
versionRequirement: packageConfig.engines.npm
})
}
module.exports = function () {
const warnings = []
for (let i = 0; i < versionRequirements.length; i++) {
const mod = versionRequirements[i]
if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
warnings.push(mod.name + ': ' +
chalk.red(mod.currentVersion) + ' should be ' +
chalk.green(mod.versionRequirement)
)
}
}
if (warnings.length) {
console.log('')
// console.log(chalk.yellow('To use this template, you must update following to modules:'))
console.log()
for (let i = 0; i < warnings.length; i++) {
const warning = warnings[i]
// console.log(' ' + warning)
}
console.log()
process.exit(1)
}
}

BIN
build/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

142
build/utils.js

@ -0,0 +1,142 @@
'use strict'
const path = require('path')
const config = require('../config')
const packageConfig = require('../package.json')
// 将构建时内嵌的css 提取为一个独立文件
const ExtractTextPlugin = require('extract-text-webpack-plugin')
// 配置资源文件路径
exports.assetsPath = function(_path) {
const assetsSubDirectory = process.env.NODE_ENV === 'production' ?
config.build.assetsSubDirectory :
config.dev.assetsSubDirectory
return path.posix.join(assetsSubDirectory, _path)
}
/**
* 加载各型css loader的封装函数
* { usePostCSS, sourceMap, extract }
*
*/
exports.cssLoaders = function(options) {
options = options || {}
//
const cssLoader = {
loader: 'css-loader',
options: {
sourceMap: options.sourceMap
}
}
const postcssLoader = {
loader: 'postcss-loader',
options: {
sourceMap: options.sourceMap
}
}
// generate loader string to be used with extract text plugin
function generateLoaders(loader, loaderOptions) {
const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
if (loader) {
loaders.push({
loader: loader + '-loader',
// 接入自定义的选项
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
}
// Extract CSS when that option is specified
// (which is the case during production build)
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
fallback: 'vue-style-loader',
publicPath: '../../'
})
} else { // 最后加载vue-style-loader 解析.vue中的css代码
return ['vue-style-loader'].concat(loaders)
}
}
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
// 给scss文件增加loader以支持全局导入文件,
// 所有扩展的loader通过concat写入
// resource-loader确保变量、混入类和函数在每个文件中都有效
sass: generateLoaders('sass', {
indentedSyntax: true
}),
scss: generateLoaders('sass').concat({
loader: 'style-resources-loader',
options: {
patterns: [
// 全局配置函数 此处的_不能省略
path.resolve(__dirname, "../src/assets/scss/_settings.scss"),
path.resolve(__dirname, "../src/assets/scss/_mixin.scss"),
// 加载基础样式
// path.resolve(__dirname, '../src/assets/scss/base/_base.scss'),
// 加载布局样式
path.resolve(__dirname, '../src/assets/scss/layout/_layout.scss'),
// 加载模块样式
// path.resolve(__dirname, '../src/assets/scss/module/_module.scss'),
// 加载主题样式
path.resolve(__dirname, '../src/assets/scss/theme/_theme.scss'),
]
}
}),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}
}
// Generate loaders for standalone style files (outside of .vue)
exports.styleLoaders = function(options) {
const output = []
const loaders = exports.cssLoaders(options)
for (const extension in loaders) {
const loader = loaders[extension]
output.push({
test: new RegExp('\\.' + extension + '$'),
use: loader
})
}
return output
}
exports.createNotifierCallback = () => {
const notifier = require('node-notifier')
return (severity, errors) => {
if (severity !== 'error') return
const error = errors[0]
const filename = error.file && error.file.split('!').pop()
notifier.notify({
title: packageConfig.name,
message: severity + ': ' + error.name,
subtitle: filename || '',
icon: path.join(__dirname, 'logo.png')
})
}
}

28
build/vue-loader.conf.js

@ -0,0 +1,28 @@
'use strict'
const utils = require('./utils')
const config = require('../config')
const isProduction = process.env.NODE_ENV === 'production'
// 默认情况下不启用它们,因为它们会导致运行时的额外开销,并增加了 bundle 大小
// (JS source map 不会)
const sourceMapEnabled = isProduction ?
config.build.productionSourceMap :
config.dev.cssSourceMap
// 管理loader配置的文件
module.exports = {
loaders: utils.cssLoaders({
sourceMap: sourceMapEnabled,
// 如果是产品模式 则将css从vue中提取出来
extract: false,
}),
cssSourceMap: sourceMapEnabled,
cacheBusting: config.dev.cacheBusting,
transformToRequire: {
video: ['src', 'poster'],
source: 'src',
img: 'src',
image: 'xlink:href'
}
}

110
build/webpack.base.conf.js

@ -0,0 +1,110 @@
'use strict'
// 通用的webapck基础配置,主要是一些loader的支持
const path = require('path')
const utils = require('./utils')
const config = require('../config')
const vueLoaderConfig = require('./vue-loader.conf')
function resolve(dir) {
return path.join(__dirname, '..', dir);
}
const createLintingRule = () => ({
test: /\.(js|vue)$/,
loader: 'eslint-loader',
enforce: 'pre',
include: [resolve('src'), resolve('test')],
options: {
formatter: require('eslint-friendly-formatter'),
emitWarning: !config.dev.showEslintErrorsInOverlay
}
})
module.exports = {
context: path.resolve(__dirname, '../'),
// 模块的入口文件 - 单页应用
entry: {
app: './src/main.js',
},
// 输出路径 - /dist/app.js
output: {
path: config.build.assetsRoot,
filename: '[name].js',
publicPath: process.env.NODE_ENV === 'production' ?
config.build.assetsPublicPath : config.dev.assetsPublicPath
},
// 模块路径解析
resolve: {
// 默认检查的后缀名
extensions: ['.js', '.vue', '.json'],
// 路径标识,用于require解析路径 默认@为src
alias: {
'vue$': 'vue/dist/vue.esm.js', // $为严格匹配
'@': resolve('src'),
'~': resolve('static')
}
},
// 加载的loader
module: {
rules: [
...(config.dev.useEslint ? [createLintingRule()] : []),
{
test: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig // 分离vue中的css代码,
// 编译为css代码块,
// 提取为独立的文件,
},
{
test: /\.js$/,
loader: 'babel-loader',
include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('media/[name].[hash:7].[ext]')
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
}
]
},
node: {
// prevent webpack from injecting useless setImmediate polyfill because Vue
// source contains it (although only uses it if it's native).
setImmediate: false,
// prevent webpack from injecting mocks to Node native modules
// that does not make sense for the client
dgram: 'empty',
fs: 'empty',
net: 'empty',
tls: 'empty',
child_process: 'empty'
}
}

166
build/webpack.dev.conf.js

@ -0,0 +1,166 @@
'use strict'
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const path = require('path')
const baseWebpackConfig = require('./webpack.base.conf')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const portfinder = require('portfinder')
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
const HOST = process.env.HOST
const PORT = process.env.PORT && Number(process.env.PORT)
const devWebpackConfig = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({
sourceMap: config.dev.cssSourceMap,
usePostCSS: true
})
},
// cheap-module-eval-source-map is faster for development
devtool: config.dev.devtool,
// these devServer options should be customized in /config/index.js
devServer: {
clientLogLevel: 'warning',
// 404 页面配置
historyApiFallback: {
rewrites: [{
from: /.*/,
to: path.posix.join(config.dev.assetsPublicPath, 'index.html')
},],
},
hot: true,
contentBase: false, // since we use CopyWebpackPlugin.
compress: true,
host: HOST || config.dev.host,
port: PORT || config.dev.port,
open: config.dev.autoOpenBrowser,
overlay: config.dev.errorOverlay ? {
warnings: false,
errors: true
} : false,
publicPath: config.dev.assetsPublicPath,
proxy: config.dev.proxyTable,
quiet: true, // necessary for FriendlyErrorsPlugin
watchOptions: {
poll: config.dev.poll,
}
},
plugins: [
// new BundleAnalyzerPlugin(),
// 自动加载模块,而不必到处 import 或 require
new webpack.ProvidePlugin({
// marked: "marked",
// $: 'jquery',
// jQuery: 'jquery',
_: 'lodash',
Popper: ['popper.js', 'default'],
utils: [path.join(__dirname, '..', 'src/utils'), 'default'],
}),
// 允许创建一个在编译时可以配置的全局常量
new webpack.DefinePlugin({
'process.env': require('../config/dev.env')
}),
// 模块热更新
new webpack.HotModuleReplacementPlugin(),
new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
new webpack.NoEmitOnErrorsPlugin(),
// https://github.com/ampedandwired/html-webpack-plugin
// 自动更新html中的入口文件
new HtmlWebpackPlugin({
filename: 'index.html', // html生成的文件 `/index.html`
template: 'src/index.html', // webpack模板 默认为src/index.ejs
inject: true, // 开启自动注入模块入口文件
favicon: path.resolve(__dirname, '../src/favicon.ico'),
title: 'Crypto | Exchange | Market',
isProduct : process.env.NODE_ENV == 'production' ? true : false,
}),
// split vendor js into its own file
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks(module) {
// any required modules inside node_modules are extracted to vendor
return (
module.resource &&
/\.js$/.test(module.resource) &&
module.resource.indexOf(
path.join(__dirname, '../node_modules')
) === 0
)
}
}),
// extract webpack runtime and module manifest to its own file in order to
// prevent vendor hash from being updated whenever app bundle is updated
new webpack.optimize.CommonsChunkPlugin({
name: 'manifest',
minChunks: Infinity
}),
// This instance extracts shared chunks from code splitted chunks and bundles them
// in a separate chunk, similar to the vendor chunk
// see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
new webpack.optimize.CommonsChunkPlugin({
name: 'app',
async: 'vendor-async',
children: true,
minChunks: 3
}),
// 将单个文件或整个目录复制到构建目录。
// copy custom static assets,复制自定义静态资源
new CopyWebpackPlugin([{
from: path.resolve(__dirname, '../static'),
to: config.dev.assetsSubDirectory,
ignore: ['.*']
}]),
new CopyWebpackPlugin([{
from: path.resolve(__dirname, '../static/newProduct'),
to: config.dev.newProductRoot,
ignore: ['.*']
}]),
],
})
module.exports = new Promise((resolve, reject) => {
// 基础端口号,以此往下找
portfinder.basePort = process.env.PORT || config.dev.port
portfinder.getPort((err, port) => {
if (err) {
reject(err)
} else {
// publish the new Port, necessary for e2e tests
process.env.PORT = port
// add port to devServer config
devWebpackConfig.devServer.port = port
// Add FriendlyErrorsPlugin
devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
compilationSuccessInfo: {
messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
},
onErrors: config.dev.notifyOnErrors ?
utils.createNotifierCallback() : undefined
}))
resolve(devWebpackConfig)
}
})
})

177
build/webpack.prod.conf.js

@ -0,0 +1,177 @@
'use strict'
// 打包构建dist时 使用配置文件
const path = require('path')
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
const env = require('../config/prod.env')
const webpackConfig = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({
sourceMap: config.build.productionSourceMap,
extract: true,
usePostCSS: true
})
},
devtool: config.build.productionSourceMap ? config.build.devtool : false,
output: {
path: config.build.assetsRoot,
filename: utils.assetsPath('js/[name].[chunkhash].js'),
chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
},
plugins: [
new BundleAnalyzerPlugin(),
// 自动加载模块,而不必到处 import 或 require
new webpack.ProvidePlugin({
// marked: "marked",
// $: 'jquery',
// jQuery: 'jquery',
_: 'lodash',
Popper: ['popper.js', 'default'],
utils: [path.join(__dirname, '..', 'src/utils'), 'default'],
}),
// http://vuejs.github.io/vue-loader/en/workflow/production.html
new webpack.DefinePlugin({
'process.env': env
}),
new UglifyJsPlugin({
uglifyOptions: {
compress: {
warnings: false
}
},
sourceMap: config.build.productionSourceMap,
parallel: true
}),
// extract css into its own file
new ExtractTextPlugin({
filename: utils.assetsPath('css/[name].[contenthash].css'),
// Setting the following option to `false` will not extract CSS from codesplit chunks.
// Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
// It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`,
// increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
allChunks: true,
}),
// Compress extracted CSS. We are using this plugin so that possible
// duplicated CSS from different components can be deduped.
new OptimizeCSSPlugin({
cssProcessorOptions: config.build.productionSourceMap ? {
safe: true,
map: {
inline: false
}
} : {
safe: true
}
}),
// generate dist index.html with correct asset hash for caching.
// you can customize output by editing /index.html
// see https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: config.build.index,
template: 'src/index.html',
inject: true,
favicon: path.resolve(__dirname, '../src/favicon.ico'),
title: 'Crypto',
minify: {
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true
// more options:
// https://github.com/kangax/html-minifier#options-quick-reference
},
// necessary to consistently work with multiple chunks via CommonsChunkPlugin
chunksSortMode: 'dependency',
isProduct : process.env.NODE_ENV == 'production' ? true : false,
}),
// keep module.id stable when vendor modules does not change
new webpack.HashedModuleIdsPlugin(),
// enable scope hoisting
new webpack.optimize.ModuleConcatenationPlugin(),
// split vendor js into its own file
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks(module) {
// any required modules inside node_modules are extracted to vendor
return (
module.resource &&
/\.js$/.test(module.resource) &&
module.resource.indexOf(
path.join(__dirname, '../node_modules')
) === 0
)
}
}),
// extract webpack runtime and module manifest to its own file in order to
// prevent vendor hash from being updated whenever app bundle is updated
new webpack.optimize.CommonsChunkPlugin({
name: 'manifest',
minChunks: Infinity
}),
// This instance extracts shared chunks from code splitted chunks and bundles them
// in a separate chunk, similar to the vendor chunk
// see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
new webpack.optimize.CommonsChunkPlugin({
name: 'app',
async: 'vendor-async',
children: true,
minChunks: 3
}),
// copy custom static assets
new CopyWebpackPlugin([{
from: path.resolve(__dirname, '../static'),
to: config.build.assetsSubDirectory,
ignore: ['.*']
}]),
new CopyWebpackPlugin([{
from: path.resolve(__dirname, '../static/newProduct'),
to: config.build.newProductRoot,
ignore: ['.*']
}]),
],
})
if (config.build.productionGzip) {
const CompressionWebpackPlugin = require('compression-webpack-plugin')
webpackConfig.plugins.push(
new CompressionWebpackPlugin({
asset: '[path].gz[query]',
algorithm: 'gzip',
test: new RegExp(
'\\.(' +
config.build.productionGzipExtensions.join('|') +
')$'
),
threshold: 10240,
minRatio: 0.8
})
)
}
if (config.build.bundleAnalyzerReport) {
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
webpackConfig.plugins.push(new BundleAnalyzerPlugin())
}
module.exports = webpackConfig

9
config/dev.env.js

@ -0,0 +1,9 @@
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')
// 编译时的全局常量
module.exports = merge(prodEnv, {
NODE_ENV: '"development"'
})

107
config/index.js

@ -0,0 +1,107 @@
'use strict'
// Template version: 1.3.1
// see http://vuejs-templates.github.io/webpack for documentation.
// 用户配置的入口文件 接入脚手架中的配置
const path = require('path');
module.exports = {
// 开发相关配置
dev: {
// 打包资源根地址
assetsPublicPath: '/',
// 静态资源目录
assetsSubDirectory: 'static',
newProductRoot: path.resolve(__dirname, '../dist/newProduct'),
// 代理服务器基础配置 可在 process.env 中修改
proxyTable: {
'/api': {
// target: 'http://qkladmin2.ruanmeng.top/',
// target: 'https://guanli.coin.amatak.net/',
target: 'https://sbga.sbdccoin.com/',
changeOrigin: true,
// pathRewrite: {
// // 请求时 将api替换成实际的apis等
// // '^/api': '/api'
// },
},
// bypass(req) { console.log(req) }
},
// Various Dev Server settings
host: 'localhost', // can be overwritten by process.env.HOST
port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser: false,
errorOverlay: true,
notifyOnErrors: true,
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
// Use Eslint Loader?
// If true, your code will be linted during bundling and
// linting errors and warnings will be shown in the console.
useEslint: true,
// If true, eslint errors and warnings will also be shown in the error overlay
// in the browser.
showEslintErrorsInOverlay: false,
/**
* Source Maps
*/
// https://webpack.js.org/configuration/devtool/#development
devtool: 'cheap-module-eval-source-map',
// If you have problems debugging vue-files in devtools,
// set this to false - it *may* help
// https://vue-loader.vuejs.org/en/options.html#cachebusting
cacheBusting: true,
cssSourceMap: false, // default true
},
// 打包生产环境的配置
build: {
// bundle的生成地址
assetsRoot: path.resolve(__dirname, '../dist'),
newProductRoot: path.resolve(__dirname, '../dist/newProduct'),
// bundle生成的文件
index: path.resolve(__dirname, '../dist/index.html'),
// 打包资源根地址
assetsPublicPath: './',
// 静态资源目录
assetsSubDirectory: 'static',
/**
* Source Maps
*/
productionSourceMap: false,
// https://webpack.js.org/configuration/devtool/#production
devtool: '#source-map',
// Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you.
// Before setting to `true`, make sure to:
// npm install --save-dev compression-webpack-plugin
productionGzip: false,
productionGzipExtensions: ['js', 'css'],
// Run the build command with an extra argument to
// View the bundle analyzer report after build finishes:
// `npm run build --report`
// Set to `true` or `false` to always turn it on or off
bundleAnalyzerReport: process.env.npm_config_report
}
}

4
config/prod.env.js

@ -0,0 +1,4 @@
'use strict'
module.exports = {
NODE_ENV: '"production"'
}

7
icomoon/Read Me.txt

@ -0,0 +1,7 @@
Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures.
To use the generated font in desktop programs, you can install the TTF font. In order to copy the character associated with each icon, refer to the text box at the bottom right corner of each glyph in demo.html. The character inside this text box may be invisible; but it can still be copied. See this guide for more info: https://icomoon.io/#docs/local-fonts
You won't need any of the files located under the *demo-files* directory when including the generated font in your own projects.
You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu → Manage Projects) to retrieve your icon selection.

152
icomoon/demo-files/demo.css

@ -0,0 +1,152 @@
body {
padding: 0;
margin: 0;
font-family: sans-serif;
font-size: 1em;
line-height: 1.5;
color: #555;
background: #fff;
}
h1 {
font-size: 1.5em;
font-weight: normal;
}
small {
font-size: .66666667em;
}
a {
color: #e74c3c;
text-decoration: none;
}
a:hover, a:focus {
box-shadow: 0 1px #e74c3c;
}
.bshadow0, input {
box-shadow: inset 0 -2px #e7e7e7;
}
input:hover {
box-shadow: inset 0 -2px #ccc;
}
input, fieldset {
font-family: sans-serif;
font-size: 1em;
margin: 0;
padding: 0;
border: 0;
}
input {
color: inherit;
line-height: 1.5;
height: 1.5em;
padding: .25em 0;
}
input:focus {
outline: none;
box-shadow: inset 0 -2px #449fdb;
}
.glyph {
font-size: 16px;
width: 15em;
padding-bottom: 1em;
margin-right: 4em;
margin-bottom: 1em;
float: left;
overflow: hidden;
}
.liga {
width: 80%;
width: calc(100% - 2.5em);
}
.talign-right {
text-align: right;
}
.talign-center {
text-align: center;
}
.bgc1 {
background: #f1f1f1;
}
.fgc1 {
color: #999;
}
.fgc0 {
color: #000;
}
p {
margin-top: 1em;
margin-bottom: 1em;
}
.mvm {
margin-top: .75em;
margin-bottom: .75em;
}
.mtn {
margin-top: 0;
}
.mtl, .mal {
margin-top: 1.5em;
}
.mbl, .mal {
margin-bottom: 1.5em;
}
.mal, .mhl {
margin-left: 1.5em;
margin-right: 1.5em;
}
.mhmm {
margin-left: 1em;
margin-right: 1em;
}
.mls {
margin-left: .25em;
}
.ptl {
padding-top: 1.5em;
}
.pbs, .pvs {
padding-bottom: .25em;
}
.pvs, .pts {
padding-top: .25em;
}
.unit {
float: left;
}
.unitRight {
float: right;
}
.size1of2 {
width: 50%;
}
.size1of1 {
width: 100%;
}
.clearfix:before, .clearfix:after {
content: " ";
display: table;
}
.clearfix:after {
clear: both;
}
.hidden-true {
display: none;
}
.textbox0 {
width: 3em;
background: #f1f1f1;
padding: .25em .5em;
line-height: 1.5;
height: 1.5em;
}
#testDrive {
display: block;
padding-top: 24px;
line-height: 1.5;
}
.fs0 {
font-size: 16px;
}
.fs1 {
font-size: 16px;
}

30
icomoon/demo-files/demo.js

@ -0,0 +1,30 @@
if (!('boxShadow' in document.body.style)) {
document.body.setAttribute('class', 'noBoxShadow');
}
document.body.addEventListener("click", function(e) {
var target = e.target;
if (target.tagName === "INPUT" &&
target.getAttribute('class').indexOf('liga') === -1) {
target.select();
}
});
(function() {
var fontSize = document.getElementById('fontSize'),
testDrive = document.getElementById('testDrive'),
testText = document.getElementById('testText');
function updateTest() {
testDrive.innerHTML = testText.value || String.fromCharCode(160);
if (window.icomoonLiga) {
window.icomoonLiga(testDrive);
}
}
function updateSize() {
testDrive.style.fontSize = fontSize.value + 'px';
}
fontSize.addEventListener('change', updateSize, false);
testText.addEventListener('input', updateTest, false);
testText.addEventListener('change', updateTest, false);
updateSize();
}());

472
icomoon/demo.html

@ -0,0 +1,472 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>IcoMoon Demo</title>
<meta name="description" content="An Icon Font Generated By IcoMoon.io">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="demo-files/demo.css">
<link rel="stylesheet" href="style.css"></head>
<body>
<div class="bgc1 clearfix">
<h1 class="mhmm mvm"><span class="fgc1">Font Name:</span> icomoon <small class="fgc1">(Glyphs:&nbsp;31)</small></h1>
</div>
<div class="clearfix mhl ptl">
<h1 class="mvm mtn fgc1">Grid Size: Unknown</h1>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-Addmore"></span>
<span class="mls"> icon-Icon-Addmore</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e900" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe900;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-Address"></span>
<span class="mls"> icon-Icon-Address</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e901" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe901;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-Android"></span>
<span class="mls"> icon-Icon-Android</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e902" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe902;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-App"></span>
<span class="mls"> icon-Icon-App</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e903" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe903;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-apple"></span>
<span class="mls"> icon-Icon-apple</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e904" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe904;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-Close"></span>
<span class="mls"> icon-Icon-Close</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e905" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe905;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-Commission"></span>
<span class="mls"> icon-Icon-Commission</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e906" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe906;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-Copy"></span>
<span class="mls"> icon-Icon-Copy</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e907" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe907;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-Delete"></span>
<span class="mls"> icon-Icon-Delete</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e908" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe908;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-EmailAddress"><span class="path1"></span><span class="path2"></span></span>
<span class="mls"> icon-Icon-EmailAddress</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e909" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe909;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-Export"></span>
<span class="mls"> icon-Icon-Export</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e90b" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe90b;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-eye"><span class="path1"></span><span class="path2"></span></span>
<span class="mls"> icon-Icon-eye</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e90c" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe90c;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-eyec"><span class="path1"></span><span class="path2"></span></span>
<span class="mls"> icon-Icon-eyec</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e90e" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe90e;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-History"></span>
<span class="mls"> icon-Icon-History</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e910" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe910;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-Increase"></span>
<span class="mls"> icon-Icon-Increase</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e911" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe911;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-leftarrow-small"></span>
<span class="mls"> icon-Icon-leftarrow-small</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e912" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe912;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-Playstore"></span>
<span class="mls"> icon-Icon-Playstore</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e913" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe913;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-Reset"></span>
<span class="mls"> icon-Icon-Reset</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e914" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe914;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-rightarrow-small"></span>
<span class="mls"> icon-Icon-rightarrow-small</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e915" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe915;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-select20"></span>
<span class="mls"> icon-Icon-select20</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e916" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe916;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-select100"></span>
<span class="mls"> icon-Icon-select100</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e917" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe917;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-social-fb"></span>
<span class="mls"> icon-Icon-social-fb</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e918" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe918;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-social-ins"></span>
<span class="mls"> icon-Icon-social-ins</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e919" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe919;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-social-linkedin"></span>
<span class="mls"> icon-Icon-social-linkedin</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e91a" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe91a;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-social-medium"></span>
<span class="mls"> icon-Icon-social-medium</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e91b" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe91b;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-social-twitter"></span>
<span class="mls"> icon-Icon-social-twitter</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e91c" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe91c;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-social-youtube"></span>
<span class="mls"> icon-Icon-social-youtube</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e91d" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe91d;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-Triangle"></span>
<span class="mls"> icon-Icon-Triangle</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e91e" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe91e;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-TriangleTop"></span>
<span class="mls"> icon-Icon-TriangleTop</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e91f" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe91f;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-Uploadimage"></span>
<span class="mls"> icon-Icon-Uploadimage</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e920" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe920;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-Icon-User"></span>
<span class="mls"> icon-Icon-User</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e921" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe921;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
</div>
<!--[if gt IE 8]><!-->
<div class="mhl clearfix mbl">
<h1>Font Test Drive</h1>
<label>
Font Size: <input id="fontSize" type="number" class="textbox0 mbm"
min="8" value="48" />
px
</label>
<input id="testText" type="text" class="phl size1of1 mvl"
placeholder="Type some text to test..." value=""/>
<div id="testDrive" class="icon-" style="font-family: icomoon">&nbsp;
</div>
</div>
<!--<![endif]-->
<div class="bgc1 clearfix">
<p class="mhl">Generated by <a href="https://icomoon.io/app">IcoMoon</a></p>
</div>
<script src="demo-files/demo.js"></script>
</body>
</html>

BIN
icomoon/fonts/icomoon.eot

Binary file not shown.

44
icomoon/fonts/icomoon.svg

@ -0,0 +1,44 @@
<?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 xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="icomoon" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe900;" glyph-name="Icon-Addmore" d="M512 960c282.325 0 512-229.675 512-512s-229.675-512-512-512c-282.325 0-512 229.675-512 512s229.675 512 512 512zM512 874.667c-235.264 0-426.667-191.403-426.667-426.667s191.403-426.667 426.667-426.667c235.264 0 426.667 191.403 426.667 426.667s-191.403 426.667-426.667 426.667zM512 688c24.301 0 44.383-18.058 47.562-41.487l0.438-6.513v-144h144c26.51 0 48-21.49 48-48 0-24.301-18.058-44.383-41.487-47.562l-6.513-0.438h-144v-144c0-26.51-21.49-48-48-48-24.301 0-44.383 18.058-47.562 41.487l-0.438 6.513v144h-144c-26.51 0-48 21.49-48 48 0 24.301 18.058 44.383 41.487 47.562l6.513 0.438h144v144c0 26.51 21.49 48 48 48z" />
<glyph unicode="&#xe901;" glyph-name="Icon-Address" d="M507.799 589.016l17.857-0.696c31.037-2.354 54.345-28.881 51.977-59.135-2.36-30.302-29.494-53.108-60.491-50.809-16.695 1.224-33.659-0.5-50.366-5.043-0.189-0.051-0.387-0.102-0.58-0.154-35.149-9.311-66.194-30.152-87.569-58.765-3.774-4.933-6.907-9.574-9.904-14.684-21.371-36.42-26.937-78.866-15.672-119.514 11.269-40.652 37.997-74.544 75.261-95.436v0l209.623-117.526c37.232-20.865 80.356-26.345 121.49-15.448 0.411 0.106 0.801 0.209 1.188 0.315 41.384 10.96 75.881 36.998 97.236 73.386 21.367 36.416 26.929 78.862 15.664 119.506-11.269 40.656-37.997 74.552-75.261 95.444-26.969 15.117-36.329 48.864-20.855 75.225 15.47 26.365 49.991 35.51 76.964 20.389 63.359-35.514 108.799-93.129 127.954-162.229 19.16-69.095 9.695-141.253-26.643-203.179-36.362-61.962-95.061-106.298-165.351-124.919-0.528-0.138-1.059-0.28-1.587-0.417-70.053-18.562-143.509-9.228-206.904 26.31v0l-209.623 117.526c-130.999 73.437-176.451 237.367-101.312 365.408 5.224 8.905 10.79 17.204 17.017 25.369 36.378 48.714 89.426 84.232 149.14 99.775 29.023 7.822 58.844 10.795 88.604 8.606zM235.194 950.678c70.049 18.554 143.509 9.224 206.896-26.318v0l209.627-117.522c63.359-35.518 108.799-93.133 127.958-162.229 19.152-69.091 9.695-141.249-26.651-203.179-5.264-8.98-10.834-17.271-17.017-25.333-36.172-48.447-88.798-83.795-148.205-99.531-0.834-0.213-1.671-0.445-2.509-0.669-28.512-7.551-57.809-10.303-87.033-8.157-30.993 2.287-54.313 28.802-51.985 59.107 2.352 30.294 29.494 53.068 60.479 50.793 16.715-1.236 33.707 0.484 50.39 5.027 35.214 9.307 66.662 30.148 88.149 58.915 3.77 4.921 6.899 9.563 9.908 14.692 21.379 36.427 26.945 78.874 15.676 119.518s-38.001 74.536-75.269 95.429v0l-209.623 117.522c-37.405 20.971-80.871 26.247-122.082 15.298-0.193-0.051-0.391-0.102-0.588-0.154-41.388-10.964-75.885-37.006-97.24-73.394-44.195-75.319-17.464-171.748 59.593-214.95 26.973-15.113 36.329-48.864 20.859-75.229-15.466-26.361-49.999-35.51-76.964-20.389-130.999 73.445-176.447 237.367-101.312 365.412 36.362 61.962 95.057 106.302 165.343 124.915 0.532 0.142 1.063 0.283 1.599 0.425z" />
<glyph unicode="&#xe902;" glyph-name="Icon-Android" d="M801.237 616.625v-409.896c0-18.867-6.688-34.859-20.108-47.99-13.492-13.088-29.639-19.675-48.572-19.675v0h-47.266v-139.72c0-17.592-6.282-32.579-18.918-44.916-12.593-12.309-27.942-18.428-45.96-18.428-18.091 0-33.44 6.119-46.018 18.428-12.636 12.337-18.933 27.324-18.933 44.916v0 139.72h-86.988v-139.72c0-17.592-6.296-32.579-18.874-44.916-12.636-12.309-27.942-18.428-46.018-18.428-17.627 0-32.758 6.119-45.395 18.428-12.578 12.337-18.918 27.324-18.918 44.916v0l-0.624 139.72h-46.642c-19.324 0-35.703 6.587-49.138 19.675-13.492 13.131-20.166 29.123-20.166 48.046v0 409.84h578.537zM133.16 628.294c17.67 0 32.802-6.147 45.395-18.428 12.636-12.337 18.918-27.111 18.918-44.321v0-264.638c0-17.663-6.224-32.593-18.584-44.93-12.404-12.281-27.652-18.428-45.728-18.428-18.033 0-33.382 6.147-45.96 18.428-12.636 12.337-18.933 27.267-18.933 44.93v0 264.638c0 17.21 6.296 31.984 18.933 44.321 12.578 12.281 27.927 18.428 45.96 18.428zM890.782 628.294c18.077 0 33.44-6.034 46.018-18.145 12.636-12.125 18.933-27.012 18.933-44.604v0-264.638c0-17.663-6.296-32.593-18.933-44.93-12.578-12.281-27.942-18.428-46.018-18.428-17.627 0-32.758 6.147-45.337 18.428-12.636 12.337-18.933 27.267-18.933 44.93v0 264.638c0 17.592 6.296 32.48 18.933 44.604 12.578 12.111 27.71 18.145 45.337 18.145zM684.055 955.073c2.945 4.927 7.138 6.147 12.636 3.711 5.034-2.875 6.064-6.969 3.105-12.337v0l-44.713-80.625c44.945-22.564 80.88-54.052 107.734-94.45 26.926-40.44 40.346-84.591 40.346-132.623v0h-582.962c0 48.032 13.42 92.183 40.346 132.623 26.854 40.398 63.021 71.886 108.416 94.45v0l-44.771 80.625c-2.945 5.368-1.93 9.405 3.105 12.337 5.498 2.436 9.691 1.216 12.651-3.711v0l45.38-81.22c39.896 17.21 82.128 25.836 126.667 25.836s86.77-8.626 126.725-25.836v0zM645.001 789.531c-6.746 0-12.52-2.38-17.337-7.082-4.875-4.703-7.254-10.354-7.254-16.941 0-6.572 2.379-12.167 7.254-16.87 4.817-4.759 10.591-7.139 17.337-7.139 6.688 0 12.361 2.38 17.003 7.139 4.584 4.703 6.92 10.34 6.92 16.87 0 6.587-2.336 12.238-6.92 16.941-4.642 4.703-10.315 7.082-17.003 7.082zM378.988 789.531c-6.688 0-12.419-2.38-17.003-7.082-4.642-4.703-6.906-10.354-6.906-16.941 0-6.572 2.263-12.167 6.906-16.87 4.584-4.759 10.257-7.139 17.003-7.139s12.52 2.38 17.337 7.139c4.817 4.703 7.254 10.34 7.254 16.87 0 6.587-2.437 12.238-7.254 16.941s-10.591 7.082-17.337 7.082z" />
<glyph unicode="&#xe903;" glyph-name="Icon-App" d="M791.537 960c63.032 0 114.309-49.344 114.309-110v0-804c0-60.656-51.277-110-114.309-110v0h-559.075c-63.032 0-114.309 49.344-114.309 110v0 804c0 60.656 51.277 110 114.309 110v0zM843.496 132.8h-662.992v-86.8c0-27.573 23.305-50 51.959-50v0h559.074c28.653 0 51.959 22.427 51.959 50v0 86.8zM512 106.729c24.294 0 43.986-18.949 43.986-42.328 0-21.82-17.154-39.784-39.193-42.082l-4.793-0.248c-24.294 0-43.986 18.952-43.986 42.331s19.692 42.328 43.986 42.328zM791.537 900h-559.074c-28.653 0-51.959-22.427-51.959-50v0-657.2h662.992v657.2c0 27.573-23.305 50-51.959 50v0zM354.722 625.595c5.631 0 10.419-3.96 11.265-9.317l43.545-276.229c1.025-6.509-4.209-12.371-11.051-12.371h-21.191c-5.6 0-10.336 3.989-11.079 9.331l-6.094 43.821h-49.955l-5.492-43.688c-0.682-5.403-5.442-9.464-11.098-9.464h-22.59c-6.8 0-12.027 5.797-11.065 12.275l40.935 276.227c0.801 5.403 5.609 9.416 11.278 9.416h42.592zM525.724 625.596c24.040 0 40.483-7.027 49.337-21.075 8.857-14.051 13.515-35.013 13.986-62.885v-6.261c0-29.568-4.37-51.995-13.102-67.285-8.737-15.293-24.951-22.939-48.639-22.939h-25.508v-106.344c0-6.144-5.179-11.131-11.567-11.131h-24.006c-6.39 0-11.569 4.987-11.569 11.131v275.005c0 6.509 5.484 11.784 12.246 11.784h58.823zM702.58 625.596c24.040 0 40.483-7.027 49.337-21.075 8.857-14.051 13.515-35.013 13.986-62.885v-6.261c0-29.568-4.37-51.995-13.102-67.285-8.737-15.293-24.951-22.939-48.639-22.939h-25.505v-105.453c0-6.637-5.595-12.021-12.492-12.021h-22.158c-6.9 0-12.492 5.384-12.492 12.021v274.115c0 6.509 5.481 11.784 12.243 11.784h58.823zM334.438 566.859h-0.704l-18.999-149.635h40.458l-20.756 149.635zM518.336 590.727h-16.538v-108.165h16.186c9.968 0 16.447 3.696 19.434 11.088 2.996 7.389 4.489 21.467 4.489 42.232v5.755c-0.119 17.605-1.732 30.187-4.838 37.749-3.109 7.557-9.353 11.341-18.733 11.341zM695.192 590.727h-16.535v-108.165h16.183c9.968 0 16.447 3.696 19.437 11.088 2.993 7.389 4.486 21.467 4.486 42.232v5.755c-0.119 17.605-1.732 30.187-4.838 37.749-3.109 7.557-9.353 11.341-18.733 11.341zM597.212 840c17.223 0 31.175-13.427 31.175-30s-13.953-30-31.175-30v0h-170.424c-17.223 0-31.175 13.427-31.175 30s13.953 30 31.175 30v0z" />
<glyph unicode="&#xe904;" glyph-name="Icon-apple" d="M730.653 710.557c76.59-11.692 130.768-46.409 164.299-99.773-64.59-41.912-115.827-105.169-107.062-213.156 7.765-98.094 63.884-155.535 133.71-189.232v-2.099c-20.236-62.058-48.707-115.002-83.649-164.409-31.942-44.73-71.002-104.929-140.769-104.929-60.531 0-100.473 39.573-162.299 40.473-65.296 1.199-101.356-33.038-161.122-41.432h-20.412c-43.884 6.356-79.296 41.912-105.003 73.75-76.061 94.436-134.886 216.214-145.945 372.228v45.629c4.588 111.705 57.884 202.363 128.474 246.374 37.413 23.444 88.708 43.351 145.887 34.477 24.354-3.777 49.413-12.412 71.473-20.866 20.706-8.214 46.648-22.485 71.237-21.765 16.765 0.48 33.295 9.354 50.178 15.649 49.296 18.048 97.591 38.914 161.005 29.080zM712.488 960c5.765-72.131-21.354-126.215-54.237-165.368-32.177-38.614-76.473-76.328-147.71-70.752-4.824 71.232 22.295 121.358 55.119 160.212 30.354 36.335 86.179 68.654 139.71 75.909h7.118z" />
<glyph unicode="&#xe905;" glyph-name="Icon-Close" d="M995.386 931.409c-38.144 38.121-99.979 38.121-138.124 0l-345.277-345.31-345.277 345.31c-38.112 38.121-99.979 38.121-138.099 0-38.144-38.145-38.144-99.982 0-138.127l345.277-345.286-345.277-345.286c-38.144-38.145-38.144-99.982 0-138.127 19.044-19.044 44.069-28.583 69.054-28.583s49.969 9.506 69.046 28.583l345.277 345.31 345.277-345.31c19.076-19.044 44.061-28.583 69.046-28.583s50.010 9.506 69.078 28.583c38.12 38.145 38.12 99.982 0 138.127l-345.269 345.286 345.269 345.286c38.152 38.145 38.152 99.982 0 138.127z" />
<glyph unicode="&#xe906;" glyph-name="Icon-Commission" d="M512 960c282.325 0 512-229.675 512-512s-229.675-512-512-512c-282.325 0-512 229.675-512 512s229.675 512 512 512zM512 874.667c-235.264 0-426.667-191.403-426.667-426.667s191.403-426.667 426.667-426.667c235.264 0 426.667 191.403 426.667 426.667s-191.403 426.667-426.667 426.667zM532.832 768c23.219 0 42.043-18.824 42.043-42.043v0-28.115c61.645-18.187 106.781-75.269 106.781-142.739 0-23.219-18.824-42.043-42.043-42.043s-42.043 18.824-42.043 42.043c0 57.291-69.832 86.459-110.509 45.781-29.989-30.043-18.344-80.501 20.416-96.552v0l82.885-34.333c94.075-38.968 120.24-161.949 47.157-234.24-17.699-17.509-39.189-30.032-62.645-36.864v0-28.208c0-23.219-18.824-42.043-42.043-42.043s-42.053 18.824-42.053 42.043v0 28.144c-63.352 18.459-106.779 77.021-106.779 142.709 0 23.219 18.832 42.053 42.051 42.053s42.043-18.835 42.043-42.053c0-58.781 72.373-86.709 112.165-44.061 27.731 29.76 16.261 78.957-22.072 94.832v0l-82.885 34.333c-43.792 18.136-75.949 56.688-86 103.115-16.333 75.437 29.875 147.176 101.488 168.157v0 28.040c0 23.219 18.824 42.043 42.043 42.043z" />
<glyph unicode="&#xe907;" glyph-name="Icon-Copy" d="M731.427 777.144c60.594 0 109.714-49.121 109.714-109.714v0-621.715c0-60.594-49.121-109.714-109.714-109.714v0h-621.713c-60.594 0-109.714 49.121-109.714 109.714v0 621.715c0 60.594 49.121 109.714 109.714 109.714v0zM731.427 703.999h-621.713c-20.199 0-36.572-16.374-36.572-36.57v0-621.715c0-20.196 16.374-36.57 36.572-36.57v0h621.713c20.199 0 36.572 16.374 36.572 36.57v0 621.715c0 20.196-16.374 36.57-36.572 36.57v0zM914.286 960c60.594 0 109.714-49.121 109.714-109.714v0-658.285c0-60.594-49.121-109.714-109.714-109.714-20.199 0-36.572 16.374-36.572 36.572 0 20.196 16.374 36.57 36.572 36.57l5.932 0.479c17.376 2.834 30.638 17.915 30.638 36.093v0 658.285c0 20.199-16.374 36.572-36.57 36.572v0h-658.285c-20.199 0-36.572-16.374-36.572-36.572l-0.479-5.932c-2.834-17.377-17.915-30.64-36.093-30.64-20.196 0-36.57 16.374-36.57 36.572 0 60.594 49.121 109.714 109.714 109.714v0z" />
<glyph unicode="&#xe908;" glyph-name="Icon-Delete" d="M512 960c282.325 0 512-229.675 512-512s-229.675-512-512-512c-282.325 0-512 229.675-512 512s229.675 512 512 512zM512 874.667c-235.264 0-426.667-191.403-426.667-426.667s191.403-426.667 426.667-426.667c235.264 0 426.667 191.403 426.667 426.667s-191.403 426.667-426.667 426.667zM270.304 689.705c19.060 19.060 49.994 19.060 69.050 0v0l172.639-172.655 172.639 172.655c19.072 19.060 49.99 19.060 69.062 0 19.076-19.073 19.076-49.991 0-69.064v0l-172.634-172.643 172.634-172.643c19.060-19.073 19.060-49.991 0-69.064-9.534-9.538-22.047-14.291-34.539-14.291s-24.985 4.769-34.523 14.291v0l-172.639 172.655-172.639-172.655c-9.538-9.538-22.030-14.291-34.523-14.291s-25.005 4.769-34.527 14.291c-19.072 19.073-19.072 49.991 0 69.064v0l172.639 172.643-172.639 172.643c-19.072 19.073-19.072 49.991 0 69.064z" />
<glyph unicode="&#xe909;" d="M0 960h1024v-1024h-1024v1024z" />
<glyph unicode="&#xe90a;" d="M768.933 671.256c-15.428 15.431-37.56 19.859-57.753 11.551l-405.18-166.727c-20.683-8.548-33.599-28.453-32.907-50.652 0.461-22.259 14.474-41.368 35.714-48.682l138.479-47.321c8.103-2.843 16.94-1.191 23.67 4.439l175.045 148.494c10.235 8.623 11.517 24.007 2.858 34.299-8.628 10.239-24.014 11.521-34.313 2.844l-164.522-139.586-125.445 42.885c-0.799 0.271-2.92 0.991-3.073 4.167-0.145 2.972 2.017 3.828 2.799 4.14l405.17 166.821c0.691 0.284 2.788 1.144 4.924-0.998 2.146-2.147 1.288-4.236 1.006-4.921l-166.72-405.167c-0.565-1.365-1.515-2.759-4.288-2.803-2.686 0.169-3.517 1.56-4.024 3.080l-37.767 110.628c-4.302 12.643-18.161 19.442-30.914 15.137-12.639-4.301-19.434-18.159-15.14-30.918l37.774-110.649c7.277-21.119 26.362-35.212 48.621-35.908h1.728c21.546 0 40.813 12.917 49.092 32.919l166.718 405.175c8.309 20.189 3.884 42.32-11.551 57.754z" />
<glyph unicode="&#xe90b;" glyph-name="Icon-Export" d="M363.636 925.867v-147.036h-218.182v-661.662h654.545v291.793h145.455v-365.311c0-40.655-32.509-73.518-72.727-73.518v0h-800c-40.145 0-72.727 32.863-72.727 73.518v0 808.697c0 40.582 32.582 73.518 72.727 73.518v0h290.909zM712.568 880.609c11.144 5.499 24.595 4.335 34.486-3.041v0l263.758-194.085c8.308-6.081 13.188-15.721 13.188-25.878s-4.88-19.797-13.188-25.878v0l-263.758-194.085c-9.957-7.375-23.408-8.54-34.552-3.041s-18.199 16.691-18.199 28.919v0 97.042h-65.939c-113.152 0-214.831-61.719-265.406-161.026v0l-7.781-15.203c-5.671-11.128-17.21-17.856-29.475-17.856-2.506 0-5.077 0.259-7.583 0.841-14.836 3.429-25.387 16.497-25.387 31.506 0 196.22 162.672 355.822 362.667 355.822v0h38.904v97.042c0 12.227 7.056 23.42 18.265 28.919z" />
<glyph unicode="&#xe90c;" d="M27.69 925.867h955.733v-955.733h-955.733v955.733z" />
<glyph unicode="&#xe90d;" d="M508.422 148.062c-167.327 0-323.48 90.063-407.335 235.137-9.073 15.759-3.725 35.91 12.034 44.984s35.91 3.725 44.984-12.034c72.203-124.731 206.39-202.187 350.318-202.187s278.21 77.456 350.318 202.187c9.073 15.759 29.225 21.107 44.984 12.034s21.107-29.225 12.034-44.984c-83.855-145.074-240.008-235.137-407.335-235.137zM887.296 472.020c-11.365 0-22.444 5.921-28.556 16.427-72.203 124.731-206.39 202.187-350.318 202.187s-278.115-77.456-350.318-202.187c-9.073-15.759-29.225-21.107-44.984-12.034s-21.107 29.225-12.034 44.984c83.855 145.074 240.008 235.137 407.335 235.137s323.48-90.063 407.335-235.137c9.073-15.759 3.725-35.91-12.034-44.984-5.157-2.961-10.888-4.393-16.427-4.393zM508.422 272.125c-98.276 0-178.12 79.939-178.12 178.12s79.939 178.12 178.12 178.12c98.181 0 178.12-79.939 178.12-178.12s-79.843-178.12-178.12-178.12zM508.422 562.56c-61.888 0-112.316-50.332-112.316-112.316s50.332-112.316 112.316-112.316c61.984 0 112.316 50.427 112.316 112.316s-50.427 112.316-112.316 112.316z" />
<glyph unicode="&#xe90e;" d="M20.48 925.867h954.801v-954.801h-954.801v954.801z" />
<glyph unicode="&#xe90f;" d="M497.901 416.374c-171.732 0-343.198 52.143-465.386 156.216-7.028 6.127-11.323 14.803-11.935 24.107s2.509 18.468 8.673 25.463c12.883 14.602 35.144 16.048 49.809 3.236 215.467-185.391 623.14-185.391 837.679 0 14.664 12.812 36.925 11.366 49.809-3.236 12.837-14.587 11.405-36.786-3.262-49.597-122.188-104.047-293.654-156.19-465.386-156.19zM370.382 262.97c-2.089-0.23-4.197-0.23-6.286 0-9.628 1.326-18.3 6.631-23.817 14.587-5.543 7.983-7.426 17.929-5.251 27.371l23.26 136.722c3.395 19.228 21.715 32.078 40.95 28.724 9.243-1.569 17.481-6.752 22.895-14.406s7.559-17.148 5.961-26.386l-23.26-136.696c-2.452-17.149-17.129-29.894-34.452-29.917v0zM893.48 332.511c-9.283 0-18.194 3.766-24.666 10.423l-114.709 115.849c-9.933 8.539-14.205 21.948-11.041 34.659s13.223 22.554 26 25.44c12.759 2.959 26.103-1.451 34.585-11.431l114.735-115.849c13.606-13.579 13.606-35.566 0-49.146-6.737-6.365-15.648-9.919-24.931-9.946h0.027zM102.322 332.51c-8.694 0.425-16.947 3.954-23.26 9.946-6.538 6.506-10.214 15.349-10.214 24.573s3.676 18.067 10.214 24.573l114.709 115.849c8.038 11.438 22.113 16.992 35.796 14.125s24.344-13.604 27.115-27.306c2.684-13.72-3.13-27.71-14.746-35.487l-114.709-115.849c-6.541-6.713-15.532-10.475-24.904-10.424v0zM627.038 262.97c-16.857 0.048-31.263 12.153-34.214 28.75l-23.26 136.722c-4.279 12.809-0.729 26.938 9.097 36.203 9.839 9.291 24.152 12.079 36.76 7.161 12.625-4.96 21.218-16.709 22.093-30.156l23.26-136.722c1.697-9.071-0.318-18.433-5.623-26.018s-13.394-12.731-22.544-14.322c-1.798-0.717-3.664-1.25-5.57-1.591v-0.027z" />
<glyph unicode="&#xe910;" glyph-name="Icon-History" d="M515.233 647.11v-248.887l217.751-126.436 36.631 60.48-178.067 103.29v211.554h-76.315zM108.218 448h-108.218l160.374-167.861c1.087-1.257 1.922-1.885 2.506-1.885s1.331 0.628 2.24 1.885l155.445 167.861h-110.592c0 192.39 159.499 348.444 356.137 348.444s356.137-156.053 356.137-348.444c0-192.39-159.499-348.444-356.137-348.444-98.447 0-187.227 39.324-251.585 102.293l-71.991-70.436c82.676-81.137 196.893-131.413 323.321-131.413 253.114 0 458.146 200.604 458.146 448s-205.033 448-458.146 448c-253.111 0-457.636-200.604-457.636-448z" />
<glyph unicode="&#xe911;" glyph-name="Icon-Increase" d="M512 960c282.325 0 512-229.675 512-512s-229.675-512-512-512c-282.325 0-512 229.675-512 512s229.675 512 512 512zM512 874.667c-235.264 0-426.667-191.403-426.667-426.667s191.403-426.667 426.667-426.667c235.264 0 426.667 191.403 426.667 426.667s-191.403 426.667-426.667 426.667zM512 448c22.805 0 44.224-8.896 60.352-25.003v0l140.096-136.448c16.875-16.427 17.237-43.435 0.789-60.331-8.363-8.576-19.456-12.885-30.571-12.885-10.731 0-21.461 4.011-29.781 12.117v0l-140.501 136.832-141.291-136.832c-16.875-16.448-43.904-16.085-60.331 0.789-16.448 16.875-16.085 43.883 0.789 60.331v0l140.501 136.832c15.723 15.701 37.141 24.597 59.947 24.597zM512 682.667c22.805 0 44.224-8.896 60.352-25.003v0l140.096-136.448c16.875-16.427 17.237-43.435 0.789-60.331-8.363-8.576-19.456-12.885-30.571-12.885-10.731 0-21.461 4.011-29.781 12.117v0l-140.501 136.832-141.291-136.832c-16.875-16.469-43.904-16.085-60.331 0.789-16.448 16.875-16.085 43.883 0.789 60.331v0l140.501 136.832c15.723 15.701 37.141 24.597 59.947 24.597z" />
<glyph unicode="&#xe912;" glyph-name="Icon-leftarrow-small" d="M225.494 397.308l434.499-440.308c27.699-27.999 72.521-27.999 100.135 0 27.563 27.999 27.563 73.419 0 101.401l-384.465 389.608 384.398 389.539c27.631 27.999 27.631 73.402 0 101.401-27.614 28.068-72.436 28.068-100.067 0l-434.499-440.308c-13.824-13.991-20.694-32.286-20.694-50.632s6.87-36.778 20.694-50.701z" />
<glyph unicode="&#xe913;" glyph-name="Icon-Playstore" d="M895.248 524.927c-0.176 0.115-0.387 0.24-0.563 0.344l-145.717 84.853-161.544-162.304 161.637-161.979c0 0 146.011 85.125 146.187 85.219 27.093 16.459 43.28 45.219 43.28 76.939 0 31.728-16.187 60.491-43.28 76.928v0zM545.101 405.279l-459-461.176c12.176-5.645 25.136-8.104 38.072-8.104 15.981 0 31.928 3.821 46.365 12.499l524.928 306.085-150.365 150.696zM43.059 908.386c-5.8-12.272-8.925-25.939-8.925-40v-842.763c0-14.125 3.144-27.584 9-39.603l459.563 461.739-459.637 460.627zM170.539 946.946c-26.384 15.885-57.821 17.304-85.24 4.085l459.741-460.731 150.323 151.021-524.824 305.624z" />
<glyph unicode="&#xe914;" glyph-name="Icon-Reset" d="M705.839 590.926c-6.82-22.963 5.916-47.215 28.459-54.173l140.804-43.442c4.071-1.26 8.238-1.868 12.377-1.868 12.039 0 23.776 5.217 32.011 14.749l93.878 108.606c15.57 18.003 13.831 45.466-3.847 61.319-17.682 15.878-44.697 14.097-60.21-3.903l-43.083-49.865c-69.849 182.791-241.459 303.518-436.891 303.518-258.793 0-469.336-214.37-469.336-477.867s210.543-477.867 469.336-477.867c222.419 0 415.85 160.802 459.946 382.355 4.697 23.531-10.237 46.469-33.348 51.208-23.207 4.793-45.611-10.408-50.276-33.954-36.071-181.209-194.319-312.724-376.322-312.724-211.738 0-384.002 175.395-384.002 390.982s172.264 390.982 384.002 390.982c156.527 0 294.32-94.621 353.67-238.807l-63.961 19.741c-22.485 6.929-46.361-6.010-53.206-28.991z" />
<glyph unicode="&#xe915;" glyph-name="Icon-rightarrow-small" d="M760.106 397.308l-434.499-440.308c-27.699-27.999-72.521-27.999-100.135 0-27.563 27.999-27.563 73.419 0 101.401l384.465 389.608-384.398 389.539c-27.631 27.999-27.631 73.402 0 101.401 27.614 28.068 72.436 28.068 100.067 0l434.499-440.308c13.824-13.991 20.694-32.286 20.694-50.632s-6.87-36.778-20.694-50.701z" />
<glyph unicode="&#xe916;" glyph-name="Icon-select20" d="M512 82.286l512 731.429h-1024z" />
<glyph unicode="&#xe917;" glyph-name="Icon-select100" d="M512 82.286l512 731.429h-1024z" />
<glyph unicode="&#xe918;" glyph-name="Icon-social-fb" d="M638.611 615.234h-57.177c-11.319 0-22.748-11.696-22.748-20.405v-58.298h79.807c-3.206-44.7-9.804-85.577-9.804-85.577h-70.414v-253.328h-104.916v253.354h-51.072v85.251h51.072v69.692c0 12.745-2.578 98.077 107.503 98.077h77.749v-88.766z" />
<glyph unicode="&#xe919;" glyph-name="Icon-social-ins" d="M516.319 228.571c-1.453 0-2.907 0-4.37 0.007-34.399-0.084-66.183 0.79-97.095 2.672-28.339 1.725-54.207 11.517-74.812 28.319-19.881 16.212-33.459 38.133-40.353 65.146-6 23.517-6.318 46.604-6.623 68.933-0.221 16.021-0.448 35.006-0.495 54.311 0.047 19.386 0.274 38.371 0.495 54.392 0.305 22.326 0.623 45.412 6.623 68.933 6.894 27.014 20.471 48.934 40.353 65.146 20.605 16.802 46.473 26.595 74.816 28.319 30.91 1.878 62.702 2.756 97.175 2.672 34.41 0.074 66.184-0.794 97.095-2.672 28.34-1.725 54.208-11.517 74.813-28.319 19.885-16.212 33.459-38.133 40.353-65.146 6-23.517 6.318-46.607 6.622-68.933 0.221-16.021 0.453-35.006 0.495-54.311v-0.081c-0.043-19.305-0.274-38.29-0.495-54.311-0.304-22.326-0.619-45.412-6.622-68.933-6.894-27.014-20.468-48.934-40.353-65.146-20.605-16.802-46.473-26.595-74.813-28.319-29.601-1.802-60.009-2.679-92.809-2.679zM511.949 262.864c33.841-0.081 64.912 0.773 95.097 2.608 21.429 1.302 40.007 8.257 55.228 20.668 14.069 11.475 23.759 27.305 28.798 47.053 4.995 19.576 5.283 40.597 5.561 60.924 0.218 15.914 0.446 34.764 0.492 53.883-0.046 19.122-0.274 37.969-0.492 53.883-0.278 20.327-0.566 41.348-5.561 60.927-5.039 19.748-14.729 35.578-28.798 47.053-15.221 12.408-33.8 19.363-55.228 20.665-30.184 1.839-61.256 2.685-95.016 2.612-33.834 0.081-64.908-0.773-95.092-2.612-21.429-1.302-40.008-8.257-55.229-20.665-14.069-11.475-23.759-27.305-28.798-47.053-4.995-19.58-5.283-40.597-5.561-60.927-0.218-15.927-0.445-34.788-0.492-53.923 0.047-19.051 0.274-37.915 0.492-53.842 0.278-20.327 0.566-41.348 5.561-60.924 5.039-19.748 14.729-35.578 28.798-47.053 15.221-12.408 33.801-19.363 55.229-20.665 30.184-1.839 61.265-2.696 95.012-2.612zM511.133 340.857c-59.076 0-107.143 48.063-107.143 107.143s48.067 107.143 107.143 107.143c59.079 0 107.143-48.063 107.143-107.143s-48.063-107.143-107.143-107.143zM511.133 520.857c-40.172 0-72.857-32.685-72.857-72.857s32.685-72.857 72.857-72.857c40.175 0 72.857 32.685 72.857 72.857s-32.682 72.857-72.857 72.857zM630.275 589.429c-14.199 0-25.714-11.511-25.714-25.714s11.515-25.714 25.714-25.714c14.204 0 25.714 11.511 25.714 25.714s-11.511 25.714-25.714 25.714z" />
<glyph unicode="&#xe91a;" glyph-name="Icon-social-linkedin" d="M390.685 533.119v-278.606h-92.605v278.606h92.605zM618.040 539.658c60.961 0 106.652-39.812 106.652-125.378v-159.767h-92.634v149.055c0 37.439-13.382 62.99-46.905 62.99-25.607 0-40.818-17.206-47.521-33.875-2.436-5.952-3.071-14.225-3.071-22.578v-155.6h-92.648l0.008 1.747c0.106 22.347 1.168 252.005-0.008 276.866h92.648v-39.483c12.31 18.942 34.273 46.022 83.479 46.022zM344.993 667.429c31.694 0 51.18-20.791 51.787-48.127 0-26.752-20.092-48.158-52.394-48.158h-0.615c-31.065 0-51.2 21.406-51.2 48.158 0 27.336 20.727 48.127 52.421 48.127z" />
<glyph unicode="&#xe91b;" glyph-name="Icon-social-medium" d="M314.267 551.278c0.611 6.031-1.692 11.995-6.193 16.054l-45.881 55.27v8.256h142.456l110.112-241.488 96.807 241.488h135.802v-8.256l-39.227-37.61c-3.383-2.581-5.060-6.815-4.359-11.009v-276.345c-0.701-4.194 0.975-8.432 4.359-11.009l38.312-37.61v-8.256h-192.696v8.256l39.685 38.526c3.901 3.901 3.901 5.045 3.901 11.009v223.371l-110.341-280.246h-14.91l-128.465 280.246v-187.823c-1.073-7.896 1.553-15.848 7.112-21.557l51.613-62.61v-8.256h-146.353v8.256l51.616 62.61c5.518 5.72 7.986 13.725 6.65 21.557v217.178z" />
<glyph unicode="&#xe91c;" glyph-name="Icon-social-twitter" d="M710.53 564.941c0.201-4.454 0.302-8.934 0.302-13.439 0-137.286-104.49-295.585-295.585-295.585-58.666 0-113.273 17.196-159.247 46.676 8.13-0.962 16.393-1.455 24.782-1.455 48.672 0 93.464 16.603 129.023 44.475-45.463 0.836-83.828 30.869-97.048 72.146 6.347-1.215 12.854-1.867 19.543-1.867 9.478 0 18.654 1.271 27.377 3.642-47.523 9.553-83.341 51.533-83.341 101.868 0 0.435 0 0.87 0.009 1.307 14.007-7.778 30.024-12.451 47.054-12.995-27.873 18.628-46.207 50.427-46.207 86.473 0 19.040 5.123 36.881 14.065 52.228 51.24-62.852 127.79-104.213 214.13-108.551-1.777 7.611-2.696 15.54-2.696 23.678 0 57.37 46.518 103.888 103.885 103.888 29.883 0 56.885-12.618 75.831-32.804 23.661 4.655 45.898 13.304 65.978 25.21-7.761-24.263-24.231-44.617-45.682-57.477 21.016 2.512 41.035 8.096 59.672 16.36-13.923-20.832-31.54-39.134-51.844-53.777z" />
<glyph unicode="&#xe91d;" glyph-name="Icon-social-youtube" d="M714.32 567.776c-15.836 18.83-45.084 26.51-100.942 26.51h-202.763c-57.131 0-86.876-8.177-102.657-28.223-15.387-19.549-15.387-48.354-15.387-88.217v-75.975c0-77.225 18.255-116.432 118.044-116.432h202.763c48.442 0 75.283 6.774 92.648 23.39 17.806 17.046 25.402 44.87 25.402 93.041v75.975c0 42.042-1.189 71.012-17.108 89.93zM574.323 429.367l-92.073-48.117c-2.062-1.078-4.314-1.61-6.562-1.61-2.543 0-5.088 0.685-7.333 2.046-4.238 2.564-6.824 7.162-6.824 12.111v95.931c0 4.942 2.58 9.533 6.809 12.097 4.231 2.571 9.485 2.745 13.874 0.464l92.073-47.807c4.681-2.433 7.625-7.266 7.632-12.546s-2.925-10.12-7.597-12.568z" />
<glyph unicode="&#xe91e;" glyph-name="Icon-Triangle" d="M512 82.286l512 731.429h-1024z" />
<glyph unicode="&#xe91f;" glyph-name="Icon-TriangleTop" d="M512 813.714l512-731.429h-1024z" />
<glyph unicode="&#xe920;" glyph-name="Icon-Uploadimage" d="M908.935 960c63.449 0 115.065-51.619 115.065-115.065v0-793.867c0-63.449-51.616-115.068-115.065-115.068v0h-793.869c-63.449 0-115.065 51.619-115.065 115.068v0 793.867c0 63.446 51.616 115.065 115.065 115.065v0zM743.052 493.041l-288.001-288.001c-13.31-13.31-34.969-13.315-48.281 0v0l-156.653 156.653-181.762-181.769v-128.856c0-25.764 20.954-46.724 46.711-46.724v0h793.869c25.764 0 46.724 20.959 46.724 46.724v0 229.375l-212.607 212.598zM908.935 891.646h-793.869c-25.757 0-46.711-20.954-46.711-46.711v0-568.241l157.516 157.516c13.31 13.315 34.969 13.315 48.281 0v0l156.653-156.645 288.001 288.003c13.31 13.307 34.969 13.307 48.279 0v0l188.574-188.381v467.748c0 25.757-20.96 46.711-46.724 46.711v0zM320.827 801.865c75.575 0 137.058-61.483 137.058-137.058s-61.483-137.058-137.058-137.058c-75.572 0-137.055 61.483-137.055 137.058s61.483 137.058 137.055 137.058zM320.827 733.511c-37.882 0-68.704-30.821-68.704-68.703 0-37.89 30.821-68.714 68.704-68.714 37.89 0 68.717 30.824 68.717 68.714 0 37.882-30.826 68.703-68.717 68.703z" />
<glyph unicode="&#xe921;" glyph-name="Icon-User" d="M824.143 169.25c-25.362 85.18-84.346 155.965-161.32 196.564 50.075 42.607 81.923 105.905 81.923 176.554 0 127.923-104.383 232.025-232.729 232.025-128.311 0-232.729-104.102-232.729-232.025 0-70.649 31.813-133.947 81.923-176.554-77.007-40.599-135.958-111.384-161.354-196.564-66.357 74.46-106.773 172.743-106.773 280.281 0 230.289 187.944 417.665 418.932 417.665s418.932-187.376 418.932-417.665c0-107.539-40.415-205.821-106.807-280.281zM372.373 542.369c0 76.74 62.671 139.222 139.644 139.222s139.61-62.481 139.61-139.222c0-76.774-62.637-139.222-139.61-139.222s-139.644 62.447-139.644 139.222zM512.017 28.803c-85.541 0-165.177 25.898-231.568 70.275 11.879 118.463 111.244 211.266 231.568 211.266s219.655-92.803 231.568-211.266c-66.392-44.377-146.027-70.275-231.568-70.275zM512.017 960c-282.326 0-512.017-228.996-512.017-510.469 0-164.813 77.861-311.726 198.594-405.788 3.755-4.050 8.226-7.419 13.21-9.937 84.415-61.494 188.149-97.806 300.213-97.806s215.798 36.311 300.179 97.806c5.018 2.518 9.489 5.887 13.244 9.937 120.734 94.062 198.56 240.975 198.56 405.788 0 281.472-229.657 510.469-511.983 510.469z" />
</font></defs></svg>

After

Width:  |  Height:  |  Size: 28 KiB

BIN
icomoon/fonts/icomoon.ttf

Binary file not shown.

BIN
icomoon/fonts/icomoon.woff

Binary file not shown.

1
icomoon/selection.json

File diff suppressed because one or more lines are too long

164
icomoon/style.css

@ -0,0 +1,164 @@
@font-face {
font-family: 'icomoon';
src: url('fonts/icomoon.eot?rce6ue');
src: url('fonts/icomoon.eot?rce6ue#iefix') format('embedded-opentype'),
url('fonts/icomoon.ttf?rce6ue') format('truetype'),
url('fonts/icomoon.woff?rce6ue') format('woff'),
url('fonts/icomoon.svg?rce6ue#icomoon') format('svg');
font-weight: normal;
font-style: normal;
font-display: block;
}
[class^="icon-"], [class*=" icon-"] {
/* use !important to prevent issues with browser extensions that change fonts */
font-family: 'icomoon' !important;
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-Icon-Addmore:before {
content: "\e900";
color: #c1bbf2;
}
.icon-Icon-Address:before {
content: "\e901";
color: #c1bbf2;
}
.icon-Icon-Android:before {
content: "\e902";
color: #fff;
}
.icon-Icon-App:before {
content: "\e903";
color: #fff;
}
.icon-Icon-apple:before {
content: "\e904";
color: #fff;
}
.icon-Icon-Close:before {
content: "\e905";
color: #c1bbf2;
}
.icon-Icon-Commission:before {
content: "\e906";
color: #c1bbf2;
}
.icon-Icon-Copy:before {
content: "\e907";
color: #c1bbf2;
}
.icon-Icon-Delete:before {
content: "\e908";
color: #c1bbf2;
}
.icon-Icon-EmailAddress .path1:before {
content: "\e909";
color: rgb(0, 0, 0);
}
.icon-Icon-EmailAddress .path2:before {
content: "\e90a";
margin-left: -1em;
color: rgb(255, 255, 255);
}
.icon-Icon-Export:before {
content: "\e90b";
color: #c1bbf2;
}
.icon-Icon-eye .path1:before {
content: "\e90c";
color: rgb(23, 16, 33);
opacity: 0.8;
}
.icon-Icon-eye .path2:before {
content: "\e90d";
margin-left: -1em;
color: rgb(255, 255, 255);
opacity: 0.8;
}
.icon-Icon-eyec .path1:before {
content: "\e90e";
color: rgb(23, 16, 33);
opacity: 0.8;
}
.icon-Icon-eyec .path2:before {
content: "\e90f";
margin-left: -1em;
color: rgb(255, 255, 255);
opacity: 0.8;
}
.icon-Icon-History:before {
content: "\e910";
color: #c1bbf2;
}
.icon-Icon-Increase:before {
content: "\e911";
color: #c1bbf2;
}
.icon-Icon-leftarrow-small:before {
content: "\e912";
color: #c1bbf2;
}
.icon-Icon-Playstore:before {
content: "\e913";
color: #fff;
}
.icon-Icon-Reset:before {
content: "\e914";
color: #c1bbf2;
}
.icon-Icon-rightarrow-small:before {
content: "\e915";
color: #c1bbf2;
}
.icon-Icon-select20:before {
content: "\e916";
color: #e5c5e5;
}
.icon-Icon-select100:before {
content: "\e917";
color: #e5c5e5;
}
.icon-Icon-social-fb:before {
content: "\e918";
}
.icon-Icon-social-ins:before {
content: "\e919";
}
.icon-Icon-social-linkedin:before {
content: "\e91a";
}
.icon-Icon-social-medium:before {
content: "\e91b";
}
.icon-Icon-social-twitter:before {
content: "\e91c";
}
.icon-Icon-social-youtube:before {
content: "\e91d";
}
.icon-Icon-Triangle:before {
content: "\e91e";
color: #fff;
}
.icon-Icon-TriangleTop:before {
content: "\e91f";
color: #949494;
}
.icon-Icon-Uploadimage:before {
content: "\e920";
color: #c1bbf2;
}
.icon-Icon-User:before {
content: "\e921";
color: #fff;
}

14
jsconfig.json

@ -0,0 +1,14 @@
{
"compilerOptions": {
"baseUrl": "./",
"target": "es6",
"paths": {
"@/*": [
"src/*"
],
}
},
"include": [
"src/**/*", "config/config.js"
]
}

14763
package-lock.json

File diff suppressed because it is too large

114
package.json

@ -0,0 +1,114 @@
{
"name": "e-learn",
"version": "1.0.0",
"description": "A Vue.js project",
"author": "lautin <1538731090@qq.com>",
"private": true,
"scripts": {
"dev": "webpack-dev-server --host 0.0.0.0 --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"lint": "eslint --ext .js,.vue src",
"build": "node build/build.js"
},
"dependencies": {
"art-template": "^4.13.2",
"assets": "^3.0.1",
"axios": "^0.19.2",
"bootstrap": "^3.4.1",
"clipboard": "^2.0.6",
"core-js": "^3.25.2",
"element-ui": "^2.15.10",
"eslint": "^4.19.1",
"highcharts": "^8.1.2",
"http": "^0.0.0",
"http-proxy-middleware": "^0.20.0",
"https": "^1.0.0",
"jquery": "^3.5.1",
"lautin-pagination": "^2.1.2",
"less": "^3.10.3",
"lodash": "^4.17.15",
"marked": "^0.7.0",
"md5": "^2.2.1",
"pako": "^2.0.2",
"popper.js": "^1.16.0",
"pygmentize-bundled": "^2.3.0",
"qs": "^6.11.1",
"sass": "^1.70.0",
"swiper": "^6.0.4",
"vue": "^2.5.2",
"vue-awesome-swiper": "^3.1.3",
"vue-clipboard2": "^0.3.1",
"vue-echarts": "^6.0.2",
"vue-qr": "^2.2.1",
"vue-router": "^3.0.1",
"vuex": "^3.5.1"
},
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1",
"babel-eslint": "^8.2.1",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
"babel-loader": "^7.1.1",
"babel-plugin-component": "^1.1.1",
"babel-plugin-syntax-jsx": "^6.18.0",
"babel-plugin-transform-runtime": "^6.22.0",
"babel-plugin-transform-vue-jsx": "^3.5.0",
"babel-preset-env": "^1.3.2",
"babel-preset-stage-2": "^6.22.0",
"chalk": "^2.0.1",
"copy-webpack-plugin": "^4.0.1",
"css-loader": "^0.28.11",
"d3": "^7.3.0",
"eslint": "^4.15.0",
"eslint-config-standard": "^10.2.1",
"eslint-friendly-formatter": "^3.0.0",
"eslint-loader": "^1.7.1",
"eslint-plugin-import": "^2.7.0",
"eslint-plugin-node": "^5.2.0",
"eslint-plugin-promise": "^3.4.0",
"eslint-plugin-standard": "^3.0.1",
"eslint-plugin-vue": "^4.0.0",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^1.1.4",
"friendly-errors-webpack-plugin": "^1.6.1",
"html-webpack-plugin": "^2.30.1",
"http-proxy-middleware": "^0.20.0",
"less": "^3.10.3",
"less-loader": "^5.0.0",
"node-notifier": "^5.1.2",
"optimize-css-assets-webpack-plugin": "^3.2.0",
"ora": "^1.2.0",
"portfinder": "^1.0.13",
"postcss-import": "^11.0.0",
"postcss-loader": "^2.0.8",
"postcss-url": "^7.2.1",
"prettier": "^1.12.1",
"rimraf": "^2.6.0",
"sass-loader": "^7.3.1",
"sass-resources-loader": "^2.0.3",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"style-loader": "^1.0.0",
"style-resources-loader": "^1.3.3",
"uglifyjs-webpack-plugin": "^1.1.1",
"url-loader": "^0.5.8",
"vue-i18n": "^8.28.2",
"vue-loader": "^13.3.0",
"vue-style-loader": "^3.1.2",
"vue-template-compiler": "^2.5.2",
"webpack": "^3.12.0",
"webpack-bundle-analyzer": "^2.13.1",
"webpack-cli": "^4.10.0",
"webpack-dev-server": "^2.9.1",
"webpack-merge": "^4.1.0"
},
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}

100
src/App.vue

@ -0,0 +1,100 @@
<template>
<div>
<common-header :class="{'home-bg' : isHome}"></common-header>
<main>
<router-view></router-view>
</main>
<common-footer></common-footer>
</div>
</template>
<script>
import { mapState, mapActions } from "vuex";
import Member from "@/api/member";
export default {
name: "App",
data() {
return {
oldTheme: ""
};
},
computed: {
isHome() {
return this.$route.path == "/home";
},
...mapState({
theme: "theme",
appConfig: "appConfig"
}),
currentTheme() {
let current = this.$route.name;
//
let paths = ["option", "exchange","contract"];
if (paths.includes(current)) {
return this.theme + "-app";
} else {
return "";
}
}
},
watch: {
currentTheme() {
this.setAppTheme();
}
},
methods: {
...mapActions({
setAppConfig: "setAppConfig"
}),
//
setAppTheme() {
let $body = $(document.body);
$body.removeClass(this.oldTheme);
$body.addClass(this.currentTheme);
this.oldTheme = this.currentTheme;
},
//
getLogo() {
Member.getLogo().then(res => {
// console.info(res)
this.setAppConfig(res);
this.setConfig();
});
},
//
setConfig() {
document.getElementById("appTitle").innerText = this.appConfig.name;
document.getElementById("appIcon").href = this.appConfig.titles_logo;
}
},
created() {
this.getLogo();
},
mounted() {
this.setAppTheme();
}
};
</script>
<style lang="scss">
@import './assets/scss/base/_base.scss';
@import './assets/scss/module/_module.scss';
.home-bg {
// background: #172636 !important;
background: #fefff2 !important;
border: none !important;
// height: 100px;
.nav-link {
// color: #fff;
color:#172636;
@include fs(14);
}
.profile-nav {
a {
color: #18214d !important;
}
}
}
</style>

251
src/api/assets.js

@ -0,0 +1,251 @@
import server from './server'
console.dir(server);
class Assets {
/**
* 数字货币提现
* @param {Object} data
*/
static cryptocurrenciesWithdrawal(data) {
return server.post(`/withdraw/cryptocurrenciesWithdrawal`, data);
}
/**
* assets页面
* @param {Object} data
*/
static assets(data) {
return server.post(`/userCoin/assets`, data);
}
/**
* assets页面
* @param {Object} data
*/
static getAllList(data) {
return server.get(`coin/getAllList`, data);
}
/**
* 币币用户历史委托
* @param {Object} data
*/
static history(data) {
return server.post(`/coin/orders/history`, data);
}
/**
* 资金划转记录
* @param {Object} data
*/
static fundsTransferRecordPageList(data) {
return server.post(`/fundsTransferRecord/pageList`, data);
}
/**
* 资金划转
* @param {Object} data
*/
static transfer(data) {
return server.post(`/userCoin/transfer`, data);
}
/**
* 数字货币充值
* @param {int} params
*/
static cryptocurrenciesRecharge(coinId) {
return server.get(`/recharge/cryptocurrenciesRecharge/${coinId}`);
}
/**
* 数字货币充值记录
* @param {Object} data
*/
static cryptocurrenciesRechargeRecords(data) {
return server.post(`/recharge/cryptocurrenciesRechargeRecords`, data);
}
/**
* 用户数字货币提现记录
* @param {Object} data
*/
static cryptocurrenciesWithdrawRecords(data) {
return server.post(`/withdraw/cryptocurrenciesWithdrawRecords`, data);
}
/**
* 删除提现地址
* @param {Object} data
*/
static deleteById(data) {
return server.post(`/withdrawAddress/deleteById`, data);
}
/**
* 编辑提现地址
* @param {Object} data
*/
static editById(data) {
return server.post(`/withdrawAddress/editById`, data);
}
/**
* 移除添加地址
* @param {Object} data
*/
static addRemove(data) {
return server.post(`/withdrawAddress/addOrRemoveWhiteList`, data);
}
/**
* 提现地址分页列表
* @param {Object} data
*/
static pageList(data) {
return server.post(`/withdrawAddress/pageList`, data);
}
/**
* 添加提现地址
* @param {Object} data
*/
static save(data) {
return server.post(`/withdrawAddress/save`, data);
}
/**
* 费率列表(手续费)
* @param {Object} data
*/
static getList(data) {
return server.get(`/transferFee/getList`, data);
}
/**
* 用户合约资金
* @param {Object} data
*/
static contractsAccount(data) {
return server.get(`/futuresUserCoin/contractsAccount`, data);
}
/**
* 用户合约资金(详情)
* @param {number} accountId
*/
static contractsAccountDetail(accountId) {
return server.get(`/futuresUserCoin/contractsAccountDetail/${accountId}`);
}
/**
* 用户资金历史记录
* @param {Object} data
*/
static transactionHistory(data) {
return server.post(`/futuresUserCoin/transactionHistory`, data);
}
/**
* 确认是否白名单地址
* @param {Object} data
*/
static checkIsWhiteList(data) {
return server.post(`/withdrawAddress/checkIsWhiteList`, data);
}
/**
* 用户已实现盈亏列表
* @param {Object} data
*/
static realisedPnlLog(data) {
return server.post(`/realisedPnlLog/list`, data);
}
/**
* 定期宝列表
* @param {Object} data
*/
static financeList(data) {
return server.post(`/finance/list`, data);
}
/**
* 理财订单列表
* @param {Object} data
*/
static financeOrderList(data) {
return server.post(`/finance/order/list`, data);
}
/**
* 定期宝列表
* @param {Object} data
*/
static financeApply(data) {
return server.post(`/finance/apply`, data);
}
/**
* 定期理财账户资产
* @param {Object} data
*/
static financeAccount(data) {
return server.post(`/finance/account`, data);
}
}
export default Assets;

9
src/api/coinTrading.js

@ -0,0 +1,9 @@
import server from './server'
class CoinTrading {
}
export default CoinTrading;

36
src/api/college.js

@ -0,0 +1,36 @@
import server from './server'
class College {
static college() {
return server.get(`/college`);
}
static getArticleList(cid) {
return server.get(`/articleList?id=${cid}`);
}
// 学院分类列表
static getCategoryList() {
return server.get(`/categoryList`);
}
// 服务分类列表
static getServiceList() {
return server.get(`/services`);
}
static getArticleDetail(aid) {
return server.get(`/article/detail?id=${aid}`);
}
// 获取服务的文章详情
static getServiceDetail(cid) {
return server.get(`/article/serviceDetail?id=${cid}`);
}
static getRecommend() {
return server.get(`/recommend`);
}
}
export default College;

11
src/api/config.js

@ -0,0 +1,11 @@
let app = {
baseUrl:'/api/',
wsUrl:'wss://guanli.coin.amatak.net:2346',
}
if(process.env.NODE_ENV=='production'){
app.wsUrl='wss://guanli.coin.amatak.net:2346'
app.baseUrl='https://guanli.coin.amatak.net/api/'
}
export default app;

15
src/api/contactUs.js

@ -0,0 +1,15 @@
import server from './server';
class ContactUs {
static getConsultings() {
return server.get(`/about/advices`);
}
static contactUs(data) {
return server.post(`/contactUs`, data);
}
static contact () {
return server.get(`/contact`);
}
}
export default ContactUs;

104
src/api/contract.js

@ -0,0 +1,104 @@
import server from './server'
class Contract {
/**
* 下委托单
* @param {Object} data
*/
static add(data) {
return server.post(`/futuresOrders/add`, data);
}
static getMarketInfo(data) {
return server.get(`/contract/getMarketInfo`, {params:data})
}
/**
* 获取合约市场
*/
static getMarketList(data) {
return server.get('/contract/getMarketList', {params:data})
}
/**
* 获取合约账户信息
*/
static contractAccount(data) {
return server.get('/contract/contractAccount', {params:data,config:{loading:false}})
}
/**
* 获取合约详情
*/
static getSymbolDetail(data) {
return server.get('/contract/getSymbolDetail', {params:data})
}
/**
* 可开张数(合约上限)
* */
static openNum(data) {
return server.get('/contract/openNum', {params:data,config:{loading:false}})
}
/**
* 合约开仓
*/
static openPosition(data, config) {
return server.post('/contract/openPosition', data, config)
}
// 获取合约持仓
static holdPosition(data, config) {
return server.get('/contract/holdPosition', {params:data,config} )
}
// 合约平仓
static closePosition(data, config) {
return server.post('/contract/closePosition', data, config)
}
// 一键全平
static closeAllPosition(data, config) {
return server.post('/contract/closeAllPosition', data, config)
}
// 获取当前合约委托
static getCurrentEntrust(data, config) {
return server.get('/contract/getCurrentEntrust', {params:data}, config)
}
// 撤单
static cancelEntrust(data, config) {
return server.post('/contract/cancelEntrust', data, config)
}
// 历史委托
static getHistoryEntrust(data, config) {
return server.get('/contract/getHistoryEntrust', {params:data}, config)
}
// 获取k线数据
static getKline(data, config) {
return server.get('/contract/getKline', {params:data}, config)
}
// 获取委托明细
static getEntrustDealList(data, config) {
return server.get('/contract/getEntrustDealList', {params:data}, config)
}
// 获取开通状态
static openStatus() {
return server.get('/contract/openStatus')
}
// 开通永续合约
static opening() {
return server.post('/contract/opening')
}
// 止盈止损
static setStrategy(data){
return server.post('/contract/setStrategy',data)
}
// 一键全平
static onekeyAllFlat(data){
return server.post('/contract/onekeyAllFlat',data,{loading:true})
}
// 一键反向
static onekeyReverse(data){
return server.post('/contract/onekeyReverse',data,{loading:true})
}
}
export default Contract;

104
src/api/custom/DataUpdater.js

@ -0,0 +1,104 @@
/**
* 数据更新器
* 通过更新器触发datafeeds的getBars实时更新图表数据
*/
class DataUpdater {
constructor(datafeeds) {
// 存放所有订阅的新记录
this.subscribers = {};
this.requestsPending = 0;
this.historyProvider = datafeeds;
}
subscribeBars(symbolInfo, resolution, onRealtimeCallback, subscriberUID) {
// 存入订阅者数据
this.subscribers[subscriberUID] = {
lastBarTime: null,
listener: onRealtimeCallback,
resolution,
symbolInfo
}
}
unsubscribeBars(subscriberUID) {
delete this.subscribers[subscriberUID];
}
updateData() {
if (this.requestsPending) return;
for (let subscriberUID in this.subscribers) {
this.requestsPending++;
this.updateDataForSubscriber(subscriberUID).then(() => {
return this.requestsPending--;
}).catch(() => {
return this.requestsPending--;
});
}
// debugger;
}
updateDataForSubscriber(subscriberUID) {
return new Promise((resolve, reject) => {
var subscriptionRecord = this.subscribers[subscriberUID];
var rangeEndTime = parseInt((Date.now() / 1000).toString());
var rangeStartTime = rangeEndTime - this.periodLengthSeconds(subscriptionRecord.resolution, 10);
this.historyProvider.getBars(subscriptionRecord.symbolInfo, subscriptionRecord.resolution, rangeStartTime, rangeEndTime, (bars) => {
this.onSubscriberDataReceived(subscriberUID, bars);
resolve();
}, () => {
reject();
});
});
}
onSubscriberDataReceived(listenerGuid, bars) {
if (!this.subscribers.hasOwnProperty(listenerGuid)) return;
if (!bars.length) return;
var lastBar = bars[bars.length - 1];
var subscriptionRecord = this.subscribers[listenerGuid];
if (subscriptionRecord.lastBarTime !== null && lastBar.time < subscriptionRecord.lastBarTime) return;
var isNewBar = subscriptionRecord.lastBarTime !== null && lastBar.time > subscriptionRecord.lastBarTime;
if (isNewBar) {
if (bars.length < 2) {
throw new Error('Not enough bars in history for proper pulse update. Need at least 2.');
}
var previousBar = bars[bars.length - 2];
subscriptionRecord.listener(previousBar);
}
subscriptionRecord.lastBarTime = lastBar.time;
subscriptionRecord.listener(lastBar);
}
// 周期转化成秒
periodLengthSeconds(resolution, requiredPeriodsCount) {
let daysCount = 0;
switch (resolution.toUpperCase()) {
case 'D' :
case '1D' :
daysCount = requiredPeriodsCount;
break;
case 'M' :
case '1M' :
daysCount = 31 * requiredPeriodsCount;
break;
case 'W' :
case '1W' :
daysCount = 7 * requiredPeriodsCount;
break;
default :
daysCount = requiredPeriodsCount * parseInt(resolution) / (24 * 60);
break;
}
return daysCount * 24 * 60 * 60;
}
}
export default DataUpdater;

119
src/api/custom/Datafees.js

@ -0,0 +1,119 @@
// function _interopRequireDefault(obj) {
// return obj && obj.__esModule ? obj : {
// default: obj
// }
// }
// function _classCallCheck(instance, Constructor) {
// if (!(instance instanceof Constructor)) {
// throw new TypeError("Cannot call a class as a function");
// }
// }
import DataUpdater from './DataUpdater.js'
class Datafeeds {
/**
* JS API 传入一个datafeeds对象
* @param {*Object} vue vue实例
*/
constructor(model) {
this.self = model;
this.barsUpdater = new DataUpdater(this);
}
/**
* @param {*Function} callback 回调函数
* `onReady` should return result asynchronously.
*/
onReady(callback) {
return new Promise((resolve, reject) => {
let configuration = {};
// 在模型中配置
if (this.self.getConfig)
Object.assign(configuration, this.self.getConfig());
resolve(configuration);
}).then(configuration => callback(configuration));
}
/**
* @param {*String} symbolName 商品名称或ticker 取得商品数据的唯一标识符
* @param {*Function} onSymbolResolvedCallback 成功回调
* @param {*Function} onResolveErrorCallback 失败回调
* `resolveSymbol` should return result asynchronously.
*/
resolveSymbol(symbolName, onSymbolResolvedCallback, onResolveErrorCallback) {
return this.self.getSymbol(symbolName).then((symbolInfo) => {
return onSymbolResolvedCallback(symbolInfo);
}).catch((err) => {
return onResolveErrorCallback(err);
});
}
/**
* 此方法在更新symbol和interval时会触发两次第一次取历史数据第二次取新数据 新数据钩子函数会返回执行
* symbol和interval的更新方式分别如下
* + 图表动作setSymbol()主动设置或者图表内搜索时反馈symbol
* + 点击分时按钮或者下拉时反馈interval 通过该方法也可以获取
* @param {Object} symbolInfo 商品信息对象
* @param {String} resolution 分辨率
* @param {Number} rangeStartDate 时间戳最左边请求的K线时间
* @param {Number} rangeEndDate 时间戳最右边请求的K线时间
* @param {Function} onHistoryCallback 回调函数
* @param {Function} onErrorCallback 回调函数
*/
getBars(symbolInfo, resolution, rangeStartDate, rangeEndDate, onHistoryCallback,
onErrorCallback, firstDataRequest) {
// debugger;
if (firstDataRequest) { // 第一次取历史记录
// model的getBars方法返回结果 包含两个值 bars和meta
this.self.getBars(symbolInfo, resolution, rangeStartDate, rangeEndDate, function (data) {
if (data.length) {
const bars = data;
onHistoryCallback(bars);
} else {
const meta = {
noData: true, // 没有数据
nextTime: Date.now(), // 下一个K线柱的时间
};
onHistoryCallback(null, meta);
}
});
} else { // 取新数据
this.subscribeBars();
}
}
/**
* 订阅K线数据图表库将调用onRealtimeCallback方法以更新实时数据
* @param {Object} symbolInfo 商品信息
* @param {String} resolution 分辨率
* @param {Function} onRealtimeCallback 回调函数
* @param {String} subscriberUID 监听的唯一标识符
* @param {Function} onResetCacheNeededCallback
* (从1.7开始): 将在bars数据发生变化时执行
*/
subscribeBars(symbolInfo, resolution, onRealtimeCallback, subscriberUID, onResetCacheNeededCallback) {
// debugger;
this.self.subscribeBars(symbolInfo, resolution, onRealtimeCallback, subscriberUID, onResetCacheNeededCallback);
}
/**
* 取消订阅K线数据
* @param {*String} subscriberUID 监听的唯一标识符
*/
unsubscribeBars(subscriberUID) {
this.barsUpdater.unsubscribeBars(subscriberUID);
}
}
export default Datafeeds;

359
src/api/custom/Model.js

@ -0,0 +1,359 @@
import Datafeeds from "./Datafees.js";
import Socket from './Socket.js'
import servlet from './servlet.js';
// import { resolveConfig } from "prettier";
// import { resolveConfig } from "prettier";
// import
class Model {
/**
* 初始化模型
* @param {mixed} ws socket请求的url或者一个已经存在的socket对象
* @param {Object} sub_params socket订阅的参数
* @param {Object} unsub_params 取消订阅的参数
*/
constructor(link, view) {
this.socket = new Socket(link);
this.view = view;
// 用于订阅数据
this.sub_msg; // 订阅标签 用于鉴定返回message 固定格式 'label_id_interval'
this.marketId;
// 用于生成图表
this.symbol; // 请求商品
this.interval; // 请求周期
this.ticker; // 商品唯一标识
this.priceDecimals; // 价格精度
// 缓存用于K线的历史记录数据
this.cacheData = []; //
this.lastTime = null; // 最后一条数据的创建日期
this.getBarTimer = null;
this.isLoading = true;
this.datafeeds = new Datafeeds(this); // 数据模型的接口
this.widget; // td实例对象
this.getHistoryCallback; // ajax取记录的回调函数
this.onRealtimeCallback;
}
/**
* 生成图表库 支持初始化订阅 也可以手动在外部订阅但订阅必须先于图标库
* @param {Object} optionals 图表初始化配置
* @param {Object|Array} sub_params 初始化订阅参数 可选值
*/
init(optionals, extenals = null) {
if (extenals) {
if (extenals.constructor == Function) { // 获取历史记录
this.getHistoryCallback = extenals;
} else if (extenals.constructor == Object) { // 初始化订阅信息
this.subscribe(extenals);
}
}
// 写入全局
this.symbol = optionals.symbol;
// 初始化设置interval 后期从订阅参数中取
this.interval = optionals.interval;
this.ticker = this.symbol.concat('_', this.interval);
this.priceDecimals = optionals.priceDecimals;
// 写入动态配置 覆盖默认配置
const settings = {
datafeed: this.datafeeds // 传入的api对象
}
Object.keys(optionals).forEach(key => {
if (optionals[key]) settings[key] = optionals[key];
})
// 接收数据值
this.socket.on('message', this.handleMessage.bind(this));
// 创建tv组件
this.widget = new TradingView.widget(servlet(settings));
}
//重连WS后的操作
conglian(link){
this.socket = new Socket(link);
this.socket.on('message', this.handleMessage.bind(this));
}
/**
* 发起订阅新的数据
* @param {Array|Object} sub_params 所有订阅参数
*/
subscribe(sub_params) {
// 将订阅参数 写入全局,别计算分时
if (sub_params instanceof Array) {
this.sub_msg = sub_params.find(item => item.cmd == "sub").msg
} else {
this.sub_msg = sub_params.msg;
}
this.sendMessage(sub_params);
}
sendMessage(data) {
// debugger
// console.log(">>>>>>>>>>" + JSON.stringify(data));
// 已经open状态
if (this.socket.checkOpen()) this.socket.send(data);
else{
// 先open 再send
this.socket.on('open', (evt) => {
// console.info(this.socket)
this.socket.send(data);
})
}
}
unSubscribe() {
this.sendMessage(this.sub_params);
}
// 处理历史数据和动态更新的数据
handleMessage(response) {
// if (response.sub != "history" && response.sub != "dynamic") return;
let { data = null, sub = null, type = null } = response;
// 答复连接
if (type == "ping") {
this.sendMessage({
cmd: "pong"
});
return;
}
// 严格匹配返回的订阅内容
if (sub === this.sub_msg) {
if (type == "history") {
// console.log("<<<<<<<<<History");
let list = [];
for (let item of data) {
list.push({
time: item.id * 1000,
open: item.open,
high: item.high,
low: item.low,
close: item.close,
volume: item.amount
})
}
// 缓存数据
this.cacheData[this.ticker] = list;
// 记录最新时间 1595423640 1595423580
this.lastTime = list[list.length - 1].time;
} else if (type == "dynamic") {
// 最新的数据值
// console.log('<<<<<<<<<New');
// 检测是否已经加载历史数据
if (!this.lastTime) return;
else {
// debugger
// console.log(data.id * 1000, data.id * 1000 - this.lastTime, data.close);
}
// this.datafeeds.barsUpdater.updateData();
const barsData = {
time: data.id * 1000,
open: data.open,
high: data.high,
low: data.low,
close: data.close,
volume: data.amount
};
// if (barsData.time >= this.lastTime && this.cacheData[this.ticker] && this.cacheData[this.ticker].length) {
// // 更新最后一条记录
// // this.cacheData[this.ticker][this.cacheData[this.ticker].length - 1] = barsData
// this.onRealtimeCallback(barsData);
// }
if (barsData.time >= this.lastTime) {
// 更新最后一条记录
this.lastTime = barsData.time;
this.onRealtimeCallback(barsData);
}
}
}
}
getConfig() {
// console.log("Model.getConfig");
return {
// supports_search: true,
supports_group_request: true,
// 支持的周期数组,周期可以是数字或字符串。
// 如果周期是一个数字,它被视为分钟数。
supported_resolutions: ['1', '5', '15', '30', '60', 'D', 'W', 'M'],
supports_marks: true, // 是否在K线上显示标记
supports_timescale_marks: true,
};
}
// 切换交易对方法
setSymbol(symbolName) {
this.symbol = symbolName;
this.ticker = this.symbol.concat('_', this.interval);
this.widget.setSymbol(symbolName, this.interval);
}
// 切换分时的方法
setResolution(resolution, callback) {
this.ticker = this.symbol.concat('_', resolution);
this.widget.chart().setResolution(resolution, callback);
}
getSymbol(symbolName) {// 小写的交易对名称
// 1、查找已有精度值
let priceDecimals = this.priceDecimals || this.view.priceDecimals;
let pms,
base = {
'name': symbolName, // 用于请求数据
// 这个商品的交易所时区
// 'timezone': 'Asia/Shanghai',
timezone: "America/Toronto",
// 最小波动
'minmov': 1,
'minmov2': 0,
'pointvalue': 1,
'fractional': false,
// 设置周期
'session': '24x7',
'has_intraday': true,
'has_no_volume': false,
// 设置是否支持周月线
"has_daily": true,
// 设置是否支持周月线
"has_weekly_and_monthly": true,
"has_empty_bars": true,
// 唯一标识符,如果您指定此属性,则其值将用于所有数据请求
'ticker': this.ticker,
//'supported_resolutions': ['1', '5', '15', '30', '60', '240', '1D', '5D', '1W', '1M']
};
// 2、还没获取到价格精度
if (!priceDecimals && this.view.getSymbol) {
pms = this.view.getSymbol().then(data => {
return (Object.assign({
// 商品说明 将被打印在图表的标题栏中
'description': data.pair_name,
// 设置精度 100表示保留两位小数 1000三位 10000四位
'pricescale': Math.pow(10, data.price_decimals),
}, base));
});
} else { // 已经获取到价格精度
pms = Promise.resolve(Object.assign({
// 商品说明 将被打印在图表的标题栏中
'description': symbolName.toUpperCase(),
// 设置精度 100表示保留两位小数 1000三位 10000四位
'pricescale': Math.pow(10, priceDecimals),
}, base))
}
return pms;
}
getBars(symbolInfo, resolution, rangeStartDate, rangeEndDate, onLoadedCallback) {
// console.log("Model.getHistory");
if (this.getHistoryCallback instanceof Function) { // ajax加载
// 通过图表动作 切换分时 需要同步数据和分时值
if (this.interval !== resolution) {
// 需要转化resolute为实际的订阅interval
this.interval = resolution;
}
this.getHistoryCallback((data, lastTime) => {
this.lastTime = lastTime;
// 过滤筛选数据
const ret = [];
data.forEach(item => {
// 取得该时间内的记录
if (item.time >= rangeStartDate * 1000 && item.time <= rangeEndDate * 1000) {
ret.push(item);
}
});
onLoadedCallback(ret);
})
} else { // websocket加载
// 通过图表动作 切换分时 需要同步数据和分时值
if (this.interval !== resolution) {
// 需要转化resolute为实际的订阅interval
this.interval = resolution;
let period = this.translateInterval2Period(this.interval);
// 重新订阅所有数据 在cache缓存中控制过滤
this.subscribe([{
cmd: "unsub",
msg: `Kline_${symbolInfo.name}_${period}`
}, {
cmd: "req",
msg: `Kline_${symbolInfo.name}_${period}`
}, {
cmd: "sub",
msg: `Kline_${symbolInfo.name}_${period}`
}]);
}
if (this.cacheData[this.ticker] && this.cacheData[this.ticker].length) {
// 已取得数据
this.isLoading = false;
const ret = [];
this.cacheData[this.ticker].forEach(item => {
// 取得该时间内的记录
if (item.time >= rangeStartDate * 1000 && item.time <= rangeEndDate * 1000) {
ret.push(item);
}
});
onLoadedCallback(ret);
} else { // 重新加载数据
this.getBarTimer = setTimeout(() => {
this.getBars(symbolInfo, resolution, rangeStartDate, rangeEndDate, onLoadedCallback)
}, 1000)
}
}
}
// 订阅新的数据
subscribeBars(symbolInfo, resolution, onRealtimeCallback, subscriberUID, onResetCacheNeededCallback) {
this.onRealtimeCallback = onRealtimeCallback;
}
}
export default Model;

197
src/api/custom/Socket.js

@ -0,0 +1,197 @@
class Socket {
constructor(ws, ...args) {
// 初始化socket
if (ws.constructor == WebSocket) {
this.socket = ws;
} else {
this.socket = new WebSocket(ws);
}
// this.socket.binaryType = 'arraybuffer';
this.doOpen();
this.readyState = this.socket.readyState;
// 订阅/发布模型
this._events = {
// 订阅的事件 : 发布的方法
};
// 定时验证的标识符
this.heartBeatTimer = null;
}
// 执行socket并发布事件
doOpen() {
this.afterOpenEmit = [];
// 执行socket连接 并初始化验证请求
this.socket.addEventListener("open", evt => {
// 连接状态的标识符
this.readyState = this.socket.readyState;
this.onOpen(evt)
});
// 接收socket数据
this.socket.addEventListener("message", evt => {
// 连接状态的标识符
this.readyState = this.socket.readyState;
this.onMessage(evt)
});
// 关闭socket连接
this.socket.addEventListener("close", evt => {
// 连接状态的标识符
this.readyState = this.socket.readyState;
this.onClose(evt)
});
// 请求发生错误
this.socket.addEventListener("error", err => {
// 连接状态的标识符
this.readyState = this.socket.readyState;
this.onError(err)
});
}
// 发布后通知订阅者
Notify(entry) {
// 检查是否有订阅者 返回队列
const cbQueue = this._events[entry.Event];
if (cbQueue && cbQueue.length) {
for (let callback of cbQueue) {
if (callback instanceof Function) callback(entry.Data);
}
}
}
// 请求数据的方法
onOpen(evt) {
// 每隔20s检查连接
// this.heartBeatTimer = setInterval(() => this.send({
// 'cmd': 'ping',
// 'args': ''
// }), 20000);
// 通知订阅
this.Notify({ Event: 'open', Data: evt });
}
/**
* 订阅所有的数据
* @param {array|object} datas 订阅参数集合
*/
send(datas) {
if (datas.constructor != Array) {
datas = [datas];
}
for (let item of datas) {
this.socket.send(JSON.stringify(item));
}
}
onMessage(evt) {
try {
// 解析推送的数据
const data = JSON.parse(evt.data);
// 通知订阅者
this.Notify({
Event: 'message',
Data: data
});
} catch (err) {
console.error(' >> Data parsing error:', err.message);
// 通知订阅者
this.Notify({
Event: 'error',
Data: err
});
}
}
// 添加事件监听
on(name, handler) {
this.subscribe(name, handler);
}
// 取消订阅事件
off(name, handler) {
this.unsubscribe(name, handler);
}
// 订阅事件的方法
subscribe(name, handler) {
// debugger;
if (this._events.hasOwnProperty(name)) {
this._events[name].push(handler); // 追加事件
} else {
this._events[name] = [handler]; // 添加事件
}
}
// 取消订阅事件
unsubscribe(name, handler) {
let start = this._events[name].findIndex(item => item === handler);
// 删除该事件
this._events[name].splice(start, 1);
}
checkOpen() {
return this.readyState >= 1;
}
onClose(evt) {
this.Notify({ Event: 'close', Data: evt });
}
onError(err) {
this.Notify({ Event: 'error', Data: err });
}
emit(data) {
return new Promise((resolve) => {
this.send(JSON.stringify(data));
this.on('message', function (data) {
resolve(data);
});
});
}
doClose() {
this.socket.close();
}
destroy() {
if (this.heartBeatTimer) {
clearInterval(this.heartBeatTimer);
this.heartBeatTimer = null;
}
this.doClose();
this._events = {};
this.readyState = 0;
this.socket = null;
}
}
export default Socket

102
src/api/custom/servlet.js

@ -0,0 +1,102 @@
function servlet(optionals) {
return Object.assign({
symbol: 'btcusdt', //默认商品设置
interval: "1", //默认请求间隔
// fullscreen: false, //默认是否全屏
autosize: true, //默认是否自适应
container_id: 'trading-view', //设置容器
datafeed: null,
library_path: '/static/Kline/charting_library/',
enabled_features: [],
// timezone: 'Asia/Shanghai',
timezone: "America/Toronto",
locale: 'en',
debug: false,
toolbar_bg: "#f1f3f6",//设置默认工具条背景颜色
style: "1",
hide_side_toolbar: false,
withdateranges: true,
allow_symbol_change: true,
theme: "light",
// time_frames: [
// { text: "50y", resolution: "6M", description: "50 Years" },
// { text: "3y", resolution: "W", description: "3 Years", title: "3yr" },
// { text: "8m", resolution: "D", description: "8 Month" },
// { text: "3d", resolution: "5", description: "3 Days" },
// { text: "1000y", resolution: "W", description: "All", title: "All" },
// ],
drawings_access: {
type: "black",
tools: [
{ name: "Trend Line", grayed: true },
{ name: "Trend Angle", grayed: true }
]
},
charts_storage_api_version: "1.1",
client_id: "tradingview.com",
//设置默认不显示组件
disabled_features: [
'header_symbol_search',
// "use_localstorage_for_settings",
// "left_toolbar",
// 'legend_context_menu',
// "border_around_the_chart",
// "timeframes_toolbar",
"volume_force_overlay",
// "pane_context_menu",
// "header_symbol_search",
// "symbol_search_hot_key",
// "header_undo_redo",
// "header_compare",
// "header_chart_type",
// "header_screenshot",
// "header_resolutions",
// "header_settings",
// "header_indicators"
],
//设置初始化样式配置
overrides: {
// "mainSeriesProperties.candleStyle.upColor": "#589065",
// "mainSeriesProperties.candleStyle.downColor": "#AE4E54",
// "mainSeriesProperties.candleStyle.drawWick": true,
// "mainSeriesProperties.candleStyle.wickUpColor:": '#AE4E54',
// "mainSeriesProperties.candleStyle.wickDownColor": "#AE4E54",
// "mainSeriesProperties.candleStyle.drawBorder": true,
// "mainSeriesProperties.candleStyle.borderUpColor": "#589065",
// "mainSeriesProperties.candleStyle.borderDownColor": "#AE4E54",
// "paneProperties.background": "#121a2e",
// "paneProperties.vertGridProperties.color": "#1e273c",
// "paneProperties.vertGridProperties.style": 0,
// "paneProperties.horzGridProperties.color": "#1e273c",
// "paneProperties.horzGridProperties.style": 0,
// "scalesProperties.lineColor": "#505d7b",
// "scalesProperties.textColor": "#333e58",
// "paneProperties.legendProperties.showLegend": false,
// //"scalesProperties.showLeftScale":false,
// "volumePaneSize": "medium",
// "MACDPaneSize": "tiny",
},
//设置初始化加载条样式
loading_screen: {
// "backgroundColor": "#1e222d",
// "foregroundColor": "#5d7d93"
},
studies_overrides: {
//设置成交量默认样式
// "volume.volume.color.0": "rgba(174,78,84,0.7)",
// "volume.volume.color.1": "rgba(88,144,101,0.7)",
}
}, optionals);
}
export default servlet;

31
src/api/exchange.js

@ -0,0 +1,31 @@
import server from './server'
class Exchange {
// 获取账户余额
static getUserBalance(symbol) {
return server.get(`exchange/getUserCoinBalance?symbol=${encodeURIComponent(symbol)}`);
}
// 提交订单
static storeEntrust(data) {
return server.post(`/exchange/storeEntrust`, data);
}
// 获取币种基本信息
static getSymbolInfo(data) {
return server.post(`/user/tradingPairCurrency`, data);
}
// 查询最新资讯
static newTrends(limit) {
return server.get(`/marketDynamics?limit=${limit}`);
}
// 获取汇率
static getCurrencyExCny(data){
return server.get('/market/getCurrencyExCny',{params:data})
}
}
export default Exchange;

32
src/api/home.js

@ -0,0 +1,32 @@
import server from './server';
class Home {
// 获取大部分数据
static indexList(){
return server.get('/indexList')
}
// 获取自选数据
static getCollect(){
return server.get('/getCollect')
}
/**
* 添加自选
* @param {object} data
* @param {string} data.pair_id
* @param {string} data.pair_name
*/
static option(data){
return server.post('/option',data)
}
/**
* 获取版本号
*/
static getNewestVersion(){
return server.get('/getNewestVersion')
}
}
export default Home;

56
src/api/market.js

@ -0,0 +1,56 @@
import server from './server'
class Market {
/**
* 轮播图列表
* @param {Object} data
* @param {int} type 请求类型 1是pc(默认) 2是app
* @param {int} position 位置 1(币币首页) 2(预留扩展)
*/
static cryptocurrenciesWithdrawal(type, position) {
return server.post(`/market/banner/${type}/${position}`, data);
}
/**
* 用户收藏交易对信息 需要先登录
*/
static userFavList() {
return server.get(`/coin/market/collection/list`);
}
static blogCategoryList() {
return server.get(`/blogCategory/list`);
}
static blogDetailList(categoryId, params) {
return server.get(`/blog/list/${categoryId}`, { params });
}
static blogDetailContent(id) {
return server.get(`/blog/detail/${id}`);
}
// 初始化查询市场行情
static getMarketList() {
return server.get(`/exchange/getMarketList`);
}
// 初始化买卖盘数据
static getBooks(symbol) {
return server.get(`/exchange/getMarketInfo?symbol=${symbol}`);
}
// 币种信息
static getCoinInfo(params) {
return server.get(`/exchange/getCoinInfo`,{ params });
}
}
export default Market;

162
src/api/member.js

@ -0,0 +1,162 @@
import server from './server'
class Member {
/**
* 注册滑块验证码
* @param {object} data
*/
static sliderVerify(data) {
return server.post(`/sliderVerify`, data);
}
/**
* 注册发送手机验证码
* @param data {phone,country_code,token}
*/
static sendSmsCode(data) {
return server.post(`/register/sendSmsCode`, data);
}
/**
* 注册发送验证码
* @param data {email,token}
*/
static sendEmailCode(data) {
return server.post(`/register/sendEmailCode`, data);
}
/**
* 获取国家区号
* @param {object} data
*/
static getCountryCode() {
return server.get(`/getCountryList`);
}
/**
* 注册提交
* @param {object} data
*/
static register(data) {
return server.post(`user/register`, data);
}
/**
* 登陆发送短信验证码
* @param {object} data
*/
static sendSmsCodeBeforeLogin(data) {
return server.post(`/login/sendSmsCodeBeforeLogin`, data);
}
/**
* 登陆发送邮箱验证码
* @param {object} data
*/
static sendEmailCodeBeforeLogin(data) {
return server.post(`/login/sendEmailCodeBeforeLogin`, data);
}
/**
* 登陆初始化验证
* @param {object} data
*/
static login(data) {
return server.post(`user/login`, data);
}
/**
* 登陆二次验证
* @param {object} data
*/
static loginConfirm(data) {
return server.post(`/user/loginConfirm`, data)
}
/**
* 退出登录
*/
static logout() {
return server.post(`/user/logout`);
}
/**
* 上传文件
* @param {FormData} data
*/
static uploadImage(data) {
return server.post(`/uploadImage`, data);
}
/**
* 忘记密码的账号验证
* @param {object} data
*/
static forgetPasswordAttempt(data) {
return server.post(`/user/forgetPasswordAttempt`, data);
}
/**
* 忘记密码短信验证
*/
static sendSmsCodeForgetPassword(data) {
return server.post(`/user/sendSmsCodeForgetPassword`, data);
}
/**
* 忘记密码邮箱验证
*/
static sendEmailCodeForgetPassword(data) {
return server.post(`/user/sendEmailCodeForgetPassword`, data);
}
static forgetPwdSumit(data) {
return server.post(`/user/forgetPassword`, data);
}
// 消息通知
static myNotifiables(data) {
return server.get('/user/myNotifiables', {params:data})
}
// 未读消息数量
static myNotifiablesCount() {
return server.get('/user/myNotifiablesCount')
}
// 消息详情
static readNotifiable(data){
return server.get('/user/readNotifiable',{params:data})
}
// 一键已读
static batchReadNotifiables(){
return server.get('/user/batchReadNotifiables')
}
// 获取logo
static getLogo(){
return server.get('/index/logo')
}
// 移动端文章
static article(data){
return server.get('/article/list',{params:data})
}
// 文章详情
static articleDetail(data){
return server.get('/article/detail',{params:data})
}
// 文章详情
static agent(data){
return server.post('/agent/register',data)
}
/**
* 注册gc验证码
* @param data {email,token}
*/
static sendGCode() {
return server.get(`/register/Graph_che`);
}
// 提币获取邮箱验证码
static getWdcode(data){
return server.get(`/user/wdcode`,{params:data});
}
}
export default Member;

111
src/api/option.js

@ -0,0 +1,111 @@
import server from './server';
class Option {
// 交易对
static getOptionSymbol() {
return server.get(`/option/getOptionSymbol`);
}
/**
* 获取期权交割记录
* @param {object} data
* @param {string} data.pair_id
* @param {string} data.time_id
*/
static getSceneResultList(data) {
return server.get(`/option/getSceneResultList`, {
params: data
})
}
/**
* 获取k线数据
* @param {object} data
* @param {string} data.symbol
* @param {string} data.period
* @param {string} data.size
* @param {string} data.form
* @param {string} data.to
*/
static getKline(data) {
// let url = `https://api.hadax.com/market/history/kline`;
let url = `/option/getKline`;
return server.get(url, {
params: data
})
}
/**
* 获取可用于期权交易的币种列表
*/
static getBetCoinList() {
return server.get(`/option/getBetCoinList`)
}
/**
* 获取指定币种的余额
* @param {object} data
* @param {string} data.coin_id
*/
static getUserCoinBalance(data) {
return server.get(`/option/getUserCoinBalance`,{params:data})
}
/**
* 获取当前最新期权场景
* @param {object} data
* @param {string} data.pair_id
* @param {string} data.time_id
*/
static sceneDetail(data) {
return server.get(`/option/sceneDetail`, {
params: data
})
}
/**
* 获取全部期权场景
*/
static sceneListByPairs() {
return server.get(`/option/sceneListByPairs`)
}
/**
* 获取当前最新期权场景赔率
* @param {object} data
* @param {string} data.pair_id
* @param {string} data.time_id
*/
static getOddsList(data) {
return server.get(`/option/getOddsList`,{
params:data
})
}
/**
* 获取用户期权购买记录
* @param {object} data
* @param {string} data.status
* @param {string} data.pair_id
* @param {string} data.time_id
*/
static getOptionHistoryOrders(data) {
return server.get(`/option/getOptionHistoryOrders`,{params:data})
}
/**
* 购买期权
* @param {object} data
* @param {string} data.bet_amount
* @param {string} data.bet_coin_id
* @param {string} data.odds_id
* */
static betScene(data){
return server.post(`/option/betScene`,data)
}
/**
* 获取交易价格组
* @param {object} data
* @param {string} data.symbol
*
*/
static getNewPriceBook(data){
return server.get('/option/getNewPriceBook',{
params:data
})
}
}
export default Option;

105
src/api/order.js

@ -0,0 +1,105 @@
import server from './server';
class Order {
/**
* 发布委托
* @param {object} data
* @param {string} data.direction 方向
* @param {number} data.type - 类型
* @param {string} data.symbol - 交易对
* @param {number} data.entrust_price - 价格
* @param {number} data.amount - 数量
*
*/
static storeEntrust(data) {
return server.post(`/exchange/storeEntrust`,data);
}
/**
* 获取历史委托
* @param {object} data
* @param {string} data.direction 方向
* @param {number} data.type - 类型
* @param {string} data.symbol - 交易对
*
*/
static getHistoryEntrust(data) {
return server.get(`/exchange/getHistoryEntrust`,{
params:data
});
}
/**
* 获取当前委托
* @param {object} data
* @param {string} data.direction 方向
* @param {number} data.type - 类型
* @param {string} data.symbol - 交易对
*
*/
static getCurrentEntrust(data) {
return server.get(`/exchange/getCurrentEntrust`,{
params:data
});
}
// 获取止盈止损单
static getConditionEntrust(data) {
return server.get(`/exchange/getConditionEntrust`,{
params:data
});
}
/**
* 获取委托成交记录
* @param {object} data
* @param {string} data.entrust_id 委托id
* @param {number} data.entrust_type - 买入卖出
* @param {string} data.symbol - 交易对
*
*/
static getEntrustTradeRecord(data) {
return server.get(`/exchange/getEntrustTradeRecord`,{
params:data
});
}
/**
* 撤单
* @param {object} data
* @param {string} data.entrust_id 委托id
* @param {number} data.entrust_type - 买入卖出
* @param {string} data.symbol - 交易对
*
*/
static cancelEntrust(data) {
return server.post(`/exchange/cancelEntrust`,data);
}
/**
* 批量撤单
* @param {object} data
* @param {string} data.symbol - 交易对
*
*/
static batchCancelEntrust(data) {
return server.post(`/exchange/batchCancelEntrust`,data);
}
// 获取交易对
static getExchangeSymbol(){
return server.get('/exchange/getExchangeSymbol')
}
/**
* 期权交易记录
* @param {object} [data]
* @param {string} data.status
* @param {string} data.pair_id
* @param {string} data.time_id
*
*/
static getOptionHistoryOrders(data){
return server.get('/option/getOptionHistoryOrders',{
params:data
})
}
}
export default Order;

63
src/api/otc.js

@ -0,0 +1,63 @@
import server from './server';
class Otc {
static userPayment(data) {
return server.get(`/userPayment`,{params:data},{loading:true});
}
static editUserPayment(data) {
return server.post(`/userPayment/${data.id}`,data,{loading:true});
}
static getUserPayment(data) {
return server.post(`/userPayment/${data.id}`,{},{loading:true});
}
static addUserPayment(data) {
return server.post(`/userPayment`,data,{loading:true});
}
static otcTicker(){
return server.get(`/otc/otcTicker`,{});
}
static tradingEntrusts(data){
return server.get(`/otc/tradingEntrusts`,{params:data},{loading:true})
}
static storeEntrust(data){
return server.post(`/otc/storeEntrust`,data,{loading:true})
}
static storeOrder(data){
return server.post(`/otc/storeOrder`,data,{loading:true})
}
static myEntrusts(data){
return server.get(`/otc/myEntrusts`,{params:data},{loading:true})
}
static myOrders(data){
return server.get(`/otc/myOrders`,{params:data},{loading:true})
}
static cancelEntrust(data){
return server.post(`/otc/cancelEntrust`,data,{loading:true})
}
static cancelOrder(data){
return server.post(`/otc/cancelOrder`,data,{loading:true})
}
static confirmPaidOrder(data){
return server.post(`/otc/confirmPaidOrder`,data,{loading:true})
}
static confirmOrder(data){
return server.post(`/otc/confirmOrder`,data,{loading:true})
}
static notConfirmOrder(data){
return server.post(`/otc/notConfirmOrder`,data,{loading:true})
}
static orderDetail(data){
return server.get(`/otc/orderDetail`,{params:data},{loading:true})
}
static otcAccount(data){
return server.get(`/otc/otcAccount`,{params:data},{loading:true})
}
static legalBuy(data){
return server.post(`/user/legal-buy-sell`,data)
}
static legalPrice(data){
return server.post(`/user/legal-unit-price`,data)
}
}
export default Otc;

65
src/api/profile.js

@ -0,0 +1,65 @@
import server from './server';
class Profile {
// 获取用户信息
static getUserInfo() {
return server.get(`/user/getUserInfo`,{loading:false});
}
// 获取实名认证信息
static getAuthInfo() {
return server.get(`/user/getAuthInfo`);
}
/**
* 初级认证 认证第一步
* @param {object} data
* @param {number} data.country_code
* @param {number} data.country_id // 区号id
* @param {string} data.realname
* @param {number} data.id_card //证件号
* @param {number} data.type //证件类型
* @param {string} data.birthday //出生日期
* @param {string} data.address //地址
* @param {string} data.city //城市
* @param {string} data.extra //额外信息
* @param {string} data.postal_code //邮政编码
* @param {string} data.phone //手机号
*/
static primaryAuth(data) {
return server.post(`/user/primaryAuth`, data);
}
/**
* 高级认证认证第二步
* @param {object} data
* @param {string} data.front_img //证件照正面
* @param {string} data.back_img //证件照反面
* @param {string} data.hand_img //手持证件照
*/
static topAuth(data) {
return server.post(`/user/topAuth`, data);
}
/**
* 登录记录
*/
static getLoginLogs(data){
return server.get(`/user/getLoginLogs`, {
params : data
})
}
/**
* 邀请推广
*/
static generalizeInfo(){
return server.get(`/generalize/info`)
}
/**
* 推广记录
*/
static generalizeList(data){
return server.get(`/generalize/list`,{
params : data
})
}
}
export default Profile;

101
src/api/record.js

@ -0,0 +1,101 @@
import server from './server'
class Record {
/**
* fundHistory列表
* @param {Object} data
*/
static fundList(data) {
return server.get(`/coin/getAllList`, data);
}
/**
* 币币用户当前委托记录
* @param {Object} data
*/
static openOrder(data) {
return server.post(`/coin/orders/openOrder`, data);
}
static conditionOrders(data) {
return server.post(`/coin/orders/condition/openOrder`, data);
}
/**
     * 币币用户取消接口
     * @param {Object} data 
    */
   static openOrderCancel(data) {
      return server.post(`/coin/orders/cancel/${data}`);
 }
static orderConditionCancel(data) {
return server.post(`/coin/orders/condition/cancel/${data}`)
}
/**
     * 币币用户筛选接口
     * @param {Object} data 
    */
   static openOrderfilter() {
      return server.post(`/coin/orders/filter`);
 }
/**
* 用户返佣记录
* @param {Object} data
*/
static rewardList(data) {
return server.post(`/member/rewardList`, data);
}
/**
* 币币用户历史委托
* @param {Object} data
*/
static history(data) {
return server.post(`/coin/orders/history`, data);
}
/**
     * 联系我们
     * @param {Object} data 
    */
   static contactUs(data) {
      return server.post(`/contactUs/save` , data);
 }
/**
     * 取消订单
     * @param {Object} data 
    */
   static cancelActiveOrder(data) {
      return server.get(`/futuresOrders/cancelActiveOrder/${data}`);
 }
/**
     * 取消订单
     * @param {Object} data 
    */
   static cancelById(data) {
      return server.get(`/futuresConditionOrders/cancelById/${data}`);
 }
}
export default Record;

177
src/api/server/Socket.js

@ -0,0 +1,177 @@
class Socket {
constructor(link, ...args) {
// 初始化socket
if (link.constructor === WebSocket) {
this.socket = link;
} else {
this.socket = new WebSocket(link);
}
// this.socket.binaryType = 'arraybuffer';
this.doOpen();
// 连接状态的标识符
this.readyState = this.socket.readyState;
// 订阅/发布模型
this._events = {
// 订阅的事件 : 发布的方法
};
// 定时验证的标识符
this.heartBeatTimer = null;
}
// 执行socket并发布事件
doOpen() {
this.afterOpenEmit = [];
// 执行socket连接 并初始化验证请求
this.socket.addEventListener("open", evt => this.onOpen(evt));
// 接收socket数据
this.socket.addEventListener("message", evt => this.onMessage(evt));
// 关闭socket连接
this.socket.addEventListener("close", evt => this.onClose(evt));
// 请求发生错误
this.socket.addEventListener("error", err => this.onError(err));
}
// 发布后通知订阅者
Notify(entry) {
// 检查是否有订阅者 返回队列
const cbQueue = this._events[entry.Event];
if (cbQueue && cbQueue.length) {
for (let callback of cbQueue) {
if (callback instanceof Function) callback(entry.Data);
}
}
}
// 请求数据的方法
onOpen(evt) {
// 每隔20s检查连接
// this.heartBeatTimer = setInterval(() => this.send({
// 'cmd': 'ping',
// 'args': ''
// }), 20000);
// 通知订阅
this.Notify({Event: 'open', Data : evt});
}
/**
* 订阅所有的数据
* @param {array|object} datas 订阅参数集合
*/
send(datas) {
if (datas.constructor != Array) {
datas = [datas];
}
for (let item of datas) {
this.socket.send(JSON.stringify(item));
}
}
onMessage(evt) {
try {
// 解析推送的数据
const data = JSON.parse(evt.data);
// 通知订阅者
this.Notify({
Event: 'message',
Data: data
});
} catch (err) {
console.error(' >> Data parsing error:', err);
// 通知订阅者
this.Notify({
Event: 'error',
Data: err
});
}
}
// 添加事件监听
on(name, handler) {
this.subscribe(name, handler);
}
// 取消订阅事件
off(name, handler) {
this.unsubscribe(name, handler);
}
// 订阅事件的方法
subscribe(name, handler) {
if (this._events.hasOwnProperty(name)) {
this._events[name].push(handler); // 追加事件
} else {
this._events[name] = [handler]; // 添加事件
}
}
// 取消订阅事件
unsubscribe(name, handler) {
let start = this._events[name].findIndex(item => item === handler);
// 删除该事件
this._events[name].splice(start, 1);
}
checkOpen() {
return this.readyState >= 2;
}
onClose(evt) {
this.Notify({Event: 'close', Data : evt});
}
onError(err) {
this.Notify({Event: 'error', Data : err});
}
emit(data) {
return new Promise((resolve) => {
this.send(JSON.stringify(data));
this.on('message', function (data) {
resolve(data);
});
});
}
doClose() {
this.socket.close();
}
destroy() {
if (this.heartBeatTimer) {
clearInterval(this.heartBeatTimer);
this.heartBeatTimer = null;
}
this.doClose();
this._events = {};
this.readyState = 0;
this.socket = null;
}
}
export default Socket

168
src/api/server/convention.js

@ -0,0 +1,168 @@
/**
* axios的惯例配置
*
* @author lautin
* @created 2019-11-21 21:18:25
*/
// import Qs from 'qs';
import http from 'http';
import https from 'https';
// 这些是用于发出请求的可用配置选项。其中url为必选项,method默认值为GET
const config = {
// url是相对于服务器根地址的路径
url: '',
method: 'get', // default
// baseURL将被前缀为url,除非url是绝对的。
// 将baseURL设置为传递相对url的axios实例是很方便的
baseURL: '',
// `transformRequest`允许在请求数据发送到服务器之前对其进行修改
// 这只适用于请求方法`PUT POST PATCH 和 DELETE `
// 数组中的最后一个函数必须返回一个!!字符串!!或Buffer的一个实例ArrayBuffer,
// FormData或Stream 你可以修改headers对象。
// transformRequest: [function (data, headers) {
// // 此处写下你想如何转化数据
// return data;
// }],
// `transformResponse`允许更改之前的响应数据 它被传递到then/catch
transformResponse: [function (data) {
// 此处写下你想如何转化数据
return data;
}],
// 要发送的自定义头
headers: {
'X-Requested-With': 'XMLHttpRequest'
},
// 'params'是与请求一起发送的URL参数 必须是一个普通对象或URLSearchParams对象
params: {
// ID: 12345
},
// 一个可选函数,负责序列化params,将对象转化为urlencode数据
// (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
// paramsSerializer: function (params) {
// return Qs.stringify(params, {
// arrayFormat: 'brackets'
// })
// },
// data是作为请求体发送的数据 只适用于请求方法`PUT POST 和 PATCH`
// 当没有设置transformRequest时,必须是以下类型之一:
// -字符串,普通对象,ArrayBuffer,ArrayBufferView,URLSearchParams
// -只支持浏览器FormData, File, Blob
// -只有节点:流,缓冲区
data: {
},
// 指定请求超时之前的毫秒数。如果请求花费的时间超过timeout将被中止。
timeout: 10, // default is `0` (no timeout)
//表示有跨站点访问控制请求时应该使用凭证
withCredentials: false, // default
// adapter允许自定义处理请求,这使得测试更加容易。
// 返回一个Promise并提供一个有效的响应(参见lib/adapter/README.md)。
// adapter: function (config) {
// /* ... */
// },
// auth表示应该使用`HTTP Basic auth`,并提供凭据。
// 这将设置一个"授权"标题,覆盖任何现有的
// '授权'自定义标头,你已经设置使用'标头'。
// 请注意,只有HTTP基本认证是可配置的通过这个参数。
// 对于不记名令牌等,使用"授权"自定义标头代替。
// auth: {
// username: 'janedoe',
// password: 's00pers3cret'
// },
// 服务器响应的数据类型 选项有:
//'arraybuffer', 'document', 'json', 'text', 'stream'
// 只支持浏览器:"blob"
responseType: 'json', // default
// 用于解码响应的编码
// 注意:对于'stream'或客户端请求的'responseType'被忽略
responseEncoding: 'utf8', // default
// `xsrfCookieName` is the name of the cookie to use as a value for xsrf token
xsrfCookieName: 'XSRF-TOKEN', // default
// `xsrfHeaderName` is the name of the http header that carries the xsrf token value
xsrfHeaderName: 'X-XSRF-TOKEN', // default
// ' onUploadProgress '允许处理上传的进程事件
onUploadProgress: function (progressEvent) {
// Do whatever you want with the native progress event
},
// ' onDownloadProgress '允许处理下载的进度事件
onDownloadProgress: function (progressEvent) {
// Do whatever you want with the native progress event
},
// 定义http响应内容的最大字节数
maxContentLength: 2000,
// `validateStatus` defines whether to resolve or reject the promise for a given HTTP response status code.
// If `validateStatus` returns `true` (or is set to `null`
// or `undefined`), the promise will be resolved;
// otherwise, the promise will be rejected.
validateStatus: function (status) {
// 返回2开头的状态码才进入resolve 否则都按rejected处理
return status >= 200 && status < 300; // default
},
// 定义在node.js中跟随的最大重定向数。
// 如果设置为0,则不会遵循重定向。
maxRedirects: 5, // default
// `socketPath` defines a UNIX Socket to be used in node.js.
// e.g. '/var/run/docker.sock' to send requests to the docker daemon.
// Only either `socketPath` or `proxy` can be specified.
// If both are specified, `socketPath` is used.
socketPath: null, // default
// `httpAgent` and `httpsAgent` define a custom agent(定制代理) to be used when performing(体现) http and https requests, respectively(独立), in node.js. This allows options to be added like `keepAlive` that are not enabled by default.
httpAgent: new http.Agent({
keepAlive: true
}),
httpsAgent: new https.Agent({
keepAlive: true
}),
// 'proxy' defines the hostname and port of the proxy server.
// You can also define your proxy using the conventional `http_proxy` and
// `https_proxy` environment variables. If you are using environment variables
// for your proxy configuration, you can also define a `no_proxy` environment
// variable as a comma-separated list of domains that should not be proxied.
// Use `false` to disable proxies, ignoring environment variables.
// `auth` indicates that HTTP Basic auth should be used to connect to the proxy, and
// supplies credentials.
// This will set an `Proxy-Authorization` header, overwriting any existing
// `Proxy-Authorization` custom headers you have set using `headers`.
// proxy: {
// host: '127.0.0.1',
// port: 9000,
// auth: {
// username: 'mikeymike',
// password: 'rapunz3l'
// }
// },
// `cancelToken` specifies a cancel token that can be used to cancel the request
// (see Cancellation section below for details)
// cancelToken: new CancelToken(function (cancel) {})
}
export default config;

196
src/api/server/index.js

@ -0,0 +1,196 @@
/**
* 初始化请求的封装
*
* @author lautin
* @created 2019-11-21 14:54:43
*/
import axios from 'axios';
import qs from 'qs';
import {
Message,
Loading
} from 'element-ui'
// 加入状态管理
// import store from '../../store'
// 加入进度条
// import NProgress from 'nprogress' // nprogress插件
// import 'nprogress/nprogress.css' // nprogress样式(必须)
// 加载惯例配置
import settings from './convention';
// 设置语言: 默认ua -> 用户设置 -> 参数指定
// let browserLang = navigator.language.includes('zh') ? 'cn' : 'en'; // ua设置
let browserLang='en'
let lang = localStorage.lang || browserLang; //
let querystring = location.search.slice(1);
if (querystring.includes('lang')) {
lang = qs.parse(querystring)['lang'];
}
// 用户认证
let token = localStorage.getItem("token");
let auth = { authorization: `bearer ${token}` } || {};
if(lang=='cn'){
lang='zh-CN'
}else if(lang=='tw'){
lang='zh-TW'
}else if(lang=='ukr'){
lang='uk'
}
// 设置头信息
const headers = Object.assign({
'X-Requested-With': 'XMLHttpRequest',
lang,
}, auth);
// console.log(process.env.NODE_ENV)
// 初始化配置
Object.assign(settings, {
// api请求根地址 打包使用完整地址 调试使用本地服务器代理 避免跨域
// baseURL: process.env.NODE_ENV == 'production' ? 'http://qkladmin2.ruanmeng.top/api/' : '/api/',
// baseURL: process.env.NODE_ENV == 'production' ? 'https://guanli.coin.amatak.net/api/' : '/api/',
baseURL: process.env.NODE_ENV == 'production' ? 'https://sbga.sbdccoin.com/api/' : '/api/',
// baseURL: 'https://aaccdd.kixcoin.org/api/' ,
// baseURL: 'https://guanli.coin.amatak.net/api/',
// baseURL: 'https://api.hipc.world/',
// 加载超时限定5s
timeout: 10000,
headers,
// 跨站请求必要凭证
// withCredentials: true,
});
// 创建服务请求对象
const server = axios.create(settings);
const exclude = [
`getHistoryEntrust`,
`getConditionEntrust`,
`getCurrentEntrust`,
`getUserCoinBalance`,
`getKline`,
`getEntrustTradeRecord`,
`floor`,
`subscribeRecords`
];
let loading = null;
// request拦截器
server.interceptors.request.use(
config => {
// 剔除部分高频接口 主要是交易时的后台操作
if (!exclude.find(item => config.url.includes(item))) {
if (!config.config || config.config.loading) {
loading = Loading.service({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.5)'
});
}
}
return config;
},
error => {
// do something with request error
console.log(error) // for debug
Promise.reject(error)
}
)
// respone拦截器
server.interceptors.response.use(
// 请求状态成功
response => {
// 如果有加载的loading则关闭
if (loading) loading.close();
let { code, message, data } = response.data;
// console.log(code);
if(code==4001){
sessionStorage.setItem('COde',code)
}
if (code != 200 && code != 1021) {
switch (code) {
case 1003: // 登陆失效
message = "登录失效,请重新登录!";
// 清除session
localStorage.removeItem("auth");
localStorage.removeItem("token");
location.href = "/"
break;
case 1034: // 请设置交易密码
message = "请先设置交易密码!";
break;
default: // 通用错误提示
}
if(code!=1051 && code!=1003){
Message({
type: 'error',
duration: 2 * 1000,
message,
});
}
// 进入catch
if(code==4002){
throw (code);
}else{
throw new Error(message);
}
}
return data;
},
// 请求发生错误
error => {
if (loading) loading.close();
let message;
if (error.message.includes("timeout")) {
message = "Connection timed out";
} else {
message = error.message;
}
// 错误提示
// Message({
// type: 'error',
// duration: 2 * 1000,
// message,
// callback() {
// // 进入catch
// throw new Error(error);
// }
// });
return Promise.reject(error)
}
)
// request方法中的配置会合并到server中
export default server;

205
src/api/setting.js

@ -0,0 +1,205 @@
import server from './server'
class Setting {
// 获取用户信息
static getUserInfo() {
return server.get(`/user/getUserInfo`);
}
/**
* 修改用户信息
* @param {{username:string,avatar:'url'}} data
*/
static updateUserInfo(data) {
return server.post(`/user/updateUserInfo`, data);
}
/**
* 关闭手机号/邮箱/谷歌验证
* @param {object} data
* @param {number} data.type 1:手机 2邮箱 3谷歌
* @param {number} data.sms_code 手机验证码
* @param {number} data.email_code 邮箱验证码
* @param {number} data.google_code 谷歌验证码
*/
static disableSmsEmailGoogle(data) {
return server.post(`/user/disableSmsEmailGoogle`, data);
}
/**
* 开启手机号/邮箱/谷歌验证
* @param {object} data
* @param {number} data.type 1:手机 2邮箱 3谷歌
* @param {number} data.sms_code 手机验证码
* @param {number} data.email_code 邮箱验证码
* @param {number} data.google_code 谷歌验证码
*/
static enableSmsEmailGoogle(data) {
return server.post(`/user/enableSmsEmailGoogle`, data);
}
/**
* 发送邮箱验证码
* @param {object} data
* @param {string} data.email 邮箱号
*/
static sendBindEmailCode(data) {
return server.post(`/user/sendBindEmailCode`, data);
}
/**
* 登录二次验证开关
*/
static switchSecondVerify() {
return server.get(`/user/switchSecondVerify`);
}
/**
* 账号安全信息
*/
static accountSecurity() {
return server.get(`/user/security/home`);
}
/**
* 设置或重置交易密码
* @param {object} data
* @param {string} data.payword
* @param {string} data.payword_confirmation
* @param {string} data.sms_code
* @param {string} data.email_code
* @param {string} data.google_code
*/
static setOrResetPaypwd(data) {
return server.post(`/user/setOrResetPaypwd`, data);
}
/**
* 设置或重置登录密码
* @param {object} data
* @param {string} data.password
* @param {string} data.password_confirmation
* @param {string} data.sms_code
* @param {string} data.email_code
* @param {string} data.google_code
*/
static updatePassword(data) {
return server.post(`/user/updatePassword`, data);
}
/**
* 获取验证码
* @param {object} data
* @param {number} data.type
*/
static getCode(data) {
return server.post(`/user/getCode`, data);
}
/**
* 绑定邮箱
* @param {object} data
* @param {string} data.email
* @param {string} data.email_code
* @param {string} data.sms_code
* @param {string} data.google_code
*/
static bindEmail(data) {
return server.post(`/user/bindEmail`, data);
}
/**
* 绑定手机
* @param {object} data
* @param {string} data.phone
* @param {string} data.country_code - 手机区号
* @param {string} data.sms_code
* @param {string} data.email_code
* @param {string} data.google_code
*/
static bindPhone(data) {
return server.post(`/user/bindPhone`, data);
}
/**
* 解绑邮箱
* @param {object} data
* @param {string} data.sms_code
* @param {string} data.email_code
* @param {string} data.google_code
*/
static unbindEmail(data) {
return server.post(`/user/unbindEmail`, data);
}
/**
* 解绑手机
* @param {object} data
* @param {string} data.sms_code
* @param {string} data.email_code
* @param {string} data.google_code
*/
static unbindPhone(data) {
return server.post(`/user/unbindPhone`, data);
}
/**
* 忘记登录密码 - 账号确认
* @param {object} data
* @param {string} data.account
*/
static forgetPasswordAttempt(data) {
return server.post(`/user/forgetPasswordAttempt`, data);
}
/**
* 忘记登录密码 - 提交
* @param {object} data
* @param {string} data.account
* @param {string} data.email_code
* @param {string} data.google_code
* @param {string} data.password
* @param {string} data.password_confirmation
*/
static forgetPassword(data) {
return server.post(`/user/forgetPassword`, data);
}
/**
* 获取谷歌密钥
*/
static getGoogleToken(data) {
return server.get(`/user/getGoogleToken`, data);
}
/**
* 绑定谷歌
* @param {object} data
* @param {string} data.google_token
* @param {string} data.google_code
* @param {string} data.sms_code
* @param {string} data.email_code
*/
static bindGoogleToken(data) {
return server.post(`/user/bindGoogleToken`, data);
}
/**
* 解绑谷歌
* @param {object} data
* @param {string} data.sms_code
* @param {string} data.google_code
* @param {string} data.email_code
*/
static unbindGoogleToken(data) {
return server.post(`/user/unbindGoogleToken`, data);
}
/**
* 发送绑定手机短信验证码
* @param {object} data
* @param {string} data.phone
* @param {string} data.country_code
*/
static sendBindSmsCode(data) {
return server.post(`/user/sendBindSmsCode`, data);
}
/**
* 在线获取验证码
* @param {object} data
* @param {string} data.type 1手机 2邮箱
*/
static getCode(data) {
return server.post(`/user/getCode`, data);
}
}
export default Setting;

35
src/api/subscride.js

@ -0,0 +1,35 @@
import server from './server';
class Subscribe {
/**
* 请求数据
*/
static subscribeTokenList(data){
return server.post('/user/subscribeTokenList',data)
}
static activity(){
return server.get('/subscribe/activity')
}
static subscribe(data){
return server.post('/user/subscribe',data)
}
/**
* 提交数据
* @param {object} data
* @param {string} data.amount
* @param {string} data.coin_name
*/
static subscribeNow(data){
return server.post('/user/subscribeNow',data)
}
/**
* 申购码
* @param {Object} data
*/
static changePurchaseCode(data) {
return server.post(`/user/changePurchaseCode`, data);
}
}
export default Subscribe;

155
src/api/wallet.js

@ -0,0 +1,155 @@
import server from './server';
class Wallet {
// paypal账号
static paypal() {
return server.get(`/user/paypal`);
}
// 提币记录
static withdrawalRecord() {
return server.post(`/user/withdrawalRecord`);
}
// PayPal支付
static rechargeManualPost(data) {
return server.post(`/user/rechargeManualPost`, data);
}
// PayPal充值记录
static rechargeManualLog() {
return server.post(`/user/rechargeManualLog`);
}
// 充值记录
static depositHistory() {
return server.post(`/user/depositHistory`);
}
// 钱包划转记录
static transferRecord() {
return server.post(`/user/transferRecord`);
}
// 申购记录
static subscribeRecords() {
return server.post(`/user/subscribeRecords`);
}
// 个人资产管理
static personalAssets() {
return server.post(`/user/personalAssets`);
}
// 各个币种的资产
static fundAccount(data) {
return server.post(`/user/fundAccount`, data);
}
// 代币以及对应的余额
static tokenList(data) {
return server.post(`/user/tokenList`, data);
}
// 资金划转
static fundsTransfer(data) {
return server.post(`/user/fundsTransfer`, data);
}
// 生成充值地址
static walletImage(data) {
return server.post(`/user/walletImage`, data);
}
// 提交充值
static recharge(data) {
return server.post(`/user/recharge`, data);
}
// 提交提币
static withdraw(data) {
return server.post(`/user/withdraw`, data);
}
// 提币地址管理
static getUserWithdrawAdress(data) {
return server.post(`/user/withdrawalAddressManagement`, data);
}
// 编辑提币地址
static editUserWithdrawAdress (data) {
return server.post(`/user/editUserAdress`, data);
}
// 删除提币地址
static delUserWithdrawAdress() {
return server.post(`/user/withdrawalAddressManagement`, data);
}
// 添加提币地址
static addUserWithdrawAdress(data) {
return server.post(`/`, data);
}
static withdrawalSelectAddress() {
return server.post(`/user/withdrawalSelectAddress`);
}
static addWithdrawAddress(data) {
return server.post(`/user/withdrawalAddressAdd`, data);
}
// 查询币种余额
static withdrawalBalance(data) {
return server.post(`/user/withdrawalBalance`, data);
}
// 修改用户地址
static withdrawalAddressModify(data) {
return server.post(`/user/withdrawalAddressModify`, data);
}
// 删除币种地址
static withdrawalAddressDeleted(data) {
return server.post(`/user/withdrawalAddressDeleted`, data);
}
// 生成钱包地址
static createWalletAddress() {
return server.post(`/user/createWalletAddress`);
}
// 获取转换列表
static accounts(data){
return server.get(`/wallet/accounts`, {params:data})
}
// 获取子账户类别
static accountPairList(data){
return server.get('/wallet/accountPairList',{params:data})
}
// 获取转换币种列表
static coinList(data){
return server.get('/wallet/coinList',{params:data})
}
// 获取余额
static getBalance(data){
return server.get('/wallet/getBalance',{params:data})
}
// 资金划转
static transfer(data){
return server.post('/wallet/transfer',data)
}
// 合约资金列表
static accountList(data){
return server.get('/contract/accountList',{params:data})
}
// 合约资金流水
static accountFlow(data){
return server.get('/contract/accountFlow',{params:data})
}
// 撤销订单
static cancelWithdraw(data){
return server.post('/user/cancelWithdraw ',data,{loading:true})
}
}
export default Wallet;

BIN
src/assets/fonts/opensans/OpenSans-Bold.ttf

Binary file not shown.

BIN
src/assets/fonts/opensans/OpenSans-Regular.ttf

Binary file not shown.

BIN
src/assets/fonts/overpass/Overpass-Bold.woff2

Binary file not shown.

BIN
src/assets/fonts/overpass/Overpass-Light.woff2

Binary file not shown.

BIN
src/assets/fonts/overpass/Overpass-Regular.woff2

Binary file not shown.

BIN
src/assets/fonts/overpass/Overpass-SemiBold.woff2

Binary file not shown.

45
src/assets/i18n/cn/address.js

@ -0,0 +1,45 @@
const Address = {
management:'地址管理',
addAddress:'添加地址',
filter:'筛选器',
all:'所有地址',
white:'白名单地址',
nonWhite:'非白名单地址',
search:'搜索资产',
asset:'资产',
label:'标签',
address:'地址',
memoTag:'Memo/备注',
whitelist:'是否白名单',
action:'操作',
addWhiteLs:'添加白名单',
removeWhiteLs:'移除白名单',
confirmAddress:`您是否确认将此地址添加到白名单?`,
edit:'编辑地址',
delete:'删除地址',
withdrawAddress:'提币地址',
lableAddress:'为此地址添加标签',
whitelsAddress:'添加此地址至白名单',
submit:'提交',
cancel:'取消',
removeTips:'你确定要把这个地址从白名单中删除吗?',
deleteTips:'你确认要删除这个地址吗?',
google:'谷歌验证',
email:'邮件验证',
phone:'短信验证',
editAddress:'编辑地址',
verification:'验证',
confirm:'确认',
selectAsset:'选择资产',
enterAddress:'输入地址',
enterLabel:'输入标签',
selectCurrency:'请选择资产',
wrongAddress:'请输入正确格式的地址 ',
Yes:'是',
No:'否',
successfully:'地址添加成功',
enterAddressTips:'请输入地址',
enterLabelTips:'请输入标签',
enterMemo:'请输入Memo或选择No Memo。',
}
export default Address

53
src/assets/i18n/cn/application.js

@ -0,0 +1,53 @@
const Application = {
form: "项目上币申请表",
sendUser: "项目发起方",
sendUserEn: "币种英文名",
sendUserCn: "币种中文名",
contactPosition: "联系人及职位",
phone: "联系人电话",
tokenPrice: "市价",
email: "联系人邮箱",
address: "项目注册地",
mechanism: "项目投资机构",
personal: "个人",
currencyCode: "币种代码",
symbol: "符号",
currencyIdentification: "币种标识",
format: "支持{name}格式,文件小于{num}",
fundraisingDate: "募资日期",
officialWebsite: "官方网站",
whitePaperLinks: "白皮书链接",
noLink: "若无链接,请文末上传附件",
total_issue: "币种总发行量",
currencyCirculation: "币种流通量",
currencyAllocationRatio: "币种分配比例",
numberOfCurrencyHolders: "持币人数",
tradingPlatform: "已上线交易平台",
privatePlacement: "私募",
publicOfferingPrice: "公募价格",
company: "请附上货币单位",
coinType: "币种区块网络类型",
currencyIssueDate: "币种发行日期",
blockBrowser: "区块浏览器",
officialAddress: "官方钱包地址",
contractAddress: "合约地址",
link: "链接",
budget: "上币费预算",
unit: "为单位",
ofTokens: "上币后市场活动项目代币数量",
chineseCurrency: "币种中文介绍",
enCurrency: "币种英文介绍 ",
remarks: "备注",
uploadWhitePaper: "上传白皮书",
pleaseUpload: "请上传白皮书",
recommendationCode: "推荐人姓名机构及推荐码",
ifSo: "若有",
affirmsThat: "申明: 我在此确认上述所有信息均真实,完整和准确。 我将在经济上和法律上承担提供虚假信息的责任",
iKnow: "我知道了",
reSubmit: "重新提交",
pleaseConfirm: "请确认以上均为真实信息",
pleaseEnter:"请输入",
upLoadSuccess:"上传成功"
}
export default Application

109
src/assets/i18n/cn/assets.js

@ -0,0 +1,109 @@
const assets = {
allBtn:`全部`,
assets:`资产`,
totalVal:`所有资产价值`,
show:`显示数字`,
account_exchange:`现货账户`,
account_forex:`外汇合约账户`,
account_crypto:`永续合约账户`,
account_exchangeTab:`现货账户`,
account_contractsTab:`合约账户`,
withdrawalLimit:`24小时提币限额:`,
increase:`增加`,
transfer:`内部资金划转`,
history:`划转历史`,
from:``,
to:``,
asset:`资产`,
amount:`划转数量`,
maximum:`全部`,
enterAmount:`输入划转数量`,
proceed:`确定划转`,
avaliable:`余额`,
all:`所有资产`,
hideZero:`隐藏0余额资产`,
showZero:`展示0余额资产`,
assetTab:`资产`,
accountTotal:`总资产`,
availableTab:`可用余额`,
hold:`冻结余额`,
BTC_valuation:`BTC 估值`,
USD_valuation:`USD 估值`,
action:`操作`,
deposit:`充值`,
withdraw:`提币`,
trade:`交易`,
depositAddress:`充值地址`,
depositHistory:`充值记录`,
allHistory:`所有历史记录`,
date:`日期`,
address_hash:`地址/哈希`,
amountTab:`数量`,
progress:`进度`,
type:`类别`,
status:`状态`,
instructions:`充值说明`,
QRCode:`充值地址二维码`,
withdrawal:`提币`,
withdrawalLimit24h:`24小时提币限额`,
withdrawalAddress:`提币地址`,
enterAddress:`请输入提币地址`,
addressLs:`地址列表`,
addressLs_white:'是',
addressLs_noWhite:'否',
withdrawAmount:`提币数量`,
available:`可用余额`,
fee:`手续费`,
enterAmount:`请输入提币数量`,
receive:`实际到账`,
saveAddress:`保存此地址`,
addLable:`为此地址添加标签`,
enterLabel:`请输入标签`,
whiteLs:`将此地址添加至白名单`,
submit:`提交`,
withdrawalHistory:`提币记录`,
feeTab:`提币手续费`,
withdrawalInstructions:`提币说明`,
checkAddress:`请仔细检查并输入正确的提币钱包地址。`,
sendAddress:`发送不对应的数字货币到钱包地址会造成永久性的损失。`,
withdrawalFee:`提币手续费将从提币数量中扣除。`,
whiteLsTab:`是否白名单`,
label:`标签`,
address:`地址`,
memo_tag:`Memo/备注`,
back:`返回`,
addAddress:`添加新地址`,
transferSuccess:'划转成功',
preloaded:'预充值',
autoRecharge:'自动充值',
artificialAdd:'人工添加',
auditFailure:'人工审核失败',
copySucceed:'复制成功',
copyFailed:'复制失败',
addressEmpty:'请输入提币地址',
wrongAddress:'请确保输入的地址正确无误,我们检测到您输入的地址格式非常规。 如果您有任何疑问,请联系客服。',
quantityEmpty:'请输入提币数量',
numberWithdrawals:'提币数量不可高于可用余额',
passwordEmpty:'请输入交易密码',
moneySuccess:'提币成功',
forex:'外汇合约',
crypto:'永续合约',
accountBalance:'账户余额',
availableBalance:'可用余额',
positionMargin:'仓位保证金',
marginBalance:'保证金余额',
unrealizsedPL:'未实现盈亏',
orderMargin:'委托保证金',
marginUsed:'保证金使用率',
details:'详情',
leverage:'杠杆',
pwd:'请输入密码',
withdrawl:'提币',
transactionPwd:'交易密码',
minimun:'最低',
inputMemo:'请输入Memo',
minNumWithdraw:'提币数量不能低于最小提币限额',
enterMemo:'请输入Memo或选择No Memo。',
}
export default assets

130
src/assets/i18n/cn/commom.js

@ -0,0 +1,130 @@
const commom = {
// header
"option" : "期权交易",
"exchange" : "币币交易",
"markets" : "行情",
"blogs" : "博客",
"news" : "行业资讯",
"helps" : "帮助中心",
"service" : "服务条款",
"contactUs" : "联系我们",
"sign_in" : "登录",
"sign_up" : "注册",
noRecord: `暂无记录`,
getCode: `获取验证码`,
'help1' : `Forex Contract Guide`,
'help2' : `Contract Specifications`,
// wsq
startTime: '开始时间',
to: '至',
confirmBtn:'确认',
cancelBtn:'取消',
cancel: '取消委托',
endTime: '结束时间',
export: `导出`,
filter: '筛选器',
all:'不限',
// allCoin: '所有交易对',
// allDirection: '所有方向',
// allType: '所有类型',
search: '检索',
reset: '重置',
sell: '卖',
buy: '买',
limit: '限价委托',
market: '市价委托',
hideAll: '隐藏所有已取消委托',
canceled: '已取消',
waiting: '待撮合',
triggered:'已触发',
processing: '撮合中',
completed: '已完成',
available_phone:'请输入正确的手机号码',
available_email:'请输入正确的邮箱',
codeSent:'验证码已发送',
captcha:'验证码错误',
buyIn:`买入`,
sellOut:`卖出`,
limitOrder:`限价单`,
marketOrder:`市价单`,
enterValid:'请输入有效的手机号码或电子邮件!',
enterValidEmail:'请输入正确的邮箱地址',
enterValidPhone:'请输入有效的手机号码!',
enterAccount:'请输入账户',
enterEmail:'请输入正确的邮箱地址',
enterPhone:'请输入手机号码',
enterPwd:'请输入密码',
passwordRegular:'密码必须由8至15位数字与字母组成(必须同时包含数字与字母,也可使用符号)。',
newPassword:'请输入新密码',
confirmNewPassword:'请输入确认的新密码',
enterGoogleCode:'请输入谷歌验证码',
enterEmailCode:'请输入邮箱验证码',
enterSMSCode:'请输入短信验证码',
enterVerCode:`请输入验证码`,
exportFile:'请点击确认以导出文件。',
submit:'提交',
newzone:"打新专区",
college:"学院",
goTo:"前往",
logOut:"退出登录",
homePage:"首页",
currencyApplication:"上币申请",
apply:"申购",
accountInformation:"账户信息",
myWallet:"我的钱包",
commissionOrder:"委托订单",
securitySetting:"安全设置",
wallet:"钱包",
allAssets:"所有资产",
contractaccount:"合约账户",
transferFunds:"资金划转",
rechargeWithdraw:"充值提币",
order:"订单",
spotConsignment:"现货委托",
optionOrders:"期权订单",
perpetualContract:"永续合约",
foreignContract:"外汇合约",
notCertified:"未认证",
notData:"暂无数据",
assets:"资产",
myCommission:"我的返佣",
addressManagement:"地址管理",
auth:"实名认证",
invitationReward:"邀请奖励",
visitHistory:"访问记录",
noviceTutorial:"新手教程",
tradingStrategy:"交易策略",
industryResearch:"行业研究",
blockchainDictionary:"区块链词典",
mediaCoverage:"媒体报道",
selectFile:"选择文件",
upload:"上传",
delete:"删除",
tooBig:"文件尺寸过大,不得超过",
errorType:"文件类型错误",
resend:"重新发送",
sms:"短信",
email:"邮箱",
sendSuccess:"验证码发送成功",
retransmission:"重发"
}
export default commom

18
src/assets/i18n/cn/contact.js

@ -0,0 +1,18 @@
const Contact = {
contact:"联系我们",
help:"需要任何帮助请联系我们",
fullName:"全名",
enterFullName:"请输入全名",
email:"邮箱",
enterEmail:"请输入邮箱地址",
consultingService:"咨询项目",
pleseSelect:"请选择",
info:"信息",
enterInfo:"请输入信息",
contactInformation:"联系信息",
routineConsultation:"常规咨询",
customerService:"客户服务",
mediaCooperation:"媒体合作"
}
export default Contact;

26
src/assets/i18n/cn/contactUs.js

@ -0,0 +1,26 @@
const ContactUs = {
fullName:'全名',
phone:'手机号码',
email:'邮箱',
subject:'咨询项目',
msg:'信息',
contactUs:'联系我们',
help:'需要任何帮助请联系我们',
contactInfo:'联系信息',
inquiry:'常规咨询:',
support:'客户服务:',
media:'媒体合作:',
submit:'提交',
successfully:'提交成功',
msgTips:'请输入您的留言信息',
fullNameTips:'请输入全名',
emailTips:'请输入您的邮箱地址',
projectTips:`请选择咨询项目`,
enterFullName:`请输入全名`,
enterEmail:`请输入邮箱地址`,
enterSubject:`请选择咨询项目`,
enterMsg:`请输入信息`,
}
export default ContactUs

37
src/assets/i18n/cn/contractsAccount.js

@ -0,0 +1,37 @@
const contracts = {
title: `合约账户`,
forexs: `外汇合约账户`,
cryptos: `永续合约账户`,
contract: `合约委托记录`,
forex: `外汇合约`,
crypto: `永续合约`,
accountBalance: `账户余额`,
availableBalance: `可用余额`,
positionMargin: `仓位保证金`,
marginBalance: `保证金余额`,
unrealizsed: `未实现盈亏`,
orderMargin: `委托保证金`,
transfer: `资金划转`,
marginUsed: `保证金使用率`,
leverage: `杠杆`,
positions: `未平仓合约`,
contactName: `合约名称`,
contractsOpen: `未平仓合约数`,
direction: `方向`,
realised: `已实现盈亏`,
long: `做多`,
short: `做空`,
history: `账户余额记录`,
date: `日期`,
type: `类型`,
amount: `数量`,
deposit: `转入`,
withdrawal: `转出`,
open: `开仓手续费`,
close: `平仓手续费`,
funding: `资金流转`,
takeover: `仓位接管`,
realizedPNL: `已实现盈亏`,
}
export default contracts

27
src/assets/i18n/cn/course.js

@ -0,0 +1,27 @@
const Course = {
college:"学院",
noviceTutorial:"新手教程",
tutorialDetails:"教程详情",
howToBuyBitcoin:"如何购买比特币",
recommendedCourse:"推荐教程",
buy:"1分钟购买一笔比特币",
register:"注册",
visit:"访问{name}网站,并注册属于您的{name}账号",
realName:"实名认证",
upload:"上传有效证件,进行个人实名认证",
quickBuy:"一键购买并支付款项",
inIndex:"在首页/买币页面一键买币,支付完成后等待放币",
tradeNow:"马上去交易",
currencyTransaction:"秒懂币币交易",
contractEntryTransaction:"合约入门交易",
how:"如何进行期权交易",
TradingStrategy:"交易策略",
seeMore:"查看更多",
industryResearch:"行业研究",
oneClick:"一键智能交易",
inAssets:"在资产/充币页面一键充币,完成后可交易",
dictionary:"区块链词典",
media:"媒体报道"
}
export default Course;

337
src/assets/i18n/cn/exchange.js

@ -0,0 +1,337 @@
export default {
assets: "资产",
exchange: "现货交易",
// crypto: '币币合约',
perpetualSwap: '永续合约',
forex: '外汇合约',
contact_us: "联系我们",
support: "帮助中心",
login: "登 录",
register: "注 册",
asset: "资产",
account_exc: "现货账户",
recharge: "(存币&提币)",
account_con: "合约账户",
transfer: "资金划转",
fund: "充值记录",
orders: "委托",
exchange_orders: "现货委托",
contract_orders: "合约委托",
T1: "T1 未验证",
T2: "T2 已验证",
T3: "T3 已验证",
commission: "最高30%邀请返佣",
security: "账户&安全",
logout: "退出登录",
'help1': `Crypto FX Contract Guide`,
'help2': `Contract Specifications`,
search: "搜索",
fav: '自选',
pair: '交易对',
price: '价格',
change: '24h涨跌幅',
high: '24h最高价',
low: '24h最低价',
last: '最新价格',
volume: '24h成交量',
PriceUsdt: '价格',
qty: '数量',
total: '总值',
buy: '买入',
sell: '卖出',
orderType: '委托类型',
triggerPrice: '触发价格',
limitPrice: '限价价格',
amount: '数量',
orderTotal: '委托总值',
available: '可用余额',
enterAmount: '请输入数量',
enterTotal: '请输入总价',
enterPrice: '请输入价格',
enterTrigger: '请输入触发价格',
bestPrice: '在最佳市场价格成交',
markets: '最新成交',
time: '时间',
opens: '当前委托',
histories: '委托记录',
more: '查看更多',
conditions: '条件委托',
notice: '提示',
confirm: '确认',
cancel: '取消',
tips: '请点击确认以取消订单?',
success: '委托单取消成功',
orderPlaced: '委托成功',
succeed: '订单已取消',
chkLogin: '您需要先登录!',
succefully: '收藏成功',
fail: '收藏失败',
detail: '合约详细资料',
FAQ: '常见问题',
reference: '参考资料',
more: '更多',
bookList: '买卖盘',
limit: '限价单',
market: '市价单',
limitPositions: '限价',
marketPositions: '市价',
stop: '止盈止损',
stopCrypto: '条件',
stopLimit: '止盈止损-限价',
stopMarket: '止盈止损-市价',
// 交易表单提交验证的气泡提示信息
lessMinQty: "最小数量为",
lessMinTotal: "总价至少要",
setAPrice: "请先设置一个合适的价格",
emptyPrice: "价格不能为空",
emptyQty: "数量不能为空",
emptyTrigger: "触发价不能为空",
Buy: '买入',
Sell: '卖出',
closePosition: '平仓',
closePosition_tips: '在这里您可以快捷平仓,平仓会向市场提交抵消现有仓位的委托,选择市价立即使用市价委托平仓,请谨慎操作。',
realizedPNL: '已实现盈亏',
realizedPNL_tips: '自开仓以来的已实现盈亏。',
closeLimitWrap: '限价平仓?',
buyLimitClose: '买入平仓',
sellLimitClose: '限价卖出',
whenExecuted: '在执行时,将平调您的整个仓位。',
limitCloseBtn: '确认限价平仓',
MarketCloseWrap: "市价平仓?",
buyMarketClose: '买入平仓',
sellMarketClose: '市价卖出',
maketWillClose: '在执行时,将平调您的整个仓位。',
marketCloseBtn: '确认市价平仓',
unrealized: '未实现盈亏(回报率%)',
unrealized_tips: '该合约的未实现盈亏(使用最新成交价格计算),以及回报率。',
margin: '保证金',
margin_tips: '该仓位当前使用并锁定的保证金,以及您在该合约使用的杠杆倍数。您可以通过点击下方按钮来添加或减少仓位保证金。',
addMarginWrap: '添加/减少仓位保证金',
addMargin: '添加保证金',
removeMargin: '减少保证金',
contracts: '张合约',
currentPosition: '当前仓位',
assignedMargin: '当前已分配的保证金',
availableMargin: '可用余额',
maxRemovable: '最大可减少保证金',
maxRemovable_tips: '可以把未使用的保证金从仓位移除,注意未实现盈利不能被移除。',
userRemoveMargin: '移除保证金',
liqPrice: '强平价格',
'liqPrice_tips-swap': '当该合约的标记价格低于(多仓)或者高于(空仓)该强平价格时,该仓位会被强制平仓。',
'liqPrice_tips-forex': '当该合约的指数价格低于(多仓)或者高于(空仓)该强平价格时,该仓位会被强制平仓。',
markPrice: '标记价格',
markPrice_tips: '该合约最新的合理标记价格,用来判定强制平仓。会与合约最新成交价格不同,来避免市场价格被操控。不会影响合约的结算,点击查看详细信息。',
entryPrice: '平均开仓价格',
entryPrice_tips: '当前多/空仓位的平均开仓买入/卖出价格。',
value: '价值',
value_tips: '该仓位的初始名义价值',
size: '数量',
size_tips: '该仓位当前的合约数量,整数为多仓,负数为空仓。',
Contracts: '合约',
ADL_Ranking: '自动减仓队列',
ADL_Ranking_tips: '这5个指示灯显示您当前仓位在自动建仓系统中的优先顺序排行。每一盏灯代表了20%优先级的增量。当所有灯都亮起,表示您的仓位位于自动减仓的优先位置,点击查看详情。',
ROE: '回报率',
riskLimit: '持仓限额',
yourPosition: '当前仓位:',
ContractsNum: '合约数量',
ROE: '回报率',
ROE_tips: '回报率 = 未实现盈亏 / 仓位累计保证金',
riskLimit: '持仓限额',
riskLimit_tips: '您的账户在该合约最大可持有的仓位额度。如您需要提升持仓限额,请与客服联系。',
entryPrice_PositionsTips: '当前多/空仓位的平均开仓买入/卖出价格。',
liqPrice_PositionsTips: '当该合约的标记价格低于(多仓)或者高于(空仓)该强平价格时,该仓位会被强制平仓。',
orderbook: '委托列表',
marketTrades: '最近成交',
added: '累计',
indexPrice: '指数价格, 即合约标的现货的价格。',
goHistorical: ' 点击查看历史数据。',
currentMarkPrice: '当前标记价格,点击查看详情。',
positions: '活动仓位',
activeOrders: '活动委托',
stops: '条件委托',
orderHistory: '委托历史',
contractsPositions: '合约',
orderPrice: '委托价格',
orderPrice_tips: '限价价格',
filled: '已成交',
filled_tips: '委托已经成交的数量,如果委托已经被完全成交,此数值将等于委托数量。',
remaining: '剩余',
remaining_tips: '委托剩余可被成交的数量。',
fillPrice: '平均成交价格',
fillPrice_tips: '委托目前的平均成交价格。',
type: '委托类型',
type_tips: '委托的种类。',
status: '状态',
status_tips: '委托的状态。此列的状态包括:新委托,部分成交,完全成交,或已取消。当条件委托被触发后,它会显示在该活动委托列表。',
timeActive: '委托时间',
timeActive_tips: '委托提交的时间。',
action: '操作',
triggerPrice_tips: '这就是条件委托被触发的价格,当条件委托被触发时,该委托会进入委托列表。在触发后,该条件委托会显示在活动委托列表中。',
statusStop_tips: '对于新的条件委托,会有两个状态,未触发与已触发。当条件委托未被触发时,它不会被挂到委托列表中,也不会冻结保证金。',
fillPriceHistory: '成交价格',
contactDetails: '合约细节:',
expiryDate: '到期日期',
perpetual: '永续',
indexPrice: '指数价格',
turnover: '24小时交易量',
openInterest: '未平仓合约数量',
predicted: '预测',
fundingRate: '资金费率',
fundingRate_forex: '隔夜费率',
predicted_cn: '预测资金费率',
fundingRate_tips: '这里显示的数字是预测的下一个资金时段的资金费率。如果资金费率是正数,多仓需要付给空仓;如果是负数,空仓付给多仓。该合约的资金流转周期为每8小时一次。',
fundingRate_fee: '隔夜费会在每日UTC 00:00时对您在该合约持有的仓位,使用该费率与仓位名义价值结算。如果您在该时刻不持有仓位,则不产生隔夜费',
insuranceFund: '风险准备金',
insuranceFund_tips: '当前的保险基金余额,该基金用来填补未被执行的强平委托造成的穿仓价值,以避免它们触发自动减仓系统。保险基金的增长来自强平委托在市场上优于破产价的价格成交。',
contractValue: '合约价值',
// contractValue_tips:'每一份BTCUSD合约的价值。',
'markPrice_HeaderTips-swap': '该合约最新的合理标记价格,用来判定强制平仓。会与合约最新成交价格不同,来避免市场价格被操控。不会影响合约的结算,',
'markPrice_HeaderTips-swap1': '点击查看详细信息。',
'markPrice_HeaderTips-forex': '该合约最新的指数价格,用来判定强制平仓,指数价格不会影响合约的交易盈亏结算。',
'markPrice_HeaderTips-forex1': '',
valueFactor: "最小交易数量100张合约",
fundingRate_HeaderTips: '该合约当前周期的资金费率,此费率会在倒计时(周期)结束后用来计算在买卖双方之间结算的资金流转数额。当资金费率大于0时,多头付给空头;反之空头付给多头。永续合约的资金流转周期为8小时。',
highHeader: '24h最高价',
lowHeader: '24h最低价',
volumeHeader: '24h成交量',
changeHeader: '24h涨跌幅',
noPosition: '暂无仓位',
TOTAL: '账户余额:',
TOTAL_tips: '您永续合约的账户余额,账户余额=转入-取出+已实现盈亏',
AVAIL: '可用余额:',
AVAIL_tips: '可以用来开仓的保证金余额,可用余额=保证金余额-委托保证金-仓位保证金',
from: '从',
to: '至',
coin: '币种',
maximum: '全部划转',
avaliable: '可用',
enterQty: '请输入数量',
limit_Tips: '限制该委托在指定(或更好的)价格买入或卖出,限价单可能不会立刻成交。',
market_Tips: '下单立即执行,以委托列表中的最优价格快速成交,但是由于价格波动,最终的执行价格可能差于您的预期价格。',
stop_Tips: '条件委托只有在满足预设条件后才会被触发,触发后即为普通的限价或者市价。可以用来实现止损或者止盈策略。',
leverage: '杠杆',
leverage_Tips: '杠杆倍数越大,强制平仓风险越大,请谨慎选择!',
pricePerpetual: '委托价格',
qtyPerpetual: '合约数量',
orderValue: '委托价值',
buy_Long: '买入/做多',
sell_Short: '卖出/做空',
cost: '成本',
post_Only: '被动委托',
reduce_Only: '只减仓委托',
Qty_limitTips: '您想买入或卖出的合约数量,详情请参考下方合约细节。',
Qty_marketTips: '您想买入或卖出的合约数量,详情请参考下方合约细节。请注意,根据变化的价格以及您的可用保证金,市价单有可能不能执行全部的委托数量。',
orderValue_limitTips: '该委托的总名义价值(BTC)。',
orderValue_marketTips: '该委托的总名义价值(BTC), 注意,市价委托的委托价值为估计值。',
availableMargin_Tips: '可以用来下单开仓的保证金。',
confirmOrder: '委托确认',
marketContracts: '张BTCUSD合约',
yourPosition_buy: '持有仓位',
afterExecution: '成交后仓位大小',
markPrice_buy: '当前标记价格',
estimated: '预期强平价格',
estimated_tips: '预估强平价格的计算参照当前委托列表中的活动委托,与您最后的强平价格可能不同',
'Est-swap': '标记价格/预期强平价格 差异',
'Est-forex': '指数价格/预期强平价格 差异',
cost_Tips: '本委托所需的保证金,该数值考虑你选择的杠杆和现有仓位。减(平)仓并不需要保证金。',
cost_stopTips: '条件委托被触发后所需的保证金,该数值考虑你选择的杠杆和现有仓位。注意,这些成本还没有从可用保证金中冻结,如果在条件委托被触发时,您没有足够的可用保证金,则条件委托会被取消。减(平)仓并不需要保证金。',
execute: '以委托列表内的最优可执行价格执行',
limit_perpetual: '限价委托',
market_perpetual: '市价委托',
stopLimit_perpetual: '条件限价单',
stopMarket_perpetual: '条件市价单',
stopLimit_Deal: '条件限价',
stopMarket_Deal: '条件市价',
execution: '在条件委托被触发后,该委托的执行价格。',
triggerPrice_Tips: '在当前最新成交价格达到触发价格时,您的条件委托会被激活。点击查看详情。',
postOnly_Tips: '被动委托不会立刻在市场成交。使用该类型委托来确保获得做市返佣。如果委托会立刻与已有委托成交,该委托将被取消。',
reduceOnly_Tips: '只减仓委托只会减少,不会增加你的仓位。系统有可能会自动减少这类委托数量,甚至自动取消它,来确保它不会增加你的仓位。',
inContact: '',
inHours: '小时内',
changesLeverage: '确认修改杠杆?',
leverageContent: '相同合约的活动委托与活动仓为均使用同一杠杆,在有活动仓位的情况下修改杠杆会改变仓位对保证金的需求,并且影响强平价格,请慎重操作!',
notShow: "不再提示",
pending_positions: '提交中',
new_positions: '新',
partiallyFilled_positions: '部分成交',
filled_positions: '完全成交',
canceled_history: '已取消',
triggered_history: '已触发',
completed_history: '已完成',
untriggered: '未触发',
cont: '张',
disconnect: '错误: 服务器断开连接',
transactionFee: '费率',
details: '详情',
closedMarket: '市场关闭。当前不是该合约的交易时间,您可以选择提交条件委托。',
}

92
src/assets/i18n/cn/financial.js

@ -0,0 +1,92 @@
const financial = {
vInancial:`V网理财`,
assetsCount:`收益稳 省心选`,
account:`理财账户`,
instruction:`增益说明`,
guaranteed:`保底年化`,
fixedYield:`固定年化`,
day:``,
total:`总量 `,
settlement:`结算年化`,
availableOnly:`仅展示可购`,
startDate:`申购开始时间`,
endDate:`申购结束时间`,
subscribeBtn:`申购`,
participate:'参与方式',
subscribe: `申购`,
subscribeDec:`您可以从多种数字货币存币产品中进行选择,目前开放BTC、USDT定期理财。`,
hold:`持有`,
holdDec:`V网理财帮助您最大化收益。仅需持有数字货币,并申购理财产品,便可获得利息,增长财富。`,
earn:`获息`,
earnDec:`利息将会在赎回日自动发放(“币定赢”产品)。`,
FAQ:`常见问题`,
FAQTitle1:`1. 什么是币定赢产品?`,
FAQContent1:`决心持有您的数字货币?现在您可以同时获得收益!币定赢产品在锁定期内拥有保证最低收益,同时,根据不同的产品条款,当虚拟币市场波动时,您可能享有潜在的额外收益。`,
FAQTitle2:`2. 在我申购V网理财产品时会发生什么?`,
FAQContent2:`申购时,VirgoX会将申购所需的金额从您的现货账户中扣除。申购后便将获得V网理财资产,申购金额及奖励将体现在您的理财账户中。根据不同的产品,利息将按照其条款进行相应计算。`,
FAQTitle3:`3. 在V网理财理财产品赎回日会发生什么?`,
FAQContent3:`赎回日,申购的本金和利息都会自动发放到您的现货账户。`,
FAQTitle4:`4. 当我申购了V网理财产品,我何时可以赎回?`,
FAQContent4:`关于币定赢产品,申购成功后,于锁定期不可中途赎回。`,
FAQTitle5:`5. V网理财产品发放利息的频率是多久?`,
FAQContent5:`关于币定赢产品,利息将于产品赎回日一次性发放于您的账户中。`,
log:`请先注册并登录以进行此操作。`,
FAQTitle6:`6. VirgoX平台之后还会增加哪些币种的借贷产品吗?`,
FAQContent6:`V网理财会根据需求与质量,持续评估在其平台上可支持借贷的新币种。`,
subscription:` 申购`,
asset:`资产`,
guaranteeds:`年化收益率`,
fixed:`期限`,
valueDate:`计息日`,
redemptionDate:`赎回日`,
enterAmount:`请输入数量`,
max:`最大`,
available:`可用资金`,
subscriptionLimit:`个人申购额度`,
interest:`保底收益`,
estimatedInterest:`预期收益`,
confirm:`确认申购`,
expected:`预期年化收益率`,
price:`结算价格`,
confirmBtn:`确认`,
more:`查看更多`,
notStarted:`未开始`,
subscriptionEnded:`申购结束`,
earning:`计息中`,
clearing:`结算中`,
settled:`已结算`,
accountEstimated:`账户资金估值`,
totalInterestEarned:`累计收益`,
earnwell:`币定赢`,
earnwellDec:`流动性和收益率兼顾,基准收益及额外收益同享 ,轻松跑赢市场。`,
operationDate:`操作时间`,
lockedAmount:`锁定金额`,
fixedPeriod:`期限`,
realInterest:`到期收益`,
status:`状态`,
subscribed:`已申购`,
remainingTotal:`剩余可申购总量`,
details:`详情`,
features:`V网理财特点`,
featuresDec:`能攻善守,笑对波动。创新理财,多向增益。周期更短,高灵活性。`,
maximumTips:`您输入的申购数量大于剩余申购总量`,
minimumTips:`您输入的申购数量小于最小额度`,
remainingTips:`申购数量不可高于可用余额`,
subscriptionAmountTips:`剩余申购总量小于最小申购额度`,
enterPurchase:`请输入申购数量`,
successTips:`申购成功`,
comingSoon:`即将上线,敬请期待!`,
}
export default financial

23
src/assets/i18n/cn/fundHistory.js

@ -0,0 +1,23 @@
const fundHistory ={
fundHistory:'充提记录',
assetList:'资产列表',
searchAsset:'搜索资产',
management:'地址管理',
deposit:'充值',
withdrawal:'提币',
rewards:'返佣',
asset:'资产',
date:'日期',
address:'地址',
hash:'哈希',
amount:'数量',
progress:'进度',
status:'状态',
completed:'已完成',
processing:'转账中',
failed:'转账失败',
fee:'手续费',
account:'返佣账号',
allAssets:"所有资产"
}
export default fundHistory

30
src/assets/i18n/cn/historical.js

@ -0,0 +1,30 @@
export default{
perpetual:'合约历史数据',
daily_perpetual:'永续每日风险准备基金',
daily_foreign:'外汇每日风险准备基金',
daily_tips:'VirgoX使用风险准备基金来避免投资者的仓位被自动减仓。该基金用来填补未被完全执行的强平委托带来的价值差额,以避免它们被自动减仓系统接管。',
daily_tips1:'',
daily_tips2:'风险准备基金的增长来自于强平委托在市场上于优于破产价的价格成交带来的价值剩余。您可以通过下表查看风险准备基金的当前和历史余额。',
date:'日期',
insurance:'风险准备基金余额',
// index:'指数价格历史记录',
index:'永续合约指数价格历史记录',
BTCIndex_tips:'BTCUSD永续合约的标的资产为BTC/USD现货,合约价格锚定BTC/USD现货的指数价格,',
BTCIndex_tips1:'该BTC指数由多个价格来源组成,详情请参考帮助文档。这里列出BTC指数近期的价格。',
ETHIndex_tips:'ETHUSD永续合约的标的资产为ETH/USD现货,合约价格锚定ETH/USD现货的指数价格,',
ETHIndex_tips1:'该ETH指数由多个价格来源组成,详情请参考帮助文档。这里列出ETH指数近期的价格。',
time:'时间',
contract:'合约',
indexPrice:'指数价格',
funding:'永续合约资金费率历史记录',
foreign_funding:'外汇合约指数价格历史记录',
funding_tips:'下表列出了所有永续合约的历史资金费率。',
fundingInterval:'资金费率区间',
fundingRate:'资金费率',
allHistory_price:'这里列出所有永续合约的指数价格历史记录',
allHistory_foreignPrice:'这里列出所有外汇合约的指数价格历史记录',
every:'每' ,
hours:'小时',
}

34
src/assets/i18n/cn/home.js

@ -0,0 +1,34 @@
const Home = {
newEra:"数字货币交易新时代",
startTrading:"开始交易",
walkingLantern:"走马灯",
marketCenter:"行情中心",
optional:"自选",
latestPrice:"最新价",
upAndDown:"涨跌",
heigh:"最高价",
low:"最低价",
vol:"交易量",
coinType:"币种",
more:"查看更多",
multiPlatform:"多平台下载",
atTime:"随时随地",
multiTerminal:"多平台终端交易",
cover:"覆盖",
multiTerminal1:"多个平台",
support:"支持全业务功能",
down:"下载",
news:"最新公告",
detail:"查看详情",
quickly:"快速上手",
major:"我们为投资者提供专业",
safe:"安全的交易服务",
login:"登录",
reg:"注册",
trading:"去交易",
add:"添加成功",
cancel:"取消成功"
}
export default Home;

31
src/assets/i18n/cn/index.js

@ -0,0 +1,31 @@
import nav from "./nav";
import commom from "./commom";
import login from "./login";
import application from "./application";
import wallet from "./wallet";
import contact from "./contact";
import course from "./course";
import home from "./home";
import option from "./option";
import order from "./order";
import profile from "./profile";
import setting from "./setting";
import subscride from "./subscride";
export default {
nav,
commom,
login,
application,
wallet,
contact,
course,
home,
option,
order,
profile,
setting,
subscride
}

27
src/assets/i18n/cn/invite.js

@ -0,0 +1,27 @@
const invite = {
invite:`好友邀请`,
receive:`邀请好友使用VirgoX,获得好友未来交易手续费的30%作为分红奖励。`,
join:`加入VirgoX用户邀请分红计划。`,
view:`查看我的分红`,
viewDetails:`查看详情`,
step1:`第一步:分享链接`,
step2:`第二步:邀请好友`,
step3:`第三步:立享分红`,
info:`邀请信息`,
link:`邀请链接`,
code:`邀请码`,
QR:`分享二维码`,
user:`已注册用户`,
terms:`活动条款`,
// b:`手续费分红`,
// p1:`等于被邀人20%的交易手续费。`,
// p2:`分红将在被邀人交易后10分钟内转入邀请人账户。`,
// p3:``,
// p31:``,
// p32:``,
// p4:``,
// p5:``,
// p6:``,
}
export default invite

53
src/assets/i18n/cn/login.js

@ -0,0 +1,53 @@
const Login = {
enterPhoneEmail:"请输入手机或者邮箱号",
effectivePhoneEmail:"请输入有效的手机或者邮箱",
enterPasswrod:"请输入{num}位长度的密码",
passwordLength:"密码长度{num}位包含字母数字的密码",
safe:"安全性验证",
googleVer:"请输入您手机App上的{num}位谷歌验证码",
phoneCode:"请输入发送至您手机号码的{num}位验证码",
emailCode:"请输入发送至您邮箱的{num}位验证码",
forgetPassword:"忘记密码",
rememberMe:"记住我",
noAccountYet:"还没有账号",
goRegister:"前往注册",
safety:"安全性验证",
regAccount:"注册账号",
email:"邮箱",
phone:"手机",
pleaseEmail:"请输入邮箱地址",
invalidEmail:"无效的邮箱地址",
enterMobile:"请输入手机号码",
invalidPhone:"无效的手机号码",
enterLengthPassword:"请输入{num1}到{num2}位长度的密码",
hasNumEn:"密码需要{num}位字母和数字组合",
iSee:"我同意",
terms:"条款及细则",
reg:"注册",
enterEmailCode:"请输入发送至您邮箱 ({email})的{num}位验证码",
accountActivated:"以激活账户",
backOld:"回到上一步",
verCode:"验证码",
notEmail:"如果您未收到邮箱,请尝试以下检查操作",
confirmEmail:"请确保您所输入的邮箱地址是正确的",
confing:"请检查您邮箱的垃圾邮件文件夹",
checkTrashCan:"请确保您的邮箱连接至稳定的互联网",
enterPhone1:"请输入发送至您手机号",
enterPhone2:"的{num}位验证码",
smsNotReceived:"如果您未收到短信,请尝试以下检查操作",
phoneCorrect:"请确保您所输入的手机号和地区号是正确的",
securePhone:"请确保您的手机信号稳定",
hasAccount:"已经有一个帐号",
toLogin:"前往登录",
securityVerification:"安全性验证",
disagree:"您还没有同意条款",
registrationSuccess:"注册成功,正在跳转登录页面",
referrer:"推荐人",
optional:"选填",
password:"密码",
login:"登录",
sms:"短信",
country:"区号"
}
export default Login

12
src/assets/i18n/cn/nav.js

@ -0,0 +1,12 @@
const nav = {
assets:`资产`,
contract:`合约账户`,
transfer:`资金划转`,
excOrders:`现货委托`,
contractOrders:`合约委托`,
fundHistory:`充提记录`,
security:`账号安全`,
invite:`邀请好友`,
}
export default nav

41
src/assets/i18n/cn/option.js

@ -0,0 +1,41 @@
const Option = {
waitFor:"等待交割",
history:"历史交割",
orderNum:"订单号",
option:"期权",
buyTime:"买入时间",
buyAmount:"买入数量",
buyType:"购买类型",
yield:"收益率",
state:"状态",
deliverytime:"交割时间",
countDown:"交割倒计时",
buyingUp:"买涨",
buyDwon:"买跌",
buyEven:"买平",
result:"交割结果",
settlementQuantity:"结算数量",
up:"涨",
down:"跌",
flat:"平",
buyOption:"购买期权",
deliveryRecord:"交割记录",
current:"当前",
next:"下期",
enterNum:"请输入数量",
balance:"余额",
expectedRevenue:"预计收益",
seeMore:"看多",
beBearish:"看空",
time:"时间",
zf:"涨幅",
bullish:"看涨",
lookAtPing:"看平",
bearish:"看跌",
amount:"数量",
coinType:"币种",
odds:"赔率",
buySuccess:"买入成功",
}
export default Option;

52
src/assets/i18n/cn/order.js

@ -0,0 +1,52 @@
const Order = {
noData:"暂无成交记录",
ifCancel:"是否撤销当前订单",
cancelSuccess:"撤销成功",
marketPrice:"市价交易",
fixedPrice:"限价交易",
sell:"卖出",
buy:"买入",
exchangeRecord:"交易记录",
see:"查看",
opt:"操作",
status:"状态",
time:"时间",
tradingPair:"交易对",
direction:"方向",
type:"类型",
averagePrice:"平均价格",
price:"价格",
matched:"已撮合",
totalAmountEntrusted:"委托总量",
total:"总计",
toMatch:"未撮合",
operation:"操作",
reset:"重置",
search:"搜索",
to:"至",
startTime:"开始日期",
endTime:"结束日期",
select:"请选择",
entrustType:"委托类型",
spotConsignment:"现货委托",
surrentCommission:"当前委托",
commissionRecord:"委托记录",
optionTransaction:"期权交易",
orderNum:"订单号",
timeSharing:"分时",
yield:"收益率",
buyNum:"购买数量",
upAndDown:"涨跌幅",
settlementQuantity:"结算数量",
transactionPrice:"成交价格",
tradingVolume:"交易量",
aTurnover:"交易额",
serviceCharge:"手续费",
cancel:"撤销",
buyTime:"购买时间",
buyUp:"买涨",
buyDown:"买跌",
buyLevel:"买平"
}
export default Order;

63
src/assets/i18n/cn/personalVer.js

@ -0,0 +1,63 @@
export default{
title:'个人账户验证',
profile:'个人信息',
upload:'上传文件',
submitted:`审核提交`,
firstName:'名(法定)*',
middleName:'中间名(法定)',
lastName:'姓(法定)*',
birth:'出生日期 (YYYY-MM-DD)*',
addressInfo:'地址信息',
errorTips:`账号验证失败,请检查提供的个人信息,并重新提交。`,
residence:'居住地址*',
city:'城市*',
postalCode:'邮政编码*',
country:'国家或地区*',
optional:'额外信息栏(选填)',
contactInfo:'联系信息',
phone:'电话号码*',
next:'下一步',
docType:'选择文件类型',
following:'身份证件 –请从以下文件中选择一份(1)进行上传:',
back:'返回',
submit:'提交',
remove:'移除',
passport:'护照',
driver:'驾照',
national:'身份证',
successfully:'您的验证申请已成功提交!我们将在获得结果的第一时间通知您。',
done:'完成',
fileUploaded:'文件上传成功!重新添加请先移除原有文件。',
firsts:'如果您有多个名(法定),请输入全部名(法定)。',
lasts:'如果您有多个姓(法定),请输入全部姓(法定)。',
firstNameTips:'请输入法定名',
lastNameTips:'请输入法定姓',
birthTips:'请输入出生日期',
residenceTips:'请输入居住地址',
cityTips:'请输入城市',
postalCodeTips:'请输入邮政编码',
countryTips:'请选择国家或地区',
areaCodeTips:'请选择地区号',
phoneNumTips:'请输入电话号码',
uploadIdentityDoc1:`请上传身份文件正面。`,
uploadIdentityDoc2:`请上传身份文件反面。`,
invalidFile:`文件格式无效,请重新上传符合要求的文件。`,
fileSizeExceeds:`文件过大,请重新上传符合要求的文件。`,
uploadFailed:`文件上传失败,请重新上传。`,
enterFirstName:`请输入名`,
enterMidName:`请输入中间名`,
enterLastName:`请输入姓`,
selectBirth:`请选择出生日期`,
enterResidence:`请输入居住地址`,
enterCity:`请输入城市名`,
enterPostal:`请邮政编码`,
selectCountry:`请选择国家或地区`,
enterAdditonal:`请输入额外信息栏(选填)`,
enterPhoneNum:`请输入电话号码`,
}

111
src/assets/i18n/cn/profile.js

@ -0,0 +1,111 @@
const Profile = {
realName:"实名认证",
primaryCertification:"初级认证",
advancedCertification:"高级认证",
toExamine:"审核",
fullName:"姓名",
legal:"法定",
pleaseEnterName:"请输入姓名",
dateOfBirth:"出生日期",
selectDate:"选择日期",
documentType:"证件类型",
pelaseSelect:"请选择",
certificateNumber:"证件号",
endterIDNumber:"请输入证件号",
addressInfo:"地址信息",
residentialAddress:"居住地址",
residentialAddress1:"请输入居住地址",
ciy:"城市",
incity:"请输入所在城市",
postalCode:"邮政编码",
thePostcode:"请输入邮政编码",
additionalInformation:"额外信息",
optional:"选填",
contactInformation:"联系信息",
phoneNumber:"电话号码",
enterPhoneNumber:"请输入手机号",
clickUpload1:"点击上传文件并提交身份验证时,即表示您已阅读并同意我们的 服务条款 及 隐私协议。",
pelaseDownload:"请从以下文件中选择一份未过期的",
passport:"护照",
drivingLicense:"驾照",
iD:"身份证",
upload:"进行上传",
explain:"说明",
unexpired:"未过期证件文件可以是图片或扫描件",
pleaseConfirm:"请确证件照上的所有细节是清晰的,且未被遮盖",
fileFormat:"文件格式",
maximumFileSize:"最大文件大小",
positive:"证件正面",
theOtherSide:"证件反面",
hold:"手持证件",
dragHere:"拖到此处,或",
clickUpload:"点击上传",
uploadPhoto:"请上传证件正面照",
reversePhoto:"请上传证件反面照",
uploadIDCard:"请上传手持证件照",
nextStep:"下一步",
inSubmit:"您的验证申请已提交!我们将在获得结果的第一时间通知您",
gotIt:"知道了",
congratulations:"恭喜您",
back:"返回",
resetApply:"是否重新申请。",
recertification:"重新认证",
userInfo:"账户信息",
verState:"验证状态",
max:"最大",
limitH:"小时提币限额",
verLeave:"验证级别",
exceed:"超过",
contactUs:"联系我们",
inviteFriends:"邀请好友",
dividends:"邀请好友使用{name},获得好友未来交易手续费的{num}作为分红奖励。",
sendInvitation:"发送邀请",
resetPassword:"重置密码",
forLoginAccount:"用于登录账户",
clickReset:"点击重置",
registrationDecord:"登录记录",
recording:"用于显示详细历史登录记录",
recordingDEtail:"详细记录",
invitationReward:"邀请奖励",
inviteUse:"邀请好友使用",
futureCommission:"获得好友未来交易手续费的{num}作为分红奖励",
joinThePlan:"加入{name}用户邀请分红计划",
checkMyDividend:"查看我的分红",
step1:"第一步",
shareLink:"分享链接",
step2:"第二步",
shareFriend:"邀请好友",
step3:"第三步",
instantDividend:"立享分红",
invitationInformation:"邀请信息",
invitationLink:"邀请链接",
invitationCode:"邀请码",
registeredUser:"已注册用户",
accountNumber:"账号",
registrationTime:"注册时间",
activityTerms:"活动条款",
handlingFeeDividend:"手续费分红",
equalInvitee:"等于被邀人",
fee:"的交易手续费",
afterThat:"将在被邀人交易后",
follow:"分钟内转入邀请人账户。",
limit:"活动遵循以下开始和结束时间,仅限于活动开始时间后且活动结束时间前的有效账户可获得",
activityStartTime:"活动开始时间",
Y:"年",
M:"月",
D:"日",
endTime:"活动结束时间",
proceed:"持续进行",
atAnyTime:"保留随时修改,暂停,或终止{name}用户邀请计划的权利,且恕不另行通知",
reservedRights:"保留不为重复帐户或虚假帐户发放手续费分红的权利",
canDecide:"可全权决定接受或拒绝特定被引入或被邀请至{name}平台{link}的用户",
bill:"访问记录",
date:"日期",
address:"地点",
equipment:"设备",
preliminary:"初步认证成功",
advancedCertification:"高级认证申请已提交",
clickToVerify:"点击验证"
}
export default Profile;

89
src/assets/i18n/cn/security.js

@ -0,0 +1,89 @@
const Security = {
security:`账户 & 安全`,
info:`账户信息`,
unverified:`未验证`,
verified:`已验证`,
status:`验证状态`,
max:`最大`,
limit:` 24小时提币限额`,
tiers:`验证级别`,
over:`超过`,
verify:`点击验证`,
contactUs:`联系我们`,
loginPwd:`登录密码`,
logging:`用于登录账户。`,
reset:`重置密码`,
modification:`用于登录、提币和安全设置变更。`,
disable:`关闭`,
enable:`开启`,
enabled:`已开启`,
notEnabled:`未开启`,
SMS_ver:`SMS 短信验证`,
delete:`删除`,
notifica:`充值和提币通知`,
transactionPwd:`交易密码`,
placing:`用于提交合约和现货委托。`,
setPwd:`设置密码`,
management:`地址管理`,
addManagement:`用于进行提币地址管理。`,
address:`个地址`,
addresses:`个地址`,
manage:`管理`,
emailVer:`邮件验证`,
promotionalInfo:`营销和促销信息`,
history:`登录记录`,
display:`用于显示详细历史登录记录。`,
details:`详细记录`,
date:`日期`,
location:`地点`,
address_ip:`IP 地址`,
device:`登录设备`,
emailCodeTips:"请输入邮箱验证码。",
smsCodeTips:"请输入短信验证码。",
googleCodeTips:"请输入谷歌验证码。",
oldPwdTips:"请输入旧密码",
newPwdTips:"请输入新密码",
typePwd:'密码必须由8至15位数字与字母组成(必须同时包含数字与字母,也可使用符号)。',
confirmPwd:'请输入确认密码。',
inconformity:'两次输入的密码不一致。',
successfully:'操作成功!',
transactionTips:'请输入重置交易密码。',
digitNum:`交易密码必须为6位数字。`,
transactionConfirmedTips:'请输入确认交易密码。',
bindingSuccess:'绑定成功',
emailType:'请输入正确的邮箱地址。',
copySucceed:'复制成功',
copyFailed:'复制失败',
confirm:'确认',
phone:'手机号码',
email:'Email',
QRCode:"请扫描二维码。",
googleKey:'Google 验证密钥',
googleVer:'Google 验证码',
// EmailVerification:'邮件验证',
// SMSVerification:'SMS 短信验证',
oldPwd:'旧密码',
newPwd:'新密码',
confirmNewPwd:'确认新密码',
confirmTransactionPwd:'确认交易密码',
individual:'个人认证',
resetPwd:'重置密码',
securityVer:'安全验证',
enablePhone:'开启短信验证',
enableEmail:'开启邮件验证',
enableGoogle:'开启谷歌验证',
selectVer:'请选择验证类型',
leaseOne:`谷歌、短信、邮箱 至少开启一种认证方式`,
notMatch:`两次密码不一致`,
oneKind:`(至少开启一种验证方式)`,
}
export default Security

48
src/assets/i18n/cn/setting.js

@ -0,0 +1,48 @@
const Setting = {
smsVer: "短信验证",
enterCode: "请输入验证码",
emailVer: "邮箱验证",
enterEmailVer: "请输入邮箱验证码",
ver: "验证",
enterNameCode: "请输入{name}验证码",
openSuccess: "开启成功",
closeSuccess: "关闭成功",
email: "邮箱",
enterEmail: "请输入邮箱",
emailVerCode: "邮箱验证码",
enterSmsCode: "请输入短信验证码",
bind: "绑定",
unbind: "解绑",
bindSuccess: "绑定成功",
unbindSuccess: "解绑成功",
scanQrCode: "请扫描二维码",
howToOpen: "了解如何开启{name}二次验证",
read: "点击此处阅读安装信息",
verKey: "验证密钥",
safeSetting: "安全设置",
loginPassword: "登录密码",
resLoginPassword: "重置登录密码",
transactionPassword: "交易密码",
usedFor: "用于提交合约和现货委托",
notOpen: "未开启",
modifyPassword: "修改密码",
setPassword: "设置密码",
verCode: "验证码",
forLogin: "用于登录、提币和安全设置变更",
alLast: "至少开启一种验证方式",
close: "关闭",
open: "开启",
phone: "手机号码",
area: "请输入区号",
enterPhone: "请输入手机号",
newPassword: "新密码",
passwordIs: "交易密码为{num}位数字",
enterNewPassword: "请输入新密码",
confirmPassword: "确认密码",
pleaseConfirmPassword: "请确认密码",
operationSuccess: "操作成功",
combination:"密码需要字母和数字组合",
changeSuccess:"修改成功"
}
export default Setting;

22
src/assets/i18n/cn/subscride.js

@ -0,0 +1,22 @@
const Subscribe = {
sendPrice:"发行价",
subscriptionCurrency:"申购币种",
expected:"预计上线时间",
startTime:"开始申购时间",
applyForPurchase:"结束申购时间",
enterNum:"请输入数量",
all:"所有",
subscribeNow:"立即申购",
subscriptionCycle:"申购周期",
projectWarmUp:"项目预热",
startSubscription:"开始申购",
endOfSubscription:"结束申购",
announceResults:"公布结果",
projectCetails:"项目详情",
useOrNot:"是否使用",
subscribe:"申购",
prompt:"提示",
subscribeSuccess:"申购成功",
}
export default Subscribe;

26
src/assets/i18n/cn/transfer.js

@ -0,0 +1,26 @@
const transfer = {
title:`资金划转`,
exchange:`现货账户`,
forex:`外汇合约账户`,
crypto:`永续合约账户`,
instructions:`资金划转说明`,
dec1:`请注意内部资金划转是自动完成的,并且免手续费。`,
dec2:`只有USDT可被划转至您的外汇合约账户。`,
dec3:`只有BTC可被划转至您的永续合约账户。`,
dec4:`如果您想要交易外汇合约,您必须划转USDT至外汇合约账户中,当做保证金。`,
dec5:`如果您想要交易永续合约,您必须划转BTC至永续合约账户中,当做保证金。`,
USDT:`USDT 划转记录`,
BTC:`BTC 划转记录`,
all:`所有资产划转记录`,
asset:`资产`,
amount:`划转数量`,
from:``,
to:``,
time:`时间`,
status:`状态`,
success:`划转成功`,
blog:'V网学院',
slogan:'洞察全局 尽享资讯',
article_blank:'暂无内容,敬请期待!'
}
export default transfer

114
src/assets/i18n/cn/wallet.js

@ -0,0 +1,114 @@
const Wallet = {
inside: "内部资金划转",
from: "从",
history: "划转历史",
balance: "余额",
transferQuantity: "划转数量",
capitalAccount: "资金账户",
contract: "合约账户",
financial: "理财账户",
leverage: "杠杆账户",
successful: "划转成功",
confirm: "确定划转",
pleaseSelect: "请选择币种",
to: "至",
assets: "资产",
strokes: "请输入划转数量",
addressManagement1:"地址管理",
addAddress:"添加地址",
filter:"筛选器",
search:"搜索资产",
selectActiveArea:"请选择活动区域",
areaOne:"区域一",
areaTwo:"区域二",
addressAssets:"地址列表",
assets:"资产",
addressNum:"地址数量",
fee1:"手续费",
creationTime:"创建时间",
detailAddress:"详细地址",
remarks1:"备注信息",
operating:"操作",
complete:"完成",
copy:"复制",
editAddress:"编辑地址",
deleteAddress:"删除地址",
next:"上一页",
pre:"下一页",
add:"添加",
edit:"编辑",
address:"地址",
selectAssets:"请选择资产",
drawAddress:"提币地址",
addressRemarks:"该地址备注",
remarksDelete:"确定删除此地址",
optionSuccess:"操作成功",
allAssets:"所有资产价值",
showNum:"显示数字",
contractAccount:"合约账户",
marginAccount:"杠杆账户",
financialAccount:"理财账户",
spotAccount:"现货账户",
hide:"隐藏",
balanceAssets:"余额资产",
searchCurrency:"搜索币种",
addressManagement:"提币地址管理",
totalAssets:"总资产",
availableBalance:"可用余额",
fee:"冻结余额",
valuation:"估值",
recharge:"充值",
withdrawal:"提币",
transaction:"交易",
rechargeAddress:"充值地址",
rechargeQuantity:"充值数量",
enterQuantity:"请输入数量",
rechargeInstructions:"充值说明",
automaticallyCredited:"此地址是您最新的充值地址,当系统收到充值时,将进行自动入账",
tran:"转账需要由整个区块链网络进行确认,到达{num}个网络确认时,您的{name}将被自动存入账户中",
only:"请只发送{name}到此地址,发送其他数字货币到此地址会造成永久性的损失",
drawAddress:"提币地址",
low:"最低",
addressList:"地址列表",
enterDrawAddress:"请输入提币地址",
invalidWallet:"不是有效的钱包地址,请重新输入",
withdrawalsNumber:"提币数量",
enterDrawNum:"请输入提币数量",
withdrawalInstructions:"提币说明",
enterAddress:"请仔细检查并输入正确的提币钱包地址",
notSend:"发送不对应的数字货币到钱包地址会造成永久性的损失",
deductionFee:"提币手续费将从提币数量中扣除",
submitSuccess:"提交成功,正在审核",
operationComplete:"提币操作完成,等待审核",
rechargeRecord:"充值记录",
withdrawalRecord:"提币记录",
assetsName:"请输入资产名",
selectStatus:"请选择状态",
startTime:"开始日期",
entTIme:"结束日期",
search:"搜索",
date:"日期",
hash:"哈希",
num:"数量",
progress:"进度",
status:"状态",
error:"失败",
success:"成功",
underReview:"审核中",
handlingFee1:"手续费",
processing:"处理中",
transfer:"资金划转",
transferDescription:"资金划转说明",
handlingFee:"请注意内部资金划转是自动完成的,并且免手续费",
onlyForeignExchange:"只有{name}可被划转至您的外汇合约账户",
onlySustainable:"只有{name}可被划转至您的永续合约账户",
inCase1:"如果您想要交易外汇合约,您必须划转{name}至外汇合约账户中,当做保证金",
inCase2:"如果您想要交易永续合约,您必须划转{name}至永续合约账户中,当做保证金",
transferRecord:"划转记录",
allTransfer:"所有资产划转记录",
direction:"方向",
all:'全部',
date:'时间'
}
export default Wallet

45
src/assets/i18n/en/address.js

@ -0,0 +1,45 @@
const Address ={
management:'Address Management',
addAddress:'Add Address',
filter:'Filter',
all:'All',
white:'Whitelisted',
nonWhite:'Non-Whitelisted',
search:'Search Asset',
asset:'Asset',
label:'Label',
address:'Address',
memoTag:'Memo/Tag',
whitelist:'Whitelist',
action:'Action',
addWhiteLs:'Add to Whitelist',
removeWhiteLs:'Remove from Whitelist',
edit:'Edit',
delete:'Delete',
withdrawAddress:'Withdraw Address',
lableAddress:'Add Label to the Address',
whitelsAddress:'Whitelist this Address',
submit:'Submit',
cancel:'Cancel',
removeTips:'Do you confirm to remove this address from the whitelist?',
deleteTips:'Do you confirm to delete this address?',
google:'Google Authentication',
email:'Email Verification',
phone:'Phone Code',
editAddress:'Edit Address',
verification:'Verification',
confirm:'Confirm',
confirmAddress:`Do you confirm to add this address to the whitelist?`,
selectAsset:'Please select the asset.',
enterAddress:'Enter the address',
enterLabel:'Enter the label',
selectCurrency:'Please select the asset.',
wrongAddress:'Please enter the address with the correct format!',
Yes:'Yes',
No:'No',
successfully:'The withdrawal address is successfully added.',
enterAddressTips:'Please enter the address',
enterLabelTips:'Please enter the label',
enterMemo:'Please either enter the Memo or select No Memo.',
}
export default Address

109
src/assets/i18n/en/assets.js

@ -0,0 +1,109 @@
const assets = {
allBtn:`All`,
assets:`Assets`,
totalVal:`Total Asset Value`,
show:`Show Numbers`,
account_exchange:`Exchange Account`,
account_forex:`Crypto FX Contract Account`,
account_crypto:`Perpetual Swap Account`,
account_exchangeTab:`Exchange Account`,
account_contractsTab:`Contracts Account`,
withdrawalLimit:`24h Withdrawal Limit: `,
increase:`Increase`,
transfer:`Internal Transfer`,
history:`History`,
from:`From`,
to:`To`,
asset:`Asset`,
amount:`Amount`,
maximum:`Maximum`,
enterAmount:`Enter The Amount`,
proceed:`Proceed`,
avaliable:`Avaliable`,
all:`All`,
hideZero:`Hide Zero`,
showZero:`Show Zero`,
assetTab:`Asset`,
accountTotal:`Total Balance`,
availableTab:`Available Balance`,
hold:`On Hold`,
BTC_valuation:`BTC Valuation`,
USD_valuation:`USD Value`,
action:`Action`,
deposit:`Deposit`,
withdraw:`Withdraw`,
trade:`Trade`,
depositAddress:`Deposit Address`,
depositHistory:`Deposit History`,
allHistory:`All History`,
date:`Date`,
address_hash:`Address/Hash`,
amountTab:`Amount`,
progress:`Progress`,
type:`Type`,
status:`Status`,
instructions:`Token Deposit Instructions`,
QRCode:`QR Code Deposit Adres`,
withdrawal:`Withdrawal`,
withdrawalLimit24h:`24h Withdrawal Limit`,
withdrawalAddress:`Withdrawal Address`,
enterAddress:`Enter the Address`,
addressLs:`Address List`,
addressLs_white:'Yes',
addressLs_noWhite:'No',
withdrawAmount:`Withdraw Amount`,
available:`Available`,
fee:`Fee`,
enterAmount:`Enter the Amount`,
receive:`You will receive`,
saveAddress:`Save the Address`,
addLable:`Add Lable to the Address`,
enterLabel:`Enter the Label`,
whiteLs:`Whitelist the Address`,
submit:`Submit`,
withdrawalHistory:`Withdrawal History`,
feeTab:`Fee`,
withdrawalInstructions:`Token Withdrawal Instructions`,
checkAddress:`Please check carefully and input the correct withdrawal wallet address.`,
sendAddress:`Sending digital currencies to the wrong wallet address will result in permanent loss.`,
withdrawalFee:`The withdrawal fee will be deducted from the requested withdrawal amount.`,
whiteLsTab:`Whitelist`,
label:`Label`,
address:`Address`,
memo_tag:`Memo/Tag`,
back:`Back`,
addAddress:`Add Address`,
transferSuccess:'Transfer Completed',
preloaded:'Processing',
autoRecharge:'Completed',
artificialAdd:'Completed',
auditFailure:'Failed',
copySucceed:'Copied Succeed',
copyFailed:'Copied Failed',
addressEmpty:'Please enter the withdrawal address',
wrongAddress:'Please ensure the address entered is correct. We have detected that the address format entered is unconventional. Please contact support if you have any questions.',
quantityEmpty:'Please enter the withdrawal amount.',
numberWithdrawals:'The withdrawal amount cannot exceed the available amount. ',
passwordEmpty:'Please enter the transaction password.',
moneySuccess:'success',
forex:'Crypto FX Contract',
crypto:'PERP Swap',
accountBalance:'Account Balance',
availableBalance:'Available Balance',
positionMargin:'Position Margin',
marginBalance:'Margin Balance',
unrealizsedPL:'Unrealizsed P&L',
orderMargin:'Order Margin',
marginUsed:'Margin Used',
details:'Details',
leverage:'Leverage',
pwd:'Password',
withdrawl:'Withdrawal',
transactionPwd:'Transaction Password',
minimun:'Minimun',
inputMemo:'Please either enter the Memo',
minNumWithdraw:'The withdrawal amount cannot be smaller than the minimum withdrawal limit.',
enterMemo:'Please either enter the Memo or select No Memo.',
}
export default assets

74
src/assets/i18n/en/commom.js

@ -0,0 +1,74 @@
const commom = {
// header
"option" : "Option",
"exchange" : "Exchange",
"markets" : "Markets",
"helps" : "Help",
"course" : "Support Center",
"activity" : "Marketing activities",
"news" : "Industry news",
"contactUs" : "Contact Us",
"sign_in" : "Sign in",
"sign_up" : "Sign up",
noRecord: `No Record`,
getCode: `Get Code`,
export: `Export`,
// wsq
all: 'All',
// allCoin: 'All',
// allDirection: 'All',
// allType: 'All',
confirmBtn:'Confirm',
cancelBtn:'Cancel',
cancel: 'Cancel',
startTime: 'Start Time',
to: 'To',
endTime: 'End Time',
filter: 'Filter',
search: 'Search',
reset: 'Reset',
sell: 'Sell',
buy: 'Buy',
limit: 'Limit',
market: 'Market',
hideAll: 'Hide All Canceled',
canceled: 'Canceled',
waiting: 'Waiting',
processing: 'Processing',
completed: 'Completed',
available_phone: 'The register phone is not available!',
available_email: 'The register email is not available!',
codeSent: 'Verification Code Sent',
captcha: 'Error getting captcha',
triggered: 'Triggered',
buyIn: `Buy`,
sellOut: `Sell`,
limitOrder: `Limit`,
marketOrder: `Market`,
enterValid: 'Please enter a valid phone or email!',
enterValidEmail: 'Please enter the valid email address.',
enterValidPhone: 'Please enter a valid phone.',
enterEmail: 'Please enter the valid email address.',
enterPhone: 'Please enter the Phone',
enterPwd: 'Please enter the password.',
enterAccount: 'Please enter the account.',
passwordRegular:'The password must be between 8 and 15 characters with at least one number and one letter. Symbols are allowed.',
newPassword:'Please enter the new password.',
confirmNewPassword:'Please enter the confirmed new password.',
enterGoogleCode:'Please enter the Google Authentication code.',
enterEmailCode:'Please enter the Email Verification Code.',
enterSMSCode:'Please enter the SMS Verification Code.',
enterVerCode:`Please enter the verification code.`,
exportFile:'Click cofirm to export the file.',
}
export default commom

25
src/assets/i18n/en/contactUs.js

@ -0,0 +1,25 @@
const ContactUs = {
fullName:'Full Name',
phone:'Phone',
email:'Email',
subject:'Subject',
msg:'Message',
contactUs:'Contact Us',
help:'Get in touch and let us know how we can help',
contactInfo:'Contact Information',
inquiry:'General Inquiry:',
support:'Customer Support:',
media:'Press and Media:',
submit:'Submit',
successfully:'Submit successfully',
msgTips:'Please enter the message',
fullNameTips:'Please enter the full name.',
emailTips:'Please enter you email address.',
projectTips:`Please select the project.`,
enterFullName:`Enter Full Name`,
enterEmail:`Enter Email Address`,
enterSubject:`Select Project`,
enterMsg:`Enter Message`,
}
export default ContactUs

39
src/assets/i18n/en/contractsAccount.js

@ -0,0 +1,39 @@
const contracts = {
title:`Contract Accounts`,
forexs:`Crypto FX Contract Account`,
cryptos:`Perpetual Swap Account`,
contract:`Contract Order History`,
forex:`Crypto FX Contract`,
crypto:`PERP Swap`,
accountBalance:`Account Balance`,
availableBalance:`Available Balance`,
positionMargin:`Position Margin`,
marginBalance:`Margin Balance`,
unrealizsed:`Unrealizsed P&L`,
orderMargin:`Order Margin`,
transfer:`Transfer`,
marginUsed:`Margin Used`,
leverage:`Leverage`,
positions:`Open Positions`,
contactName:`Contact Name`,
contractsOpen:`Contracts Open`,
direction:`Direction`,
realised:`Realised P&L`,
long:`Long`,
short:`Short`,
history:`Account Balance History`,
date:`Date`,
type:`Type`,
amount:`Amount`,
deposit:`Deposit`,
withdrawal:`Withdrawal`,
open:`Open Fees`,
close:`Close Fees`,
funding:`Funding`,
takeover:`Takeover`,
realizedPNL:`Realized PNL`,
}
export default contracts

343
src/assets/i18n/en/exchange.js

@ -0,0 +1,343 @@
export default {
exchange: "Exchange",
// crypto: 'Crypto Contracts',
perpetualSwap:'Perpetual Swap',
forex: 'Crypto FX Contract',
contact_us: "Contact Us",
support: "Support",
login: "LogIn",
register: "Register",
asset: "Asset",
account_exc: "Exchange Account",
recharge: "(Deposit & Withdraw)",
account_con: "Contracts Account",
transfer: "Transfer",
fund: "Fund History",
orders: "Orders",
exchange_orders: "Exchange Orders",
contract_orders: "Contract Orders",
T1: "T1 Unverified",
T2: "T2 Verified",
T3: "T3 Verified",
commission: "Up to 30% Referral Commission",
security: "Account & Security",
logout: "Login Out",
'help1' : `Crypto FX Contract Guide`,
'help2' : `Contract Specifications`,
search: 'Search',
fav: 'Favorite',
pair: 'Pair',
price: 'Price',
qty: 'Qty',
total: 'Total',
change: '24h Change',
high: '24h High',
low: '24h Low',
last: 'Last Price',
volume: '24h Volume',
ExchangeAccount: 'Exchange Account',
Deposit: 'Deposit',
Withdraw: 'Withdraw',
ContractsAccount: 'Contracts Account',
Transfer: 'Transfer',
FundHistory: 'Fund History',
PriceUsdt: 'Price(USDT)',
buy: 'BUY',
sell: 'SELL',
orderType: 'Order Type',
triggerPrice: 'Trigger Price',
limitPrice: 'Limit Price',
amount: 'Amount',
orderTotal: 'Order Total',
available: 'Available Balance',
enterAmount: 'Enter the Amount',
enterTotal: 'Enter the Total',
enterPrice: 'Enter the Price',
enterTrigger: 'Enter the Trigger Price',
bestPrice: 'Execute at the best available price',
markets: 'Market Trades',
time: 'Time',
opens: 'Open Orders',
histories: 'Order History',
conditions:'Order conditions',
more: 'View more',
notice: 'Notice',
confirm: 'Confirm',
cancel: 'Cancel',
tips: 'To cancel the order, please click confirm?',
success: 'Order cancelled successfully',
succeed: 'Order cancelled successfully',
orderPlaced:'Order placed successfully.',
chkLogin: 'You need to login first.',
succefully: 'succefully',
fail: 'Failure',
detail: 'Detail Contract Information',
FAQ: 'FAQ',
reference: 'Reference',
more: 'More',
bookList: 'Order Book',
limit: 'Limit',
market: 'Market',
limitPositions: 'Limit',
marketPositions: 'Market',
market: 'Market',
stop: 'Stop',
stopCrypto:'Stop',
stopLimit: 'Stop-Limit',
stopMarket: 'Stop-Market',
// 交易表单提交验证的气泡提示信息
lessMinQty : "The minimum amount is",
lessMinTotal : "The total needs at least",
setAPrice : "Please set a good price",
emptyPrice : "Please enter the price.",
emptyQty : "Please enter the limit price.",
emptyTrigger : "Please enter the trigger.",
Buy:'Buy',
Sell:'Sell',
closePosition:'Close Position',
closePosition_tips:"You can close your position here, which will enter an order into the orderbook for the opposite size of your position. Choose 'Market' to execute immediately. Both actions require optional confirmation.",
closeLimitWrap:'Limit Close This Position?',
buyLimitClose:'Buy Limit Close',
sellLimitClose:'Sell Limit Close',
whenExecuted:'When executed, This will close your entire position.',
limitCloseBtn:'Limit Close Position',
realizedPNL:'Realized PNL',
realizedPNL_tips:'Realized profit and loss since opening this position.',
MarketCloseWrap:"Market Close This Position?",
buyMarketClose:'Buy Market Close',
sellMarketClose:'Sell Market Close',
maketWillClose:'This will close your entire position at the market price.',
marketCloseBtn:'Market Close Position',
unrealized:'Unrealized PNL (ROE %)',
unrealized_tips:'Unrealized profit and loss on this contract (calculate by the last market price), and return on equity percentage.',
margin:'Margin',
margin_tips:'The current amount of margin locked by this position and your current leverage for this contract. You could add or remove the margin by clicking the button below.',
addMarginWrap:'Add/Remove Position Margin',
addMargin:'Add Margin',
removeMargin:'Remove Margin',
contracts:'Contracts',
currentPosition:'Your current position',
assignedMargin:'Currently assigned margin',
availableMargin:'Available Balance',
maxRemovable:'Max Removable',
maxRemovable_tips:'You may remove unused added margin from the position, note that unrealized profit is not removeable.',
userRemoveMargin:'Remove Margin',
liqPrice:'Liq. Price',
'liqPrice_tips-swap':'If the mark price of this contract reaches below this price(long) or above this price(short), your position will be liquidated.',
'liqPrice_tips-forex': 'If the index price of this contract reaches below this price(long) or above this price(short), your position will be liquidated.',
markPrice:'Mark Price',
entryPrice:'Entry Price',
entryPrice_tips:'The average excuted buy (long) or sell (short) price for this position.',
value:'Value',
value_tips:'The initial notional value of this position.',
size:'Size',
size_tips:'Your current position on this contract. If positive, your are long, if negative, short.',
Contracts:'Contracts',
ADL_Ranking:'ADL Ranking',
ADL_Ranking_tips:"This 5 lights indicate your ADL priority ranking in the Auto Deleveraging (ADL) system. When all 5 lights are lit, it means your position is in the top 20 percentile of the ADL queue. Each light represents a 20% increment to the next percentile. Click for more details.",
yourPosition:'Your Position:',
ContractsNum:'Contracts',
ROE:'ROE',
ROE_tips:'Return on Equity, ROE = Unrealized PNL/Aggregated Position Margin',
riskLimit:'Risk Limit',
riskLimit_tips:'The maximum value of your positions under this contract. If you need increase this limit, please contact our support team.',
entryPrice_PositionsTips:'The average excuted buy(for long position) or sell(for short position) price for this position.',
liqPrice_PositionsTips:'If the mark price of this contract reaches below this price(long) or above this price(short), your position will be liquidated.',
orderbook:'Order Book',
marketTrades:'Market Trades',
added:'Total',
indexPrice:'Index Price, the price of the underlying asset. Click to view historical data.',
goHistorical:' Click to view historical data.',
currentMarkPrice:'Current Mark Price, click for more details.',
positions:'Positions',
activeOrders:'Active Orders',
stops:'Stops',
orderHistory:'Order History',
contractsPositions:'Contracts',
orderPrice:'Order Price',
orderPrice_tips:'Limit Price',
filled:'Filled',
filled_tips:'Number of contracts in an order that have been bought/sold. If the order has completed, this is equal to the quantity.',
remaining:'Remaining',
remaining_tips:'Number of contracts in an order that remain to be bought/sold.',
fillPrice:'Fill Price',
fillPrice_tips:'Calculated average price of all fills in this order.',
type:'Type',
type_tips:'The type of the order that you choose.',
status:'Status',
status_tips:'The status of the order. This tells you if an order is New, Partially Filled, Filled, or Canceled. Once a Stop order is triggered it will also be in this Active Orders list.',
timeActive:'Time',
timeActive_tips:'Time at which order was submitted.',
action:'Action',
triggerPrice_tips:'This is the price at which the stop oder will be triggered and the order will be entered into the Orderbook. After triggered, the order will be moved to Active Orders list.',
statusStop_tips:'For Stop orders, the order has two states when new: untriggered, or triggered. When a Stop order is untriggered it is not yet in the Orderbook and does not consume initial margin.',
fillPriceHistory:'Fill Price',
contactDetails:'Contract Details:',
expiryDate:'Expiry Date',
perpetual:'Perpetual',
indexPrice:'Index Price',
turnover:'24H Turnover',
openInterest:'Open Interest',
predicted:'Predicted ',
fundingRate:'Funding Rate',
fundingRate_forex: 'Overnight Rate',
fundingRate_tips:'The number shown here is the predicted funding rate for the next funding period. When funding rate larger than 0, longs pay shorts; if negative, shorts pay longs. Funding happens every 8 hour.',
fundingRate_fee : 'Overnight Fee is settled at UTC 00:00 everyday. It will be charged only if you held a positon under this contract at that time point. Overnight fee is calculated by this rate and the notional value of your position.',
insuranceFund:'Insurance Fund',
insuranceFund_tips:'The current balance of Insurance Fund. It is used to cover unfilled liquidation orders before they trigger the auto-deleverageing system. The Insurance Fund is accumulated from liquidations that were filled in the market at a price better than the bankruptcy price of that particular position.',
contractValue:'Contract Value ',
// contractValue_tips:'The current value of a single BTCUSD contract.',
'markPrice_HeaderTips-swap':'The latest mark price for this contract, used to determine the liquidation. It may differ from the last price for the purposes of acoiding price manipulation. This does not affect settlement,',
'markPrice_HeaderTips-swap1':'click for more details.',
'markPrice_HeaderTips-forex' : 'The latest index price for this contract, used to determine the liquidation. Index price does not affect PnL settlements.',
'markPrice_HeaderTips-forex1' : '',
valueFactor : "Minimum trading size is 100 contracts",
fundingRate_HeaderTips:'This is the current funding rate, at the end of the countdown (the current 8h period), it will be using to calculate the funding value settled between longs and shorts. When funding rate larger than 0, longs pay shorts; otherwise, the inverse. Funding happens every 8 hour.',
highHeader:'24h High',
lowHeader:'24h Low',
volumeHeader:'24h Volume',
changeHeader:'24h Change',
noPosition:'No Position',
TOTAL:'TOTAL:',
TOTAL_tips:'Your perpetual swap Account Balance, Account Balance = Deposits – Withdrawals + Realized PNL. ',
AVAIL:'AVAILABLE:',
AVAIL_tips:'Your margin available for new positions. Available balance = Margin Balance – Order Margin – Position Margin.',
from:'from',
to:'to',
coin:'Coin',
maximum:'Maximum',
avaliable:'Avaliable',
enterQty:'Enter The Qty',
limit_Tips:'A limit order is an order to buy or sell at a given price or better.',
market_Tips:'A market order will immediately be filled at the best available price from the order book. Execution price may be worse than expected due to price movement.',
stop_Tips:'A stop order will be automatically submitted if specified criteria are met. It can be used to setup stop or take profit strategies.',
leverage:'Leverage',
leverage_Tips:'Higher leverage accompanies higher risk to be liquidated. Please choose carefully!',
pricePerpetual:'Price',
qtyPerpetual:'Qty',
orderValue:'Order Value',
buy_Long:'Buy/Long',
sell_Short:'Sell/Short',
cost:'Cost',
post_Only:'Post-Only',
reduce_Only:'Reduce-Only',
Qty_limitTips:'The quantity of contracts you wish to buy or sell. For more details, please check the contract details below.',
Qty_marketTips:'The quantity of contracts you wish to buy or sell. For more details, please check the contract details below. Note that depending on the moving price and your available margin, market order may not be fully executed.',
orderValue_limitTips:'The total notional value of this order (BTC).',
orderValue_marketTips:'The total notional value of this order (BTC). Note that Market orders value is estimated.',
availableMargin_Tips:'Your margin available for new orders and positions.',
confirmOrder:'Confirm Your Order',
marketContracts:'Contracts of BTCUSD at Market',
yourPosition_buy:'Your Position',
afterExecution:'Position Size After Execution',
markPrice_buy:'Mark Price',
estimated:'Estimated Liquidation Price',
estimated_tips:'The calculation of this estimated liquidation price includes the price of current orders on the OrderBook, it may be different to your final liquidation price.',
'Est-swap' :'Mark Price/Est.Liquidation Difference',
'Est-forex' :'Index Price/Est.Liquidation Difference',
cost_Tips:'The cost (in margin) to execute this order. This includes your selected leverage and your current position, if any. In general, reducing a position does not cost margin.',
cost_stopTips:'The cost (in margin) to execute this order while it is triggering, this includes your selected leverage and your current position, if any. Note that this cost is not deducted from your available margin yet, if you do not have enough availble margin at triggering, stop orders will be canceled. In general, reducing a position does not cost margin.',
execute:'Execute at the best available price',
limit_perpetual:'Limit',
market_perpetual:'Market',
stopLimit_perpetual:'Stop Limit',
stopMarket_perpetual:'Stop Market',
stopLimit_Deal:'StopLimit',
stopMarket_Deal:'StopMarket',
execution:'The execution price while this stop order is triggered.',
triggerPrice_Tips:'Your stop orders reamin inactive until the Current Price reaches this trigger price. Click for more details.',
postOnly_Tips:'A post-only order will not execute immediately against the market. Use to ensure a Maker Rebate. If it would execute against resting ordes, it will cancel instead.',
reduceOnly_Tips:'A reduce-only order will only reduce your position, not increase it. If this order would increase your position, it is amended down or canceled.',
inContact:'in',
inHours:'hours',
changesLeverage:'Apply changes to the leverage?',
leverageContent:'Each contract can only use one leverage consistently across all active orders and open positions. Please note that changing the leverage while holding a position will change the needed position margin amount and affect the liquidation price.',
notShow:"Don't show this hint again",
pending_positions:'Pending',
new_positions:'New',
partiallyFilled_positions:'Partially Filled',
filled_positions:'Filled',
canceled_history:'Canceled',
triggered_history:'Triggered',
completed_history:'Completed',
untriggered:'Untriggered',
cont:'Cont',
disconnect:'Error: Server Disconnect!',
transactionFee:'Transaction Fee',
details:'Details',
closedMarket :'Market Closed. It is not the trading hour for this contract, you can choose to submit Stop Orders'
}

89
src/assets/i18n/en/financial.js

@ -0,0 +1,89 @@
const financial = {
vInancial:`VirgoX Financial`,
assetsCount:`Make Your Idle Assets Count`,
account:`Financial Account`,
instruction:`Yield Instruction`,
guaranteed:`Guaranteed Annual Yield`,
fixedYield:`Fixed Annual Yield`,
day:`Days`,
total:`Total `,
availableOnly:`Display available only`,
settlement:`Settlement Annual Yield`,
startDate:`Subscription Start Date`,
endDate:`Subscription End Date`,
subscribeBtn:`Subscribe`,
participate:'How to Participate?',
subscribe: `Subscribe `,
subscribeDec:`With VirgoX Finance, you can choose from a wide suite of crypto saving options. Currently Available in Bitcoin (BTC), Tether (USDT). `,
hold:`Hold `,
holdDec:`VirgoX Finance helps to maximize your profit. All you need to do is hold your digital assets and purchase VirgoX Financial products. You will earn stable interest and grow your wealth.`,
earn: `Earn`,
earnDec:`Interest will be distributed to your VirgoX account on the redemption date (for Earnwell) automatically.`,
FAQ:`FAQ`,
FAQTitle1:`1. What are Earnwell Products?`,
FAQContent1:`Committed to holding your crypto? Now you can earn interest at the same time! Our Earnwell products have guaranteed minimum returns during the locked period. At the same time, depends on different products’ terms, when the crypto market goes through fluctuations, you may also enjoy penitential extra returns.`,
FAQTitle2:`2. What happens to my funds on the day I subscribe to VirgoX Financial products?`,
FAQContent2:`On the day of subscription, VirgoX will deduct the funds for subscription from your exchange wallet. Depends on different products’ terms, interest will be calculated accordingly.`,
FAQTitle3:`3..What happens to my funds on the redemption date of VirgoX Financial products?`,
FAQContent3:`On the redemption date, you will see both the initial tokens committed to the subscription and the accrued interest in your VirgoX account. This process will be automatic.`,
FAQTitle4:`4. If I subscribe to a VirgoX financial product, when can I redeem my funds?`,
FAQContent4:`For Earnwell products, redemption is not allowed during lock-up period.`,
FAQTitle5:`5. How often do I receive interest from a VirgoX financial product?`,
FAQContent5:`For Earnwell products, interest will be distributed directly to your account on redemption day.`,
FAQTitle6:`6. Will VirgoX Financial continue to add more products & support for tokens other than those currently available?`,
FAQContent6:`Yes, VirgoX Financial will be constantly evaluating new coins/tokens to be supported as financial products. Products will be supported based on demand and delivering the best value to VirgoX’s users.`,
log:`Please register and log in to continue. `,
subscription:` Subscription`,
asset:` Asset`,
guaranteeds:`Annual Yield`,
fixed:`Fixed Period`,
valueDate:`Value Date`,
redemptionDate:`Redemption Date`,
enterAmount:`Please enter the amount`,
max:`Max`,
available:`Available`,
subscriptionLimit:`Personal Subscription Limit`,
interest:`Guaranteed Interest`,
estimatedInterest:`Estimated Interest`,
confirm:`Confirm Subscription`,
expected:`Expected Annual Yield`,
price:`Settlement Price`,
confirmBtn:`Confirm`,
more:`more`,
notStarted:`Not Started`,
subscriptionEnded:`Subscription Ended`,
earning:`Earning`,
clearing:`Clearing`,
settled:`Settled`,
accountEstimated:`Account Estimated Value`,
totalInterestEarned:`Total Interest Earned`,
earnwell:`Earnwell`,
earnwellDec:`Enjoy Liquidity and Profitability; Guaranteed minimum returns with upside opportunities`,
operationDate:`Operation Date`,
lockedAmount:`Locked Amount`,
fixedPeriod:`Fixed Period`,
realInterest:`Real Interest`,
status:`Status`,
subscribed:`Subscribed`,
details:`Details`,
remainingTotal:`Remaining Total Amount`,
features:`Features of VirgoX Financial`,
featuresDec:`Safe principle and taming volatilities.Innovative products with high earning potentials.Flexible short-term design`,
maximumTips:`The amount you entered is larger than the remaining total amount.`,
minimumTips:`The amount you entered is smaller than the minimum amount.`,
remainingTips:`The subscription amount cannot exceed the available amount.`,
subscriptionAmountTips:`The remaining total amount is smaller than the minimum subscription amount.`,
enterPurchase:`Please enter the amount.`,
successTips:`Subscription success`,
comingSoon:`Coming Soon!`,
}
export default financial

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save