转增代理页面install

This commit is contained in:
chenruiye
2025-04-08 16:44:34 +08:00
parent f3e805e77c
commit 996ef05093
57 changed files with 17522 additions and 0 deletions

View File

@@ -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"]
}

View File

@@ -0,0 +1,9 @@
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

View File

@@ -0,0 +1,14 @@
.DS_Store
node_modules/
/dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln

View File

@@ -0,0 +1,17 @@
// https://github.com/michael-ciniawsky/postcss-load-config
module.exports = {
"plugins": {
"postcss-import": {},
"postcss-url": {},
// to edit target browsers: use "browserslist" field in package.json
"autoprefixer": {},
"postcss-pxtorem": {
"rootValue": 37.5,// 设计稿宽度的1/10
"propList": [
"*"
]// 需要做转化处理的属性,如`hight`、`width`、`margin`等,`*`表示全部
}
}
}

View File

@@ -0,0 +1,21 @@
# myvue
> 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
```
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).

View File

@@ -0,0 +1,41 @@
'use strict'
require('./check-versions')()
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, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
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'
))
})
})

View File

@@ -0,0 +1,54 @@
'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)
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

@@ -0,0 +1,102 @@
'use strict'
const path = require('path')
const config = require('../config')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const packageConfig = require('../package.json')
exports.assetsPath = function (_path) {
const assetsSubDirectory = process.env.NODE_ENV === 'production'
? config.build.assetsSubDirectory
: config.dev.assetsSubDirectory
return path.posix.join(assetsSubDirectory, _path)
}
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 {
return ['vue-style-loader'].concat(loaders)
}
}
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders('sass'),
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')
})
}
}

View File

@@ -0,0 +1,22 @@
'use strict'
const utils = require('./utils')
const config = require('../config')
const isProduction = process.env.NODE_ENV === 'production'
const sourceMapEnabled = isProduction
? config.build.productionSourceMap
: config.dev.cssSourceMap
module.exports = {
loaders: utils.cssLoaders({
sourceMap: sourceMapEnabled,
extract: isProduction
}),
cssSourceMap: sourceMapEnabled,
cacheBusting: config.dev.cacheBusting,
transformToRequire: {
video: ['src', 'poster'],
source: 'src',
img: 'src',
image: 'xlink:href'
}
}

View File

@@ -0,0 +1,107 @@
'use strict'
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)
}
module.exports = {
context: path.resolve(__dirname, '../'),
entry: {
app: './src/main.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'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'),
}
},
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig
},
{
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',
exclude: [resolve('src'), resolve('src/icons')],
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]')
}
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, //
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
},
{
test: /\.svg$/,
loader: 'svg-sprite-loader',
include: [resolve('src'), resolve('src/icons')],
options: {
symbolId: 'icon-[name]'
}
},
// {
// test: /\.(js|vue)$/,
// loader: 'language-tw-loader',
// },
{
test:/\.(js|vue)$/,
loader:'language-hk-loader'
}
]
},
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'
}
}

View File

@@ -0,0 +1,95 @@
'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 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',
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 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
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'index.html',
inject: true
}),
// copy custom static assets
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: config.dev.assetsSubDirectory,
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)
}
})
})

View File

@@ -0,0 +1,145 @@
'use strict'
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 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: [
// 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: 'index.html',
inject: true,
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'
}),
// 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: ['.*']
}
])
]
})
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

View File

@@ -0,0 +1,8 @@
/*jshint esversion:6*/
'use strict';
const merge = require('webpack-merge');
const prodEnv = require('./prod.env');
module.exports = merge(prodEnv, {
NODE_ENV: '"development"'
})

View File

@@ -0,0 +1,80 @@
'use strict'
// Template version: 1.3.1
// see http://vuejs-templates.github.io/webpack for documentation.
const path = require('path')
module.exports = {
dev: {
// Paths
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: { '/api': {
// target: 'https://api.molistar.xyz',
// target: 'http://120.79.211.243',
target: 'http://beta.api.molistar.xyz',
changeOrigin: true,
secure: false,
pathRewrite: {
'^/api': '/'
}
}},
// Various Dev Server settings
host: '127.0.0.1', // can be overwritten by process.env.HOST
// host: '192.168.3.153', // can be overwritten by process.env.HOST
// host: '192.168.9.200', // 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: false,
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
/**
* 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: true
},
build: {
// Template for index.html
index: path.resolve(__dirname, '../dist/index.html'),
// Paths
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: './',
/**
* Source Maps
*/
productionSourceMap: true,
// 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
}
}

View File

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

View File

@@ -0,0 +1,17 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<title>molistar</title>
<!-- <script src="//unpkg.com/vue-ydui/dist/ydui.flexible.js"></script> -->
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,83 @@
{
"name": "myvue",
"version": "1.0.0",
"description": "A Vue.js project",
"author": "oyfangkun <oyfangkun@hotmail.com>",
"private": true,
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"build": "node build/build.js"
},
"dependencies": {
"axios": "^0.19.0",
"crypto-js": "^4.0.0",
"fastclick": "^1.0.6",
"jsencrypt": "^3.0.0-rc.1",
"language-hk-loader": "^1.0.1",
"language-tw-loader": "^1.0.3",
"lib-flexible": "^0.3.2",
"node-sass": "^4.13.0",
"postcss-pxtorem": "^5.1.1",
"px2rem-loader": "^0.1.9",
"qiniu-js": "^3.4.1",
"style-loader": "^1.1.1",
"svg-sprite-loader": "^4.1.6",
"swiper": "^5.3.8",
"vant": "^2.8.2",
"vconsole": "^3.3.4",
"vue": "^2.5.2",
"vue-awesome-swiper": "^4.1.1",
"vue-i18n": "^8.28.2",
"vue-router": "^3.0.1",
"vuex": "^3.2.0",
"webpack-dev-server": "^2.9.6"
},
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
"babel-loader": "^7.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",
"cli": "^1.0.1",
"copy-webpack-plugin": "^4.0.1",
"css-loader": "^0.28.11",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^1.1.11",
"friendly-errors-webpack-plugin": "^1.6.1",
"html-webpack-plugin": "^2.30.1",
"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",
"rimraf": "^2.6.0",
"sass-loader": "^7.3.1",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"uglifyjs-webpack-plugin": "^1.1.1",
"url-loader": "^0.5.9",
"vue-loader": "^13.7.3",
"vue-style-loader": "^3.1.2",
"vue-template-compiler": "^2.5.2",
"webpack": "^3.12.0",
"webpack-bundle-analyzer": "^2.9.0",
"webpack-merge": "^4.1.0"
},
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}

View File

@@ -0,0 +1,30 @@
<template>
<div id="app">
<!-- <img src="./assets/logo.png"> -->
<!-- <keep-alive>
<router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view> -->
<router-view></router-view>
</div>
</template>
<script>
export default {
name: "App"
};
</script>
<style>
#app {
font-family: "Avenir", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
/* text-align: center; */
/* color: #2c3e50; */
/* margin-top: 60px; */
width: 100%;
height: 100%;
background: #fff;
}
</style>

View File

@@ -0,0 +1,9 @@
import request from '@/utils/request';
export const diamondLog = (params) => {
return request({
url: '/bill/record/get',
// url: '/api/box/drawrecord',
method: 'get',
params: params
})
}

View File

@@ -0,0 +1,259 @@
let host;
import request from '@/utils/request';
import { EnvCheck, checkVersion } from '@/utils/browser.js'
let isApp = checkVersion().app
if (EnvCheck() === 'test') {
// console.log(12542);
// baseURL = 'http://120.79.211.243'
host = 'http://beta.api.molistar.xyz'
// 正式环境
} else {
host = 'https://api.molistar.xyz'
}
export const giftReceiveGet = (params) => {
return request({
url: '/bill/record/giftReceive/get',
method: 'get',
params: params
})
}
//我的收益
export const getWithDrawList = (params) => {
return request({
// url: isApp ? "/api/withDraw/findList" : "/api/withDraw/h5/findList",
url: isApp ? "/withDraw/findList" : "/withDraw/h5/findList",
method: 'GET',
params,
})
}
export const myincome = (params) => {
return request({
// url: "/api/purse/query",
url: "/purse/query",
method: 'GET',
params,
})
}
export const getCrystals = (params) => {
return request({
// url: "/api/bill/record/get",
url: "/bill/record/get",
method: 'GET',
params,
})
}
export const exchange = (params) => {
return request({
// url: isApp ? "/api/change/gold" : "/api/change/h5/gold",
url: isApp ? "/change/gold" : "/change/h5/gold",
method: 'POST',
params,
})
}
export const getAlipayInfo = (params) => {
return request({
// url: isApp ? "/api/withDraw/exchange" : "/api/withDraw/h5/exchange/msg",
url: isApp ? "/withDraw/exchange" : "/withDraw/h5/exchange/msg",
method: 'GET',
params,
})
}
export const withdraw = (params) => {
return request({
// url: isApp ? "/api/withDraw/withDrawCash" : "/api/withDraw/h5/withDrawCash",
url: isApp ? "/withDraw/withDrawCash" : "/withDraw/h5/withDrawCash",
method: 'POST',
params,
})
}
export const bindAlipay = (params) => {
return request({
// url: isApp ? "/api/withDraw/bound" : "/api/withDraw/h5/bound2",
url: isApp ? "/withDraw/bound" : "/withDraw/h5/bound2",
method: 'POST',
params,
})
}
export const getSms = (params) => {
return request({
// url: "/api/sms/getCode",
url: "/sms/getCode",
method: 'POST',
params,
})
}
export const getWxUserInfoV2 = (params) => {
return request({
// url: "/api/getWxUserInfoV2",
url: "/getWxUserInfoV2",
method: 'POST',
params,
})
}
export const diamondLog = (params) => {
return request({
// url: '/api/bill/record/get',
url: '/bill/record/get',
method: 'get',
params: params
})
}
//获取验证码接口
export const getCode = (params) => {
return request({
url: '/sms/getCode',
// url: '/api/sms/getCode',
method: 'POST',
params: params
})
}
export const login = (params) => {
return request({
url: '/oauth/h5/smsLogin',
// url: '/api/oauth/h5/smsLogin',
method: 'POST',
params: params
})
}
export const weekTotal = (params) => {
return request({
url: '/room/revenue/weekTotal',
// url: '/api/room/revenue/weekTotal',
method: 'GET',
params: params
})
}
// 新molistar赛事领奖h5接口
export const listWithdrawProd = (params) => {
return request({
url: '/gameManage/withdraw/listWithdrawProd',
method: 'GET',
params: params
})
}
export const getGamePurse = (params) => {
return request({
url: '/gameManage/user/getPurse',
method: 'GET',
params: params
})
}
export const gameWithdraw = (params) => {
return request({
url: '/gameManage/withdraw/h5/withDrawCash',
method: 'POST',
params,
})
}
// 个播流水
export const weekTotal_single_broadcast = (params) => {
return request({
url: '/room/revenue/singleBroadcast/weekTotal',
method: 'GET',
params
})
}
/************************************新版提现相关接口*************************************/
// 获取用户提现信息
export const getUserWithdrawInfo = (params) => {
return request({
url: '/withdraw/v2/getUserWithdrawInfo',
method: 'GET',
params
})
}
// 七牛上传
export const getUploadToken = (params) => {
return request({
url: '/qiniu/upload/getUploadToken',
method: 'GET',
params
})
}
// 用户绑定提现信息
export const bindWithdrawInfo = (params) => {
return request({
url: '/withdraw/v2/bindWithdrawInfo',
method: 'POST',
params
})
}
// 校验验证码
export const verifyCode = (params) => {
return request({
url: '/sms/verify',
method: 'POST',
params
})
}
// 获取用户提现配置信息
export const getUserWithdrawConfig = (params) => {
return request({
url: '/withdraw/v2/getUerWithdrawConfigVO',
method: 'GET',
params
})
}
// 新版提现接口
export const withdrawV2 = (params) => {
return request({
url: '/withdraw/v2/applyWithdraw',
method: 'POST',
params
})
}
// 用户修改提现信息
export const updateWithdrawInfo = (params) => {
return request({
url: '/withdraw/v2/updateWithdrawInfo',
method: 'POST',
params
})
}
// //get
// let myincome = host + '/purse/query?uid='
// //提现列表get
// let getWithDrawList = host + '/withDraw/findList'
// //水晶记录get
// let getCrystals = host + '/bill/record/get'
// //兑换鉆石post
// let exchange = host + '/change/gold'
// //获取支付宝信息get
// let getAlipayInfo = host + '/withDraw/exchange'
// //提现post
// let withdraw = host + '/withDraw/withDrawCash'
// //绑定支付宝post
// let bindAlipay = host + '/withDraw/bound'
// //获取短信验证码post
// let getSms = host + '/sms/getCode'
// //POST获取微信网页授权后的微信用户信息
// let getWxUserInfoV2 = host + '/getWxUserInfoV2'
//登录接口
//常见问题
// let faqLink = host + '/modules/guide/faq.html'
let faqLink = host + '/molistar/modules/myincome/index.html#/DiamondLog'
//提现规则
let withdrawLink = host + '/molistar/modules/rule/output.html?platform=66'
//排行榜
let rankList = '/allrank/geth5'
export {
// myincome,
// getWithDrawList,
// getCrystals,
// exchange,
// getAlipayInfo,
// withdraw,
// bindAlipay,
// getSms,
// getWxUserInfoV2,
faqLink,
withdrawLink,
rankList,
}

View File

@@ -0,0 +1,11 @@
.in-all {
background: #f5f5f5 !important;
}
.van-index-anchor--sticky {
background: #f5f5f5 !important;
}
.van-index-anchor {
background: #f5f5f5 !important;
}

View File

@@ -0,0 +1,29 @@
import Vue from 'vue';
// import locale from 'element-ui/lib/locale' //element组件翻译
import VueI18n from 'vue-i18n';
import messages from './langs';
Vue.use(VueI18n);
const i18n = new VueI18n({ //从sessionStorage中取没有就默认
// locale: 'zh',
locale: window.sessionStorage.getItem('language') ? window.sessionStorage.getItem('language') : getQueryString().lang ? getQueryString().lang : 'en',
messages,
silentTranslationWarn: true,
})
function getQueryString() {
var _url = location.search;
var theRequest = new Object();
if (_url.indexOf('?') != -1) {
var str = _url.substr(1);
strs = str.split('&');
for (var i in strs) {
theRequest[strs[i].split('=')[0]] = decodeURI(strs[i].split('=')[1]);
}
}
return theRequest;
}
// console.log('i18n.messages',i18n.messages);
// console.log('i18n.locale',i18n.locale);
export default i18n

View File

@@ -0,0 +1,208 @@
const ar = {
diamondLog: {
斋月送祝福:'رمضان مبارك',
斋月金币瓜分: "تقسيم عملات رمضان الذهبية",
公会usd兑换给会长支出: "نفقات تحويل USD للنقابة إلى القائد",
私聊礼物支出: "نفقات الهدايا الخاصة",
公款充值金币: "إيداع عملات نقدية من الأموال العامة",
官方清除金币: "إزالة العملات النقدية من قبل الإدارة",
购买个人页背景: "شراء خلفية الصفحة الشخصية",
赠送个人页背景: "إهداء خلفية الصفحة الشخصية",
禮物總價值: "إجمالي قيمة الهدية",
邀請活動: "فعالية الدعوة",
房間禮物支出: "نفقات هدايا الغرفة",
總收入: "إجمالي الدخل:",
總支出: "إجمالي المصروفات:",
餘額: "الرصيد",
全部: "الكل",
公会周期结算会长钻石收入: "إيرادات الماس لرئيس النقابة عند التسوية الدورية",
购买房间背景: "شراء خلفية الغرفة",
自定义房间背景: "خلفية الغرفة المخصصة",
自定义房间背景驳回: "رفض خلفية الغرفة المخصصة",
公會usd兌換給代儲收入: 'دخل تبادل الدولار للإيداع',
公會usd兌換金幣收入: 'دخل تبادل الدولار لعملات الذهب',
遊戲開黑支出: 'الرهانات الرياضية',
LUDO匹配收入: 'دخل مباراة لودو',
LUDO匹配退還: 'استرداد مباراة لودو',
LUDO匹配消耗: 'نفقات مباراة لودو',
購買頭條消耗: 'استهلاك شراء العنوان',
小遊戲收入: 'إيرادات اللعبة',
小遊戲支出: 'نفقات اللعبة',
加載中: 'جار التحميل...',
金幣記錄: 'سجل العملات الذهبية',
收入記錄: 'سجل الدخل',
支出記錄: 'سجل المصروفات',
禮物獲得: 'الهدايا المتلقاة',
沒有更多了: 'لا مزيد',
共收入: 'الدخل الإجمالي',
共獲得價值: 'إجمالي القيمة المتلقاة',
共支出: 'المصروفات الإجمالية',
金幣: 'العملات الذهبية',
金幣的禮物: 'هدايا العملات الذهبية',
房間紅包_來自: 'حزمة حمراء الغرفة - من',
全服紅包_來自: 'حزمة حمراء عامة - من',
房間紅包退款_來自: 'استرداد حزمة حمراء الغرفة - من',
全服紅包退款_來自: 'استرداد حزمة حمراء عامة - من',
水晶兌換金幣: 'تحويل الكريستال إلى العملات الذهبية',
金幣兌換金幣: 'العائد من تحويل الألماس إلى العملة',
鉆石兌換金幣支出: 'المصروف من تحويل الألماس إلى العملة',
活動贈送金幣: 'الهدايا النشطة من العملات الذهبية',
充值: 'إعادة الشحن',
塔羅佔蔔: 'قراءة التارو',
集福氣瓜分金幣: 'تقسيم عملات ذهبية لجمع الحظ',
CP邀請退還: 'استرداد الدعوة CP',
贈送金幣: 'الهدايا من العملات الذهبية',
首充禮包獲得金幣: 'استلام العملات الذهبية للحزمة الأولى المشحونة',
星級廚房獎勵: 'مكافأة المطبخ النجمي',
幸運塔羅收入: 'دخل التارو المحظوظ',
中秋活動瓜分金幣: 'تقسيم عملات ذهبية لنشاط منتصف الخريف',
官方贈送金幣: 'هدايا رسمية من العملات الذهبية',
守護星球獲得: 'الحصول على كوكب الحارس',
邀請好友註冊獎勵: 'مكافأة دعوة الأصدقاء للتسجيل',
被邀請註冊獎勵: 'مكافأة التسجيل المدعو',
直接邀請儲值返點: 'نقاط رد الاستثمار للدعوة المباشرة',
間接邀請儲值返點: 'نقاط رد الاستثمار للدعوة غير المباشرة',
超級幸運禮物價值分成: 'تقسيم قيمة الهدايا الخارقة للحظ',
超級幸運禮物金幣返點: 'استرداد العملات الذهبية للهدايا الخارقة للحظ',
貴族等級獎勵: 'مكافأة النبلاء',
全服紅包_發生在: 'حزمة حمراء عامة - حدث في',
房間紅包_發生在: 'حزمة حمراء الغرفة - حدث في',
活動禮包支出: 'نفقات الهدايا النشطة',
購買門票: 'شراء تذاكر',
守護星球支出: 'نفقات كوكب الحارس',
CP邀請支出: 'نفقات الدعوة CP',
幸運塔羅支出: 'نفقات التارو المحظوظ',
贈送頭飾支出: 'نفقات الهدايا من الزينة للرأس',
購買頭飾支出: 'نفقات شراء الزينة للرأس',
購買銘牌支出: 'نفقات شراء الشارة',
贈送銘牌支出: 'نفقات الهدايا من الشارة',
購買資料卡支出: 'نفقات شراء بطاقة المعلومات',
贈送資料卡支出: 'نفقات الهدايا من بطاقة المعلومات',
購買聊天氣泡支出: 'نفقات شراء فقاعة الدردشة',
贈送聊天氣泡支出: 'نفقات الهدايا من فقاعة الدردشة',
航海冒險禮包支出: 'نفقات هدية مغامرة الملاحة',
購買座駕支出: 'نفقات شراء السيارة',
贈送座駕支出: 'نفقات الهدايا من السيارة',
星級廚房抽獎: 'سحب المطبخ النجمي',
新年煙花抽獎: 'سحب الألعاب النارية للعام الجديد',
奪寶精靈禮包購買支出: 'نفقات شراء هدية جنية الكنز',
歡樂砸蛋抽獎: 'سحب رحلة الحب',
金幣開通貴族: 'تفعيل النبلاء بالعملات الذهبية',
轉贈金幣給: 'تحويل العملات الذهبية لـ',
贈送: 'هدية',
自己: 'نفسي',
禮物: 'هدية',
开通VIP: 'تفعيل VIP',
私聊礼物收入: 'دخل هدية الدردشة الخاصة',
福袋支出: ' تم إرسال حقيبة الحظ ',
福袋收入: 'تم استلام حقيبة الحظ',
福袋退回: 'إرجاع حقيبة الحظ ',
游戏活动奖励: 'مكافآت نشاط اللعبة',
付费动态头像上传: 'تحميل الصورة الرمزية الديناميكية',
付费动态头像退款: 'استرداد الآلهة الديناميكي',
Bravo礼物价值分成:'احصل على هدية برافو',
Bravo礼物金币奖返点:'برافو يفوز',
日房间奖励:'مكافأة الغرفة الأسبوعية'
},
// goldLog:{
// 鉆石記錄:'سجل الماس',
// 收入記錄:'سجل الدخل',
// 支出記錄:'سجل المصروفات',
// 無更多記錄:'لا يوجد المزيد من السجلات',
// 禮物收入:'دخل الهدايا',
// 官方贈送鉆石:'هدية رسمية',
// 分成收入:'دخل التوزيع',
// 鉆石提現:'سحب الماس',
// 官方扣除:'الحسم الرسمي',
// 鉆石兌換鉆石:'تحويل الماس',
// 無更多分成記錄:'لا يوجد المزيد من سجلات التوزيع',
// 無更多返還記錄:'لا يوجد المزيد من سجلات الاسترداد',
// 無更多提現記錄:'لا يوجد المزيد من سجلات السحب',
// 無更多兌換記錄:'لا يوجد المزيد من سجلات التحويل',
// 充值:'شحن',
// 水晶兌換鉆石收入:'تحويل الكريستال إلى الماس',
// 鉆石兌換金幣收入:'تحويل الماس إلى عملة',
// 打款至公賬充值鉆石:'شحن الماس إلى الحساب العام',
// 開寶箱獲得鉆石:'الحصول على الماس من فتح الصندوق',
// 活動贈送鉆石:'هدية نشاط',
// 官方送鉆石:'هدية رسمية',
// 轉贈鉆石收入:'الحصول على الماس من التحويل',
// 房間紅包退款:'استرداد الحقيبة الحمراء في الغرفة',
// 全服紅包退款:'استرداد الحقيبة الحمراء العامة',
// 收到房間紅包:'استلام الحقيبة الحمراء في الغرفة',
// 收到全服紅包:'استلام الحقيبة الحمراء العامة',
// 塔羅充值:'شحن التارو',
// 首充激勵獎勵鉆石:'مكافأة الشحن الأولى',
// 守護星球獎勵鉆石:'مكافأة حارس الكواكب',
// 星級廚房獎勵:'مكافأة المطبخ النجمي',
// 轉贈禮物收入:'الحصول على الهدايا من التحويل',
// 幸運塔羅中獎獎勵:'جائزة الطالع الحظ',
// 中秋活動獎池瓜分:'تقسيم جائزة حوض الألعاب في عيد القمر',
// 邀請裂變活動被邀請獎勵:'مكافأة الدعوة في فعالية الانقسام',
// 邀請裂變活動直接邀請獎勵:'مكافأة الدعوة المباشرة في فعالية الانقسام',
// 邀請裂變活動直接邀請儲值返點:'إعادة القيمة للشحن المباشر في فعالية الانقسام',
// 邀請裂變活動間接邀請儲值返點:'إعادة القيمة للشحن غير المباشر في فعالية الانقسام',
// 超級幸運禮物鉆石獎返點:'مكافأة الماس الخاصة بالهدايا السعيدة',
// VIP等級獎勵:'مكافأة العضوية VIP',
// 房間禮物支出:'مصروفات الهدايا في الغرفة',
// 私聊禮物支出:'مصروفات الهدايا في المحادثة الخاصة',
// 鉆石紅包支出:'مصروفات الحقيبة الحمراء بالماس',
// 禮物紅包支出:'مصروفات الحقيبة الحمراء بالهدايا',
// 官方消除鉆石:'سحب الماس الرسمي',
// 活動禮包支出:'مصروفات الهدايا في الفعاليات',
// 購買玩法門票支出:'مصروفات شراء تذاكر اللعبة',
// 購買座駕:'شراء السيارة',
// 座駕贈送:'هدية السيارة',
// 轉贈鉆石支出:'مصروفات الماس في التحويل',
// 發出房間紅包:'إصدار الحقيبة الحمراء في الغرفة',
// 發出全服紅包:'إصدار الحقيبة الحمراء العامة',
// 活動支出鉆石:'مصروفات الماس في الفعاليات',
// 守護星球禮包支出:'مصروفات الهدايا في حارس الكواكب',
// 開通貴族:'تفعيل النبلاء',
// 幸運塔羅支付:'دفع الطالع الحظ',
// 退款扣除鉆石:'خصم الماس في الاسترداد',
// 購買頭飾:'شراء الزينة',
// 贈送用戶頭飾:'هدية الزينة للمستخدم',
// 購買銘牌:'شراء الشارة',
// 贈送用戶銘牌:'هدية الشارة للمستخدم',
// 購買資料卡:'شراء البطاقة الشخصية',
// 贈送用戶資料卡:'هدية البطاقة الشخصية للمستخدم',
// 購買聊天氣泡:'شراء فقاعات الدردشة',
// 贈送用戶聊天氣泡:'هدية فقاعات الدردشة للمستخدم',
// 航海冒險禮包支出:'مصروفات الهدايا في مغامرات البحر',
// 星級廚房抽獎:'سحب المطبخ النجمي',
// 轉贈鉆石支出:'مصروفات الماس في التحويل',
// 新年煙花抽獎:'سحب ألعاب الألعاب النارية في العام الجديد',
// 情人節CP購買信物:'شراء الهدايا في عيد الحب',
// 精靈碎片購買:'شراء قطع الجني',
// 歡樂砸蛋抽獎:'سحب رحلة الحب',
// 鉆石開通貴族:'تفعيل النبلاء',
// }
goldLog: {
公會鉆石提現支出: 'مصروفات سحب الألماس للجمعية',
遊戲開黑收入: 'الاستلام الألعاب',
鉆石記錄: 'سجل الماس',
收入記錄: 'سجل الدخل',
支出記錄: 'سجل المصروفات',
無更多記錄: 'لا يوجد المزيد من السجلات',
房間收禮物收入: 'دخل الغرفة من الهدايا',
私聊禮物收入: 'دخل المحادثة الخاصة من الهدايا',
房間流水抽成收入: 'دخل العمولة من الغرفة',
水晶兌換鉆石收入: 'دخل تحويل الكريستال إلى الماس',
提現駁回金幣返還: 'إعادة النقود المرفوضة للسحب',
官方送金幣: 'هدية الذهب الرسمية',
活動贈送金幣: 'هدية الذهب للفعالية',
公會金幣結算收入: 'دخل تسوية نقود النقابة',
超級幸運禮物價值分成: 'تقسيم قيمة هدية الحظ الخارق',
提現: 'السحب',
鉆石兌換金幣: 'تبديل الماس إلى نقود',
官方消除金幣: 'إزالة النقود الرسمية',
退款扣除金幣: 'خصم الاسترداد',
公會金幣結算支出: 'صرف تسوية نقود النقابة',
加入公會金幣清零: 'مسح دخول نقود النقابة',
官方清除钻石: 'إزالة الألماس من قبل الإدارة',
私聊礼物收入: 'نفقات الهدايا الخاصة',
官方赠送钻石: 'هدايا رسمية من الألماس'
}
}
export default ar

View File

@@ -0,0 +1,202 @@
const en = {
diamondLog: {
斋月送祝福:'Ramadan Mubarak',
斋月金币瓜分: "Ramadan Gold Coin Sharing",
公会usd兑换给会长支出: "Guild USD exchange expenditure for the leader",
私聊礼物支出: "Private Chat Gift Expenses",
公款充值金币: "Public Fund Recharge Coins",
官方清除金币: "Officially Clear Coins",
购买个人页背景: "Buy Personal Page Background",
赠送个人页背景: "Gift Personal Page Background",
官方贈送金幣: "Official Gold Gift",
禮物總價值: "Total gift value",
邀請活動: "Invitation event",
房間禮物支出: "Room gift expense",
總收入: "Total income:",
總支出: "Total expense:",
餘額: "Balance",
全部: "All",
公会周期结算会长钻石收入: "Guild Leader Diamond Income for Periodic Settlement",
购买房间背景: "Purchase Room Background",
自定义房间背景: "Custom Room Background",
自定义房间背景驳回: "Custom Room Background Rejected",
主播周奖励: "Host Weekly Rewards",
解除CP手续费: 'Pay Fee',
SS公会活动奖励: 'SS Guild Event Rewards',
公會usd兌換給代儲收入: ' Guild USD for Deposit Income',
公會usd兌換金幣收入: 'Guild USD for Gold Income',
遊戲開黑支出: 'sports betting',
LUDO匹配收入: 'LUDO Match Income',
LUDO匹配退還: 'LUDO Match Refund',
LUDO匹配消耗: 'LUDO Match Expenditure',
購買頭條消耗: 'Purchase Headline Consumption',
小遊戲收入: 'translates to "Game revenue',
小遊戲支出: 'translates to "Game expenses',
加載中: 'Loading...',
金幣記錄: 'Gold Coin Records',
收入記錄: 'Income',
支出記錄: 'Expense',
禮物獲得: 'Gift Received',
沒有更多了: 'No More',
共收入: 'Total Income',
共獲得價值: 'Total Value Received',
共支出: 'Total Expenses',
金幣: 'Gold Coins',
金幣的禮物: 'Gold Coin Gifts',
房間紅包_來自: 'Room Red Packet - From',
全服紅包_來自: 'Global Red Packet - From',
房間紅包退款_來自: 'Room Red Packet Refund - From',
全服紅包退款_來自: 'Global Red Packet Refund - From',
水晶兌換金幣: 'Crystal to Gold Coins Conversion',
金幣兌換金幣: 'Diamond to Coin Income',
鉆石兌換金幣支出: 'Diamond to Coin Expenditure',
活動贈送金幣: 'Activity Gift Gold Coins',
充值: 'Recharge',
塔羅佔蔔: 'Tarot Reading',
集福氣瓜分金幣: 'Fortune Collection Gold Coin Split',
CP邀請退還: 'CP Invitation Refund',
贈送金幣: 'Gift Gold Coins',
首充禮包獲得金幣: 'First Recharge Gift Gold Coins',
星級廚房獎勵: 'Star Kitchen Reward',
幸運塔羅收入: 'Lucky Tarot Income',
中秋活動瓜分金幣: 'Mid-Autumn Activity Gold Coin Split',
守護星球獲得: 'Guardian Planet Acquisition',
邀請好友註冊獎勵: 'Invite Friend Registration Reward',
被邀請註冊獎勵: 'Invited Registration Reward',
直接邀請儲值返點: 'Direct Invitation Deposit Rebate',
間接邀請儲值返點: 'Indirect Invitation Deposit Rebate',
超級幸運禮物價值分成: 'Super Lucky Gift Value Sharing',
超級幸運禮物金幣返點: 'Super Lucky Gift Gold Coin Rebate',
貴族等級獎勵: 'Noble Level Reward',
全服紅包_發生在: 'Global Red Packet - Happened At',
房間紅包_發生在: 'Room Red Packet - Happened At',
活動禮包支出: 'Activity Gift Expenditure',
購買門票: 'Purchase Tickets',
守護星球支出: 'Guardian Planet Expenditure',
CP邀請支出: 'CP Invitation Expenditure',
幸運塔羅支出: 'Lucky Tarot Expenditure',
贈送頭飾支出: 'Gift Headwear Expenditure',
購買頭飾支出: 'Purchase Headwear Expenditure',
購買銘牌支出: 'Purchase Plaque Expenditure',
贈送銘牌支出: 'Gift Plaque Expenditure',
購買資料卡支出: 'Purchase Data Card Expenditure',
贈送資料卡支出: 'Gift Data Card Expenditure',
購買聊天氣泡支出: 'Purchase Chat Bubble Expenditure',
贈送聊天氣泡支出: 'Gift Chat Bubble Expenditure',
航海冒險禮包支出: 'Maritime Adventure Gift Expenditure',
購買座駕支出: 'Purchase Vehicle Expenditure',
贈送座駕支出: 'Gift Vehicle Expenditure',
星級廚房抽獎: 'Star Kitchen Draw',
新年煙花抽獎: 'New Year Fireworks Draw',
奪寶精靈禮包購買支出: 'Treasure Elf Gift Purchase Expenditure',
歡樂砸蛋抽獎: 'Love Journey Draw',
金幣開通貴族: 'Gold Coin Nobility Activation',
轉贈金幣給: 'Transfer Gold Coins To',
贈送: 'Gift',
自己: 'Self',
禮物: 'Gift',
开通VIP: 'Activate VIP',
私聊礼物收入: 'Private Chat Gift Income',
福袋支出: 'Sent lucky bag',
福袋收入: ' Received lucky bag',
福袋退回: ' Return lucky bag',
游戏活动奖励: 'Game Activity Rewards',
付费动态头像上传: 'Dynamic Avatar Upload',
付费动态头像退款: 'Dynamic Avatar Refund',
Bravo礼物价值分成:'Receive Bravo Gift',
Bravo礼物金币奖返点:'Bravo Gift Win',
日房间奖励:'Room Weekly Reward'
},
// goldLog:{
// 鉆石記錄:'Diamond Record',
// 收入記錄:'Income Record',
// 支出記錄:'Expenditure Record',
// 無更多記錄:'No More Records',
// 禮物收入:'Gift Income',
// 官方贈送鉆石:'Official Gift',
// 分成收入:'Commission Income',
// 鉆石提現:'Diamond Withdrawal',
// 官方扣除:'Official Deduction',
// 鉆石兌換鉆石:'Diamond Exchange',
// 無更多分成記錄:'No More Commission Records',
// 無更多返還記錄:'No More Refund Records',
// 無更多提現記錄:'No More Withdrawal Records',
// 無更多兌換記錄:'No More Exchange Records',
// 充值:'Recharge',
// 水晶兌換鉆石收入:'Crystal to Diamond Income',
// 鉆石兌換金幣收入:'Diamond to Coin Income',
// 打款至公賬充值鉆石:'Public Account Top-up',
// 開寶箱獲得鉆石:'Open Treasure Box',
// 活動贈送鉆石:'Activity Gift',
// 官方送鉆石:'Official Gift',
// 轉贈鉆石收入:'Transferred Diamond Income',
// 房間紅包退款:'Room Red Envelope Refund',
// 全服紅包退款:'Global Red Envelope Refund',
// 收到房間紅包:'Received Room Red Envelope',
// 收到全服紅包:'Received Global Red Envelope',
// 塔羅充值:'Tarot Recharge',
// 首充激勵獎勵鉆石:'First Top-up Incentive Diamond',
// 守護星球獎勵鉆石:'Guardian Star Reward Diamond',
// 星級廚房獎勵:'Star Kitchen Reward',
// 轉贈禮物收入:'Transferred Gift Income',
// 幸運塔羅中獎獎勵:'Lucky Tarot Prize',
// 中秋活動獎池瓜分:'Mid-Autumn Activity Prize Pool Sharing',
// 邀請裂變活動被邀請獎勵:'Invitation Fission Activity Invited Reward',
// 邀請裂變活動直接邀請獎勵:'Invitation Fission Activity Direct Invitation Reward',
// 邀請裂變活動直接邀請儲值返點:'Invitation Fission Activity Direct Invitation Top-up Rebate',
// 邀請裂變活動間接邀請儲值返點:'Invitation Fission Activity Indirect Invitation Top-up Rebate',
// 超級幸運禮物鉆石獎返點:'Super Lucky Gift Diamond Award Rebate',
// VIP等級獎勵:'VIP Level Reward',
// 房間禮物支出:'Room Gift Expenditure',
// 私聊禮物支出:'Private Chat Gift Expenditure',
// 鉆石紅包支出:'Diamond Red Envelope Expenditure',
// 禮物紅包支出:'Gift Red Envelope Expenditure',
// 活動支出鉆石:'Activity Expenditure Diamond',
// 守護星球禮包支出:'Guardian Star Gift Expenditure',
// 開通貴族:'Open Noble',
// 幸運塔羅支付:'Lucky Tarot Payment',
// 退款扣除鉆石:'Refund Deduction Diamond',
// 購買頭飾:'Purchase Headdress',
// 贈送用戶頭飾:'Gift User Headdress',
// 購買銘牌:'Purchase Nameplate',
// 贈送用戶銘牌:'Gift User Nameplate',
// 購買資料卡:'Purchase Profile Card',
// 贈送用戶資料卡:'Gift User Profile Card',
// 購買聊天氣泡:'Purchase Chat Bubble',
// 贈送用戶聊天氣泡:'Gift User Chat Bubble',
// 航海冒險禮包支出:'Maritime Adventure Gift Expenditure',
// 星級廚房抽獎:'Star Kitchen Draw',
// 新年煙花抽獎:'New Year Fireworks Draw',
// 情人節CP購買信物:'Valentine\'s Day CP Buy Token',
// 精靈碎片購買:'Elf Fragment Purchase',
// 歡樂砸蛋抽獎:'Love Journey Draw',
// 鉆石開通貴族:'Diamond Open Noble',
// }
goldLog: {
公會鉆石提現支出: 'Guild Diamond Withdrawal Expense',
遊戲開黑收入: 'game orders',
鉆石記錄: 'Diamond Record',
收入記錄: 'Income Record',
支出記錄: 'Expenditure Record',
無更多記錄: 'No More Records',
房間收禮物收入: 'Room Gift Income',
私聊禮物收入: 'Private Gift Income',
房間流水抽成收入: 'Room Commission Income',
水晶兌換鉆石收入: 'Crystal to Diamond Income',
提現駁回金幣返還: 'Rejected Withdrawal Refund',
官方送金幣: 'Official Gold Gift',
活動贈送金幣: 'Event Gold Gift',
公會金幣結算收入: 'Guild Settlement Income',
超級幸運禮物價值分成: 'Super Lucky Split',
提現: 'Withdrawal',
鉆石兌換金幣: 'Diamond to Gold Exchange',
官方消除金幣: 'Official Coin Removal',
退款扣除金幣: 'Refund Deduction',
公會金幣結算支出: 'Guild Settlement Expenditure',
加入公會金幣清零: 'Guild Entry Clearing',
官方清除钻石: 'Officially Clear Diamonds',
私聊礼物收入: 'Private Chat Gift Income',
官方赠送钻石: 'Officially Gifted Diamonds'
}
}
export default en

View File

@@ -0,0 +1,5 @@
const id = {
diamondLog: {},
}
export default id

View File

@@ -0,0 +1,15 @@
import en from './en';
import zh from './zh';
import id from './id';
import ar from './ar';
import tr from './tr';
const messages = {
en: en,
zh: zh,
id: id,
ar: ar,
tr: tr,
}
// console.log('langmessages',messages);
export default messages

View File

@@ -0,0 +1,138 @@
const tr = {
diamondLog: {
斋月送祝福:'Hayırlı Ramazanlar',
斋月金币瓜分: "Ramazan Altın Paylaşımı",
公会usd兑换给会长支出: "Lonca USD değişim harcaması için lider",
私聊礼物支出: "Özel Sohbet Hediye Giderleri",
公款充值金币: "Kamusal Fon Yükleme Paraları",
官方清除金币: "Resmi Olarak Madeni Paraları Temizle",
购买个人页背景: "Kişisel Sayfa Arka Planı Satın Al",
赠送个人页背景: "Kişisel Sayfa Arka Planı Hediye Et",
官方贈送金幣: "Resmi Altın Hediyesi",
禮物總價值: "Toplam hediye değeri",
邀請活動: "Davet Etkinliği",
房間禮物支出: "Oda Hediye Gideri",
總收入: "Toplam gelir:",
總支出: "Toplam gider:",
餘額: "Bakiye",
全部: "Hepsi",
公会周期结算会长钻石收入: "Lonca Lideri Periyodik Hesaplaşma Elmas Geliri",
购买房间背景: "Oda Arka Planı Satın Al",
自定义房间背景: "Özel Oda Arka Planı",
自定义房间背景驳回: "Özel Oda Arka Planı Reddedildi",
主播周奖励: "Yayıncı Haftalık Ödüller",
解除CP手续费: 'Ücret Ödemesi',
SS公会活动奖励: 'SS Lonca Etkinlik Ödülleri',
公會usd兌換給代儲收入: 'Lonca USD Depozito Geliri',
公會usd兌換金幣收入: 'Lonca USD Altın Geliri',
遊戲開黑支出: 'Spor Bahisleri',
LUDO匹配收入: 'LUDO Maç Geliri',
LUDO匹配退還: 'LUDO Maç İade',
LUDO匹配消耗: 'LUDO Maç Harcama',
購買頭條消耗: 'Başlık Satın Alma Tüketimi',
小遊戲收入: 'Oyun Geliri',
小遊戲支出: 'Oyun Harcaması',
加載中: 'Yükleniyor...',
金幣記錄: 'Altın Koin Kayıtları',
收入記錄: 'Gelir',
支出記錄: 'Gider',
禮物獲得: 'Hediye Alındı',
沒有更多了: 'Daha Fazla Yok',
共收入: 'Toplam Gelir',
共獲得價值: 'Toplam Alınan Değer',
共支出: 'Toplam Gider',
金幣: 'Altın Koin',
金幣的禮物: 'Altın Koin Hediye',
房間紅包_來自: 'Oda Kırmızı Paket - Gönderen',
全服紅包_來自: 'Global Kırmızı Paket - Gönderen',
房間紅包退款_來自: 'Oda Kırmızı Paket İade - Gönderen',
全服紅包退款_來自: 'Global Kırmızı Paket İade - Gönderen',
水晶兌換金幣: 'Kristalden Altın Koin Dönüşümü',
金幣兌換金幣: 'Elmas ile Altın Koin Geliri',
鉆石兌換金幣支出: 'Elmas ile Altın Koin Gideri',
活動贈送金幣: 'Etkinlik Altın Koin Hediye',
充值: 'Yükleme',
塔羅佔蔔: 'Tarot Okuma',
集福氣瓜分金幣: 'Şans Toplama Altın Koin Paylaşımı',
CP邀請退還: 'CP Daveti İadesi',
贈送金幣: 'Altın Koin Hediye',
首充禮包獲得金幣: 'İlk Yükleme Hediye Altın Koin',
星級廚房獎勳: 'Yıldızlı Mutfak Ödülü',
幸運塔羅收入: 'Şanslı Tarot Geliri',
中秋活動瓜分金幣: 'Orta Sonbahar Etkinliği Altın Koin Paylaşımı',
守護星球獲得: 'Koruyucu Gezegen Kazanımı',
邀請好友註冊獎勳: 'Arkadaş Davet Kaydı Ödülü',
被邀請註冊獎勳: 'Davetle Kaydolan Ödülü',
直接邀請儲值返點: 'Doğrudan Davet Yatırım İade Puanı',
間接邀請儲值返點: 'Dolaylı Davet Yatırım İade Puanı',
超級幸運禮物價值分成: 'Süper Şanslı Hediye Değer Paylaşımı',
超級幸運禮物金幣返點: 'Süper Şanslı Hediye Altın Koin İade Puanı',
貴族等級獎勳: 'Noble Seviye Ödülü',
全服紅包_發生在: 'Global Kırmızı Paket - Oluştuğu Zaman',
房間紅包_發生在: 'Oda Kırmızı Paket - Oluştuğu Zaman',
活動禮包支出: 'Etkinlik Hediye Gideri',
購買門票: 'Bilet Satın Al',
守護星球支出: 'Koruyucu Gezegen Harcaması',
CP邀請支出: 'CP Daveti Harcaması',
幸運塔羅支出: 'Şanslı Tarot Harcaması',
贈送頭飾支出: 'Hediye Takı Harcaması',
購買頭飾支出: 'Takı Satın Alma Harcaması',
購買銘牌支出: 'Plak Satın Alma Harcaması',
贈送銘牌支出: 'Hediye Plak Harcaması',
購買資料卡支出: 'Veri Kartı Satın Alma Harcaması',
贈送資料卡支出: 'Hediye Veri Kartı Harcaması',
購買聊天氣泡支出: 'Sohbet Balonu Satın Alma Harcaması',
贈送聊天氣泡支出: 'Hediye Sohbet Balonu Harcaması',
航海冒險禮包支出: 'Denizcilik Macerası Hediye Harcaması',
購買座駕支出: 'Araç Satın Alma Harcaması',
贈送座駕支出: 'Hediye Araç Harcaması',
星級廚房抽獎: 'Yıldızlı Mutfak Çekilişi',
新年煙花抽獎: 'Yeni Yıl Havai Fişek Çekilişi',
奪寶精靈禮包購買支出: 'Hazine Perisi Hediye Satın Alma Harcaması',
歡樂砸蛋抽獎: 'Neşeli Yumurta Kırma Çekilişi',
金幣開通貴族: 'Altın Koinle Asalet Aktivasyonu',
轉贈金幣給: 'Altın Koin Transferi',
贈送: 'Hediye',
自己: 'Kendi',
禮物: 'Hediye',
开通VIP: 'VIP Aç',
私聊礼物收入: 'Özel Sohbet Hediye Geliri',
福袋支出 : 'Şanslı çanta gönderildi',
福袋收入: 'Şanslı çanta alındı',
福袋退回: 'Şanslı çantayı iade et',
游戏活动奖励: 'oyun etkinliği ödülleri',
付费动态头像上传: 'Dinamik avatar yükleme',
付费动态头像退款: 'Dinamik Avatar Geri Ödeme',
Bravo礼物价值分成:'Bravo Hediyesi Alın',
Bravo礼物金币奖返点:'Bravo kazanır',
日房间奖励:'Oda Haftalık Ödül'
},
goldLog: {
公會鉆石提現支出: 'Lonca Elmas Çekim Gideri',
遊戲開黑收入: 'Oyun Siparişleri',
鉆石記錄: 'Elmas Kaydı',
收入記錄: 'Gelir Kaydı',
支出記錄: 'Gider Kaydı',
無更多記錄: 'Daha Fazla Kayıt Yok',
房間收禮物收入: 'Oda Hediye Geliri',
私聊禮物收入: 'Özel Mesaj Hediye Geliri',
房間流水抽成收入: 'Oda Komisyon Geliri',
水晶兌換鉆石收入: 'Kristalden Elmas Geliri',
提現駁回金幣返還: 'İptal Edilen Çekim İade Altın Koin',
官方送金幣: 'Resmi Altın Hediye',
活動贈送金幣: 'Etkinlik Altın Hediye',
公會金幣結算收入: 'Lonca Altın Hesaplaşma Geliri',
超級幸運禮物價值分成: 'Süper Şanslı Paylaşım',
提現: 'Çekim',
鉆石兌換金幣: 'Elmas ile Altın Dönüşümü',
官方消除金幣: 'Resmi Coin Silme',
退款扣除金幣: 'İade Kesintisi',
公會金幣結算支出: 'Lonca Altın Hesaplaşma Gideri',
加入公會金幣清零: 'Lonca Katılımı ile Altın Temizleme',
官方清除钻石: 'Resmi Olarak Elmasları Temizle',
私聊礼物收入: 'Özel Sohbet Hediye Gelirleri',
官方赠送钻石: 'Resmi Olarak Verilen Elmaslar'
}
}
export default tr

View File

@@ -0,0 +1,137 @@
const zh = {
diamondLog: {
斋月送祝福:'斋月送祝福',
斋月金币瓜分: "斋月金币瓜分",
公会usd兑换给会长支出: "公会usd兑换给会长支出",
私聊礼物支出: "私聊禮物支出",
公款充值金币: "公款充值金幣",
官方清除金币: "官方清除金幣",
购买个人页背景: "購買個人頁背景",
赠送个人页背景: "贈送個人頁背景",
官方贈送金幣: "官方贈送金幣",
禮物總價值: "禮物總價值",
邀請活動: "邀請活動",
房間禮物支出: "房間禮物支出",
總收入: "總收入",
總支出: "總支出",
餘額: "餘額",
全部: "全部",
公会周期结算会长钻石收入: "公會週期結算會長鑽石收入",
购买房间背景: "購買房間背景",
自定义房间背景: "自訂房間背景",
自定义房间背景驳回: "自訂房間背景駁回",
主播周奖励: "主播周獎勵",
解除CP手续费: '解除CP手續費',
SS公会活动奖励: 'SS公會活動奬勵',
公會usd兌換給代儲收入: '公會usd兌換給代儲收入',
公會usd兌換金幣收入: '公會usd兌換金幣收入',
遊戲開黑支出: '遊戲下單',
LUDO匹配收入: 'LUDO匹配收入',
LUDO匹配退還: 'LUDO匹配退還',
LUDO匹配消耗: 'LUDO匹配消耗',
購買頭條消耗: '購買頭條消耗',
小遊戲收入: '小遊戲收入',
小遊戲支出: '小遊戲支出',
加載中: '加載中...',
金幣記錄: '金幣記錄',
收入記錄: '收入記錄',
支出記錄: '支出記錄',
禮物獲得: '禮物獲得',
沒有更多了: '沒有更多了',
共收入: '共收入',
共獲得價值: '共獲得價值',
共支出: '共支出',
金幣: '金幣',
金幣的禮物: '金幣的禮物',
房間紅包_來自: '房間紅包-來自',
全服紅包_來自: '全服紅包-來自',
房間紅包退款_來自: '房間紅包退款-來自',
全服紅包退款_來自: '全服紅包退款-來自',
水晶兌換金幣: '水晶兌換金幣',
金幣兌換金幣: '鉆石兌換金幣收入',
鉆石兌換金幣支出: '鉆石兌換金幣支出',
活動贈送金幣: '活動贈送金幣',
充值: '充值',
塔羅佔蔔: '塔羅佔蔔',
集福氣瓜分金幣: '集福氣瓜分金幣',
CP邀請退還: 'CP邀請退還',
贈送金幣: '贈送金幣',
首充禮包獲得金幣: '首充禮包獲得金幣',
星級廚房獎勵: '星級廚房獎勵',
幸運塔羅收入: '幸運塔羅收入',
中秋活動瓜分金幣: '中秋活動瓜分金幣',
守護星球獲得: '守護星球獲得',
邀請好友註冊獎勵: '邀請好友註冊獎勵',
被邀請註冊獎勵: '被邀請註冊獎勵',
直接邀請儲值返點: '直接邀請儲值返點',
間接邀請儲值返點: '間接邀請儲值返點',
超級幸運禮物價值分成: '超級幸運禮物價值分成',
超級幸運禮物金幣返點: '超級幸運禮物金幣返點',
貴族等級獎勵: '貴族等級獎勵',
全服紅包_發生在: '全服紅包-發生在',
房間紅包_發生在: '房間紅包-發生在',
活動禮包支出: '活動禮包支出',
購買門票: '購買門票',
守護星球支出: '守護星球支出',
CP邀請支出: 'CP邀請支出',
幸運塔羅支出: '幸運塔羅支出',
贈送頭飾支出: '贈送頭飾支出',
購買頭飾支出: '購買頭飾支出',
購買銘牌支出: '購買銘牌支出',
贈送銘牌支出: '贈送銘牌支出',
購買資料卡支出: '購買資料卡支出',
贈送資料卡支出: '贈送資料卡支出',
購買聊天氣泡支出: '購買聊天氣泡支出',
贈送聊天氣泡支出: '贈送聊天氣泡支出',
航海冒險禮包支出: '航海冒險禮包支出',
購買座駕支出: '購買座駕支出',
贈送座駕支出: '贈送座駕支出',
星級廚房抽獎: '星級廚房抽獎',
新年煙花抽獎: '新年煙花抽獎',
奪寶精靈禮包購買支出: '奪寶精靈禮包購買支出',
歡樂砸蛋抽獎: '歡樂砸蛋抽獎',
金幣開通貴族: '金幣開通貴族',
轉贈金幣給: '轉贈金幣給',
贈送: '贈送',
自己: '自己',
禮物: '禮物',
开通VIP: '開通VIP',
私聊礼物收入: '私聊禮物收入',
福袋支出: '福袋支出',
福袋收入: '福袋收入',
福袋退回: '福袋退回',
游戏活动奖励: '游戏活动奖励',
付费动态头像上传: '動態頭像上傳',
付费动态头像退款: '動態頭像退款',
Bravo礼物价值分成:'收到Bravo',
Bravo礼物金币奖返点:'Bravo 贏取',
日房间奖励:'房间周奖励'
},
goldLog: {
公會鉆石提現支出: '公會鉆石提現支出',
遊戲開黑收入: '遊戲接單',
鉆石記錄: '鉆石記錄',
收入記錄: '收入記錄',
支出記錄: '支出記錄',
無更多記錄: '無更多記錄',
房間收禮物收入: '房間收禮物收入',
私聊禮物收入: '私聊禮物收入',
房間流水抽成收入: '房間流水抽成收入',
水晶兌換鉆石收入: '水晶兌換鉆石收入',
提現駁回金幣返還: '提現駁回金幣返還',
官方送金幣: '官方送金幣',
活動贈送金幣: '活動贈送金幣',
公會金幣結算收入: '公會金幣結算收入',
超級幸運禮物價值分成: '超級幸運禮物價值分成',
提現: '提現',
鉆石兌換金幣: '鉆石兌換金幣',
官方消除金幣: '官方消除金幣',
退款扣除金幣: '退款扣除金幣',
公會金幣結算支出: '公會金幣結算支出',
加入公會金幣清零: '加入公會金幣清零',
官方清除钻石: '官方清除鑽石',
私聊礼物收入: '私聊禮物收入',
官方赠送钻石: '官方贈送鑽石',
},
}
export default zh

View File

@@ -0,0 +1,41 @@
import Vue from 'vue';
import App from './App';
import router from './router';
import '@/static/css/reset.css';
import store from '@/store/index.js';
import getUid from '@/utils/getUid.js';
getUid()
Vue.config.productionTip = false;
import 'vant/lib/index.css';
import vant from 'vant';
import 'lib-flexible/flexible'
import Vconsole from 'vconsole'
import { EnvCheck, checkVersion } from '@/utils/browser.js'
if (EnvCheck() === 'test') {
new Vconsole();
}
import i18n from '@/i18n/i18n.js'
//300毫秒
import fastClick from 'fastClick'
fastClick.attach(document.body)
//ios中input标签点击无效或者需要点击多次
fastClick.prototype.focus = function (targetElement) {
var length;
if (targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month') {
length = targetElement.value.length;
targetElement.focus();
targetElement.setSelectionRange(length, length);
} else {
targetElement.focus();
}
};
Vue.use(vant);
new Vue({
el: '#app',
router,
store,
i18n,
components: { App },
template: '<App/>'
});

View File

@@ -0,0 +1,54 @@
/*jshint esversion:6*/
import Vue from 'vue';
import Router from 'vue-router';
Vue.use(Router);
var routers = new Router({
routes: [
{ path: '/myTransfer', name: 'myTransfer', component: () => import('@/view/myTransfer.vue') },
]
});
routers.beforeEach((to, from, next) => {
if ( window.sessionStorage.getItem('ticket')) {
next()
}
else {
setTimeout(() => {
window.sessionStorage.setItem('uid', info.uid);
window.sessionStorage.setItem('ticket', info.ticket);
console.log(info, 'router')
if (info.deviceInfo['Accept-Language']) {
var language = info.deviceInfo['Accept-Language'];
if (language.indexOf('en') != -1) {
window.sessionStorage.setItem('language', 'en');
} else {
window.sessionStorage.setItem('language', info.deviceInfo['Accept-Language']);
if (language === 'ar') document.documentElement.setAttribute("dir", "rtl")//i18n是我们项目里的全局变量表示当前选择的语言ar代表阿拉伯语
}
} else {
// 获取地址栏参数
function getQueryString() {
var _url = location.search;
var theRequest = new Object();
if (_url.indexOf('?') != -1) {
var str = _url.substr(1);
strs = str.split('&');
for (var i in strs) {
theRequest[strs[i].split('=')[0]] = decodeURI(strs[i].split('=')[1]);
}
}
return theRequest;
}
var language = getQueryString().lang ? getQueryString().lang : 'en';
window.sessionStorage.setItem('language', language);
// var language = info.deviceInfo['Accept-Language'];
if (language === 'ar') document.documentElement.setAttribute("dir", "rtl")//i18n是我们项目里的全局变量表示当前选择的语言ar代表阿拉伯语
}
next();
}, 50)
}
});
export default routers;

View File

@@ -0,0 +1,144 @@
/**
* Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/)
* http://cssreset.com
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header,
menu, nav, output, ruby, section, summary,
time, mark, audio, video, input {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font-weight: normal;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
/* custom */
a {
color: #7e8c8d;
text-decoration: none;
-webkit-backface-visibility: hidden;
}
li {
list-style: none;
}
::-webkit-scrollbar {
width: 5px;
height: 5px;
}
::-webkit-scrollbar-track-piece {
background-color: rgba(0, 0, 0, 0.2);
-webkit-border-radius: 6px;
}
::-webkit-scrollbar-thumb:vertical {
height: 5px;
background-color: rgba(125, 125, 125, 0.7);
-webkit-border-radius: 6px;
}
::-webkit-scrollbar-thumb:horizontal {
width: 5px;
background-color: rgba(125, 125, 125, 0.7);
-webkit-border-radius: 6px;
}
html, body {
width: 100%;
}
body {
-webkit-text-size-adjust: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
img{
width: 100%;
vertical-align: top;
}
.mask,.share-mask {
position: fixed;
width: 100%;
left: 0;
bottom: 0;
display: flex;
height: 60px;
align-items: center;
background: rgba(0, 0, 0, 0.5);
justify-content: space-between;
padding: 0 8px;
box-sizing: border-box;
color:#fff;
display: none; }
.mask .logo {
width: 40px;
}
.mask .slogan {
color: #fff;
margin: 0 8px;
}
#download {
border: 1px solid #fff;
color: #fff;
width: 80px;
text-align: center;
border-radius: 15px;
line-height: 30px; }
#download a{
color: #fff; }
.share-mask{
padding: 0 16px;
}
.share-mask .shareBtn{
border-radius: 6px;
/*background: linear-gradient(to right,#fe95c0,#ff83b5);*/
height: 30px;
line-height: 30px;
width: 80px;
text-align: center;
}
.singleTemplate{
display: none;
}

View File

@@ -0,0 +1,36 @@
import Vuex from 'vuex'
import Vue from 'vue'
import { EnvCheck, checkVersion } from '@/utils/browser.js'
let isApp = checkVersion().app
console.log(isApp, 'store')
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
info: {
ticket: '123',
uid: "678",
},
isApp
},
mutations: {
setInfo(state, info) {
state.info.ticket = info.ticket
state.info.uid = info.uid
}
},
getters: {
getInfo(state) {
return state.info
},
getIsApp(state) {
return state.info
}
},
actions: {
getUserInfo(state) {
return state.state
}
}
})
export default store

View File

@@ -0,0 +1,149 @@
:export {
menuText: #bfcbd9;
menuActiveText: #409EFF;
subMenuActiveText: #f4f4f5;
menuBg: #304156;
menuHover: #263445;
subMenuBg: #1f2d3d;
subMenuHover: #001528;
sideBarWidth: 210px;
}
.blue-btn {
background: #324157;
}
.blue-btn:hover {
color: #324157;
}
.blue-btn:hover:before, .blue-btn:hover:after {
background: #324157;
}
.light-blue-btn {
background: #3A71A8;
}
.light-blue-btn:hover {
color: #3A71A8;
}
.light-blue-btn:hover:before, .light-blue-btn:hover:after {
background: #3A71A8;
}
.red-btn {
background: #C03639;
}
.red-btn:hover {
color: #C03639;
}
.red-btn:hover:before, .red-btn:hover:after {
background: #C03639;
}
.pink-btn {
background: #E65D6E;
}
.pink-btn:hover {
color: #E65D6E;
}
.pink-btn:hover:before, .pink-btn:hover:after {
background: #E65D6E;
}
.green-btn {
background: #30B08F;
}
.green-btn:hover {
color: #30B08F;
}
.green-btn:hover:before, .green-btn:hover:after {
background: #30B08F;
}
.tiffany-btn {
background: #4AB7BD;
}
.tiffany-btn:hover {
color: #4AB7BD;
}
.tiffany-btn:hover:before, .tiffany-btn:hover:after {
background: #4AB7BD;
}
.yellow-btn {
background: #FEC171;
}
.yellow-btn:hover {
color: #FEC171;
}
.yellow-btn:hover:before, .yellow-btn:hover:after {
background: #FEC171;
}
.pan-btn {
font-size: 14px;
color: #fff;
padding: 14px 36px;
border-radius: 8px;
border: none;
outline: none;
transition: 600ms ease all;
position: relative;
display: inline-block;
}
.pan-btn:hover {
background: #fff;
}
.pan-btn:hover:before, .pan-btn:hover:after {
width: 100%;
transition: 600ms ease all;
}
.pan-btn:before, .pan-btn:after {
content: '';
position: absolute;
top: 0;
right: 0;
height: 2px;
width: 0;
transition: 400ms ease all;
}
.pan-btn::after {
right: inherit;
top: inherit;
left: 0;
bottom: 0;
}
.custom-button {
display: inline-block;
line-height: 1;
white-space: nowrap;
cursor: pointer;
background: #fff;
color: #fff;
-webkit-appearance: none;
text-align: center;
box-sizing: border-box;
outline: 0;
margin: 0;
padding: 10px 15px;
font-size: 14px;
border-radius: 4px;
}

View File

@@ -0,0 +1,99 @@
@import './variables.scss';
@mixin colorBtn($color) {
background: $color;
&:hover {
color: $color;
&:before,
&:after {
background: $color;
}
}
}
.blue-btn {
@include colorBtn($blue)
}
.light-blue-btn {
@include colorBtn($light-blue)
}
.red-btn {
@include colorBtn($red)
}
.pink-btn {
@include colorBtn($pink)
}
.green-btn {
@include colorBtn($green)
}
.tiffany-btn {
@include colorBtn($tiffany)
}
.yellow-btn {
@include colorBtn($yellow)
}
.pan-btn {
font-size: 14px;
color: #fff;
padding: 14px 36px;
border-radius: 8px;
border: none;
outline: none;
transition: 600ms ease all;
position: relative;
display: inline-block;
&:hover {
background: #fff;
&:before,
&:after {
width: 100%;
transition: 600ms ease all;
}
}
&:before,
&:after {
content: '';
position: absolute;
top: 0;
right: 0;
height: 2px;
width: 0;
transition: 400ms ease all;
}
&::after {
right: inherit;
top: inherit;
left: 0;
bottom: 0;
}
}
.custom-button {
display: inline-block;
line-height: 1;
white-space: nowrap;
cursor: pointer;
background: #fff;
color: #fff;
-webkit-appearance: none;
text-align: center;
box-sizing: border-box;
outline: 0;
margin: 0;
padding: 10px 15px;
font-size: 14px;
border-radius: 4px;
}

View File

@@ -0,0 +1,566 @@
:export {
menuText: #bfcbd9;
menuActiveText: #409EFF;
subMenuActiveText: #f4f4f5;
menuBg: #304156;
menuHover: #263445;
subMenuBg: #1f2d3d;
subMenuHover: #001528;
sideBarWidth: 210px;
}
/* fade */
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.28s;
}
.fade-enter,
.fade-leave-active {
opacity: 0;
}
/* fade-transform */
.fade-transform-leave-active,
.fade-transform-enter-active {
transition: all .5s;
}
.fade-transform-enter {
opacity: 0;
transform: translateX(-30px);
}
.fade-transform-leave-to {
opacity: 0;
transform: translateX(30px);
}
/* breadcrumb transition */
.breadcrumb-enter-active,
.breadcrumb-leave-active {
transition: all .5s;
}
.breadcrumb-enter,
.breadcrumb-leave-active {
opacity: 0;
transform: translateX(20px);
}
.breadcrumb-move {
transition: all .5s;
}
.breadcrumb-leave-active {
position: absolute;
}
#app .main-container {
min-height: 100%;
transition: margin-left .28s;
margin-left: 210px;
position: relative;
}
#app .sidebar-container {
transition: width 0.28s;
width: 210px !important;
background-color: #304156;
height: 100%;
position: fixed;
font-size: 0px;
top: 0;
bottom: 0;
left: 0;
z-index: 1001;
overflow: hidden;
}
#app .sidebar-container .horizontal-collapse-transition {
transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
}
#app .sidebar-container .scrollbar-wrapper {
overflow-x: hidden !important;
}
#app .sidebar-container .el-scrollbar__bar.is-vertical {
right: 0px;
}
#app .sidebar-container .el-scrollbar {
height: 100%;
}
#app .sidebar-container.has-logo .el-scrollbar {
height: calc(100% - 50px);
}
#app .sidebar-container .is-horizontal {
display: none;
}
#app .sidebar-container a {
display: inline-block;
width: 100%;
overflow: hidden;
}
#app .sidebar-container .svg-icon {
margin-right: 16px;
}
#app .sidebar-container .el-menu {
border: none;
height: 100%;
width: 100% !important;
}
#app .sidebar-container .submenu-title-noDropdown:hover,
#app .sidebar-container .el-submenu__title:hover {
background-color: #263445 !important;
}
#app .sidebar-container .is-active > .el-submenu__title {
color: #f4f4f5 !important;
}
#app .sidebar-container .nest-menu .el-submenu > .el-submenu__title,
#app .sidebar-container .el-submenu .el-menu-item {
min-width: 210px !important;
background-color: #1f2d3d !important;
}
#app .sidebar-container .nest-menu .el-submenu > .el-submenu__title:hover,
#app .sidebar-container .el-submenu .el-menu-item:hover {
background-color: #001528 !important;
}
#app .hideSidebar .sidebar-container {
width: 54px !important;
}
#app .hideSidebar .main-container {
margin-left: 54px;
}
#app .hideSidebar .submenu-title-noDropdown {
padding: 0 !important;
position: relative;
}
#app .hideSidebar .submenu-title-noDropdown .el-tooltip {
padding: 0 !important;
}
#app .hideSidebar .submenu-title-noDropdown .el-tooltip .svg-icon {
margin-left: 20px;
}
#app .hideSidebar .el-submenu {
overflow: hidden;
}
#app .hideSidebar .el-submenu > .el-submenu__title {
padding: 0 !important;
}
#app .hideSidebar .el-submenu > .el-submenu__title .svg-icon {
margin-left: 20px;
}
#app .hideSidebar .el-submenu > .el-submenu__title .el-submenu__icon-arrow {
display: none;
}
#app .hideSidebar .el-menu--collapse .el-submenu > .el-submenu__title > span {
height: 0;
width: 0;
overflow: hidden;
visibility: hidden;
display: inline-block;
}
#app .el-menu--collapse .el-menu .el-submenu {
min-width: 210px !important;
}
#app .mobile .main-container {
margin-left: 0px;
}
#app .mobile .sidebar-container {
transition: transform .28s;
width: 210px !important;
}
#app .mobile.hideSidebar .sidebar-container {
pointer-events: none;
transition-duration: 0.3s;
transform: translate3d(-210px, 0, 0);
}
#app .withoutAnimation .main-container,
#app .withoutAnimation .sidebar-container {
transition: none;
}
.el-menu--vertical > .el-menu .svg-icon {
margin-right: 16px;
}
.el-menu--vertical .nest-menu .el-submenu > .el-submenu__title:hover,
.el-menu--vertical .el-menu-item:hover {
background-color: #263445 !important;
}
.el-menu--vertical > .el-menu--popup {
max-height: 100vh;
overflow-y: auto;
}
.el-menu--vertical > .el-menu--popup::-webkit-scrollbar-track-piece {
background: #d3dce6;
}
.el-menu--vertical > .el-menu--popup::-webkit-scrollbar {
width: 6px;
}
.el-menu--vertical > .el-menu--popup::-webkit-scrollbar-thumb {
background: #99a9bf;
border-radius: 20px;
}
:export {
menuText: #bfcbd9;
menuActiveText: #409EFF;
subMenuActiveText: #f4f4f5;
menuBg: #304156;
menuHover: #263445;
subMenuBg: #1f2d3d;
subMenuHover: #001528;
sideBarWidth: 210px;
}
.blue-btn {
background: #324157;
}
.blue-btn:hover {
color: #324157;
}
.blue-btn:hover:before, .blue-btn:hover:after {
background: #324157;
}
.light-blue-btn {
background: #3A71A8;
}
.light-blue-btn:hover {
color: #3A71A8;
}
.light-blue-btn:hover:before, .light-blue-btn:hover:after {
background: #3A71A8;
}
.red-btn {
background: #C03639;
}
.red-btn:hover {
color: #C03639;
}
.red-btn:hover:before, .red-btn:hover:after {
background: #C03639;
}
.pink-btn {
background: #E65D6E;
}
.pink-btn:hover {
color: #E65D6E;
}
.pink-btn:hover:before, .pink-btn:hover:after {
background: #E65D6E;
}
.green-btn {
background: #30B08F;
}
.green-btn:hover {
color: #30B08F;
}
.green-btn:hover:before, .green-btn:hover:after {
background: #30B08F;
}
.tiffany-btn {
background: #4AB7BD;
}
.tiffany-btn:hover {
color: #4AB7BD;
}
.tiffany-btn:hover:before, .tiffany-btn:hover:after {
background: #4AB7BD;
}
.yellow-btn {
background: #FEC171;
}
.yellow-btn:hover {
color: #FEC171;
}
.yellow-btn:hover:before, .yellow-btn:hover:after {
background: #FEC171;
}
.pan-btn {
font-size: 14px;
color: #fff;
padding: 14px 36px;
border-radius: 8px;
border: none;
outline: none;
transition: 600ms ease all;
position: relative;
display: inline-block;
}
.pan-btn:hover {
background: #fff;
}
.pan-btn:hover:before, .pan-btn:hover:after {
width: 100%;
transition: 600ms ease all;
}
.pan-btn:before, .pan-btn:after {
content: '';
position: absolute;
top: 0;
right: 0;
height: 2px;
width: 0;
transition: 400ms ease all;
}
.pan-btn::after {
right: inherit;
top: inherit;
left: 0;
bottom: 0;
}
.custom-button {
display: inline-block;
line-height: 1;
white-space: nowrap;
cursor: pointer;
background: #fff;
color: #fff;
-webkit-appearance: none;
text-align: center;
box-sizing: border-box;
outline: 0;
margin: 0;
padding: 10px 15px;
font-size: 14px;
border-radius: 4px;
}
body {
height: 100%;
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
}
label {
font-weight: 700;
}
html {
height: 100%;
box-sizing: border-box;
}
#app {
height: 100%;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
.no-padding {
padding: 0px !important;
}
.padding-content {
padding: 4px 0;
}
a:focus,
a:active {
outline: none;
}
a,
a:focus,
a:hover {
cursor: pointer;
color: inherit;
text-decoration: none;
}
div:focus {
outline: none;
}
.fr {
float: right;
}
.fl {
float: left;
}
.pr-5 {
padding-right: 5px;
}
.pl-5 {
padding-left: 5px;
}
.block {
display: block;
}
.pointer {
cursor: pointer;
}
.inlineBlock {
display: block;
}
.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
aside {
background: #eef1f6;
padding: 8px 24px;
margin-bottom: 20px;
border-radius: 2px;
display: block;
line-height: 32px;
font-size: 16px;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
color: #2c3e50;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
aside a {
color: #337ab7;
cursor: pointer;
}
aside a:hover {
color: #20a0ff;
}
.app-container {
padding: 20px;
}
.components-container {
margin: 30px 50px;
position: relative;
}
.pagination-container {
margin-top: 30px;
}
.text-center {
text-align: center;
}
.sub-navbar {
height: 50px;
line-height: 50px;
position: relative;
width: 100%;
text-align: right;
padding-right: 20px;
transition: 600ms ease position;
background: linear-gradient(90deg, #20b6f9 0%, #20b6f9 0%, #2178f1 100%, #2178f1 100%);
}
.sub-navbar .subtitle {
font-size: 20px;
color: #fff;
}
.sub-navbar.draft {
background: #d0d0d0;
}
.sub-navbar.deleted {
background: #d0d0d0;
}
.link-type,
.link-type:focus {
color: #337ab7;
cursor: pointer;
}
.link-type:hover,
.link-type:focus:hover {
color: #20a0ff;
}
.filter-container {
padding-bottom: 10px;
}
.filter-container .filter-item {
display: inline-block;
vertical-align: middle;
margin-bottom: 10px;
}
.multiselect {
line-height: 16px;
}
.multiselect--active {
z-index: 1000 !important;
}

View File

@@ -0,0 +1,191 @@
@import './variables.scss';
@import './mixin.scss';
@import './transition.scss';
// @import './element-ui.scss';
@import './sidebar.scss';
@import './btn.scss';
body {
height: 100%;
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
}
label {
font-weight: 700;
}
html {
height: 100%;
box-sizing: border-box;
}
#app {
height: 100%;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
.no-padding {
padding: 0px !important;
}
.padding-content {
padding: 4px 0;
}
a:focus,
a:active {
outline: none;
}
a,
a:focus,
a:hover {
cursor: pointer;
color: inherit;
text-decoration: none;
}
div:focus {
outline: none;
}
.fr {
float: right;
}
.fl {
float: left;
}
.pr-5 {
padding-right: 5px;
}
.pl-5 {
padding-left: 5px;
}
.block {
display: block;
}
.pointer {
cursor: pointer;
}
.inlineBlock {
display: block;
}
.clearfix {
&:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
}
aside {
background: #eef1f6;
padding: 8px 24px;
margin-bottom: 20px;
border-radius: 2px;
display: block;
line-height: 32px;
font-size: 16px;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
color: #2c3e50;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
a {
color: #337ab7;
cursor: pointer;
&:hover {
color: rgb(32, 160, 255);
}
}
}
//main-container全局样式
.app-container {
padding: 20px;
}
.components-container {
margin: 30px 50px;
position: relative;
}
.pagination-container {
margin-top: 30px;
}
.text-center {
text-align: center
}
.sub-navbar {
height: 50px;
line-height: 50px;
position: relative;
width: 100%;
text-align: right;
padding-right: 20px;
transition: 600ms ease position;
background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%);
.subtitle {
font-size: 20px;
color: #fff;
}
&.draft {
background: #d0d0d0;
}
&.deleted {
background: #d0d0d0;
}
}
.link-type,
.link-type:focus {
color: #337ab7;
cursor: pointer;
&:hover {
color: rgb(32, 160, 255);
}
}
.filter-container {
padding-bottom: 10px;
.filter-item {
display: inline-block;
vertical-align: middle;
margin-bottom: 10px;
}
}
//refine vue-multiselect plugin
.multiselect {
line-height: 16px;
}
.multiselect--active {
z-index: 1000 !important;
}

View File

@@ -0,0 +1 @@
/* No CSS */

View File

@@ -0,0 +1,66 @@
@mixin clearfix {
&:after {
content: "";
display: table;
clear: both;
}
}
@mixin scrollBar {
&::-webkit-scrollbar-track-piece {
background: #d3dce6;
}
&::-webkit-scrollbar {
width: 6px;
}
&::-webkit-scrollbar-thumb {
background: #99a9bf;
border-radius: 20px;
}
}
@mixin relative {
position: relative;
width: 100%;
height: 100%;
}
@mixin pct($pct) {
width: #{$pct};
position: relative;
margin: 0 auto;
}
@mixin triangle($width, $height, $color, $direction) {
$width: $width/2;
$color-border-style: $height solid $color;
$transparent-border-style: $width solid transparent;
height: 0;
width: 0;
@if $direction==up {
border-bottom: $color-border-style;
border-left: $transparent-border-style;
border-right: $transparent-border-style;
}
@else if $direction==right {
border-left: $color-border-style;
border-top: $transparent-border-style;
border-bottom: $transparent-border-style;
}
@else if $direction==down {
border-top: $color-border-style;
border-left: $transparent-border-style;
border-right: $transparent-border-style;
}
@else if $direction==left {
border-right: $color-border-style;
border-top: $transparent-border-style;
border-bottom: $transparent-border-style;
}
}

View File

@@ -0,0 +1,209 @@
#app {
.main-container {
min-height: 100%;
transition: margin-left .28s;
margin-left: $sideBarWidth;
position: relative;
}
.sidebar-container {
transition: width 0.28s;
width: $sideBarWidth !important;
background-color: $menuBg;
height: 100%;
position: fixed;
font-size: 0px;
top: 0;
bottom: 0;
left: 0;
z-index: 1001;
overflow: hidden;
// reset element-ui css
.horizontal-collapse-transition {
transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
}
.scrollbar-wrapper {
overflow-x: hidden !important;
}
.el-scrollbar__bar.is-vertical {
right: 0px;
}
.el-scrollbar {
height: 100%;
}
&.has-logo {
.el-scrollbar {
height: calc(100% - 50px);
}
}
.is-horizontal {
display: none;
}
a {
display: inline-block;
width: 100%;
overflow: hidden;
}
.svg-icon {
margin-right: 16px;
}
.el-menu {
border: none;
height: 100%;
width: 100% !important;
}
// menu hover
.submenu-title-noDropdown,
.el-submenu__title {
&:hover {
background-color: $menuHover !important;
}
}
.is-active>.el-submenu__title {
color: $subMenuActiveText !important;
}
& .nest-menu .el-submenu>.el-submenu__title,
& .el-submenu .el-menu-item {
min-width: $sideBarWidth !important;
background-color: $subMenuBg !important;
&:hover {
background-color: $subMenuHover !important;
}
}
}
.hideSidebar {
.sidebar-container {
width: 54px !important;
}
.main-container {
margin-left: 54px;
}
.submenu-title-noDropdown {
padding: 0 !important;
position: relative;
.el-tooltip {
padding: 0 !important;
.svg-icon {
margin-left: 20px;
}
}
}
.el-submenu {
overflow: hidden;
&>.el-submenu__title {
padding: 0 !important;
.svg-icon {
margin-left: 20px;
}
.el-submenu__icon-arrow {
display: none;
}
}
}
.el-menu--collapse {
.el-submenu {
&>.el-submenu__title {
&>span {
height: 0;
width: 0;
overflow: hidden;
visibility: hidden;
display: inline-block;
}
}
}
}
}
.el-menu--collapse .el-menu .el-submenu {
min-width: $sideBarWidth !important;
}
// mobile responsive
.mobile {
.main-container {
margin-left: 0px;
}
.sidebar-container {
transition: transform .28s;
width: $sideBarWidth !important;
}
&.hideSidebar {
.sidebar-container {
pointer-events: none;
transition-duration: 0.3s;
transform: translate3d(-$sideBarWidth, 0, 0);
}
}
}
.withoutAnimation {
.main-container,
.sidebar-container {
transition: none;
}
}
}
// when menu collapsed
.el-menu--vertical {
&>.el-menu {
.svg-icon {
margin-right: 16px;
}
}
.nest-menu .el-submenu>.el-submenu__title,
.el-menu-item {
&:hover {
// you can use $subMenuHover
background-color: $menuHover !important;
}
}
// the scroll bar appears when the subMenu is too long
>.el-menu--popup {
max-height: 100vh;
overflow-y: auto;
&::-webkit-scrollbar-track-piece {
background: #d3dce6;
}
&::-webkit-scrollbar {
width: 6px;
}
&::-webkit-scrollbar-thumb {
background: #99a9bf;
border-radius: 20px;
}
}
}

View File

@@ -0,0 +1,46 @@
/* fade */
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.28s;
}
.fade-enter,
.fade-leave-active {
opacity: 0;
}
/* fade-transform */
.fade-transform-leave-active,
.fade-transform-enter-active {
transition: all .5s;
}
.fade-transform-enter {
opacity: 0;
transform: translateX(-30px);
}
.fade-transform-leave-to {
opacity: 0;
transform: translateX(30px);
}
/* breadcrumb transition */
.breadcrumb-enter-active,
.breadcrumb-leave-active {
transition: all .5s;
}
.breadcrumb-enter,
.breadcrumb-leave-active {
opacity: 0;
transform: translateX(20px);
}
.breadcrumb-move {
transition: all .5s;
}
.breadcrumb-leave-active {
position: absolute;
}

View File

@@ -0,0 +1,48 @@
// global transition css
/* fade */
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.28s;
}
.fade-enter,
.fade-leave-active {
opacity: 0;
}
/* fade-transform */
.fade-transform-leave-active,
.fade-transform-enter-active {
transition: all .5s;
}
.fade-transform-enter {
opacity: 0;
transform: translateX(-30px);
}
.fade-transform-leave-to {
opacity: 0;
transform: translateX(30px);
}
/* breadcrumb transition */
.breadcrumb-enter-active,
.breadcrumb-leave-active {
transition: all .5s;
}
.breadcrumb-enter,
.breadcrumb-leave-active {
opacity: 0;
transform: translateX(20px);
}
.breadcrumb-move {
transition: all .5s;
}
.breadcrumb-leave-active {
position: absolute;
}

View File

@@ -0,0 +1,10 @@
:export {
menuText: #bfcbd9;
menuActiveText: #409EFF;
subMenuActiveText: #f4f4f5;
menuBg: #304156;
menuHover: #263445;
subMenuBg: #1f2d3d;
subMenuHover: #001528;
sideBarWidth: 210px;
}

View File

@@ -0,0 +1,35 @@
// base color
$blue:#324157;
$light-blue:#3A71A8;
$red:#C03639;
$pink: #E65D6E;
$green: #30B08F;
$tiffany: #4AB7BD;
$yellow:#FEC171;
$panGreen: #30B08F;
// sidebar
$menuText:#bfcbd9;
$menuActiveText:#409EFF;
$subMenuActiveText:#f4f4f5; // https://github.com/ElemeFE/element/issues/12951
$menuBg:#304156;
$menuHover:#263445;
$subMenuBg:#1f2d3d;
$subMenuHover:#001528;
$sideBarWidth: 210px;
// the :export directive is the magic sauce for webpack
// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
:export {
menuText: $menuText;
menuActiveText: $menuActiveText;
subMenuActiveText: $subMenuActiveText;
menuBg: $menuBg;
menuHover: $menuHover;
subMenuBg: $subMenuBg;
subMenuHover: $subMenuHover;
sideBarWidth: $sideBarWidth;
}

View File

@@ -0,0 +1,35 @@
export const checkVersion = () => {
var u = navigator.userAgent, app = navigator.appVersion;
return {
trident: u.indexOf('Trident') > -1, //IE内核
presto: u.indexOf('Presto') > -1, //opera内核
webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1,//火狐内核
mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
android: u.indexOf('Android') > -1 || u.indexOf('Adr') > -1, //android终端
iPhone: u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器
iPad: u.indexOf('iPad') > -1, //是否iPad
webApp: u.indexOf('Safari') == -1, //是否web应该程序没有头部与底部
weixin: u.indexOf('MicroMessenger') > -1, //是否微信
qq: u.match(/\sQQ/i) == " qq", //是否QQ
app: u.match('molistarApp') == 'molistarApp' //是否在app内
};
}
export const EnvCheck = () => {
if (window.location.href) {
var _url = window.location.href;
var res = _url.match(/api.uat.z/);
var res1 = _url.match(/120.79.211.243/);
var res2 = _url.match(/192.168/);
var res3 = _url.match(/127.0.0.1/);
var res4 = _url.match(/api.uat/);
var res5 = _url.match(/beta./);
if (res || res1 || res2 || res3 || res4 || res5 ) {
return 'test';
} else {
return 'live';
}
}
}

View File

@@ -0,0 +1,276 @@
// 指定全部变量
/* global linkedme wx */
// import axios from 'axios'
// const axios = require('axios')
const commonJs = {
// 获取设备信息
checkVersion: function () {
let u = navigator.userAgent
// eslint-disable-next-line no-unused-vars
let app = navigator.appVersion
return {
trident: u.indexOf('Trident') > -1, // IE内核
presto: u.indexOf('Presto') > -1, // opera内核
webKit: u.indexOf('AppleWebKit') > -1, // 苹果、谷歌内核
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') === -1, // 火狐内核
mobile: !!u.match(/AppleWebKit.*Mobile.*/), // 是否为移动终端
ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), // ios终端
android: u.indexOf('Android') > -1 || u.indexOf('Adr') > -1, // android终端
iPhone: u.indexOf('iPhone') > -1, // 是否为iPhone或者QQHD浏览器
iPad: u.indexOf('iPad') > -1, // 是否iPad
webApp: u.indexOf('Safari') > -1, // 是否web应该程序没有头部与底部
weixin: u.indexOf('MicroMessenger') > -1, // 是否微信
qq: u.match(/\sQQ/i) === ' qq', // 是否QQ
molistar: u.match('molistarApp'),
app: u.match('molistarApp') // 是否在app内
}
},
// 适配服务器环境(正式/测试)
EnvCheck: function () {
if (window.location.href) {
let _url = window.location.href
let res = _url.match(/beta/)
return (res) ? 'test' : 'live'
}
},
// 获取当前链接需要配置的代理字符串
locateJudge: function () {
if (window.location.href) {
let _url = window.location.href
let res = _url.match(/test|localhost/)
return (res) ? '/api' : ''
// if (res) {
// return '/api';
// } else {
// return '';
// }
}
},
// 获取当前链接参数
getQueryString: function () {
let _url = location.search
// eslint-disable-next-line no-new-object
let theRequest = new Object()
if (_url.indexOf('?') !== -1) {
let str = _url.substr(1)
let strs = str.split('&')
for (let i in strs) {
theRequest[strs[i].split('=')[0]] = decodeURI(strs[i].split('=')[1])
}
}
return theRequest
},
// 客户端方法
tools: {
cookieUtils: {
set: function (key, val, time) {
let date = new Date()
let expiresDays = time
date.setTime(date.getTime() + expiresDays * 24 * 3600 * 1000)
document.cookie = key + '=' + val + ';expires=' + date.toGMTString()
},
get: function (key) {
let getCookie = document.cookie.replace(/[ ]/g, '')
let arrCookie = getCookie.split(';')
let val
for (let i = 0; i < arrCookie.length; i++) {
let arr = arrCookie[i].split('=')
if (key === arr[0]) {
val = arr[1]
break
}
}
return val
},
delete: function (key) {
let date = new Date()
date.setTime(date.getTime() - 10000)
document.cookie = key + '+v; expires =' + date.toGMTString()
}
},
routerTypeContent: {
ROOM_PAGE: 1, // 跳转房间页 传参routerType: uid
H5_PAGE: 2, // 跳转h5
PURSE_PAGE: 3, // 跳转钱包页
RED_PAGE: 4, // xcRedColor
RECHARGE_PAGE: 5, // 跳转充值页
PERSON_PAGE: 6, // 跳转个人页 传参(routerType) : uid
CAR_PAGE: 7, // 跳转座驾 传参(routerType) : 0 (装扮商城) 或者 1 (车库)
HEADWEAR_PAGE: 8, // 跳转到头饰 传参(routerType) : 0 (装扮商城) 或者 1 (头饰库)
SYSTEMMESSAGE_PAGE: 9, // 系统消息
FAMILY_PAGE: 10, // 跳转到家族页面
GROUP_PAGE: 11, // 跳转到群组
BACKGROUND_PAGE: 12, // 跳转到背景设置 传参(routerType): 0 (装扮商城) 或者 1 (背景库)
NEW_USER_PAGE: 13, // 新秀玩友
INVITE_FRIEND_PAGE: 14, // 邀请好友
PUBLICCHAT_PAGE: 15, // 公聊大厅
XCZ_ACCOUNT_PAGE: 16, // 绑定 xcz 账号
PHONE_NUM_PAGE: 17, // 绑定手机号
PAY_PWD_PAGE: 18, // 设置支付密码
WITHDRAW_RECORD_PAGE: 19, // 提现记录页面
RECOMMEND_CARD_PAGE: 20, // 跳转到推荐卡仓库
TEACHER_PUPIL_PAGE: 28 // 跳转到师徒页面入口
},
nativeUtils: {
jumpAppointPage: function (type, val) {
// routerType 跳转名称
// routerVal 跳转需要传的参数
let browser = commonJs.checkVersion()
let jumpObj = {}
jumpObj.routerType = commonJs.tools.routerTypeContent[type]
if (val) jumpObj.routerVal = val
if (browser.app) {
if (browser.ios) {
if (type.indexOf('_') > -1) {
window.webkit.messageHandlers.jumpAppointPage.postMessage(jumpObj)
} else {
if (val) {
window.webkit.messageHandlers.type.postMessage(val)
} else {
window.webkit.messageHandlers.type.postMessage(null)
}
}
} else if (browser.android) {
// eslint-disable-next-line no-undef
if (androidJsObj && typeof androidJsObj === 'object') {
if (type.indexOf('_') > -1) {
window.androidJsObj.jumpAppointPage(JSON.stringify(jumpObj))
} else {
window.androidJsObj.jumpAppointPage(type)
}
}
}
}
},
getUid: function () {
let browser = commonJs.checkVersion()
let val
if (browser.app) {
if (browser.ios) {
val = commonJs.tools.cookieUtils.get('uid')
} else if (browser.android) {
// eslint-disable-next-line no-undef
if (androidJsObj && typeof androidJsObj === 'object') {
val = parseInt(window.androidJsObj.getUid())
}
}
} else {
let locate = commonJs.getQueryString()
if (!locate.uid && !locate.shareUid) {
val = 935006
} else {
if (locate.shareUid) {
val = locate.shareUid
} else {
val = locate.uid
}
}
}
return val
},
getTicket: function () {
let browser = commonJs.checkVersion()
let val
if (browser.app) {
if (browser.ios) {
val = window.webkit.messageHandlers.getTicket.postMessage(null)
} else if (browser.android) {
// eslint-disable-next-line no-undef
if (androidJsObj && typeof androidJsObj === 'object') {
val = window.androidJsObj.getTicket()
}
}
} else {
val = ''
}
return val
},
getRoomUid: function () {
let browser = commonJs.checkVersion()
let val
if (browser.app) {
if (browser.ios) {
val = window.webkit.messageHandlers.GetRoomUid.postMessage(null)
} else if (browser.android) {
// eslint-disable-next-line no-undef
if (androidJsObj && typeof androidJsObj === 'object') {
val = window.androidJsObj.getRoomUid()
}
}
} else {
val = 'app外'
}
return val
},
getDeviceId: function () {
let browser = commonJs.checkVersion()
let val
if (browser.app) {
if (browser.ios) {
val = window.webkit.messageHandlers.getDeviceId.postMessage(null)
} else if (browser.android) {
// eslint-disable-next-line no-undef
if (androidJsObj && typeof androidJsObj === 'object') {
val = window.androidJsObj.getDeviceId()
}
}
} else {
val = 'app外'
}
return val
}
}
},
// 图片预加载
preloadImage: function (obj) {
let loadLength = 0
let newImages = []
for (let i = 0; i < obj.imageArr.length; i++) {
newImages[i] = new Image()
newImages[i].src = obj.imageArr[i]
newImages[i].onload = newImages[i].onerror = () => {
loadLength++
typeof obj.preloadPreFunc === 'function' && obj.preloadPreFunc(loadLength)
// eslint-disable-next-line eqeqeq
if (loadLength == obj.imageArr.length) {
typeof obj.doneFunc === 'function' && obj.doneFunc()
}
}
}
},
// 调用客户端分享方法
initNav: function (obj) {
// console.log('查看是否调用initNav', Object.keys(obj).length)
if (Object.keys(obj).length === 0) {
// eslint-disable-next-line no-useless-return
return
}
let browser = commonJs.checkVersion()
if (browser.app) {
if (browser.ios) {
window.webkit.messageHandlers.initNav.postMessage(obj)
} else if (browser.android) {
let json = JSON.stringify(obj)
window.androidJsObj.initNav(json)
}
}
}
}
// module.exports = commonJs
export default commonJs

View File

@@ -0,0 +1,43 @@
import cryptoJs from 'crypto-js';
//随机生成指定数量的16进制key
export const generatekey = (num) => {
let library = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
let key = "";
for (var i = 0; i < num; i++) {
let randomPoz = Math.floor(Math.random() * library.length);
key += library.substring(randomPoz, randomPoz + 1);
}
return '1ea53d260ecf11e7b56e00163e046a26';
}
//DES加密
export const encryptDes = (message, key) => {
// var keyHex = cryptoJs.enc.Utf8.parse(key)
// var option = { mode: cryptoJs.mode.ECB, padding: cryptoJs.pad.Pkcs7 }
// var encrypted = cryptoJs.DES.encrypt(message, keyHex, option)
// return encrypted.ciphertext.toString()
var keyHex = cryptoJs.enc.Utf8.parse(key);
var encrypted = cryptoJs.DES.encrypt(message, keyHex, {
mode: cryptoJs.mode.ECB,
padding: cryptoJs.pad.Pkcs7
});
return encrypted.toString();
}
//DES解密
export const decryptDes = (message, key) => {
var keyHex = cryptoJs.enc.Utf8.parse(key)
var decrypted = cryptoJs.DES.decrypt(
{
ciphertext: cryptoJs.enc.Hex.parse(message)
},
keyHex,
{
mode: cryptoJs.mode.ECB,
padding: cryptoJs.pad.Pkcs7
}
)
return decrypted.toString(cryptoJs.enc.Utf8)
}

View File

@@ -0,0 +1,17 @@
export const formatDate = (value) => {
let date = new Date(value);
let y = date.getFullYear();
let MM = date.getMonth() + 1;
MM = MM < 10 ? ('0' + MM) : MM;
let d = date.getDate();
d = d < 10 ? ('0' + d) : d;
let h = date.getHours();
h = h < 10 ? ('0' + h) : h;
let m = date.getMinutes();
m = m < 10 ? ('0' + m) : m;
let s = date.getSeconds();
s = s < 10 ? ('0' + s) : s;
return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
// return MM + '-' + d + ' ' + h + ':' + m + ':' + s;
// return MM + '-' + d + ' ' + h + ':' + m;
}

View File

@@ -0,0 +1,62 @@
import { checkVersion } from '@/utils/browser.js'
window.info = {}
window.getMessage = (key, value) => {
// value = parseInt(value);
info[key] = value;
}
export default function getId() {
let browser = checkVersion()
if (browser.app) {
window.sessionStorage.clear();
if (browser.ios) {
var allcookies = document.cookie;
var $uid = allcookies.match(/\d+/);
info.uid = $uid[0];
window.webkit.messageHandlers.getTicket.postMessage(null);
window.webkit.messageHandlers.getDeviceId.postMessage(null);
window.webkit.messageHandlers.getDeviceInfo.postMessage(null);
// console.log("ios");
// console.log(info.ticket);
} else if (browser.android) {
if (androidJsObj && typeof androidJsObj === 'object') {
info.uid = parseInt(window.androidJsObj.getUid());
info.ticket = window.androidJsObj.getTicket();
info.deviceId = window.androidJsObj.getDeviceId();
info.deviceInfo = JSON.parse(window.androidJsObj.getDeviceInfo());
}
}
} else {
// info.uid = sessionStorage.getItem("uid") ? sessionStorage.getItem("uid") : '';
// info.ticket = sessionStorage.getItem("ticket") ? sessionStorage.getItem("ticket") : '';
// 获取地址栏参数
function getQueryString() {
var _url = location.search;
var theRequest = new Object();
if (_url.indexOf('?') != -1) {
var str = _url.substr(1);
strs = str.split('&');
for (var i in strs) {
theRequest[strs[i].split('=')[0]] = decodeURI(strs[i].split('=')[1]);
}
}
return theRequest;
}
info.uid = '0',
info.ticket = '0',
info.deviceInfo = {
app: 'molistar',
appVersion: '0.0.0',
os: '0.0.0',
osVersion: '0.0.0',
channel: 'browser',
client: 'h5',
'Accept-Language': getQueryString().lang ? getQueryString().lang : 'en'
}
}
}
// export default function getJurisdiction() {
// }

View File

@@ -0,0 +1,27 @@
/* jslint esversion: 6 */
import JsEncrypt from 'jsencrypt';
export const jes = (obj) => {
const env = process.env.NODE_ENV;
console.log(env)
let code = '';
// if (env !== 'production') {
if (env === 'development') {
// code = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZ4GMf5m94duX87Qoy6ynIwgxNUaG9uWP0l3eBFKp4kwWEckAfJajm5s0WNgCQ9BJBpCiHyG8CLF+hAHGb0fElmffa2R4udWhM0UIAyMqWFblaeSSZPBtHE62OWSDdszYsTO4S6YD6wUl9wIrzGEPIAekIWOKuYEntmrRn3w1zbwIDAQAB';
code = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUC2ego+6rvaaA2g6M0iGgyO1FpdGPQd/7r3X+eFbwip7sBorD3NEATDd0QRK43/zNJAAMfjE7mIPCwZOBDOgFNb8/H93pFXDQ5Tv6lRQd9PGcFHQOz3pr1xgO7wSbUjbwXusmgZgo5SemTDUnlIQJsmzCzJGpct91PZNRPzYK5QIDAQAB';
} else {
// code = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUC2ego+6rvaaA2g6M0iGgyO1FpdGPQd/7r3X+eFbwip7sBorD3NEATDd0QRK43/zNJAAMfjE7mIPCwZOBDOgFNb8/H93pFXDQ5Tv6lRQd9PGcFHQOz3pr1xgO7wSbUjbwXusmgZgo5SemTDUnlIQJsmzCzJGpct91PZNRPzYK5QIDAQAB';
code = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUC2ego+6rvaaA2g6M0iGgyO1FpdGPQd/7r3X+eFbwip7sBorD3NEATDd0QRK43/zNJAAMfjE7mIPCwZOBDOgFNb8/H93pFXDQ5Tv6lRQd9PGcFHQOz3pr1xgO7wSbUjbwXusmgZgo5SemTDUnlIQJsmzCzJGpct91PZNRPzYK5QIDAQAB';
// code = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCh5Nk2GLiyQFMIU+h3OEA4UeFbu3dCH5sjd/sLTxxvwjXq7JLqJbt2rCIdzpAXOi4jL+FRGQnHaxUlHUBZsojnCcHvhrz2knV6rXNogt0emL7f7ZMRo8IsQGV8mlKIC9xLnlOQQdRNUssmrROrCG99wpTRRNZjOmLvkcoXdeuaCQIDAQAB'
}
console.log(env);
// debugger;
let encrypt = new JsEncrypt();
encrypt.setPublicKey(
`-----BEGIN PUBLIC KEY -----
${code}
-----END PUBLIC KEY-----`
);
// encrypt.setPublicKey(code);
return encrypt.encrypt(obj);
}

View File

@@ -0,0 +1,243 @@
/*
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for more info.
*/
/*
* Configurable variables. You may need to tweak these to be compatible with
* the server-side, but the defaults work in most cases.
*/
var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
/*
* These are the functions you'll usually want to call
* They take string arguments and return either hex or base-64 encoded strings
*/
function hex_md5(s) { return binl2hex(core_md5(str2binl(s), s.length * chrsz)); }
function b64_md5(s) { return binl2b64(core_md5(str2binl(s), s.length * chrsz)); }
function str_md5(s) { return binl2str(core_md5(str2binl(s), s.length * chrsz)); }
function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }
/*
* Perform a simple self-test to see if the VM is working
*/
function md5_vm_test() {
return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}
/*
* Calculate the MD5 of an array of little-endian words, and a bit length
*/
function core_md5(x, len) {
/* append padding */
x[len >> 5] |= 0x80 << ((len) % 32);
x[(((len + 64) >>> 9) << 4) + 14] = len;
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
for (var i = 0; i < x.length; i += 16) {
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
}
return Array(a, b, c, d);
}
/*
* These functions implement the four basic operations the algorithm uses.
*/
function md5_cmn(q, a, b, x, s, t) {
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
}
function md5_ff(a, b, c, d, x, s, t) {
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t) {
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t) {
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t) {
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}
/*
* Calculate the HMAC-MD5, of a key and some data
*/
function core_hmac_md5(key, data) {
var bkey = str2binl(key);
if (bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
var ipad = Array(16), opad = Array(16);
for (var i = 0; i < 16; i++) {
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5C5C5C5C;
}
var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
return core_md5(opad.concat(hash), 512 + 128);
}
/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safe_add(x, y) {
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}
/*
* Bitwise rotate a 32-bit number to the left.
*/
function bit_rol(num, cnt) {
return (num << cnt) | (num >>> (32 - cnt));
}
/*
* Convert a string to an array of little-endian words
* If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
*/
function str2binl(str) {
var bin = Array();
var mask = (1 << chrsz) - 1;
for (var i = 0; i < str.length * chrsz; i += chrsz)
bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (i % 32);
return bin;
}
/*
* Convert an array of little-endian words to a string
*/
function binl2str(bin) {
var str = "";
var mask = (1 << chrsz) - 1;
for (var i = 0; i < bin.length * 32; i += chrsz)
str += String.fromCharCode((bin[i >> 5] >>> (i % 32)) & mask);
return str;
}
/*
* Convert an array of little-endian words to a hex string.
*/
function binl2hex(binarray) {
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var str = "";
for (var i = 0; i < binarray.length * 4; i++) {
str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) +
hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF);
}
return str;
}
/*
* Convert an array of little-endian words to a base-64 string
*/
function binl2b64(binarray) {
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var str = "";
for (var i = 0; i < binarray.length * 4; i += 3) {
var triplet = (((binarray[i >> 2] >> 8 * (i % 4)) & 0xFF) << 16)
| (((binarray[i + 1 >> 2] >> 8 * ((i + 1) % 4)) & 0xFF) << 8)
| ((binarray[i + 2 >> 2] >> 8 * ((i + 2) % 4)) & 0xFF);
for (var j = 0; j < 4; j++) {
if (i * 8 + j * 6 > binarray.length * 32) str += b64pad;
else str += tab.charAt((triplet >> 6 * (3 - j)) & 0x3F);
}
}
return str;
}
export {
hex_md5,
b64_md5,
}

View File

@@ -0,0 +1,19 @@
export const formatDate = (value, think) => {
let date = new Date(value);
let y = date.getFullYear();
let MM = date.getMonth() + 1;
MM = MM < 10 ? "0" + MM : MM;
let d = date.getDate();
d = d < 10 ? "0" + d : d;
let h = date.getHours();
h = h < 10 ? "0" + h : h;
let m = date.getMinutes();
m = m < 10 ? "0" + m : m;
let s = date.getSeconds();
s = s < 10 ? "0" + s : s;
let time = !think
? y + "-" + MM + "-" + d
: y + "-" + MM + "-" + d + " " + h + ":" + m;
return time;
// return MM + "-" + d + " " + h + ":" + m;
}

View File

@@ -0,0 +1,106 @@
import axios from 'axios'
import { Toast } from 'vant';
import router from '@/router'
import { EnvCheck, checkVersion } from '@/utils/browser.js'
let baseURL;
if (EnvCheck() === 'test') {
// console.log('test');
// baseURL = 'http://120.79.211.243'
baseURL = 'http://beta.api.molistar.xyz'
// 正式环境
} else {
baseURL = 'https://api.molistar.xyz'
}
// baseURL = ''
const service = axios.create({
// baseURL: process.env.VUE_APP_BASE_API,
baseURL,
// baseURL: 'http://www.if66.cn/',
// baseURL: '',
'timeout': 10000,
'Content-Type': 'application/x-www-form-urlencoded',
})
service.interceptors.request.use(config => {
if (router.apps[0]._route.name === 'Login') {
config.headers = {}
} else if (!checkVersion().app) {//false
if (router.apps[0]._route.name === 'WithDrawInfoBind' && config.url == `/sms/verify` || config.url == `/sms/getCode`) {
config.headers = {
'h5_token': window.sessionStorage.getItem('ticket'),
// 'pub_uid': window.sessionStorage.getItem('uid'),
'client': 'h5',
'Accept-language': info.deviceInfo['Accept-Language'],
}
// } if(router.apps[0]._route.name === 'GoldLog'){
// config.headers = {
// 'h5_token': window.sessionStorage.getItem('ticket'),
// 'pub_uid': window.sessionStorage.getItem('uid'),
// 'client': 'h5',
// }
} else {
config.headers = {
'h5_token': window.sessionStorage.getItem('ticket'),
'pub_uid': window.sessionStorage.getItem('uid'),
'client': 'h5',
'Accept-language': info.deviceInfo['Accept-Language'],
}
}
} else {
if (router.apps[0]._route.name === 'WithDrawInfoBind' && config.url == `/sms/verify` || config.url == `/sms/getCode`) {
config.headers = {
'pub_ticket': window.sessionStorage.getItem('ticket'),
// 'pub_uid': window.sessionStorage.getItem('uid'),
'client': 'h5',
'Accept-language': info.deviceInfo['Accept-Language'],
}
} else {
config.headers = {
'pub_ticket': window.sessionStorage.getItem('ticket'),
'pub_uid': window.sessionStorage.getItem('uid'),
'client': 'h5',
'Accept-language': info.deviceInfo['Accept-Language'],
}
}
}
// console.log(window.sessionStorage.getItem('ticket'))
// console.log(config)
return config;
},
error => {
console.log('网络请求出错了', error);
Promise.reject(error);
}
)
service.interceptors.response.use(response => {
const res = response
if (res.data.code !== 200) {
if (res.data.code === 10111) {
return Promise.reject(res.data)
} else if (res.data.code === 25006) {
return Promise.reject(res.data)
} else if (res.data.code === 503) {
return Promise.reject(res.data)
} else {
Toast(res.data.message || 'Error')
return Promise.reject(new Error(res.data.message || 'Error'))
}
} else {
return Promise.resolve(res);
}
},
error => {
if (!checkVersion().app && error.response.status === 401) {
window.localStorage.clear();
Toast('登录失效,请重新登录')
// router.replace({ path: '/Login' })
return
}
Toast(`HTTP ${error.response.status}` || 'Error')
return Promise.reject(error)
}
)
export default service

View File

@@ -0,0 +1,17 @@
<template>
<div>
666
</div>
</template>
<script>
export default {
data(){
return{}
}
}
</script>
<style lang="scss" scoped>
</style>