提交 f102a05e authored 作者: songchuancai's avatar songchuancai

first commit

上级
# http://editorconfig.org
root = true
[*] # 表示所有文件适用
charset = utf-8 # 设置文件字符集为 utf-8
indent_style = space # 缩进风格(tab | space)
indent_size = 2 # 缩进大小
end_of_line = lf # 控制换行类型(lf | cr | crlf)
trim_trailing_whitespace = true # 去除行首的任意空白字符
insert_final_newline = true # 始终在文件末尾插入一个新行
[*.md] # 表示仅 md 文件适用以下规则
max_line_length = off
trim_trailing_whitespace = false
\ No newline at end of file
NODE_ENV=development
VUE_APP_BASE_API=https://pdms.apps.iytcloud.com
VUE_APP_PDMS_PATH=http://localhost:8081/
VUE_APP_CMSS_PATH=http://localhost:8082/
VUE_APP_CHILD_PATH3=http://localhost:8083/
VUE_APP_CHILD_PATH4=http://localhost:8084/
VUE_APP_CHILD_PATH5=http://localhost:8085/
VUE_APP_CHILD_PATH6=http://localhost:8086/
VUE_APP_COPYRIGHT= "版权所有© 2020 赛轮集团股份有限公司 鲁ICP备09064072号-19"
VUE_APP_ABOUT_US="https://www.sailuntyre.com/portal/about/index"
VUE_APP_JOIN_US= "http://zhaopin.sailuntire.com/"
VUE_APP_CONTAC_US= "https://www.sailuntyre.com/portal/index/cut?name=联系我们&fetch=about"
VUE_APP_SERVICE_TEL= "400-156-8277"
\ No newline at end of file
NODE_ENV=production
VUE_APP_BASE_API=127.0.0.1
VUE_APP_COMPANY_NAME=""
VUE_APP_COPYRIGHT=""
VUE_APP_ABOUT_US=""
VUE_APP_JOIN_US=""
VUE_APP_CONTAC_US=""
VUE_APP_SERVICE_TEL= ""
\ No newline at end of file
/node_modules
/dist
/package-lock.json
/yarn.lock
.DS_Store
fis-conf.js
/static
/conf
/README.md
/release
module.exports = {
root: true,
env: {
node: true
},
extends: ["plugin:vue/essential", "eslint:recommended", "plugin:prettier/recommended"],
parserOptions: {
parser: "@babel/eslint-parser"
},
rules: {
"no-cond-assign": 2, // 禁止条件表达式中出现模棱两可的赋值操作符
"no-console": 2, // 禁用console
"no-constant-condition": 2, // 禁止在条件中使用常量表达式
"no-debugger": 2, // 禁用 debugger
"no-dupe-args": 2, // 禁止 function 定义中出现重名参数
"no-dupe-keys": 2, // 禁止对象字面量中出现重复的 key
"no-duplicate-case": 2, // 禁止出现重复的 case 标签
"no-empty": 2, // 禁止出现空语句块
"no-ex-assign": 2, // 禁止对 catch 子句的参数重新赋值
"no-extra-boolean-cast": 2, // 禁止不必要的布尔转换
"no-extra-parens": 2, // 禁止不必要的括号
"no-extra-semi": 2, // 禁止不必要的分号
"no-func-assign": 2, // 禁止对 function 声明重新赋值
"no-inner-declarations": 2, // 禁止在嵌套的块中出现变量声明或 function 声明
"no-irregular-whitespace": 2, // 禁止在字符串和注释之外不规则的空白
"no-obj-calls": 2, // 禁止把全局对象作为函数调用
"no-sparse-arrays": 2, // 禁用稀疏数组
"no-prototype-builtins": 2, // 禁止直接使用Object.prototypes 的内置属性
"no-unexpected-multiline": 2, // 禁止出现令人困惑的多行表达式
"no-unreachable": 2, // 禁止在return、throw、continue 和 break语句之后出现不可达代码
"use-isnan": 2, // 要求使用 isNaN() 检查 NaN
"valid-typeof": 2, // 强制 typeof 表达式与有效的字符串进行比较
"array-callback-return": 2, // 强制数组方法的回调函数中有 return 语句
"block-scoped-var": 2, // 强制把变量的使用限制在其定义的作用域范围内
complexity: 2, // 指定程序中允许的最大环路复杂度
"consistent-return": 2, // 要求 return 语句要么总是指定返回的值,要么不指定
curly: 2, // 强制所有控制语句使用一致的括号风格
"default-case": 2, // 要求 switch 语句中有 default 分支
//"dot-location": 2, // 强制在点号之前和之后一致的换行
"dot-notation": 0, // 强制在任何允许的时候使用点号
eqeqeq: 2, // 要求使用 === 和 !==
//"guard-for-in": 2, // 要求 for-in 循环中有一个 if 语句
"no-alert": 2, // 禁用 alert、confirm 和 prompt
"no-case-declarations": 2, // 不允许在 case 子句中使用词法声明
//"no-else-return": 2, // 禁止 if 语句中有 return 之后有 else
"no-empty-function": 2, // 禁止出现空函数
"no-eq-null": 2, // 禁止在没有类型检查操作符的情况下与 null 进行比较
"no-eval": 2, // 禁用 eval()
"no-extra-bind": 2, // 禁止不必要的 .bind() 调用
"no-fallthrough": 2, // 禁止 case 语句落空
"no-floating-decimal": 2, // 禁止数字字面量中使用前导和末尾小数点
"no-implicit-coercion": 2, // 禁止使用短符号进行类型转换
"no-implicit-globals": 2, // 禁止在全局范围内使用 var 和命名的 function 声明
"no-invalid-this": 2, // 禁止 this 关键字出现在类和类对象之外
"no-lone-blocks": 2, // 禁用不必要的嵌套块
"no-loop-func": 2, // 禁止在循环中出现 function 声明和表达式
"no-multi-spaces": 2, // 禁止使用多个空格
"no-multi-str": 2, // 禁止使用多行字符串
"no-new": 2, // 禁止在非赋值或条件语句中使用 new 操作符
"no-new-func": 2, // 禁止对 Function 对象使用 new 操作符
"no-new-wrappers": 2, // 禁止对 String,Number 和 Boolean 使用 new 操作符
"no-param-reassign": 2, // 不允许对 function 的参数进行重新赋值
"no-redeclare": 2, // 禁止使用 var 多次声明同一变量
"no-return-assign": 2, // 禁止在 return 语句中使用赋值语句
"no-script-url": 2, // 禁止使用 javascript: url
"no-self-assign": 2, // 禁止自我赋值
"no-self-compare": 2, // 禁止自身比较
"no-sequences": 2, // 禁用逗号操作符
"no-unmodified-loop-condition": 2, // 禁用一成不变的循环条件
"no-unused-expressions": 2, // 禁止出现未使用过的表达式
"no-useless-call": 2, // 禁止不必要的 .call() 和 .apply()
"no-useless-concat": 2, // 禁止不必要的字符串字面量或模板字面量的连接
"vars-on-top": 2 // 要求所有的 var 声明出现在它们所在的作用域顶部
}
}
.DS_Store
node_modules
/dist
package-lock.json
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
.history
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
/dist/*
.local
.output.js
/node_modules/**
/package-lock.json
yarn.lock
paas-portal.yml
/static
/README.md
**/*.svg
**/*.png
**/*.jpg
**/*.sh
/public/*
/conf
module.exports = {
tabWidth: 2,
useTabs: true, // 使用tab(制表符)缩进而非空格
singleQuote: false, // 单引号
printWidth: 140, // 一行超过175个字符就换行
semi: false, // 是否在行尾加分号
trailingComma: "none", // 数组、对象最后一个元素的尾逗号
bracketSpacing: true, // 花括号前后空格
jsxBracketSameLine: false, // 使多行JSX元素最后一行末尾的 > 单独一行
arrowParens: "avoid", //只有一个参数的箭头函数的参数是否带圆括号(默认avoid不带)
htmlWhitespaceSensitivity: "ignore" // HTML 文件空格敏感度
}
FROM nginx
COPY conf/portal.conf /etc/nginx/conf.d/default.conf
COPY dist/ /usr/app/portal/dist/
RUN chmod 777 /var/cache -R && mkdir /var/cache/nginx/client_temp
CMD ["/bin/bash", "-c", "sed -i \"s@<html@<html data-promise-base-url=\"$API_BASE_URL\"@\" /usr/app/portal/dist/*.html;mkdir /var/cache/nginx/client_temp -p;nginx -g \"daemon off;\""]`
# cd ~/work/dev/front/portal;rm dist -rfv;npm run build
# docker build -t registry.notemap.net:5000/hip-paas/portal:0.1 .
### 项目介绍:
##### vue-cli 4.5.10
##### vue 2.6.14
##### element-ui 2.15.6(本项目基于element-ui库)
##### eslint 6.7.2
##### axios 0.21.1
##### sass 1.26.5 使用dart-sass
##### node 10.0以上
##### 项目启动:yarn install yarn serve 或者 npm install npm run serve 推荐使用yarn
### 目录结构:
##### public 静态文件夹:html,favicon
##### src 源码目录
##### static 静态文件目录:font(iconfont图标https://www.iconfont.cn/),reset(重置样式表)
##### .env.development 本地环境变量
​ VUE_APP_CHILD_PATH:平台管理
​ VUE_APP_CHILD_PATH2:容器管理
​ VUE_APP_CHILD_PATH3:DevOps
​ VUE_APP_CHILD_PATH4:交付中心
​ VUE_APP_CHILD_PATH5:微服务治理
​ VUE_APP_CHILD_PATH6:API网关
##### .env.production 线上环境变量
##### .gitignore git排除文件描述
##### babel.config.js babel语法编译
##### package.json 项目的配置信息
##### README.md 项目描述文件
##### vue.config.js webpack配置文件
##### yarn.lock yarn锁
### 源码目录详细介绍:
##### asssets 静态资源
​ image-------> 图片
​ styles-------> element-variables.scss:element-ui框架默认颜色覆盖;encapsulation.scss:对于css的封装
##### router 路由
​ index-------> 页面主体框架
##### store vuex目录
​ index-------> 暂时为空
##### utils 工具目录
​ request.js-------> axios封装
​ api
​ api.js
​ index.js 对于接口的二次封装
​ app.js 镜像部署环境变量文件
##### views 页面主体
###### Home.vue ------>主界面
###### login.vue
​ -------> 登录页面
###### 404.vue
​ -------> 404页面
module.exports = {
presets: ["@vue/cli-plugin-babel/preset"]
}
# hip portal nginx configuration file, you can include this file with
# "include" directive in nginx.conf file.
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
# 开启gzip
gzip on;
gzip_vary on;
gzip_min_length 1000;
gzip_comp_level 2;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml image/jpeg image/gif image/png application/javascript;
listen 9527;
index index.html;
location ~.*\.(jpg|png|gif|jpeg|bmp|css|js|woff|ttf|ico|html)?$ {
root /usr/app/portal/dist;
access_log off;
log_not_found off;
if (-f $request_filename) {
expires -1;
break;
}
}
location / {
root /usr/app/portal/dist;
try_files $uri /index.html;
}
location /api/v2/pdms/ {
proxy_pass http://pdms.hip-paas.svc:8080;
}
location /api/v2/cmss/ {
proxy_pass http://cmss.hip-paas.svc:8080;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
}
\ No newline at end of file
{
"compilerOptions": {
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
}
},
"exclude": ["node_modules", "dist"]
}
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "pass",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build --modern",
"lint": "vue-cli-service lint",
"clean-mac": "rm -rf node_modules",
"clean-win": "rmdir /s /q node_modules",
"install-all": "npm install --registry=https://registry.npm.taobao.org",
"release:all": "node ./release/all",
"release:devops": "node ./release/devops",
"release:platform": "node ./release/platform",
"release:portal": "node ./release/portal",
"prettier": "prettier --write ."
},
"dependencies": {
"axios": "^0.21.1",
"core-js": "^3.9.0",
"element-ui": "^2.15.6",
"js-cookie": "^2.2.1",
"vue": "2.6.14",
"vue-router": "^3.5.1"
},
"devDependencies": {
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-plugin-router": "~5.0.0",
"@vue/cli-plugin-vuex": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"babel-eslint": "^10.1.0",
"cross-env": "^7.0.3",
"eslint": "^8.11.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-vue": "^8.0.3",
"prettier": "^2.5.1",
"sass": "^1.26.5",
"sass-loader": "^8.0.2",
"scp2": "^0.5.0",
"vue-template-compiler": "^2.6.14"
},
"browserslist": [
"> 1%",
"IE 11"
]
}
module.exports = {
plugins: {
autoprefixer: {}
}
}
/**
* @description 雪花屏代码,基于ant-design修改
**/
.first-loading-wrp {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 90vh;
min-height: 90vh;
}
.first-loading-wrp > h1 {
font-size: 30px;
font-weight: bolder;
}
.first-loading-wrp .loading-wrp {
display: flex;
align-items: center;
justify-content: center;
padding: 98px;
}
.dot {
position: relative;
box-sizing: border-box;
display: inline-block;
width: 64px;
height: 64px;
font-size: 64px;
transform: rotate(45deg);
animation: antRotate 1.2s infinite linear;
}
.dot i {
position: absolute;
display: block;
width: 28px;
height: 28px;
background-color: #1890ff;
border-radius: 100%;
opacity: 0.3;
transform: scale(0.75);
transform-origin: 50% 50%;
animation: antSpinMove 1s infinite linear alternate;
}
.dot i:nth-child(1) {
top: 0;
left: 0;
}
.dot i:nth-child(2) {
top: 0;
right: 0;
-webkit-animation-delay: 0.4s;
animation-delay: 0.4s;
}
.dot i:nth-child(3) {
right: 0;
bottom: 0;
-webkit-animation-delay: 0.8s;
animation-delay: 0.8s;
}
.dot i:nth-child(4) {
bottom: 0;
left: 0;
-webkit-animation-delay: 1.2s;
animation-delay: 1.2s;
}
@keyframes antRotate {
to {
-webkit-transform: rotate(405deg);
transform: rotate(405deg);
}
}
@-webkit-keyframes antRotate {
to {
-webkit-transform: rotate(405deg);
transform: rotate(405deg);
}
}
@keyframes antSpinMove {
to {
opacity: 1;
}
}
@-webkit-keyframes antSpinMove {
to {
opacity: 1;
}
}
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon"
href="https://sailuns3.s3.cn-northwest-1.amazonaws.com.cn/public/themes/brand_zh/public/assets/img/favicon.ico">
<meta http-equiv="pragram" content="no-cache">
<link rel="stylesheet" href="<%= BASE_URL %>css/loading.css" />
<meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate">
<title>橡链云</title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
Please enable it to continue.</strong>
</noscript>
<div id="app">
<div class="first-loading-wrp">
<div class="loading-wrp">
<span class="dot dot-spin">
<i></i>
<i></i>
<i></i>
<i></i>
</span>
</div>
<h1>
<%= VUE_APP_TITLE %>
</h1>
</div>
</div>
<!-- built files will be auto injected -->
</body>
</html>
\ No newline at end of file
const { Client } = require("ssh2")
const chalk = require("chalk")
const conn = new Client()
conn
.on("ready", () => {
conn.exec("cd /home/yanyalin/ \n./hip a", (err, stream) => {
if (err) {
console.log(chalk.red("发布失败.\n"))
throw err
} else {
stream
.on("close", (code, signal) => {
console.log(chalk.green("Success! 成功发布到测试服务器! \n"))
conn.end()
})
.on("data", data => {
console.log("STDOUT: " + data)
})
}
})
})
.connect({
host: "10.0.90.29",
port: 22,
username: "wangzhao",
password: "b7c7f4eb668185e7f2e33bf62b59ba3b"
})
const { Client } = require("ssh2")
const chalk = require("chalk")
const conn = new Client()
conn
.on("ready", () => {
conn.exec("cd /home/yanyalin/ \n./hip r devops", (err, stream) => {
if (err) {
console.log(chalk.red("发布失败.\n"))
throw err
} else {
stream
.on("close", (code, signal) => {
console.log(chalk.green("Success! 成功发布到测试服务器! \n"))
conn.end()
})
.on("data", data => {
console.log("STDOUT: " + data)
})
}
})
})
.connect({
host: "10.0.90.29",
port: 22,
username: "wangzhao",
password: "b7c7f4eb668185e7f2e33bf62b59ba3b"
})
const { Client } = require("ssh2")
const chalk = require("chalk")
const conn = new Client()
conn
.on("ready", () => {
conn.exec("cd /home/yanyalin/ \n./hip r platform", (err, stream) => {
if (err) {
console.log(chalk.red("发布失败.\n"))
throw err
} else {
stream
.on("close", (code, signal) => {
console.log(chalk.green("Success! 成功发布到测试服务器! \n"))
conn.end()
})
.on("data", data => {
console.log("STDOUT: " + data)
})
}
})
})
.connect({
host: "10.0.90.29",
port: 22,
username: "wangzhao",
password: "b7c7f4eb668185e7f2e33bf62b59ba3b"
})
const { Client } = require("ssh2")
const chalk = require("chalk")
const conn = new Client()
conn
.on("ready", () => {
conn.exec("cd /home/yanyalin/ \n./hip r portal", (err, stream) => {
if (err) {
console.log(chalk.red("发布失败.\n"))
throw err
} else {
stream
.on("close", (code, signal) => {
console.log(chalk.green("Success! 成功发布到测试服务器! \n"))
conn.end()
})
.on("data", data => {
console.log("STDOUT: " + data)
})
}
})
})
.connect({
host: "10.0.90.29",
port: 22,
username: "wangzhao",
password: "b7c7f4eb668185e7f2e33bf62b59ba3b"
})
<template>
<div id="app" v-cloak>
<router-view />
</div>
</template>
<style type="text/css">
#app {
height: 100%;
}
[v-cloak] {
display: none !important;
}
</style>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 51 29.85"><defs><style>.cls-1,.cls-2,.cls-3,.cls-5{fill:#fff;}.cls-2{fill-rule:evenodd;}.cls-3{font-size:0.58px;}.cls-3,.cls-5{font-family:ArialMT, Arial;}.cls-4{letter-spacing:0.06em;}.cls-5{font-size:0.58px;}.cls-6{letter-spacing:0.06em;}.cls-7,.cls-8{fill:none;stroke:#fff;stroke-miterlimit:10;}.cls-7{stroke-width:0.13px;}.cls-8{stroke-width:0.03px;}</style></defs><title>资源 1</title><g id="图层_2" data-name="图层 2"><g id="图层_1-2" data-name="图层 1"><path class="cls-1" d="M20.83,20.86a7.28,7.28,0,0,0,.41.89,5.64,5.64,0,0,0,.5.77,7.56,7.56,0,0,0,.58.69c.21.22.44.45.69.67l-.72.93c-.25-.23-.48-.47-.7-.71a8,8,0,0,1-.6-.78,8.51,8.51,0,0,1-.52-.9A7.82,7.82,0,0,1,20,21.34l-.17.1-.18.08a6.6,6.6,0,0,1,.15.87c0,.3,0,.62,0,1a3.91,3.91,0,0,1-.09.92,1.36,1.36,0,0,1-.31.57,1.28,1.28,0,0,1-.54.32,4.91,4.91,0,0,1-.81.13l-.7.05-.37-1,.85-.06a2.13,2.13,0,0,0,.44-.07.56.56,0,0,0,.28-.19.74.74,0,0,0,.14-.36,3.2,3.2,0,0,0,0-.59v-.26a1.93,1.93,0,0,0,0-.24A10.9,10.9,0,0,1,17,24a16.29,16.29,0,0,1-2,1.13l-.48-1.08A12.3,12.3,0,0,0,16.72,23a9.31,9.31,0,0,0,1.87-1.48l-.12-.33a11.19,11.19,0,0,1-1.6,1.14c-.55.32-1.15.63-1.79.95l-.4-1a13.92,13.92,0,0,0,1.93-.93,10.53,10.53,0,0,0,1.45-1L17.88,20a6.56,6.56,0,0,1-1.15.66c-.44.2-.93.4-1.47.59l-.36-1.09a15.66,15.66,0,0,0,1.6-.58A4.4,4.4,0,0,0,17.58,19H15.66v-1.8l-.31.26-.24-.58v.07H14v1.32l.28-.28a9.41,9.41,0,0,1,.66.7,9.76,9.76,0,0,1,.63.77l-.77.77c-.12-.16-.24-.34-.39-.52L14,19.16v6.18H12.9V19.61c-.2.5-.41,1-.62,1.45a12.27,12.27,0,0,1-.64,1.26l-.8-1c.16-.27.32-.57.5-.91s.35-.71.53-1.09.35-.79.51-1.19.31-.81.44-1.2H11.55V15.7H12.9V13.4l1.11,0V15.7h1.1v.44a8.3,8.3,0,0,0,1.33-1.38,11.88,11.88,0,0,0,1.06-1.59l1.05.48-.15.28-.15.27h2.89v1l-.8.89h1.74V19H18.91l-.12.18-.14.16c.15.22.28.42.39.62a5,5,0,0,1,.31.61,11.69,11.69,0,0,0,1.08-.68A8,8,0,0,0,21.48,19l.68.89c-.18.15-.39.31-.62.48S21.07,20.7,20.83,20.86ZM16.74,18h1.52a3.31,3.31,0,0,0,.22-1H16.74Zm.84-2.82-.36.44a3.88,3.88,0,0,1-.39.42H19l.8-.86ZM21,17H19.52c0,.18-.05.36-.08.53s-.06.33-.1.48H21Z"/><path class="cls-1" d="M32.55,23.84a35.48,35.48,0,0,0,3.57-.12L35.88,25a33.63,33.63,0,0,1-3.47.12A6,6,0,0,1,31.5,25a2.52,2.52,0,0,1-.73-.25,2.75,2.75,0,0,1-.6-.43,3.67,3.67,0,0,1-.54-.66c-.17.27-.35.52-.54.77s-.38.47-.58.68l-.77-.89.32-.34.3-.36-.4.31-.55.44c-.19.15-.39.31-.6.46l-.52.41-.54-.93a.51.51,0,0,0,.24-.32,2.68,2.68,0,0,0,0-.44V21H24.91v-1.2H26v-1.4h-.65v-.92l-.12.2-.12.18L24.39,17a9.79,9.79,0,0,0,.53-.86c.17-.31.34-.63.5-1s.3-.65.43-1a8.31,8.31,0,0,0,.32-1l1.09.24a9.66,9.66,0,0,1-.51,1.42h1.72V16H26.21c-.11.22-.22.42-.33.62s-.22.4-.34.59h2.53v1.19h-.95v1.4h1.3V21h-1.3v2.08l1-.79.33,1.09.33-.43.3-.45V19.12h-.72V17.83h1.82v4.69a2.18,2.18,0,0,0,.92,1A3.21,3.21,0,0,0,32.55,23.84Zm-3.07-7.17a6.72,6.72,0,0,0-.21-.64L29,15.29l-.3-.7c-.09-.23-.18-.42-.26-.58l1-.44c.07.15.16.34.26.57s.2.46.3.7l.28.72c.08.24.15.44.2.61ZM32.79,22H30.48V20.85h2.31V19.41h-2V18.27c.11-.26.23-.58.37-1s.26-.81.39-1.25h-.93v-1.2h1.28c.08-.28.15-.56.21-.82s.12-.52.16-.75l1.11.19c0,.2-.09.42-.15.65s-.13.48-.19.73h2.68v1.2h-3l-.38,1.19c-.13.38-.25.72-.37,1h.81V16.47l1.08.07v1.7h1.62v1.17H33.87v1.44h2V22h-2v1.58H32.79Z"/><path class="cls-1" d="M43.92,18.86c-.2.37-.43.76-.68,1.17s-.51.81-.77,1.21-.52.75-.76,1.08a7.84,7.84,0,0,1-.64.77l5.21-.29-.92-1.26c-.3-.4-.56-.73-.78-1l1.08-.81c.22.26.47.57.76.94s.6.76.91,1.17.61.82.9,1.23.55.77.77,1.1l-1,1.09c-.11-.18-.23-.36-.37-.56s-.28-.4-.43-.62l-1.29.06L44,24.22,42,24.34c-.69,0-1.32.08-1.88.13l-.51.07-.45.07-.38-1.36a1.61,1.61,0,0,0,.5-.26l.28-.24a9.24,9.24,0,0,0,.69-.77c.25-.31.49-.63.74-1s.48-.7.71-1.07.44-.72.63-1.07H38.24V17.55H49.31v1.31Zm4.3-3.59H39.34V14h8.88Z"/><path class="cls-2" d="M27.31,1.72C19,1,13.61,4.43,11.77,12.39c-12-1-9.77,14.13-.39,14.47L21.52,27l.69,1.61-10.83,0c-15-2.24-12.13-18.3-.72-18C13.43,2.34,19.32-.91,27.84.22l-.53,1.5Zm2.11-.9c3.46,1.51,6.65,4.17,7.85,7l-1.2.77C34.62,5.57,31.44,3.37,29,2.24Z"/><text class="cls-3" transform="translate(27.83 0.88) rotate(20.15) scale(0.94 1)"><tspan class="cls-4">101</tspan><tspan x="1.08" y="0">0</tspan></text><text class="cls-5" transform="translate(27.65 1.59) rotate(20.15) scale(0.94 1)"><tspan class="cls-6">010</tspan><tspan x="1.07" y="0">1</tspan></text><path class="cls-2" d="M22.21,28.62c-.07-4.69-8.63.21-18.49-1.06C8.27,30.58,15.1,30.26,22.21,28.62Z"/><path class="cls-2" d="M.62,17.31C1,22,4,27.17,17,26.79c-4.49.77-10,1.62-12.49,1.13C0,26-.76,21.1.62,17.31Z"/><path class="cls-2" d="M10.66,10.6C1.2,10.47-1.4,21.05,8.74,26.06,4.18,25.29.26,22.85.39,18.11,1.06,14.61,3.9,9.69,10.66,10.6Z"/><path class="cls-1" d="M24.26,28.51v.31H22.94V27h1.27v.31h-.87v.45h.8V28h-.8v.5Z"/><path class="cls-1" d="M25.51,28.85a1.67,1.67,0,0,1-.34,0,.49.49,0,0,1-.25-.12.48.48,0,0,1-.16-.23,1,1,0,0,1-.06-.36,1,1,0,0,1,.06-.37.48.48,0,0,1,.16-.23.49.49,0,0,1,.25-.12,1.72,1.72,0,0,1,.34,0h.24l.19,0v.29l-.18,0-.21,0a.56.56,0,0,0-.2,0,.26.26,0,0,0-.14.07.28.28,0,0,0-.08.15.75.75,0,0,0,0,.23.69.69,0,0,0,0,.22.28.28,0,0,0,.08.15.26.26,0,0,0,.14.07.62.62,0,0,0,.21,0h.2l.2,0v.28l-.09,0-.11,0h-.25Z"/><path class="cls-1" d="M27.18,28.85a1.67,1.67,0,0,1-.34,0,.53.53,0,0,1-.25-.12.56.56,0,0,1-.16-.23,1.25,1.25,0,0,1-.05-.36,1.27,1.27,0,0,1,.05-.37.56.56,0,0,1,.16-.23.53.53,0,0,1,.25-.12,1.94,1.94,0,0,1,.68,0,.53.53,0,0,1,.25.12.56.56,0,0,1,.16.23,1.27,1.27,0,0,1,.05.37,1.25,1.25,0,0,1-.05.36.56.56,0,0,1-.16.23.53.53,0,0,1-.25.12A1.67,1.67,0,0,1,27.18,28.85Zm0-.26a.5.5,0,0,0,.19,0,.2.2,0,0,0,.13-.08.34.34,0,0,0,.06-.15.79.79,0,0,0,0-.23.82.82,0,0,0,0-.24.34.34,0,0,0-.06-.15.26.26,0,0,0-.13-.08.62.62,0,0,0-.38,0,.26.26,0,0,0-.13.08.34.34,0,0,0-.06.15,1.44,1.44,0,0,0,0,.24,1.4,1.4,0,0,0,0,.23.26.26,0,0,0,.07.15.2.2,0,0,0,.12.08A.54.54,0,0,0,27.18,28.59Z"/><path class="cls-1" d="M28.48,27.86h.94v.27h-.94Z"/><path class="cls-1" d="M31.24,28.82l-.53-.7h-.28v.7H30V27h.67a2.09,2.09,0,0,1,.38,0,.57.57,0,0,1,.25.1.38.38,0,0,1,.15.18.68.68,0,0,1,.05.27.64.64,0,0,1-.1.36.66.66,0,0,1-.32.18l.62.74Zm-.6-1h.22a.46.46,0,0,0,.14-.05.2.2,0,0,0,.09-.09.7.7,0,0,0,0-.16.54.54,0,0,0,0-.15A.2.2,0,0,0,31,27.3a.29.29,0,0,0-.14,0l-.22,0h-.21v.61Z"/><path class="cls-1" d="M33.55,27.37v1.45H33.2l0-.19a.39.39,0,0,1-.21.17,1,1,0,0,1-.31.05,1,1,0,0,1-.26,0,.51.51,0,0,1-.18-.09.38.38,0,0,1-.09-.15.64.64,0,0,1,0-.2v-1h.39v.9a.53.53,0,0,0,0,.13.13.13,0,0,0,0,.09.16.16,0,0,0,.08.06l.15,0a.6.6,0,0,0,.24-.05.28.28,0,0,0,.15-.18v-1Z"/><path class="cls-1" d="M35.07,27.35a.84.84,0,0,1,.34,0,.47.47,0,0,1,.21.15.58.58,0,0,1,.1.24,1.42,1.42,0,0,1,0,.31,1.27,1.27,0,0,1,0,.28.53.53,0,0,1-.1.24.51.51,0,0,1-.21.17.83.83,0,0,1-.34.06.8.8,0,0,1-.35-.07.48.48,0,0,1-.17-.18l0,.22h-.35v-2h.39v.8a.4.4,0,0,1,.17-.17A.77.77,0,0,1,35.07,27.35ZM35,28.59a.54.54,0,0,0,.2,0,.43.43,0,0,0,.12-.11.75.75,0,0,0,.05-.16c0-.06,0-.12,0-.18s0-.14,0-.2a.44.44,0,0,0-.06-.16.27.27,0,0,0-.11-.1.54.54,0,0,0-.2,0,.41.41,0,0,0-.21,0,.25.25,0,0,0-.13.09.29.29,0,0,0-.07.16.68.68,0,0,0,0,.21.65.65,0,0,0,0,.2.26.26,0,0,0,.07.15.27.27,0,0,0,.13.1A.56.56,0,0,0,35,28.59Z"/><path class="cls-1" d="M37.19,27.35a.82.82,0,0,1,.33,0,.47.47,0,0,1,.21.15.58.58,0,0,1,.1.24,1.42,1.42,0,0,1,0,.31,1.27,1.27,0,0,1,0,.28.53.53,0,0,1-.1.24.51.51,0,0,1-.21.17.95.95,0,0,1-.69,0,.48.48,0,0,1-.17-.18l0,.22h-.35v-2h.39v.8a.4.4,0,0,1,.17-.17A.79.79,0,0,1,37.19,27.35Zm-.11,1.24a.54.54,0,0,0,.2,0,.43.43,0,0,0,.12-.11.75.75,0,0,0,.05-.16,1.09,1.09,0,0,0,0-.18,1.27,1.27,0,0,0,0-.2.75.75,0,0,0-.05-.16.4.4,0,0,0-.12-.1.54.54,0,0,0-.2,0,.46.46,0,0,0-.21,0,.25.25,0,0,0-.13.09.29.29,0,0,0-.07.16.68.68,0,0,0,0,.21.65.65,0,0,0,0,.2.26.26,0,0,0,.07.15.27.27,0,0,0,.13.1A.65.65,0,0,0,37.08,28.59Z"/><path class="cls-1" d="M39.8,28v.1a.31.31,0,0,0,0,.09l-1.1.06a.38.38,0,0,0,.12.27.6.6,0,0,0,.36.09h.16l.15,0,.13,0,.11,0v.27a1.21,1.21,0,0,1-.24.07,2.25,2.25,0,0,1-.38,0,1.57,1.57,0,0,1-.33,0,.57.57,0,0,1-.26-.12.54.54,0,0,1-.15-.23,1,1,0,0,1-.06-.36,1,1,0,0,1,.06-.37.54.54,0,0,1,.15-.23.57.57,0,0,1,.26-.12,1.61,1.61,0,0,1,.33,0,.92.92,0,0,1,.36,0,.44.44,0,0,1,.21.13.38.38,0,0,1,.1.2A.88.88,0,0,1,39.8,28Zm-.36,0a.49.49,0,0,0,0-.12.21.21,0,0,0,0-.11.3.3,0,0,0-.11-.07.42.42,0,0,0-.18,0,.54.54,0,0,0-.19,0,.27.27,0,0,0-.19.19.76.76,0,0,0,0,.16Z"/><path class="cls-1" d="M41.25,27.35v.3H41a.39.39,0,0,0-.14.05.31.31,0,0,0-.11.09.46.46,0,0,0-.07.16v.86h-.39V27.37h.39v.26a.28.28,0,0,1,.09-.14l.12-.09a.37.37,0,0,1,.14,0h.18Z"/><path class="cls-1" d="M43.31,28.85a2.72,2.72,0,0,1-.42,0,.86.86,0,0,1-.32-.15.61.61,0,0,1-.2-.29,1.34,1.34,0,0,1-.08-.48,1.17,1.17,0,0,1,.08-.45.69.69,0,0,1,.2-.3.88.88,0,0,1,.32-.16,1.88,1.88,0,0,1,.43-.05l.27,0,.22,0v.31l-.22-.05h-.25a1.06,1.06,0,0,0-.27,0,.4.4,0,0,0-.19.11.48.48,0,0,0-.12.2,1.3,1.3,0,0,0,0,.31,1.45,1.45,0,0,0,0,.32.43.43,0,0,0,.11.2.39.39,0,0,0,.19.1,1,1,0,0,0,.26,0l.27,0,.24-.05v.3l-.23.05A1.36,1.36,0,0,1,43.31,28.85Z"/><path class="cls-1" d="M44.78,28.83a.5.5,0,0,1-.34-.08.33.33,0,0,1-.1-.27v-1.7h.38V28.4a.19.19,0,0,0,0,.13.15.15,0,0,0,.12,0H45v.26Z"/><path class="cls-1" d="M46.11,28.85a1.67,1.67,0,0,1-.34,0,.53.53,0,0,1-.25-.12.56.56,0,0,1-.16-.23,1.25,1.25,0,0,1,0-.36,1.27,1.27,0,0,1,0-.37.56.56,0,0,1,.16-.23.53.53,0,0,1,.25-.12,1.94,1.94,0,0,1,.68,0,.53.53,0,0,1,.25.12.56.56,0,0,1,.16.23,1.27,1.27,0,0,1,0,.37,1.25,1.25,0,0,1,0,.36.56.56,0,0,1-.16.23.53.53,0,0,1-.25.12A1.67,1.67,0,0,1,46.11,28.85Zm0-.26a.5.5,0,0,0,.19,0,.26.26,0,0,0,.13-.08.34.34,0,0,0,.06-.15.79.79,0,0,0,0-.23.82.82,0,0,0,0-.24.26.26,0,0,0-.07-.15.2.2,0,0,0-.12-.08.54.54,0,0,0-.19,0,.5.5,0,0,0-.19,0,.2.2,0,0,0-.13.08.34.34,0,0,0-.06.15.82.82,0,0,0,0,.24.79.79,0,0,0,0,.23.34.34,0,0,0,.06.15.26.26,0,0,0,.13.08A.5.5,0,0,0,46.11,28.59Z"/><path class="cls-1" d="M48.89,27.37v1.45h-.35l0-.19a.39.39,0,0,1-.21.17,1,1,0,0,1-.31.05,1,1,0,0,1-.26,0,.39.39,0,0,1-.17-.09.31.31,0,0,1-.1-.15.64.64,0,0,1,0-.2v-1h.39v.9a.53.53,0,0,0,0,.13.19.19,0,0,0,.05.09.15.15,0,0,0,.09.06l.14,0a.6.6,0,0,0,.24-.05.28.28,0,0,0,.15-.18v-1Z"/><path class="cls-1" d="M51,26.78v2h-.34l0-.21a.4.4,0,0,1-.17.17.8.8,0,0,1-.35.07.78.78,0,0,1-.33-.06.41.41,0,0,1-.21-.15.53.53,0,0,1-.11-.24,1.42,1.42,0,0,1,0-.3,1.32,1.32,0,0,1,0-.29.66.66,0,0,1,.11-.24.49.49,0,0,1,.21-.16.78.78,0,0,1,.33-.06h.2l.15.05a.26.26,0,0,1,.1.07.36.36,0,0,1,.07.1v-.8Zm-.79,1.81a.65.65,0,0,0,.21,0,.3.3,0,0,0,.13-.09.34.34,0,0,0,.06-.16.65.65,0,0,0,0-.2.71.71,0,0,0,0-.21.34.34,0,0,0-.06-.15.36.36,0,0,0-.14-.1.4.4,0,0,0-.2,0,.56.56,0,0,0-.21,0,.29.29,0,0,0-.11.11.3.3,0,0,0,0,.16,1.81,1.81,0,0,0,0,.38.43.43,0,0,0,0,.16.4.4,0,0,0,.12.1A.5.5,0,0,0,50.21,28.59Z"/><path class="cls-1" d="M37.6,7.6a1.89,1.89,0,1,0,1.89,1.89A1.89,1.89,0,0,0,37.6,7.6Zm0,3.18a1.3,1.3,0,1,1,1.29-1.29A1.29,1.29,0,0,1,37.6,10.78Z"/><path class="cls-7" d="M38.54,10a1.1,1.1,0,0,1-.94.54v-.8a.27.27,0,0,0,.25-.14Z"/><path class="cls-7" d="M37.6,9.77v.8a1.1,1.1,0,0,1-.94-.54l.69-.4A.27.27,0,0,0,37.6,9.77Z"/><path class="cls-7" d="M37.32,9.49a.32.32,0,0,0,0,.14l-.69.4a1.09,1.09,0,0,1-.14-.54A1.06,1.06,0,0,1,36.66,9l.69.4A.32.32,0,0,0,37.32,9.49Z"/><path class="cls-7" d="M37.6,8.4v.8a.28.28,0,0,0-.25.15L36.66,9A1.08,1.08,0,0,1,37.6,8.4Z"/><path class="cls-7" d="M38.54,9l-.69.4a.28.28,0,0,0-.25-.15V8.4A1.08,1.08,0,0,1,38.54,9Z"/><path class="cls-7" d="M38.68,9.49a1.09,1.09,0,0,1-.14.54l-.69-.4a.26.26,0,0,0,0-.28l.69-.4A1.06,1.06,0,0,1,38.68,9.49Z"/><path class="cls-8" d="M37.89,9.49a.33.33,0,0,1,0,.14.29.29,0,0,1-.5,0,.34.34,0,0,1,0-.28.28.28,0,0,1,.5,0A.33.33,0,0,1,37.89,9.49Z"/></g></g></svg>
\ No newline at end of file
@import "encapsulation";
::selection {
color: #ffffff;
background-color: $primary-color;
}
/* 改变主题色变量 */
$--color-primary: $primary-color;
/* 改变 icon 字体路径变量,必需 */
$--font-path: "~element-ui/lib/theme-chalk/fonts";
@import "~element-ui/packages/theme-chalk/src/index";
$primary-color: #125fa3;
$primary-color-opt2: #125fa320;
$primary-color-opt8: #125fa380;
$transparent-color8: rgba(255, 255, 255, 0.8);
$transparent-color6: rgba(255, 255, 255, 0.6);
$transparent-color2: rgba(255, 255, 255, 0.4);
$Success: #67c23a;
$Warning: #e6a23c;
$Danger: #f56c6c;
$Info: #909399;
$themeColor: #409eff;
%text_overflow {
/*溢出添加省略号*/
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
%user_select_none {
/*文字无法选中*/
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
%title_info {
//文字信息
color: #1a7db6;
font-size: 12px;
background-color: #d9edf6;
border: 1px dashed #85d7fd;
padding: 10px 14px;
border-radius: 2px;
margin-bottom: 20px;
}
%reload {
//蓝色刷新按钮
cursor: pointer;
@extend %user_select_none;
color: #2db7f5;
margin-left: 10px;
}
%primary-click {
//主题色点击按钮样式
color: $primary-color;
cursor: pointer;
}
const setting = {
//标题 (包括初次加载雪花屏的标题 页面的标题 浏览器的标题)
title: "橡链云",
companyNmae: "赛轮集团股份有限公司", // 公司名称
copyright: "版权所有© 2020", // 版权时间
InternetContentProvider: "鲁ICP备09064072号-19", // 备案号
AboutUs: "https://www.sailuntyre.com/portal/about/index", // 关于我们链接
talentRecruitment: "http://zhaopin.sailuntire.com/", // 人才招聘链接
ContactUs: "https://www.sailuntyre.com/portal/index/cut?name=联系我们&fetch=about" // 联系我们链接
}
module.exports = setting
import Vue from "vue"
import App from "./App.vue"
import router from "./router"
import "../static/reset.css"
import "../static/font/iconfont.css"
import "./public/element"
Vue.config.productionTip = false
new Vue({
router,
render: h => h(App)
}).$mount("#app")
import Vue from "vue"
import "@/assets/styles/element-variables.scss"
import { Button, Form, FormItem, Row, Col, Progress, Carousel, CarouselItem, Message, Input } from "element-ui"
Vue.prototype.$ELEMENT = { size: "small" }
Input.props.autocomplete.default = "new-password"
Vue.use(Button)
Vue.use(Carousel)
Vue.use(CarouselItem)
Vue.use(Row)
Vue.use(Col)
Vue.use(Form)
Vue.use(FormItem)
Vue.use(Progress)
Vue.use(Input)
Vue.prototype.$message = Message
import Vue from "vue"
import VueRouter from "vue-router"
const Home = () => import("../views/Home.vue") //PASS首页
const login = () => import("../views/login.vue") //登录页面
const no_find = () => import("../views/404") //404页面
Vue.use(VueRouter)
const routes = [
{
path: "/",
name: "Home",
component: Home
},
{
path: "/replacement",
name: "replacement",
component: () => import("../views/replacement/replacement.vue")
},
{
path: "/login",
name: "login",
component: login
},
{
path: "*",
name: "no_find",
component: no_find
}
]
const router = new VueRouter({
mode: "history",
base: process.env.BASE_URL,
routes
})
export default router
import axios from "../request"
import { SVC_API_PDMS } from "../app"
//获取登录方式
export const getLoginType = () => {
return axios.get(`${SVC_API_PDMS}/api/v2/pdms/common/loginType`)
}
// 图片验证码
export const captchaImageReq = () => {
return axios.get(`${SVC_API_PDMS}/api/v2/pdms/captcha/captchaImage`)
}
//登录
export const postLogin = params => {
return axios.post(`${SVC_API_PDMS}/api/v2/pdms/common/login`, params)
}
// 验证验证码
export const VcaptchaImageReq = params => {
return axios.post(`${SVC_API_PDMS}/api/v2/pdms/captcha/captchaImage`, params)
}
import * as api from "./api"
export default api
let baseURL = {
VUE_APP_PDMS_PATH: "http://localhost:8081/",
VUE_APP_CMSS_PATH: "http://localhost:8082/",
VUE_APP_DEVOPS_PATH: "http://localhost:8084/",
SVC_API_PDMS: "",
SVC_API_CMSS: "",
DomainName: "localhost",
VUE_APP_COPYRIGHT: "版权所有 2020 赛轮集团股份有限公司 鲁ICP备09064072号-19", // 公司名称
VUE_APP_ABOUT_US: "https://www.sailuntyre.com/portal/about/index", // 关于我们链接
VUE_APP_JOIN_US: "http://zhaopin.sailuntire.com/", // 招聘链接
VUE_APP_CONTAC_US: "https://www.sailuntyre.com/portal/index/cut?name=联系我们&fetch=about", // 联系我们链接
VUE_APP_SERVICE_TEL: "400-888888", // 联系电话
VUE_APP_QR_CODE: "https://www.ecorubbercloud.com/image/QRCode.png", // 二维码链接
VUE_APP_IAAS_PATH: "" // iaas平台链接
}
if (process.env.NODE_ENV === "production" && document.querySelector("html").dataset.promiseBaseUrl) {
const arr = document.querySelector("html").dataset.promiseBaseUrl.split(";")
arr.forEach(item => {
const path = item.split("|")
baseURL[path[0]] = path[1]
})
}
//****************/
module.exports = baseURL
import Cookies from "js-cookie"
import baseURL from "./app"
let AccessToken = "vue_admin_template_token_"
const uid = "vue_admin_template_load_uid_"
const name = "vue_admin_template_name_"
let role = "vue_admin_template_role_"
let email = "vue_admin_template_email_"
//token
export function getToken() {
return Cookies.get(AccessToken)
}
export function setToken(data) {
return Cookies.set(AccessToken, data, {
path: "/",
domain: baseURL.DomainName
})
}
export function CreateTenant(data) {
return Cookies.set("isCreateTenant", data, {
path: "/",
domain: baseURL.DomainName
})
}
export function removeToken() {
return Cookies.remove(AccessToken, { path: "/", domain: baseURL.DomainName })
}
//uid
export function getUid() {
return Cookies.get(uid)
}
export function setUid(data) {
return Cookies.set(uid, data, { path: "/", domain: baseURL.DomainName })
}
export function removeUid() {
return Cookies.remove(uid, { path: "/", domain: baseURL.DomainName })
}
//name
export function getName() {
return Cookies.get(name)
}
export function setName(data) {
return Cookies.set(name, data, { path: "/", domain: baseURL.DomainName })
}
export function removeName() {
return Cookies.remove(name, { path: "/", domain: baseURL.DomainName })
}
//tenantId
export function getTenantId() {
return Cookies.get("tenantId")
}
export function setTenantId(data) {
return Cookies.set("tenantId", data, {
path: "/",
domain: baseURL.DomainName
})
}
export function removeTenantId() {
return Cookies.remove("tenantId", { path: "/", domain: baseURL.DomainName })
}
//role角色
export function getRole() {
return Cookies.get(role)
}
export function setRole(data) {
return Cookies.set(role, data, { path: "/", domain: baseURL.DomainName })
}
export function removeRole() {
return Cookies.remove(role, { path: "/", domain: baseURL.DomainName })
}
//email
export function getEmail() {
return Cookies.get(email)
}
export function setEmail(data) {
return Cookies.set(email, data, { path: "/", domain: baseURL.DomainName })
}
export function removeEmail() {
return Cookies.remove(email, { path: "/", domain: baseURL.DomainName })
}
import axios from "axios"
import baseURL from "../utils/app"
import { Message, Notification } from "element-ui"
axios.defaults.timeout = 10000
// axios.defaults.baseURL = baseURL.SVC_API_PDMS + "/api/v2";
import { getToken } from "../utils/auth"
//请求拦截器
axios.interceptors.request.use(
config => {
const token = getToken()
//配置token
if (token) {
config.headers["Authorization"] = token
}
return config
},
error => {
return Promise.reject(error)
}
)
//响应拦截器即异常处理
axios.interceptors.response.use(
response => {
// 根据后端接口code执行操作
if (response.data.code !== 200) {
Message.warning(response.data.message)
}
return response.data
},
error => {
if (error && error.response) {
switch (error.response.status) {
case 400:
Notification.error({
title: "通知",
message: "错误请求",
duration: 2000
})
break
case 401:
break
case 403:
Notification.error({
title: "通知",
message: "拒绝访问",
duration: 2000
})
break
case 404:
Notification.error({
title: "通知",
message: "请求错误,地址不存在",
duration: 2000
})
break
case 405:
Notification.error({
title: "通知",
message: "请求方法未允许",
duration: 2000
})
break
case 408:
Notification.error({
title: "通知",
message: "请求超时",
duration: 2000
})
break
case 500:
if (error.response.data.code === 1000 || error.response.data.code === 401) {
Notification.error({
title: "通知",
message: "无效token,请重新登录",
duration: 2000
})
setTimeout(() => {
window.location.href = baseURL.VUE_APP_PORTAL_PATH + "/login"
}, 1000)
} else {
Notification.error({
title: "通知",
message: "服务器端出错",
duration: 2000
})
}
break
case 501:
Notification.error({
title: "通知",
message: "网络未实现",
duration: 2000
})
break
case 502:
Notification.error({
title: "服务异常",
message: "服务重启中..."
})
break
case 503:
Notification.error({
title: "服务异常",
message: "服务重启中..."
})
break
case 504:
Notification.error({
title: "通知",
message: "网络超时",
duration: 2000
})
break
case 505:
Notification.error({
title: "通知",
message: "http版本不支持该请求",
duration: 2000
})
break
default:
Notification.error({
title: "通知",
message: `连接错误`,
duration: 2000
})
}
} else {
Notification.error({
title: "通知",
message: "连接到服务器失败",
duration: 2000
})
}
return Promise.resolve(error.response)
}
)
export default {
// get请求
get(url, params = {}, headers = {}) {
return new Promise((resolve, reject) => {
axios
.get(url, {
params,
headers
})
.then(
res => {
resolve(res)
},
err => {
reject(err)
}
)
})
},
// post请求
post(url, params = {}, headers = {}) {
console.log("debug log --> ", headers)
return new Promise((resolve, reject) => {
axios
.post(url, params, {
headers
})
.then(
res => {
resolve(res)
},
err => {
reject(err)
}
)
})
},
// put请求
put(url, params = {}, headers = {}) {
return new Promise((resolve, reject) => {
axios
.put(url, params, {
headers
})
.then(
response => {
resolve(response)
},
err => {
reject(err)
}
)
})
},
// patch请求
patch(url, params = {}, headers = {}) {
return new Promise((resolve, reject) => {
axios
.patch(url, params, {
headers
})
.then(
response => {
resolve(response)
},
err => {
reject(err)
}
)
})
},
// delete
delete(url, params = {}, headers = {}) {
return new Promise((resolve, reject) => {
axios
.delete(url, {
params,
headers
})
.then(
response => {
resolve(response)
},
err => {
reject(err)
}
)
})
},
// petch请求
petch(url, params = {}) {
return new Promise((resolve, reject) => {
axios.petch(url, params).then(
response => {
resolve(response)
},
err => {
reject(err)
}
)
})
},
//FormData请求
postFile(url, params = {}) {
return new Promise((resolve, reject) => {
let form = new FormData()
if (Object.keys(params).length > 0) {
for (const key in params) {
form.append(key, params[key])
}
}
axios
.post(url, form, {
headers: {
"Content-Type": "multipart/form-data"
}
})
.then(
res => {
resolve(res)
},
err => {
reject(err)
}
)
})
}
}
<template>
<div class="wscn-http404-container">
<div class="box">
<div class="left">
<img src="@/assets/image/default/Oval 1.png" alt="" />
<img src="@/assets/image/default/404.png" alt="" />
</div>
<div class="right">
<p>404</p>
<p>LOOKS LIKE YOU‘RE LOST</p>
<p>The page you are looking for not availblel</p>
<p @click="$router.push({ path: '/login' })">
GO TO HOME
<span></span>
</p>
</div>
</div>
</div>
</template>
<script>
export default {
name: "Page404"
}
</script>
<style lang="scss" scoped>
.wscn-http404-container {
height: 100%;
width: 100%;
overflow: hidden;
.box {
width: 800px;
height: 600px;
margin: 15% auto 0;
.left {
width: 280px;
height: 280px;
float: left;
position: relative;
img:nth-child(1) {
position: absolute;
top: 0;
left: 0;
width: 100%;
}
img:nth-child(2) {
position: absolute;
top: 16px;
left: 50px;
width: 84%;
}
}
.right {
float: left;
margin-left: 62px;
line-height: 1;
position: relative;
top: -4px;
p:nth-child(1) {
font-size: 140px;
color: #247dd3;
padding-bottom: 32px;
font-weight: bold;
}
p:nth-child(2) {
font-size: 20px;
font-weight: bold;
}
p:nth-child(3) {
font-size: 16px;
padding-top: 16px;
color: #999999;
}
p:nth-child(4) {
color: #247dd3;
font-size: 24px;
margin-top: 66px;
font-weight: bold;
float: left;
cursor: pointer;
span {
font-size: 30px;
padding-left: 10px;
}
}
}
}
}
</style>
<template>
<div id="home">
<div class="header">
<div class="header-img">
<img src="@/assets/image/sailunlogo.svg" alt="" />
</div>
<div @click="goId">产品与服务</div>
<!-- <div>项目案例</div> -->
<div>帮助文档</div>
<div @click="login">用户登录</div>
</div>
<div class="block">
<el-carousel trigger="click" height="485px" arrow="always" :interval="intervalTime">
<el-carousel-item v-for="(item, index) in carousel" :key="index">
<div class="carousel">
<div class="carousel-content">
<div class="carousel-header">{{ item.title }}</div>
<div v-show="item.content.length === 4" class="carousel-body" v-for="(i, k) in item.content" :key="k">
{{ i }}
</div>
<div v-if="item.content.length > 4" class="carousel-body">
{{ item.content }}
</div>
<div class="carousel-btn" @click="login">立即体验</div>
</div>
<div class="carousel-img">
<img :src="item.img" alt="" />
</div>
</div>
</el-carousel-item>
</el-carousel>
</div>
<el-row>
<el-col :span="20" :offset="2">
<div class="module-title">
<div class="module-content">
<div class="icon">
<div class="iconOne"></div>
</div>
<div class="content-body">
<div>快速入门</div>
<div>仅需几步,快速入门</div>
</div>
</div>
<div class="line"></div>
<div class="module-content">
<div class="icon">
<div class="iconTwo"></div>
</div>
<div class="content-body" @click="iassGo">
<div>橡链云 IaaS 平台</div>
<div>IaaS 基础设施即服务, 可申请虚拟机服务器资源</div>
</div>
</div>
<div class="line"></div>
<div class="module-content">
<div class="icon">
<div class="iconThree"></div>
</div>
<div class="content-body" @click="routerGo">
<div>橡链云容器PaaS平台</div>
<div>PaaS 平台即服务, 提供应用秒级部署和灰度发布</div>
</div>
</div>
</div>
</el-col>
<el-col :span="20" :offset="2">
<div class="title" id="productService">
<div>产品与服务</div>
<div>专业的容器 PaaS 云平台</div>
</div>
</el-col>
<el-col :span="20" :offset="2">
<div class="service">
<div
class="service-content"
v-for="(item, index) in serviceList"
:key="index"
:class="active === index ? 'active' : ''"
@click="switchService(index)"
>
<!-- <img :src="item.icon" alt="" /> -->
<div :class="'serviceImage' + index"></div>
<div>{{ item.name }}</div>
<div v-if="active === index" class="service-line"></div>
</div>
</div>
<div class="service-menu" v-show="active === 0 ? true : active">
<div class="menu-every" v-for="(item, index) in menuList" :key="index">
<div class="service-title">{{ item.name }}</div>
<div class="service-desc">{{ item.description }}</div>
</div>
</div>
</el-col>
<el-col :span="20" :offset="2">
<div class="service">
<div
class="service-content"
v-for="(item, index) in serviceList1"
:key="index"
:class="active1 === index ? 'active1' : ''"
@click="switchService1(index)"
>
<img :src="item.icon" alt="" />
<div>{{ item.name }}</div>
<div v-if="active1 === index" class="service-line"></div>
</div>
</div>
<div class="service-menu" v-show="active1 === 0 ? true : active1">
<div class="menu-every" v-for="(item, index) in menuList" :key="index">
<div class="service-title">{{ item.name }}</div>
<div class="service-desc">{{ item.description }}</div>
</div>
</div>
</el-col>
</el-row>
<!-- <el-row class="case">
<el-col :span="20" :offset="2">
<div class="case-title">
<div>项目案例</div>
<div>为客户创造核心价值, 赋能客户成为行业领导者</div>
</div>
<div class="case-module">
<div
class="case-content"
v-for="(item, index) in caseList"
:key="index"
>
<div :class="'caseImage' + index"></div>
<div class="case-name">{{ item.name }}</div>
<div class="case-desc">{{ item.description }}</div>
</div>
</div>
</el-col>
</el-row> -->
<!-- <el-row>
<el-col :span="20" :offset="2">
<div class="platform-title">
<div>平台实力</div>
<div>全方位保障,支撑业务稳健运行</div>
</div>
<div class="platform">
<div
class="platform-content"
v-for="(item, index) in platformList"
:key="index"
>
<el-progress
type="dashboard"
:percentage="percentage"
color="#125fa3"
:show-text="showText"
>
</el-progress>
<div class="platform-num">
<span>{{ item.number }}</span>
<span>+</span><span>{{ item.unit }}</span>
</div>
<div class="platform-name">{{ item.name }}</div>
</div>
</div>
</el-col>
</el-row> -->
<el-row class="advantage">
<el-col :span="20" :offset="2">
<div class="advantage-title">
<div>橡链云的特点和优势</div>
<div>赋能业务, 共创未来, 为 Cloud Native 应用而生</div>
</div>
<div class="advantage-content">
<div class="advantage-left">
<div class="advantage-module" v-for="(item, index) in advantageListLeft" :key="index">
<div class="advantage-name">{{ item.name }}</div>
<div class="advantage-desc">{{ item.desc }}</div>
</div>
</div>
<div class="advantage-middle">
<img src="../assets/image/quto.png" alt="" />
</div>
<div class="advantage-right">
<div class="advantage-module" v-for="(item, index) in advantageListRight" :key="index">
<div class="advantage-name">{{ item.name }}</div>
<div class="advantage-desc">{{ item.desc }}</div>
</div>
</div>
</div>
</el-col>
</el-row>
<div class="journey">
<div class="journey-font">开启你的云之旅</div>
<div class="journey-btn" @click="login">立即体验</div>
</div>
<el-row class="footer">
<div class="content">
<div class="left">
<img v-if="ServiceTel" class="img" src="../assets/image/foot1.png" alt="客服" />
<p v-if="ServiceTel">客服热线</p>
<p v-if="ServiceTel">
{{ ServiceTel }}
</p>
</div>
<div class="center">
<div class="outconnection">
<a v-if="AboutUs" :href="AboutUs" target="_blank">关于我们</a>
<a v-if="JoinUs" :href="JoinUs" target="_blank">人才招聘</a>
<a v-if="ContactUs" :href="ContactUs" target="_blank">联系我们</a>
</div>
<div class="copyright">
<span v-if="copyright">{{ copyright }}</span>
</div>
</div>
<div class="right">
<img v-if="QRcode" :src="QRcode" alt="二维码" />
</div>
</div>
</el-row>
</div>
</template>
<script>
import { getLoginType } from "@/utils/api/api"
import { getToken } from "@/utils/auth"
import baseURL from "@/utils/app"
export default {
name: "Home",
data() {
return {
QRcode: baseURL.VUE_APP_QR_CODE,
ServiceTel: baseURL.VUE_APP_SERVICE_TEL,
ContactUs: baseURL.VUE_APP_CONTAC_US,
JoinUs: baseURL.VUE_APP_JOIN_US,
AboutUs: baseURL.VUE_APP_ABOUT_US,
copyright: baseURL.VUE_APP_COPYRIGHT,
intervalTime: 5000, //轮播图轮播时间
carousel: [
{
img: require("../assets/image/home/banner1.png"),
title: "橡链云 v2.0 正式发布",
content: "平台版本上线通知"
},
{
img: require("../assets/image/home/banner2.png"),
title: "支撑与引领创新技术落地",
content: "具有负载均衡、弹性伸缩、灰度升级、域名绑定和日志监控,提供容器组的服务编排,在构建微服务架构模式上具有领先优势"
},
{
img: require("../assets/image/home/banner3.png"),
title: "多快好省优势",
content: [
"多:覆盖30+系统上云;",
"快:快速交付;",
"好:实现云端应用的创建、编译、集成、部署、运行的理想平台;",
"省:省钱、省时、省力、省心"
]
},
{
img: require("../assets/image/home/banner4.png"),
title: "坚持“匠心”精神",
content: "踏踏实实地用专注做好每一个项目"
}
],
serviceList: [
{
icon: require("../assets/image/home/1.png"),
name: "容器"
},
{
icon: require("../assets/image/home/2.png"),
name: "CI/CD"
},
{
icon: require("../assets/image/home/3.png"),
name: "管理与监控"
},
{
icon: require("../assets/image/home/4.png"),
name: "API 网关"
}
],
serviceList1: [
{
icon: require("../assets/image/home/5.png"),
name: "数据库与缓存"
},
{
icon: require("../assets/image/home/6.png"),
name: "交付中心"
},
{
icon: require("../assets/image/home/7.png"),
name: "微服务治理"
},
{
icon: require("../assets/image/home/8.png"),
name: "软件工程过程管理"
}
],
menuList: [
{
name: "容器服务",
description: "容器是从镜像创建的应用运行实例"
},
{
name: "应用管理",
description: "应该表示多个容器服务的的集合,对容器进行标识管理"
},
{
name: "工作负载",
description: "工作负载是业务应用在底层k8s上运行的资源类型"
},
{
name: "网络管理",
description: "对应k8s Service,主要是为工作负载的原生资源提供 Service 管理"
},
{
name: "存储管理",
description: "存储(volume)主要用于持久化存储 Docker 容器的数据"
},
{
name: "堆栈",
description: "堆栈内管理维护,堆栈所有元素资源的生命周期,可以查看堆栈全部的应用、服务、容器等相关资源"
}
],
active: 0,
active1: undefined,
caseList: [
{
icon: require("../assets/image/home/案例1.png"),
name: "ECP-X",
description:
"基于微服务架构,以提效为目的,提高客户与用户满意度为目标,建立符合橡链云线上及新零售(O2O)业务高效的、统一的营销中台系统"
},
{
icon: require("../assets/image/home/案例2.png"),
name: "APS",
description: "计划排产系统,旨在缩短工厂对市场需求的承诺周期,提高内销订单保障率,资源保证情况、计划排产数据等数据透明化"
},
{
icon: require("../assets/image/home/案例3.png"),
name: "差旅",
description:
"该平台可实现员工出差申请、出差消费、报账推送的一站式服务,同时管理员可通过设置差旅标准、超额审批等操作,灵活闭环管理,提高全流程时效"
},
{
icon: require("../assets/image/home/案例4.png"),
name: "WAS",
description:
"基于国际领先的Storm大数据实时计算技术和海量的数据资源,为IT系统提供专注、高效的系统运行统计分析解决方案,提升用户满意度"
},
{
icon: require("../assets/image/home/案例5.png"),
name: "大物流平台一期",
description:
"满足内部业务整合、外部业务拓展、独立物流公司运作要求;构建了B2B仓储配送信息系统管理体系、B2C送装一体全流程信息化支持体系"
}
],
platformList: [
{
name: "pod 数量",
number: "1000",
unit: "个"
},
{
name: "核心项目数量",
number: "30",
unit: "个"
},
{
name: "存储空间",
number: "20T",
unit: ""
},
{
name: "服务器总量",
number: "200",
unit: "个"
}
],
percentage: 100, //进度条进度
showText: false,
advantageListLeft: [
{
name: "提供标准的体系建设",
desc: "提供统一的资源申请、应用开发、应用部署与服务监控解决方案"
},
{
name: "秒级部署和灰度发布",
desc: "可实现秒级部署与灰度发布,可自动实现应用的负载均衡、弹性伸缩、灰度升级、域名绑定与日志监控"
},
{
name: "精细化运营和可视化管理",
desc: "通过容器技术实现对资源的精细化运营管理,自主研发看板,可实现开发过程、运维、系统健康可视化管理"
},
{
name: "提供智能运维",
desc: "基于CaaS容器云平台、统一服务网关和DevOps一体化运维三大功能模块进行构建,为企业内部应用提供镜像构建、持续集成、容器托管与智能运维服务"
}
],
advantageListRight: [
{
name: "一站式上云",
desc: "橡链云团队具备云平台架构、开发、测试和运维经验,提供一站式上云、云端开发和运维技术支持和服务"
},
{
name: "稳定健壮",
desc: "底层提供高可用的虚拟环境、存储环境和网络环境,来确保上层应用和容器的稳健运行"
},
{
name: "以用户为中心",
desc: "橡链云团队坚持以用户为中心,致力于科技创新,未来将持续为集团各业务领域用户提供基于云平台战略的IT服务"
},
{
name: "团队保障",
desc: "流程IT云平台团队汇聚了该技术领域精英,具备云平台架构、开发、测试和运维经验,提供一站式上云、云端开发和运维技术支持和服务"
}
],
footerList: [
{
title: "帮助与文档",
content: [
{
title: "产品操作文档",
link: ""
},
{
title: "微服务操作文档",
link: ""
}
]
},
{
title: "友情链接",
content: [
{
title: "橡链云控股公司",
link: ""
}
]
},
{
title: "热门问题",
content: [
{
title: "热门问题",
link: ""
},
{
title: "常见问题",
link: ""
}
]
},
{
title: "联系我们",
content: [
{
title: "关于我们",
link: ""
},
{
title: "合作伙伴",
link: ""
},
{
title: "联系我们",
link: ""
}
]
}
]
}
},
methods: {
//服务切换
switchService(index) {
this.active = index
if (index === 0) {
//容器
this.menuList = [
{
name: "容器服务",
description: "容器是从镜像创建的应用运行实例"
},
{
name: "应用管理",
description: "应该表示多个容器服务的的集合,对容器进行标识管理"
},
{
name: "工作负载",
description: "工作负载是业务应用在底层k8s上运行的资源类型"
},
{
name: "网络管理",
description: "对应k8s Service,主要是为工作负载的原生资源提供 Service 管理"
},
{
name: "存储管理",
description: "存储(volume)主要用于持久化存储 Docker 容器的数据"
},
{
name: "堆栈",
description: "堆栈内管理维护,堆栈所有元素资源的生命周期,可以查看堆栈全部的应用、服务、容器等相关资源"
}
]
} else if (index === 1) {
//cicd
this.menuList = [
{
name: "CI/CD概览",
description: "CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法,持续交付,持续集成"
},
{
name: "代码仓库",
description: "用存放代码所在的存放仓库"
},
{
name: "流水线",
description: "在这里完成镜像构建、克隆代码、审批流程、Jenkins任务、部署容器等CI/CD任务的定义与执行"
},
{
name: "Dockerfile",
description: "保存用户在编辑过程中创建的Dockerfile文件,方便再次查看、编辑或使用"
},
{
name: "缓存卷",
description: "存放代码就相关文件,用于保存相关代码数据"
},
{
name: "第三方工具",
description: "支持 Jenkins 平台完整对接"
}
]
} else if (index === 2) {
//监控与管理
this.menuList = [
{
name: "驾驶舱",
description: "项目人员查看自己所在项目情况相关数据统计数据"
},
{
name: "日志管理",
description: "保存容器实例操作生成的日志,并统一化管理"
},
{
name: "监控面板",
description: "实现监控数据可视化,提供了自定义监控面板的功能,方便时发现问题,快速运维"
},
{
name: "告警设置",
description: "告警管理包含资源告警和日志告警两个模块,实现实时监控容器应用是否正常运行"
},
{
name: "告警记录",
description: "告警记录页面呈现了历史所有的告警策略产生的告警情况"
}
]
} else {
//api网关
this.menuList = [
{
name: "API概览",
description: "通过预先定义的函数,指定服务间不同组成部分衔接的约定"
},
{
name: "开发API",
description: "用于创建服务的相关API规则,监控其调用情况"
},
{
name: "调用API",
description: "发布管理服务的API"
}
]
}
this.active1 = undefined
},
switchService1(index) {
this.active1 = index
if (index === 0) {
//数据库缓存
this.menuList = [
{
name: "MySQL集群",
description: "MySQL集群是一种分布式设计,目标是要达到没有任何单点故障点"
},
{
name: "Redis集群",
description: "利用Redis集群,将对Redis的访问分配到各个结点,以减小单个结点的压力"
},
{
name: "ZooKeeper 集群",
description:
"ZooKeeper 是一个开源的分布式协调服务,设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集"
},
{
name: "ES集群",
description: "ElasticSearch 支持分布式部署,通过集群部署可以提高系统的可用性"
},
{
name: "MongoDB 集群",
description: "MongoDB 副本集完全兼容MongoDB协议,提供稳定可靠、弹性伸缩的数据库服务"
}
]
} else if (index === 1) {
//交付中心
this.menuList = [
{
name: "应用模板",
description: "创建统一服务模板,方便快速创建统一服务"
},
{
name: "镜像仓库",
description: "应用镜像存放仓库用于,镜像包整理"
},
{
name: "应用包管理",
description: "应用包整理,使用应用包一键部署"
},
{
name: "编排文件",
description: "yaml模版文件,修改yaml模板内容快速创建服务"
},
{
name: "应用商店",
description: "通用镜像,应用包的发布管理"
},
{
name: "服务目录",
description: "快速创建常用的中间件服务集群"
}
]
} else if (index === 2) {
//微服务治理
this.menuList = [
{
name: "微服务概览",
description: "微服务架构是一项在云中部署应用和服务技术,微服务云架构和平台,使部署、管理和服务功能交付变得更加简单"
},
{
name: "治理-SpringCloud",
description: "实现服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等功能"
}
]
} else {
//软件工程过程管理
this.menuList = [
{
name: "项目概览",
description: "相关相关项目的迭代总览情况,项目类型分部"
},
{
name: "需求管理",
description: "展示项目部门相关需求,迭代进度及关系结果图"
},
{
name: "交付管理",
description: "统计相关jira项目活动交付情况"
},
{
name: "研发质量",
description: "相关各项目代码研发质量,根据sonarqube统计代码趋势图"
},
{
name: "版本发布",
description: "各项目部门项目版本发布管理"
}
]
}
this.active = undefined
},
//获取登录方式
login() {
if (getToken()) {
window.location.href = baseURL.VUE_APP_PDMS_PATH
} else {
getLoginType().then(() => {
this.$router.push({ path: "/login" })
})
}
},
goId() {
//选中id
document.getElementById("productService").scrollIntoView({
behavior: "smooth", // 平滑过渡
block: "start" // 上边框与视窗顶部平齐。默认值
})
},
routerGo() {
if (getToken()) {
// this.$router.push({ path: "/login" });
window.location.href = baseURL.VUE_APP_PDMS_PATH
} else {
getLoginType().then(() => {
this.$router.push({ path: "/login" })
})
}
},
iassGo() {
if (baseURL.VUE_APP_IAAS_PATH) {
window.location.href = baseURL.VUE_APP_IAAS_PATH
}
}
}
}
</script>
<style lang="scss">
@import "src/assets/styles/encapsulation";
#home {
min-width: 100px;
position: relative;
.el-carousel__item h3 {
color: #475669;
font-size: 14px;
opacity: 0.75;
line-height: 150px;
margin: 0;
}
.el-carousel__item {
background-image: url("../assets/image/home/banner-bg.jpg");
background-size: cover;
}
::v-deep .el-carousel__arrow {
font-size: 40px;
height: 0;
width: 0;
top: 40%;
opacity: 0.5;
}
::v-deep .el-carousel__arrow:hover {
opacity: 1;
}
::v-deep .el-carousel__arrow--right {
right: 53px;
}
.header {
position: absolute;
z-index: 2;
width: 100%;
display: flex;
height: 70px;
align-items: center;
font-size: 14px;
background-color: rgba(0, 0, 0, 0);
color: #ffffff;
div {
margin-left: 50px;
cursor: pointer;
}
div:last-child {
position: absolute;
right: 4%;
padding: 7px 28px;
border-radius: 3px;
background-color: $primary-color;
color: #ffffff;
cursor: pointer;
}
}
.block {
position: relative;
z-index: 1;
}
.header-img img {
height: 40px;
}
::v-deep .el-carousel__indicators--horizontal {
bottom: 100px;
}
::v-deep .el-carousel__button {
width: 50px;
height: 4px;
}
::v-deep .el-carousel__indicator--horizontal {
padding: 12px 8px;
}
.carousel {
width: 80%;
margin: 0 auto;
display: flex;
.carousel-content {
color: #fff;
width: 50%;
// margin: 0 auto;
margin-top: 100px;
.carousel-header {
font-size: 42px;
margin-bottom: 20px;
}
.carousel-body {
font-size: 18px;
color: #fff;
line-height: 30px;
width: 570px;
}
.carousel-btn {
float: left;
width: 130px;
height: 40px;
line-height: 40px;
text-align: center;
color: #ffffff;
border-radius: 3px;
cursor: pointer;
border: 1px solid $primary-color;
background-color: $primary-color !important;
margin-top: 40px;
font-size: 14px;
&:hover {
color: inherit;
}
}
}
.carousel-img {
width: 50%;
height: 458px;
transform: translateY(20px);
text-align: center;
img {
width: 80%;
height: 80%;
}
}
}
.module-title {
display: flex;
justify-content: space-between;
height: 110px;
box-shadow: 0 0 10px 0 rgb(0 0 0 / 18%);
position: relative;
top: -55px;
z-index: 999;
background-color: #fff;
.module-content {
width: 400px;
display: flex;
align-items: center;
cursor: pointer;
.icon {
width: 100px;
height: 86px;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
.iconOne {
background-image: url("../assets/image/home/sprites.png");
width: 40px;
height: 40px;
}
.iconTwo {
width: 40px;
height: 40px;
background: url("../assets/image/home/sprites.png") -85px 0;
}
.iconThree {
width: 40px;
height: 40px;
background: url("../assets/image/home/sprites.png") -41px 0;
}
}
.content-body {
width: 220px;
div {
font-size: 18px;
line-height: 35px;
}
div + div {
font-size: 14px;
line-height: 20px;
opacity: 0.4;
}
}
}
.line {
height: 80px;
width: 1px;
background: rgba(0, 0, 0, 0.1);
margin-top: 15px;
}
}
.title {
text-align: center;
margin-top: 55px;
div {
font-size: 28px;
color: rgba(0, 0, 0, 0.85);
margin-bottom: 20px;
}
div + div {
font-size: 16px;
color: #999;
}
}
.service {
display: flex;
justify-content: space-around;
margin-top: 40px;
.service-content {
width: 25%;
height: 120px;
text-align: center;
cursor: pointer;
.serviceImage0 {
width: 60px;
height: 60px;
background: url("../assets/image/home/sprites.png") 0 -40px;
margin: 0 auto;
}
.serviceImage1 {
width: 60px;
height: 60px;
background: url("../assets/image/home/sprites.png") -60px -40px;
margin: 0 auto;
}
.serviceImage2 {
width: 60px;
height: 60px;
background: url("../assets/image/home/sprites.png") -120px -40px;
margin: 0 auto;
}
.serviceImage3 {
width: 60px;
height: 60px;
background: url("../assets/image/home/sprites.png") -180px -40px;
margin: 0 auto;
}
.serviceImage4 {
width: 60px;
height: 60px;
background: url("../assets/image/home/sprites.png") -240px -40px;
margin: 0 auto;
}
.serviceImage5 {
width: 60px;
height: 60px;
background: url("../assets/image/home/sprites.png") -300px -40px;
margin: 0 auto;
}
.serviceImage6 {
width: 60px;
height: 60px;
background: url("../assets/image/home/sprites.png") -360px -40px;
margin: 0 auto;
}
.serviceImage7 {
width: 60px;
height: 60px;
background: url("../assets/image/home/sprites.png") -420px -40px;
margin: 0 auto;
}
div {
height: 56px;
line-height: 60px;
font-size: 16px;
}
.service-line {
width: 80px;
height: 1px;
background-color: $primary-color;
margin: 0 auto;
}
}
.active {
color: $primary-color;
}
.active1 {
color: $primary-color;
}
}
.service-menu {
padding: 20px 40px;
background-color: #f5fafb;
display: flex;
flex-wrap: wrap;
.menu-every {
width: 33.33%;
padding: 20px;
.service-title {
margin-bottom: 10px;
font-size: 16px;
color: rgba(0, 0, 0, 0.85);
}
.service-desc {
font-size: 14px;
color: rgba(0, 0, 0, 0.7);
}
}
}
.case {
padding-top: 60px;
padding-bottom: 80px;
background-color: #f5fafb;
margin-top: 80px;
.case-title {
text-align: center;
div {
font-size: 28px;
color: rgba(0, 0, 0, 0.85);
margin-bottom: 20px;
}
div + div {
font-size: 16px;
color: #999;
}
}
.case-module {
display: flex;
justify-content: space-between;
margin-top: 70px;
.case-content {
width: 18.5%;
height: 330px;
border-radius: 8px;
box-shadow: 0 0 10px rgb(53 153 198 / 10%);
background: white;
cursor: pointer;
transition: all 0.3s;
transform: translateY(0);
padding: 20px;
text-align: center;
&:hover {
.case-name {
color: $primary-color;
}
}
.caseImage0 {
width: 70px;
height: 60px;
background: url("../assets/image/home/sprites.png") 0 -102px;
margin: 0 auto;
}
.caseImage1 {
width: 70px;
height: 60px;
background: url("../assets/image/home/sprites.png") -64px -102px;
margin: 0 auto;
}
.caseImage2 {
width: 70px;
height: 60px;
background: url("../assets/image/home/sprites.png") -129px -102px;
margin: 0 auto;
}
.caseImage3 {
width: 70px;
height: 60px;
background: url("../assets/image/home/sprites.png") -193px -102px;
margin: 0 auto;
}
.caseImage4 {
width: 70px;
height: 60px;
background: url("../assets/image/home/sprites.png") -258px -102px;
margin: 0 auto;
}
i {
font-size: 50px;
color: $primary-color;
}
.case-name {
font-size: 14px;
margin-top: 10px;
}
.case-desc {
font-size: 14px;
line-height: 26px;
padding: 0 10px;
text-align: left;
color: #aaa;
margin-top: 20px;
-webkit-line-clamp: 6;
display: -webkit-box;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
}
&:hover {
box-shadow: 0 0 15px rgb(53 153 198 / 30%);
transform: translateY(-5px);
}
}
}
}
.platform-title {
text-align: center;
margin-top: 60px;
div {
font-size: 28px;
color: rgba(0, 0, 0, 0.85);
margin-bottom: 20px;
}
div + div {
font-size: 16px;
color: #999;
}
}
.platform {
display: flex;
justify-content: space-between;
margin-top: 50px;
.platform-content {
width: 25%;
height: 160px;
text-align: center;
position: relative;
.platform-num {
color: $primary-color;
width: 100%;
position: absolute;
top: 40px !important;
span:first-child {
font-size: 36px;
}
span:nth-child(2) {
font-size: 12px;
position: absolute;
font-weight: bold;
margin-left: 4px;
}
span:nth-child(3) {
margin-left: 6px;
}
}
.platform-name {
width: 100%;
position: absolute;
top: 125px;
font-size: 16px;
color: rgba(0, 0, 0, 0.7);
}
}
}
::v-deep .el-progress-circle {
width: 180px !important;
height: auto !important;
}
.advantage {
padding-top: 60px;
padding-bottom: 80px;
background-color: #f5fafb;
margin-top: 80px;
.advantage-title {
text-align: center;
div {
font-size: 28px;
color: rgba(0, 0, 0, 0.85);
margin-bottom: 20px;
}
div + div {
font-size: 16px;
color: #999;
}
}
.advantage-content {
display: flex;
justify-content: space-between;
position: relative;
margin-top: 50px;
.advantage-left {
text-align: right;
.advantage-module {
width: 285px;
.advantage-name {
margin-bottom: 20px;
color: #4d4d4d;
font-weight: 600;
font-size: 16px;
&:hover {
color: $primary-color;
}
}
.advantage-desc {
line-height: 25px;
color: #888888;
font-size: 14px;
}
}
.advantage-module + .advantage-module {
margin-top: 40px;
}
.advantage-module:first-child,
.advantage-module:last-child {
margin-left: 70px;
}
}
.advantage-right {
text-align: left;
.advantage-module {
width: 285px;
.advantage-name {
margin-bottom: 20px;
color: #4d4d4d;
font-weight: 600;
font-size: 16px;
&:hover {
color: $primary-color;
}
}
.advantage-desc {
line-height: 25px;
color: #888888;
font-size: 14px;
}
}
.advantage-module + .advantage-module {
margin-top: 40px;
}
.advantage-module:first-child,
.advantage-module:last-child {
margin-left: -70px;
}
}
.advantage-middle {
position: absolute;
width: 250px;
height: 250px;
border-radius: 50%;
line-height: 300px;
text-align: center;
left: calc(50% - 125px);
top: calc(50% - 180px);
img {
width: 100%;
height: 100%;
}
}
}
}
.journey {
width: 100%;
height: 200px;
background-color: #125fa320;
text-align: center;
padding-top: 50px;
box-sizing: border-box;
.journey-font {
font-size: 36px;
color: $primary-color;
text-align: center;
}
.journey-btn {
width: 120px;
height: 36px;
line-height: 36px;
background-color: $primary-color;
color: white;
border-radius: 3px;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
margin: 25px auto 0;
&:hover {
color: $primary-color;
background-color: white;
}
}
}
.footer {
width: 100%;
padding-top: 25px;
padding-bottom: 35px;
background-color: $primary-color;
.content {
color: #fff;
width: 80%;
margin: 0 auto;
display: flex;
justify-content: space-around;
.left {
font-size: 18px;
text-align: center;
.img {
width: 50px;
height: 50px;
}
}
.center {
font-size: 14px;
.outconnection {
width: 250px;
display: flex;
justify-content: space-between;
a {
color: #fff;
cursor: pointer;
text-decoration: none;
}
}
.copyright {
margin-top: 30px;
}
}
.right {
img {
width: 105px;
height: 105px;
}
}
}
}
}
</style>
<template>
<div id="login">
<div class="header">
<div class="header-img">
<img @click="goHome" src="@/assets/image/sailunLogo.png" alt="" />
<img src="../assets/image/loginsailun.png" class="bamnar" alt="" />
</div>
<!-- <div>产品与服务</div>
<div>项目案例</div> -->
<div>帮助文档</div>
</div>
<div class="login-content">
<div class="login-module">
<div class="title">橡链云统一登录</div>
<el-form :model="numberValidateForm" ref="numberValidateForm" label-width="80px" class="demo-ruleForm">
<el-form-item label="账号" prop="number" :rules="[{ required: true, message: '账号不能为空' }]">
<el-input v-model.trim="numberValidateForm.number" :spellcheck="false" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="密码" prop="pass" :rules="[{ required: true, message: '密码不能为空' }]">
<el-input
type="password"
v-model.trim="numberValidateForm.pass"
v-on:keyup.enter.native="submitForm('numberValidateForm')"
></el-input>
</el-form-item>
<el-form-item prop="code" :rules="[{ required: true, message: '请输入图片验证码' }]">
<div :style="{ display: 'flex', width: '200px', height: '42px', fontSize: '14px' }">
<el-input
placeholder="请输入验证码"
v-model.trim="numberValidateForm.code"
v-on:keyup.enter.native="submitForm('numberValidateForm')"
></el-input>
<img
style="cursor: pointer; width: 80px; height: 32px; margin-left: 10px"
@click="getCaptchaImage"
:src="`data:image/jpg;base64,${img}`"
alt=""
/>
</div>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('numberValidateForm')" :loading="loading">登录</el-button>
</el-form-item>
</el-form>
</div>
</div>
<div class="custom-shape-divider-bottom">
<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 120" preserveAspectRatio="none">
<path
d="M0,0V46.29c47.79,22.2,103.59,32.17,158,28,70.36-5.37,136.33-33.31,206.8-37.5C438.64,32.43,512.34,53.67,583,72.05c69.27,18,138.3,24.88,209.4,13.08,36.15-6,69.85-17.84,104.45-29.34C989.49,25,1113-14.29,1200,52.47V0Z"
opacity=".25"
class="shape-fill"
></path>
<path
d="M0,0V15.81C13,36.92,27.64,56.86,47.69,72.05,99.41,111.27,165,111,224.58,91.58c31.15-10.15,60.09-26.07,89.67-39.8,40.92-19,84.73-46,130.83-49.67,36.26-2.85,70.9,9.42,98.6,31.56,31.77,25.39,62.32,62,103.63,73,40.44,10.79,81.35-6.69,119.13-24.28s75.16-39,116.92-43.05c59.73-5.85,113.28,22.88,168.9,38.84,30.2,8.66,59,6.17,87.09-7.5,22.43-10.89,48-26.93,60.65-49.24V0Z"
opacity=".5"
class="shape-fill"
></path>
<path
d="M0,0V5.63C149.93,59,314.09,71.32,475.83,42.57c43-7.64,84.23-20.12,127.61-26.46,59-8.63,112.48,12.24,165.56,35.4C827.93,77.22,886,95.24,951.2,90c86.53-7,172.46-45.71,248.8-84.81V0Z"
class="shape-fill"
></path>
</svg>
</div>
</div>
</template>
<script>
import cookie from "js-cookie"
import { postLogin, captchaImageReq, VcaptchaImageReq } from "@/utils/api/api"
import { setUid, setToken, CreateTenant, setName, setRole, setEmail } from "@/utils/auth"
import baseURL from "@/utils/app"
export default {
name: "login",
data() {
return {
numberValidateForm: {
number: "",
pass: "",
code: ""
},
uuid: "",
img: null,
loading: false
}
},
created() {
sessionStorage.clear("replacement_token")
// this.getVerifyCode();
let cookies = cookie.get()
for (const key in cookies) {
cookie.remove(key, { path: "/", domain: baseURL.DomainName })
}
this.getCaptchaImage()
},
methods: {
getCaptchaImage() {
captchaImageReq()
.then(result => {
if (result.code === 200) {
this.img = result.data.image
this.uuid = result.data.uuid
}
})
.catch(err => {
console.log(err)
})
},
submitForm(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
let data = {
uuid: this.uuid,
code: this.numberValidateForm.code
}
VcaptchaImageReq(data).then(result => {
if (result.code === 200 && result.data) {
this.login()
} else {
this.$message.warning(result.message)
this.getCaptchaImage()
this.numberValidateForm.code = ""
}
})
} else {
return false
}
})
},
resetForm(formName) {
this.$refs[formName].resetFields()
},
// 登录
login() {
let data = {
password: this.numberValidateForm.pass,
ssoCode: "",
userName: this.numberValidateForm.number
}
this.loading = true
postLogin(data)
.then(res => {
this.loading = false
if (res.code === 2004) {
sessionStorage.setItem("replacement_token", res.message)
this.$router.push({ name: "replacement" })
return
}
if (res.code !== 200) {
return
}
CreateTenant(res.data.isCreateTenant)
setUid(res.data.userInfo.uid)
setToken(res.data.jwtToken)
setName(res.data.userInfo.name)
setRole(res.data.userInfo.role)
setEmail(res.data.userInfo.email)
window.location.href = baseURL.VUE_APP_PDMS_PATH
})
.catch(() => {
this.loading = false
})
},
goHome() {
this.$router.push({ path: "/" })
}
// 获取验证码
// getVerifyCode() {
// getVerify().then((res) => {
// this.img=res;
// });
// },
}
}
</script>
<style scoped lang="scss">
@import "src/assets/styles/encapsulation";
#login {
width: 100%;
min-height: 800px;
height: 100%;
background: $primary-color;
background-size: cover;
position: relative;
padding-top: 0.02px;
.bamnar {
position: absolute;
top: 50%;
margin-top: 320px;
left: 100px;
width: 660px;
height: 320px !important;
}
.header {
display: flex;
height: 70px;
align-items: center;
position: absolute;
font-size: 14px;
background-color: rgba(0, 0, 0, 0);
width: 100%;
color: #fff;
.header-img img {
height: 40px;
}
div {
margin-left: 50px;
cursor: pointer;
}
}
.login-content {
align-items: center;
height: calc(100% - 70px);
padding-top: 220px;
.loginImage {
width: 500px;
margin-left: 30px;
}
.login-module {
padding: 30px;
padding-right: 50px;
width: 350px;
background-color: rgba(255, 255, 255, 0.55);
float: right;
border-radius: 5px;
display: flex;
box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.18);
padding-top: 120px;
position: relative;
margin-right: 100px;
.el-button--small {
width: 100%;
}
.el-form-item--small.el-form-item {
margin-bottom: 25px;
}
.title {
position: absolute;
top: 50px;
left: calc(50% - 60px);
font-size: 22px;
color: #fff;
font-weight: bold;
}
}
}
.custom-shape-divider-bottom {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
overflow: hidden;
line-height: 0;
transform: rotate(180deg);
}
.custom-shape-divider-bottom svg {
position: relative;
display: block;
width: calc(100% + 1.3px);
height: 73px;
}
.custom-shape-divider-bottom .shape-fill {
fill: #ffffff21;
}
}
</style>
<template>
<div id="container">
<el-row>
<el-col :span="6" :offset="1">
<el-progress :percentage="onePercentage" :color="oneCustomColors" :format="oneFormat" :stroke-width="3"></el-progress>
</el-col>
<el-col :span="6" :offset="1">
<el-progress :percentage="twoPercentage" :color="twoCustomColors" :format="twoFormat" :stroke-width="3"></el-progress>
</el-col>
<el-col :span="6" :offset="1">
<el-progress :percentage="ThreePercentage" :color="ThreeCustomColors" :format="ThreeFormat" :stroke-width="3"></el-progress>
</el-col>
<el-col :span="2" :offset="1" style="line-height: 15px">
{{ content }}
</el-col>
</el-row>
</div>
</template>
<script>
export default {
name: "PasswordStrength",
model: {
event: "change",
prop: "password"
},
props: {
//密码
password: {
type: [String, Boolean, Number, Object],
required: true,
default: ""
}
},
watch: {
password(newValue) {
const mode = this.checkPasswordStrength(newValue)
//逻辑处理
switch (mode) {
//初始化状态
case 0:
this.content = ""
this.onePercentage = 0
this.twoPercentage = 0
this.ThreePercentage = 0
break
case 1:
this.content = "弱"
this.onePercentage = 100
this.twoPercentage = 0
this.ThreePercentage = 0
break
case 2:
this.content = "中"
this.onePercentage = 100
this.twoPercentage = 100
this.ThreePercentage = 0
break
case 3:
this.content = "中"
this.onePercentage = 100
this.twoPercentage = 100
this.ThreePercentage = 0
break
default:
this.content = "高"
this.onePercentage = 100
this.twoPercentage = 100
this.ThreePercentage = 100
break
}
}
},
data() {
return {
content: "",
onePercentage: 0,
twoPercentage: 0,
ThreePercentage: 0,
oneCustomColors: [{ color: "#f56c6c", percentage: 100 }],
twoCustomColors: [{ color: "#e6a23c", percentage: 100 }],
ThreeCustomColors: [{ color: "#67c23a", percentage: 100 }]
}
},
methods: {
oneFormat() {
return ""
},
twoFormat() {
return ""
},
ThreeFormat() {
return ""
},
//密码强度验证
checkPasswordStrength(value) {
let mode = 0
//正则表达式验证符合要求的
if (value.length < 1) return mode
if (/\d/.test(value)) mode++ //数字
if (/[a-z]/.test(value)) mode++ //小写
if (/[A-Z]/.test(value)) mode++ //大写
if (/\W/.test(value)) mode++ //特殊字符
return mode
}
}
}
</script>
<style>
.el-progress__text {
display: none;
}
.el-progress-bar {
padding-right: 0;
margin: 0;
}
</style>
import axios from "@/utils/request"
import baseURL from "@/utils/app"
// 更换密码
export const changePasswordReq = params => {
return axios.post(baseURL.SVC_API_PDMS + `/api/v2/pdms/user/changePassword`, params, {
Authorization: sessionStorage.getItem("replacement_token")
})
}
<template>
<div class="replacement">
<div class="content">
<div class="title">新账号重置密码</div>
<el-form :model="resetForm" :rules="resetFormRules" ref="resetForm" status-icon label-width="100px">
<el-form-item label="旧密码:" prop="oldPaasword">
<el-input clearable type="password" v-model="resetForm.oldPaasword" auto-complete="off"></el-input>
</el-form-item>
<el-form-item label="新密码:" prop="newPassword1">
<el-input clearable type="password" v-model="resetForm.newPassword1" auto-complete="off"></el-input>
<PasswordStrength v-model="resetForm.newPassword1" style="padding-top: 10px"></PasswordStrength>
</el-form-item>
<el-form-item label="确认密码:" prop="newPaasword2">
<el-input clearable type="password" v-model="resetForm.newPaasword2" auto-complete="off"></el-input>
</el-form-item>
<el-form-item>
<el-button style="width: 100%" type="primary" @click.native.prevent="toAmend">确认修改</el-button>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
import PasswordStrength from "./PasswordStrength.vue"
import { changePasswordReq } from "./api"
export default {
components: { PasswordStrength },
data() {
var validatePass = (rule, value, callback) => {
if (!value) {
callback(new Error("请输入新密码"))
} else if (value.toString().length < 6 || value.toString().length > 18) {
callback(new Error("密码长度为6-18位"))
} else {
callback()
}
}
var validatePass2 = (rule, value, callback) => {
if (value === "") {
callback(new Error("请再次输入密码"))
} else if (value !== this.resetForm.newPassword1) {
callback(new Error("两次输入密码不一致!"))
} else {
callback()
}
}
return {
resetForm: {
//传给后台所需要的参数
newPaasword2: "",
oldPaasword: "",
newPassword1: ""
},
resetFormRules: {
oldPaasword: [
{
required: true,
message: "请输入旧密码",
trigger: ["blur", "change"]
}
],
newPassword1: [
{
required: true,
validator: validatePass,
trigger: ["blur", "change"]
}
],
newPaasword2: [
{
required: true,
validator: validatePass2,
trigger: ["blur", "change"]
}
]
}
}
},
methods: {
toAmend() {
this.$refs.resetForm.validate(valid => {
if (valid) {
changePasswordReq(this.resetForm).then(result => {
if (result.code === 200) {
this.$message.success("修改成功,3秒后跳转到登录页!")
setTimeout(() => {
this.logout() //调用跳转到登陆页的方法
}, 3000)
}
})
}
})
},
//这是修改成功后重新返回登陆页的方法,看个人需要自行调整
async logout() {
this.$router.push(`/login`)
}
}
}
</script>
<style lang="scss" scoped>
.replacement {
height: 100%;
padding-top: 100px;
.content {
margin: 0 auto;
width: 450px;
.title {
text-align: center;
font-family: "微软雅黑 Bold", "微软雅黑 Regular", "微软雅黑", sans-serif;
font-weight: 700;
font-size: 28px;
line-height: 100px;
}
}
}
</style>
/* Logo 字体 */
@font-face {
font-family: "iconfont logo";
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
}
.logo {
font-family: "iconfont logo";
font-size: 160px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* tabs */
.nav-tabs {
position: relative;
}
.nav-tabs .nav-more {
position: absolute;
right: 0;
bottom: 0;
height: 42px;
line-height: 42px;
color: #666;
}
#tabs {
border-bottom: 1px solid #eee;
}
#tabs li {
cursor: pointer;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 16px;
border-bottom: 2px solid transparent;
position: relative;
z-index: 1;
margin-bottom: -1px;
color: #666;
}
#tabs .active {
border-bottom-color: #f00;
color: #222;
}
.tab-container .content {
display: none;
}
/* 页面布局 */
.main {
padding: 30px 100px;
width: 960px;
margin: 0 auto;
}
.main .logo {
color: #333;
text-align: left;
margin-bottom: 30px;
line-height: 1;
height: 110px;
margin-top: -50px;
overflow: hidden;
*zoom: 1;
}
.main .logo a {
font-size: 160px;
color: #333;
}
.helps {
margin-top: 40px;
}
.helps pre {
padding: 20px;
margin: 10px 0;
border: solid 1px #e7e1cd;
background-color: #fffdef;
overflow: auto;
}
.icon_lists {
width: 100% !important;
overflow: hidden;
*zoom: 1;
}
.icon_lists li {
width: 100px;
margin-bottom: 10px;
margin-right: 20px;
text-align: center;
list-style: none !important;
cursor: default;
}
.icon_lists li .code-name {
line-height: 1.2;
}
.icon_lists .icon {
display: block;
height: 100px;
line-height: 100px;
font-size: 42px;
margin: 10px auto;
color: #333;
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
-moz-transition: font-size 0.25s linear, width 0.25s linear;
transition: font-size 0.25s linear, width 0.25s linear;
}
.icon_lists .icon:hover {
font-size: 100px;
}
.icon_lists .svg-icon {
/* 通过设置 font-size 来改变图标大小 */
width: 1em;
/* 图标和文字相邻时,垂直对齐 */
vertical-align: -0.15em;
/* 通过设置 color 来改变 SVG 的颜色/fill */
fill: currentColor;
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
normalize.css 中也包含这行 */
overflow: hidden;
}
.icon_lists li .name,
.icon_lists li .code-name {
color: #666;
}
/* markdown 样式 */
.markdown {
color: #666;
font-size: 14px;
line-height: 1.8;
}
.highlight {
line-height: 1.5;
}
.markdown img {
vertical-align: middle;
max-width: 100%;
}
.markdown h1 {
color: #404040;
font-weight: 500;
line-height: 40px;
margin-bottom: 24px;
}
.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
color: #404040;
margin: 1.6em 0 0.6em 0;
font-weight: 500;
clear: both;
}
.markdown h1 {
font-size: 28px;
}
.markdown h2 {
font-size: 22px;
}
.markdown h3 {
font-size: 16px;
}
.markdown h4 {
font-size: 14px;
}
.markdown h5 {
font-size: 12px;
}
.markdown h6 {
font-size: 12px;
}
.markdown hr {
height: 1px;
border: 0;
background: #e9e9e9;
margin: 16px 0;
clear: both;
}
.markdown p {
margin: 1em 0;
}
.markdown>p,
.markdown>blockquote,
.markdown>.highlight,
.markdown>ol,
.markdown>ul {
width: 80%;
}
.markdown ul>li {
list-style: circle;
}
.markdown>ul li,
.markdown blockquote ul>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown>ul li p,
.markdown>ol li p {
margin: 0.6em 0;
}
.markdown ol>li {
list-style: decimal;
}
.markdown>ol li,
.markdown blockquote ol>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown code {
margin: 0 3px;
padding: 0 5px;
background: #eee;
border-radius: 3px;
}
.markdown strong,
.markdown b {
font-weight: 600;
}
.markdown>table {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
border: 1px solid #e9e9e9;
width: 95%;
margin-bottom: 24px;
}
.markdown>table th {
white-space: nowrap;
color: #333;
font-weight: 600;
}
.markdown>table th,
.markdown>table td {
border: 1px solid #e9e9e9;
padding: 8px 16px;
text-align: left;
}
.markdown>table th {
background: #F7F7F7;
}
.markdown blockquote {
font-size: 90%;
color: #999;
border-left: 4px solid #e9e9e9;
padding-left: 0.8em;
margin: 1em 0;
}
.markdown blockquote p {
margin: 0;
}
.markdown .anchor {
opacity: 0;
transition: opacity 0.3s ease;
margin-left: 8px;
}
.markdown .waiting {
color: #ccc;
}
.markdown h1:hover .anchor,
.markdown h2:hover .anchor,
.markdown h3:hover .anchor,
.markdown h4:hover .anchor,
.markdown h5:hover .anchor,
.markdown h6:hover .anchor {
opacity: 1;
display: inline-block;
}
.markdown>br,
.markdown>p>br {
clear: both;
}
.hljs {
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
}
.hljs-comment,
.hljs-meta {
color: #969896;
}
.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
color: #df5000;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-type {
color: #a71d5d;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
color: #0086b3;
}
.hljs-section,
.hljs-name {
color: #63a35c;
}
.hljs-tag {
color: #333333;
}
.hljs-title,
.hljs-attr,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #795da3;
}
.hljs-addition {
color: #55a532;
background-color: #eaffea;
}
.hljs-deletion {
color: #bd2c00;
background-color: #ffecec;
}
.hljs-link {
text-decoration: underline;
}
/* 代码高亮 */
/* PrismJS 1.15.0
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre)>code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre)>code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: .7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
This source diff could not be displayed because it is too large. You can view the blob instead.
@font-face {
font-family: "iconfont"; /* Project id 2314246 */
src: url('iconfont.woff2?t=1632623232474') format('woff2'),
url('iconfont.woff?t=1632623232474') format('woff'),
url('iconfont.ttf?t=1632623232474') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-quan:before {
content: "\e743";
}
.icon-templateId-26:before {
content: "\e7a6";
}
.icon-templateId-25:before {
content: "\e67f";
}
.icon-templateId-24:before {
content: "\e67d";
}
.icon-volume-bind:before {
content: "\e676";
}
.icon-collected:before {
content: "\f1db";
}
.icon-collect:before {
content: "\e679";
}
.icon-app-3:before {
content: "\e664";
}
.icon-app-2:before {
content: "\e673";
}
.icon-app-4:before {
content: "\e674";
}
.icon-app-6:before {
content: "\e675";
}
.icon-app-8:before {
content: "\e677";
}
.icon-gaojingguanli:before {
content: "\e65a";
}
.icon-nodata:before {
content: "\e66c";
}
.icon-zanwushuju3:before {
content: "\e66d";
}
.icon-right:before {
content: "\e69d";
}
.icon-parallel:before {
content: "\e65f";
}
.icon-serial:before {
content: "\e660";
}
.icon-add-stage:before {
content: "\e661";
}
.icon-arrow-right:before {
content: "\e663";
}
.icon-2em:before {
content: "\e649";
}
.icon-git:before {
content: "\e657";
}
.icon-gogs:before {
content: "\e658";
}
.icon-gitlab:before {
content: "\e659";
}
.icon-SVN:before {
content: "\e65d";
}
.icon-gogs1:before {
content: "\e65e";
}
.icon-gitlab-fill1:before {
content: "\e76c";
}
.icon-templateId-2:before {
content: "\e654";
}
.icon-templateId-10:before {
content: "\e655";
}
.icon-templateId-7:before {
content: "\e653";
}
.icon-templateId-12:before {
content: "\e651";
}
.icon-templateId-6:before {
content: "\e652";
}
.icon-templateId-1:before {
content: "\e644";
}
.icon-templateId-15:before {
content: "\e646";
}
.icon-python1:before {
content: "\e9aa";
}
.icon-templateId-14:before {
content: "\e647";
}
.icon-templateId-16:before {
content: "\e64f";
}
.icon-app-1:before {
content: "\f1da";
}
.icon-templateId-4:before {
content: "\f1d9";
}
.icon-templateId-13:before {
content: "\e63a";
}
.icon-templateId-17:before {
content: "\e63d";
}
.icon-templateId-18:before {
content: "\e63e";
}
.icon-templateId-8:before {
content: "\e678";
}
.icon-templateId-11:before {
content: "\e671";
}
.icon-templateId-23:before {
content: "\e64e";
}
.icon-templateId-5:before {
content: "\e69e";
}
.icon-templateId-211:before {
content: "\e703";
}
.icon-Python1:before {
content: "\e640";
}
.icon-templateId-9:before {
content: "\e641";
}
.icon-zidingyipeizhi:before {
content: "\e642";
}
.icon-templateId-20:before {
content: "\e6b2";
}
.icon-templateId-19:before {
content: "\e643";
}
.icon-templateId-3:before {
content: "\e6b5";
}
.icon-ceshiguanli:before {
content: "\e634";
}
.icon-jiaofuguanli:before {
content: "\e635";
}
.icon-banben:before {
content: "\e636";
}
.icon-xuqiuguanli:before {
content: "\e71e";
}
.icon-yanfa:before {
content: "\e638";
}
.icon-jicheng:before {
content: "\e648";
}
.icon-ziyuan439:before {
content: "\e68c";
}
.icon-instance:before {
content: "\e62d";
}
.icon-anquan:before {
content: "\e62e";
}
.icon-Group-:before {
content: "\e6a2";
}
.icon-jichuxinxi:before {
content: "\e62f";
}
.icon-shezhi:before {
content: "\e631";
}
.icon-version:before {
content: "\e633";
}
.icon-ffanhui-:before {
content: "\e6b1";
}
.icon-shangdian:before {
content: "\e67c";
}
.icon-moban:before {
content: "\e62c";
}
.icon-fuwu:before {
content: "\e694";
}
.icon-jiankong1:before {
content: "\e7bd";
}
.icon-shenji:before {
content: "\e629";
}
.icon-gaojing:before {
content: "\e62a";
}
.icon-record:before {
content: "\e69b";
}
.icon-rizhi:before {
content: "\e62b";
}
.icon-zhanghu2:before {
content: "\e668";
}
.icon-application:before {
content: "\e88a";
}
.icon-feiyong:before {
content: "\e672";
}
.icon-yunwei:before {
content: "\e64b";
}
.icon-pingtai1:before {
content: "\e752";
}
.icon-shouquan:before {
content: "\e66f";
}
.icon-guanli:before {
content: "\e625";
}
.icon-peie:before {
content: "\e626";
}
.icon-guanli1:before {
content: "\e627";
}
.icon-shenpi:before {
content: "\e686";
}
.icon-_xiangmushenpi:before {
content: "\e622";
}
.icon-ziyuan1:before {
content: "\ef0c";
}
.icon-shenqing1:before {
content: "\e692";
}
.icon-jiqun:before {
content: "\e67b";
}
.icon-yingyongguanli:before {
content: "\e767";
}
.icon-gongzuofuzai:before {
content: "\e61b";
}
.icon-wangluoguanli:before {
content: "\e65c";
}
.icon-gailan1:before {
content: "\e61c";
}
.icon-cunchuguanli:before {
content: "\e6df";
}
.icon-16pxruanjian:before {
content: "\e65b";
}
.icon-weifuwu:before {
content: "\e670";
}
.icon-yunziyuan:before {
content: "\e805";
}
.icon-OCP:before {
content: "\e618";
}
.icon-zuhu:before {
content: "\e60a";
}
.icon-API:before {
content: "\e619";
}
.icon-CI-CD:before {
content: "\e61a";
}
.icon-pingtai:before {
content: "\e7e8";
}
.icon-xitong2:before {
content: "\e84f";
}
.icon-wangguan:before {
content: "\e621";
}
.icon-jiaofu:before {
content: "\ef5d";
}
.icon-shujuku:before {
content: "\e71a";
}
.icon-jiankong:before {
content: "\e700";
}
.icon-rongqi:before {
content: "\e60b";
}
.icon-liushuixian1:before {
content: "\e67a";
}
.icon-fuwuqi1:before {
content: "\e6a4";
}
.icon-APIceshi:before {
content: "\e66b";
}
.icon-fangda:before {
content: "\e685";
}
.icon-tool:before {
content: "\e64d";
}
.icon-daoru:before {
content: "\e623";
}
.icon-baocun:before {
content: "\e64a";
}
.icon-fangda1:before {
content: "\e6a7";
}
.icon-yunfuwuqi:before {
content: "\e620";
}
.icon-cunchu-copy:before {
content: "\e605";
}
.icon-luyouqi:before {
content: "\e66e";
}
.icon-yan:before {
content: "\e63f";
}
.icon-zhengque:before {
content: "\e617";
}
.icon-gerenLDAP:before {
content: "\e616";
}
.icon-duowenjianjia:before {
content: "\e615";
}
.icon-changjiantou:before {
content: "\e645";
}
.icon-chengyuan:before {
content: "\e6f7";
}
.icon-image:before {
content: "\e604";
}
.icon-kaishi:before {
content: "\e609";
}
.icon-zantingtingzhi:before {
content: "\e64c";
}
.icon-yindao:before {
content: "\e60f";
}
.icon-gearmore-full:before {
content: "\e978";
}
.icon-fuwuqi:before {
content: "\e602";
}
.icon-biaoqian:before {
content: "\e603";
}
.icon-yun:before {
content: "\e60c";
}
.icon-T:before {
content: "\e662";
}
.icon-duiyingguanxi:before {
content: "\e613";
}
.icon-shanchu:before {
content: "\e614";
}
.icon-xiangxia1:before {
content: "\e684";
}
.icon-shuqian:before {
content: "\e637";
}
.icon-shixinyuan:before {
content: "\e669";
}
.icon-shengpi:before {
content: "\e63c";
}
.icon-bingzhuangtu:before {
content: "\e656";
}
.icon-shenqing:before {
content: "\e666";
}
.icon-xiangmu:before {
content: "\e628";
}
.icon-mubiaoguanxitu:before {
content: "\e650";
}
.icon-quanxian:before {
content: "\e68e";
}
.icon-renyuan:before {
content: "\e7e6";
}
.icon-renyuan-05:before {
content: "\e630";
}
.icon-shangxiayidongjiantou:before {
content: "\e66a";
}
.icon-xiangxia:before {
content: "\e741";
}
.icon-jia:before {
content: "\e61d";
}
.icon-zengjia:before {
content: "\e77e";
}
.icon-checkbox-minus:before {
content: "\ea6d";
}
.icon-checkbox-plus:before {
content: "\ea6e";
}
.icon-dianji:before {
content: "\e601";
}
.icon-biao:before {
content: "\e608";
}
.icon-rili:before {
content: "\e742";
}
.icon-gantanhao1:before {
content: "\e607";
}
.icon-jilu:before {
content: "\e624";
}
.icon-84:before {
content: "\e67e";
}
.icon-code-branch:before {
content: "\e993";
}
.icon-dian:before {
content: "\e6d3";
}
.icon-iconfontxiaogantanhao:before {
content: "\e60d";
}
.icon-gantanhao:before {
content: "\e60e";
}
.icon-wenhao:before {
content: "\e665";
}
.icon-wenhao-tianchong:before {
content: "\e639";
}
.icon-tuichu:before {
content: "\e606";
}
.icon-bianji:before {
content: "\e63b";
}
.icon-gitlab-fill:before {
content: "\e761";
}
.icon-map-finger:before {
content: "\ea04";
}
.icon-zhihang:before {
content: "\e667";
}
.icon-huancun:before {
content: "\e6a6";
}
.icon-wenjian:before {
content: "\e69c";
}
.icon-gailan:before {
content: "\e61f";
}
.icon-cangku:before {
content: "\e612";
}
.icon-liushuixian:before {
content: "\e611";
}
.icon-lingdang:before {
content: "\e600";
}
.icon-cedaohang-gongdan:before {
content: "\e710";
}
.icon-fangzi:before {
content: "\e61e";
}
.icon-jiesuo:before {
content: "\e632";
}
.icon-ziyuan:before {
content: "\e610";
}
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"id": "2314246",
"name": "信云",
"font_family": "iconfont",
"css_prefix_text": "icon-",
"description": "快益通PAAS系统",
"glyphs": [
{
"icon_id": "845579",
"name": "圈",
"font_class": "quan",
"unicode": "e743",
"unicode_decimal": 59203
},
{
"icon_id": "21167921",
"name": "yapi",
"font_class": "templateId-26",
"unicode": "e7a6",
"unicode_decimal": 59302
},
{
"icon_id": "10213461",
"name": "编译",
"font_class": "templateId-25",
"unicode": "e67f",
"unicode_decimal": 59007
},
{
"icon_id": "13719777",
"name": "下载代码",
"font_class": "templateId-24",
"unicode": "e67d",
"unicode_decimal": 59005
},
{
"icon_id": "4850051",
"name": "volume-bind",
"font_class": "volume-bind",
"unicode": "e676",
"unicode_decimal": 58998
},
{
"icon_id": "21867095",
"name": "collection01",
"font_class": "collected",
"unicode": "f1db",
"unicode_decimal": 61915
},
{
"icon_id": "9666685",
"name": "collection2",
"font_class": "collect",
"unicode": "e679",
"unicode_decimal": 59001
},
{
"icon_id": "1910695",
"name": "Redis",
"font_class": "app-3",
"unicode": "e664",
"unicode_decimal": 58980
},
{
"icon_id": "1910701",
"name": "mongoDb",
"font_class": "app-2",
"unicode": "e673",
"unicode_decimal": 58995
},
{
"icon_id": "4468399",
"name": "ElasticSearch",
"font_class": "app-4",
"unicode": "e674",
"unicode_decimal": 58996
},
{
"icon_id": "8402023",
"name": "rabbitmq",
"font_class": "app-6",
"unicode": "e675",
"unicode_decimal": 58997
},
{
"icon_id": "19505387",
"name": "rocketmq",
"font_class": "app-8",
"unicode": "e677",
"unicode_decimal": 58999
},
{
"icon_id": "18811991",
"name": "告警管理",
"font_class": "gaojingguanli",
"unicode": "e65a",
"unicode_decimal": 58970
},
{
"icon_id": "4701648",
"name": "暂无数据",
"font_class": "nodata",
"unicode": "e66c",
"unicode_decimal": 58988
},
{
"icon_id": "6512263",
"name": "暂无数据",
"font_class": "zanwushuju3",
"unicode": "e66d",
"unicode_decimal": 58989
},
{
"icon_id": "18963299",
"name": "right",
"font_class": "right",
"unicode": "e69d",
"unicode_decimal": 59037
},
{
"icon_id": "4849988",
"name": "parallel",
"font_class": "parallel",
"unicode": "e65f",
"unicode_decimal": 58975
},
{
"icon_id": "4849992",
"name": "serial",
"font_class": "serial",
"unicode": "e660",
"unicode_decimal": 58976
},
{
"icon_id": "4850025",
"name": "add-stage",
"font_class": "add-stage",
"unicode": "e661",
"unicode_decimal": 58977
},
{
"icon_id": "7159489",
"name": "arrow-right",
"font_class": "arrow-right",
"unicode": "e663",
"unicode_decimal": 58979
},
{
"icon_id": "2110810",
"name": "Git",
"font_class": "2em",
"unicode": "e649",
"unicode_decimal": 58953
},
{
"icon_id": "4260542",
"name": "git",
"font_class": "git",
"unicode": "e657",
"unicode_decimal": 58967
},
{
"icon_id": "4850037",
"name": "gogs",
"font_class": "gogs",
"unicode": "e658",
"unicode_decimal": 58968
},
{
"icon_id": "8105601",
"name": "gitlab",
"font_class": "gitlab",
"unicode": "e659",
"unicode_decimal": 58969
},
{
"icon_id": "8905146",
"name": "SVN",
"font_class": "SVN",
"unicode": "e65d",
"unicode_decimal": 58973
},
{
"icon_id": "9145155",
"name": "gogs",
"font_class": "gogs1",
"unicode": "e65e",
"unicode_decimal": 58974
},
{
"icon_id": "10155056",
"name": "gitlab-fill",
"font_class": "gitlab-fill1",
"unicode": "e76c",
"unicode_decimal": 59244
},
{
"icon_id": "4850035",
"name": "customize-task",
"font_class": "templateId-2",
"unicode": "e654",
"unicode_decimal": 58964
},
{
"icon_id": "19994069",
"name": "sonar-qube",
"font_class": "templateId-10",
"unicode": "e655",
"unicode_decimal": 58965
},
{
"icon_id": "17210269",
"name": "蚂蚁",
"font_class": "templateId-7",
"unicode": "e653",
"unicode_decimal": 58963
},
{
"icon_id": "11182316",
"name": "模板",
"font_class": "templateId-12",
"unicode": "e651",
"unicode_decimal": 58961
},
{
"icon_id": "14077486",
"name": "镜像部署-off",
"font_class": "templateId-6",
"unicode": "e652",
"unicode_decimal": 58962
},
{
"icon_id": "19314134",
"name": "docker",
"font_class": "templateId-1",
"unicode": "e644",
"unicode_decimal": 58948
},
{
"icon_id": "3260796",
"name": "python",
"font_class": "templateId-15",
"unicode": "e646",
"unicode_decimal": 58950
},
{
"icon_id": "4014082",
"name": "python [#127]",
"font_class": "python1",
"unicode": "e9aa",
"unicode_decimal": 59818
},
{
"icon_id": "15774936",
"name": "python",
"font_class": "templateId-14",
"unicode": "e647",
"unicode_decimal": 58951
},
{
"icon_id": "19866822",
"name": "python",
"font_class": "templateId-16",
"unicode": "e64f",
"unicode_decimal": 58959
},
{
"icon_id": "21754239",
"name": "my-SQL",
"font_class": "app-1",
"unicode": "f1da",
"unicode_decimal": 61914
},
{
"icon_id": "5634730",
"name": "jenkins",
"font_class": "templateId-4",
"unicode": "f1d9",
"unicode_decimal": 61913
},
{
"icon_id": "6568416",
"name": "hitchhiker",
"font_class": "templateId-13",
"unicode": "e63a",
"unicode_decimal": 58938
},
{
"icon_id": "6928691",
"name": "golang描边",
"font_class": "templateId-17",
"unicode": "e63d",
"unicode_decimal": 58941
},
{
"icon_id": "6975006",
"name": "spinnaker",
"font_class": "templateId-18",
"unicode": "e63e",
"unicode_decimal": 58942
},
{
"icon_id": "8839712",
"name": "maven",
"font_class": "templateId-8",
"unicode": "e678",
"unicode_decimal": 59000
},
{
"icon_id": "10168030",
"name": "发送",
"font_class": "templateId-11",
"unicode": "e671",
"unicode_decimal": 58993
},
{
"icon_id": "13278043",
"name": "robot",
"font_class": "templateId-23",
"unicode": "e64e",
"unicode_decimal": 58958
},
{
"icon_id": "13886345",
"name": "克隆",
"font_class": "templateId-5",
"unicode": "e69e",
"unicode_decimal": 59038
},
{
"icon_id": "15388087",
"name": "任务",
"font_class": "templateId-211",
"unicode": "e703",
"unicode_decimal": 59139
},
{
"icon_id": "16980357",
"name": "Ionicons logo python",
"font_class": "Python1",
"unicode": "e640",
"unicode_decimal": 58944
},
{
"icon_id": "17869626",
"name": "Gradle",
"font_class": "templateId-9",
"unicode": "e641",
"unicode_decimal": 58945
},
{
"icon_id": "18296253",
"name": "自定义配置",
"font_class": "zidingyipeizhi",
"unicode": "e642",
"unicode_decimal": 58946
},
{
"icon_id": "19376143",
"name": "已校验通过数 2",
"font_class": "templateId-20",
"unicode": "e6b2",
"unicode_decimal": 59058
},
{
"icon_id": "19505371",
"name": "my-SQL",
"font_class": "templateId-19",
"unicode": "e643",
"unicode_decimal": 58947
},
{
"icon_id": "20487920",
"name": "校验结果",
"font_class": "templateId-3",
"unicode": "e6b5",
"unicode_decimal": 59061
},
{
"icon_id": "4810184",
"name": "测试管理",
"font_class": "ceshiguanli",
"unicode": "e634",
"unicode_decimal": 58932
},
{
"icon_id": "10315436",
"name": "交付管理",
"font_class": "jiaofuguanli",
"unicode": "e635",
"unicode_decimal": 58933
},
{
"icon_id": "10403396",
"name": "版本",
"font_class": "banben",
"unicode": "e636",
"unicode_decimal": 58934
},
{
"icon_id": "11535351",
"name": "需求管理",
"font_class": "xuqiuguanli",
"unicode": "e71e",
"unicode_decimal": 59166
},
{
"icon_id": "15513445",
"name": "研发",
"font_class": "yanfa",
"unicode": "e638",
"unicode_decimal": 58936
},
{
"icon_id": "15539483",
"name": "集成",
"font_class": "jicheng",
"unicode": "e648",
"unicode_decimal": 58952
},
{
"icon_id": "17641219",
"name": "流水线",
"font_class": "ziyuan439",
"unicode": "e68c",
"unicode_decimal": 59020
},
{
"icon_id": "859454",
"name": "实例",
"font_class": "instance",
"unicode": "e62d",
"unicode_decimal": 58925
},
{
"icon_id": "2380615",
"name": "安全",
"font_class": "anquan",
"unicode": "e62e",
"unicode_decimal": 58926
},
{
"icon_id": "4685760",
"name": "收缩",
"font_class": "Group-",
"unicode": "e6a2",
"unicode_decimal": 59042
},
{
"icon_id": "6241663",
"name": "基础信息",
"font_class": "jichuxinxi",
"unicode": "e62f",
"unicode_decimal": 58927
},
{
"icon_id": "18309270",
"name": "设 置",
"font_class": "shezhi",
"unicode": "e631",
"unicode_decimal": 58929
},
{
"icon_id": "18769644",
"name": "版本",
"font_class": "version",
"unicode": "e633",
"unicode_decimal": 58931
},
{
"icon_id": "5365351",
"name": "返回",
"font_class": "ffanhui-",
"unicode": "e6b1",
"unicode_decimal": 59057
},
{
"icon_id": "3854419",
"name": "商店",
"font_class": "shangdian",
"unicode": "e67c",
"unicode_decimal": 59004
},
{
"icon_id": "3978017",
"name": "模板",
"font_class": "moban",
"unicode": "e62c",
"unicode_decimal": 58924
},
{
"icon_id": "15765349",
"name": "服务",
"font_class": "fuwu",
"unicode": "e694",
"unicode_decimal": 59028
},
{
"icon_id": "1722993",
"name": "监控",
"font_class": "jiankong1",
"unicode": "e7bd",
"unicode_decimal": 59325
},
{
"icon_id": "8407724",
"name": "审计",
"font_class": "shenji",
"unicode": "e629",
"unicode_decimal": 58921
},
{
"icon_id": "12316656",
"name": "告警",
"font_class": "gaojing",
"unicode": "e62a",
"unicode_decimal": 58922
},
{
"icon_id": "18111033",
"name": "记录",
"font_class": "record",
"unicode": "e69b",
"unicode_decimal": 59035
},
{
"icon_id": "18522240",
"name": "日志",
"font_class": "rizhi",
"unicode": "e62b",
"unicode_decimal": 58923
},
{
"icon_id": "311222",
"name": "账户2",
"font_class": "zhanghu2",
"unicode": "e668",
"unicode_decimal": 58984
},
{
"icon_id": "4638882",
"name": "微服务",
"font_class": "application",
"unicode": "e88a",
"unicode_decimal": 59530
},
{
"icon_id": "12129938",
"name": "费用",
"font_class": "feiyong",
"unicode": "e672",
"unicode_decimal": 58994
},
{
"icon_id": "13866524",
"name": "运维",
"font_class": "yunwei",
"unicode": "e64b",
"unicode_decimal": 58955
},
{
"icon_id": "14163801",
"name": "平台",
"font_class": "pingtai1",
"unicode": "e752",
"unicode_decimal": 59218
},
{
"icon_id": "8897314",
"name": "授权",
"font_class": "shouquan",
"unicode": "e66f",
"unicode_decimal": 58991
},
{
"icon_id": "9673156",
"name": "管理",
"font_class": "guanli",
"unicode": "e625",
"unicode_decimal": 58917
},
{
"icon_id": "11794632",
"name": "配额",
"font_class": "peie",
"unicode": "e626",
"unicode_decimal": 58918
},
{
"icon_id": "19488409",
"name": "管理",
"font_class": "guanli1",
"unicode": "e627",
"unicode_decimal": 58919
},
{
"icon_id": "1365377",
"name": "审批",
"font_class": "shenpi",
"unicode": "e686",
"unicode_decimal": 59014
},
{
"icon_id": "5922331",
"name": "95_项目审批",
"font_class": "_xiangmushenpi",
"unicode": "e622",
"unicode_decimal": 58914
},
{
"icon_id": "12402721",
"name": "资源 23",
"font_class": "ziyuan1",
"unicode": "ef0c",
"unicode_decimal": 61196
},
{
"icon_id": "17029922",
"name": "申请",
"font_class": "shenqing1",
"unicode": "e692",
"unicode_decimal": 59026
},
{
"icon_id": "6487820",
"name": "集群",
"font_class": "jiqun",
"unicode": "e67b",
"unicode_decimal": 59003
},
{
"icon_id": "12041000",
"name": "应用管理",
"font_class": "yingyongguanli",
"unicode": "e767",
"unicode_decimal": 59239
},
{
"icon_id": "13998486",
"name": "工作负载",
"font_class": "gongzuofuzai",
"unicode": "e61b",
"unicode_decimal": 58907
},
{
"icon_id": "14425172",
"name": "网络管理",
"font_class": "wangluoguanli",
"unicode": "e65c",
"unicode_decimal": 58972
},
{
"icon_id": "14490005",
"name": "概览",
"font_class": "gailan1",
"unicode": "e61c",
"unicode_decimal": 58908
},
{
"icon_id": "15882382",
"name": "存储管理",
"font_class": "cunchuguanli",
"unicode": "e6df",
"unicode_decimal": 59103
},
{
"icon_id": "602108",
"name": "软件",
"font_class": "16pxruanjian",
"unicode": "e65b",
"unicode_decimal": 58971
},
{
"icon_id": "7796808",
"name": "微服务",
"font_class": "weifuwu",
"unicode": "e670",
"unicode_decimal": 58992
},
{
"icon_id": "12535408",
"name": "云资源",
"font_class": "yunziyuan",
"unicode": "e805",
"unicode_decimal": 59397
},
{
"icon_id": "13426013",
"name": "OCP",
"font_class": "OCP",
"unicode": "e618",
"unicode_decimal": 58904
},
{
"icon_id": "15066707",
"name": "租户",
"font_class": "zuhu",
"unicode": "e60a",
"unicode_decimal": 58890
},
{
"icon_id": "16079429",
"name": "API",
"font_class": "API",
"unicode": "e619",
"unicode_decimal": 58905
},
{
"icon_id": "16107651",
"name": "CI-CD",
"font_class": "CI-CD",
"unicode": "e61a",
"unicode_decimal": 58906
},
{
"icon_id": "16379420",
"name": "平台管理",
"font_class": "pingtai",
"unicode": "e7e8",
"unicode_decimal": 59368
},
{
"icon_id": "16450667",
"name": "系统 (2)",
"font_class": "xitong2",
"unicode": "e84f",
"unicode_decimal": 59471
},
{
"icon_id": "16800982",
"name": "网关",
"font_class": "wangguan",
"unicode": "e621",
"unicode_decimal": 58913
},
{
"icon_id": "17468007",
"name": "交付",
"font_class": "jiaofu",
"unicode": "ef5d",
"unicode_decimal": 61277
},
{
"icon_id": "17972696",
"name": "数据库",
"font_class": "shujuku",
"unicode": "e71a",
"unicode_decimal": 59162
},
{
"icon_id": "18480264",
"name": "监控",
"font_class": "jiankong",
"unicode": "e700",
"unicode_decimal": 59136
},
{
"icon_id": "19209897",
"name": "容器",
"font_class": "rongqi",
"unicode": "e60b",
"unicode_decimal": 58891
},
{
"icon_id": "20496519",
"name": "流水线",
"font_class": "liushuixian1",
"unicode": "e67a",
"unicode_decimal": 59002
},
{
"icon_id": "4016491",
"name": "服务器",
"font_class": "fuwuqi1",
"unicode": "e6a4",
"unicode_decimal": 59044
},
{
"icon_id": "1364673",
"name": "API测试",
"font_class": "APIceshi",
"unicode": "e66b",
"unicode_decimal": 58987
},
{
"icon_id": "5809171",
"name": "放大",
"font_class": "fangda",
"unicode": "e685",
"unicode_decimal": 59013
},
{
"icon_id": "1800707",
"name": "工具",
"font_class": "tool",
"unicode": "e64d",
"unicode_decimal": 58957
},
{
"icon_id": "5011978",
"name": "导入",
"font_class": "daoru",
"unicode": "e623",
"unicode_decimal": 58915
},
{
"icon_id": "11501359",
"name": "保存",
"font_class": "baocun",
"unicode": "e64a",
"unicode_decimal": 58954
},
{
"icon_id": "15346613",
"name": "放大",
"font_class": "fangda1",
"unicode": "e6a7",
"unicode_decimal": 59047
},
{
"icon_id": "6965108",
"name": "云服务器",
"font_class": "yunfuwuqi",
"unicode": "e620",
"unicode_decimal": 58912
},
{
"icon_id": "10786115",
"name": "存储",
"font_class": "cunchu-copy",
"unicode": "e605",
"unicode_decimal": 58885
},
{
"icon_id": "10651325",
"name": "路由器",
"font_class": "luyouqi",
"unicode": "e66e",
"unicode_decimal": 58990
},
{
"icon_id": "76538",
"name": "眼",
"font_class": "yan",
"unicode": "e63f",
"unicode_decimal": 58943
},
{
"icon_id": "6464464",
"name": "正确",
"font_class": "zhengque",
"unicode": "e617",
"unicode_decimal": 58903
},
{
"icon_id": "16948847",
"name": "个人LDAP",
"font_class": "gerenLDAP",
"unicode": "e616",
"unicode_decimal": 58902
},
{
"icon_id": "1973256",
"name": "多文件夹",
"font_class": "duowenjianjia",
"unicode": "e615",
"unicode_decimal": 58901
},
{
"icon_id": "11595333",
"name": "长箭头",
"font_class": "changjiantou",
"unicode": "e645",
"unicode_decimal": 58949
},
{
"icon_id": "11820609",
"name": "成员",
"font_class": "chengyuan",
"unicode": "e6f7",
"unicode_decimal": 59127
},
{
"icon_id": "2005156",
"name": "镜像",
"font_class": "image",
"unicode": "e604",
"unicode_decimal": 58884
},
{
"icon_id": "11999813",
"name": "开始",
"font_class": "kaishi",
"unicode": "e609",
"unicode_decimal": 58889
},
{
"icon_id": "17797767",
"name": "暂停 停止",
"font_class": "zantingtingzhi",
"unicode": "e64c",
"unicode_decimal": 58956
},
{
"icon_id": "1417123",
"name": "引导",
"font_class": "yindao",
"unicode": "e60f",
"unicode_decimal": 58895
},
{
"icon_id": "18170164",
"name": "齿轮组,设置,设定",
"font_class": "gearmore-full",
"unicode": "e978",
"unicode_decimal": 59768
},
{
"icon_id": "1957489",
"name": "服务器 ",
"font_class": "fuwuqi",
"unicode": "e602",
"unicode_decimal": 58882
},
{
"icon_id": "7994228",
"name": "标签",
"font_class": "biaoqian",
"unicode": "e603",
"unicode_decimal": 58883
},
{
"icon_id": "9017761",
"name": "云",
"font_class": "yun",
"unicode": "e60c",
"unicode_decimal": 58892
},
{
"icon_id": "10901308",
"name": "T",
"font_class": "T",
"unicode": "e662",
"unicode_decimal": 58978
},
{
"icon_id": "17571435",
"name": "对应关系",
"font_class": "duiyingguanxi",
"unicode": "e613",
"unicode_decimal": 58899
},
{
"icon_id": "10292039",
"name": "删 除",
"font_class": "shanchu",
"unicode": "e614",
"unicode_decimal": 58900
},
{
"icon_id": "1183176",
"name": "向下",
"font_class": "xiangxia1",
"unicode": "e684",
"unicode_decimal": 59012
},
{
"icon_id": "4237042",
"name": "书签",
"font_class": "shuqian",
"unicode": "e637",
"unicode_decimal": 58935
},
{
"icon_id": "18445347",
"name": "实心圆",
"font_class": "shixinyuan",
"unicode": "e669",
"unicode_decimal": 58985
},
{
"icon_id": "564071",
"name": "审批",
"font_class": "shengpi",
"unicode": "e63c",
"unicode_decimal": 58940
},
{
"icon_id": "3854322",
"name": "饼状图",
"font_class": "bingzhuangtu",
"unicode": "e656",
"unicode_decimal": 58966
},
{
"icon_id": "6439443",
"name": "申请",
"font_class": "shenqing",
"unicode": "e666",
"unicode_decimal": 58982
},
{
"icon_id": "7171160",
"name": "项目管理",
"font_class": "xiangmu",
"unicode": "e628",
"unicode_decimal": 58920
},
{
"icon_id": "8124588",
"name": "目标关系图",
"font_class": "mubiaoguanxitu",
"unicode": "e650",
"unicode_decimal": 58960
},
{
"icon_id": "17029893",
"name": "权限",
"font_class": "quanxian",
"unicode": "e68e",
"unicode_decimal": 59022
},
{
"icon_id": "1190643",
"name": "人员",
"font_class": "renyuan",
"unicode": "e7e6",
"unicode_decimal": 59366
},
{
"icon_id": "14915052",
"name": "人员",
"font_class": "renyuan-05",
"unicode": "e630",
"unicode_decimal": 58928
},
{
"icon_id": "7458947",
"name": "上下移动箭头",
"font_class": "shangxiayidongjiantou",
"unicode": "e66a",
"unicode_decimal": 58986
},
{
"icon_id": "681180",
"name": "向下",
"font_class": "xiangxia",
"unicode": "e741",
"unicode_decimal": 59201
},
{
"icon_id": "18522222",
"name": "加",
"font_class": "jia",
"unicode": "e61d",
"unicode_decimal": 58909
},
{
"icon_id": "19108219",
"name": "增加",
"font_class": "zengjia",
"unicode": "e77e",
"unicode_decimal": 59262
},
{
"icon_id": "18175778",
"name": "减号,展开,删除",
"font_class": "checkbox-minus",
"unicode": "ea6d",
"unicode_decimal": 60013
},
{
"icon_id": "18175783",
"name": "加号,收起,添加",
"font_class": "checkbox-plus",
"unicode": "ea6e",
"unicode_decimal": 60014
},
{
"icon_id": "21156",
"name": "点击",
"font_class": "dianji",
"unicode": "e601",
"unicode_decimal": 58881
},
{
"icon_id": "5609639",
"name": "表",
"font_class": "biao",
"unicode": "e608",
"unicode_decimal": 58888
},
{
"icon_id": "11758127",
"name": "日历",
"font_class": "rili",
"unicode": "e742",
"unicode_decimal": 59202
},
{
"icon_id": "19412298",
"name": "感叹号",
"font_class": "gantanhao1",
"unicode": "e607",
"unicode_decimal": 58887
},
{
"icon_id": "8353874",
"name": "记录",
"font_class": "jilu",
"unicode": "e624",
"unicode_decimal": 58916
},
{
"icon_id": "392112",
"name": "分支",
"font_class": "84",
"unicode": "e67e",
"unicode_decimal": 59006
},
{
"icon_id": "18170243",
"name": "代码,分支,分流,分叉",
"font_class": "code-branch",
"unicode": "e993",
"unicode_decimal": 59795
},
{
"icon_id": "19255166",
"name": "点",
"font_class": "dian",
"unicode": "e6d3",
"unicode_decimal": 59091
},
{
"icon_id": "584019",
"name": "感叹号",
"font_class": "iconfontxiaogantanhao",
"unicode": "e60d",
"unicode_decimal": 58893
},
{
"icon_id": "936705",
"name": "感叹号",
"font_class": "gantanhao",
"unicode": "e60e",
"unicode_decimal": 58894
},
{
"icon_id": "1526320",
"name": "问号",
"font_class": "wenhao",
"unicode": "e665",
"unicode_decimal": 58981
},
{
"icon_id": "2570095",
"name": "问号",
"font_class": "wenhao-tianchong",
"unicode": "e639",
"unicode_decimal": 58937
},
{
"icon_id": "1256469",
"name": "退出",
"font_class": "tuichu",
"unicode": "e606",
"unicode_decimal": 58886
},
{
"icon_id": "1036380",
"name": "编辑",
"font_class": "bianji",
"unicode": "e63b",
"unicode_decimal": 58939
},
{
"icon_id": "10918105",
"name": "gitlab-fill",
"font_class": "gitlab-fill",
"unicode": "e761",
"unicode_decimal": 59233
},
{
"icon_id": "18171085",
"name": "地图,手指,点击,触摸",
"font_class": "map-finger",
"unicode": "ea04",
"unicode_decimal": 59908
},
{
"icon_id": "16062354",
"name": "执行",
"font_class": "zhihang",
"unicode": "e667",
"unicode_decimal": 58983
},
{
"icon_id": "17606319",
"name": "缓存",
"font_class": "huancun",
"unicode": "e6a6",
"unicode_decimal": 59046
},
{
"icon_id": "3758135",
"name": "文件",
"font_class": "wenjian",
"unicode": "e69c",
"unicode_decimal": 59036
},
{
"icon_id": "6176558",
"name": "概览",
"font_class": "gailan",
"unicode": "e61f",
"unicode_decimal": 58911
},
{
"icon_id": "9783459",
"name": "仓库",
"font_class": "cangku",
"unicode": "e612",
"unicode_decimal": 58898
},
{
"icon_id": "9870822",
"name": "流水线",
"font_class": "liushuixian",
"unicode": "e611",
"unicode_decimal": 58897
},
{
"icon_id": "4485665",
"name": "铃铛",
"font_class": "lingdang",
"unicode": "e600",
"unicode_decimal": 58880
},
{
"icon_id": "7674858",
"name": "工单",
"font_class": "cedaohang-gongdan",
"unicode": "e710",
"unicode_decimal": 59152
},
{
"icon_id": "11747399",
"name": "房子",
"font_class": "fangzi",
"unicode": "e61e",
"unicode_decimal": 58910
},
{
"icon_id": "16364318",
"name": "解锁",
"font_class": "jiesuo",
"unicode": "e632",
"unicode_decimal": 58930
},
{
"icon_id": "11690693",
"name": "楼房-大厦",
"font_class": "ziyuan",
"unicode": "e610",
"unicode_decimal": 58896
}
]
}
@charset "utf-8";
html,
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, Helvetica, STHeiti, SimSun, sans-serif;
font-size: 12px;
line-height: 1.5;
color: rgba(0, 0, 0, 0.65);
width: 100%;
height: 100%;
}
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,
hgroup,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
margin: 0;
padding: 0;
border: 0;
vertical-align: baseline;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
display: block
}
ol,
ul {
list-style: none
}
blockquote,
q {
quotes: none
}
blockquote:before,
blockquote:after,
q:before,
q:after {
content: ''
}
table {
border-collapse: collapse;
border-spacing: 0
}
.clearfix::after {
display: block;
content: " ";
clear: both
}
#app {
min-width: 1350px
}
*,
:after,
:before {
box-sizing: border-box
}
button,
input {
border: 0;
background: 0;
outline: 0;
padding: 0;
margin: 0
}
button {
cursor: pointer
}
::-webkit-scrollbar {
width: 6px;
height: 6px
}
::-webkit-scrollbar-track {
background: #cdcdcd;
border-radius: 6px
}
::-webkit-scrollbar-thumb {
background: #8e8e8e;
border-radius: 5px
}
::-webkit-scrollbar-thumb:hover {
background: #898787
}
a {
margin: 0;
padding: 0;
font-size: 100%;
vertical-align: baseline;
background: transparent
}
pre {
white-space: pre;
white-space: pre-wrap;
white-space: pre-line;
word-wrap: break-word
}
input[type="radio"] {
vertical-align: text-bottom
}
input[type="checkbox"] {
vertical-align: bottom
}
.ie7 input[type="checkbox"] {
vertical-align: baseline
}
.ie6 input {
vertical-align: text-bottom
}
select,
input,
textarea {
font: 99% sans-serif
}
table {
font-size: inherit;
font: 100%
}
small {
font-size: 85%
}
strong {
font-weight: bold
}
td,
td img {
vertical-align: top
}
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative
}
sup {
top: -0.5em
}
sub {
bottom: -0.25em
}
pre,
code,
kbd,
samp {
font-family: monospace, sans-serif
}
.clickable,
label,
input[type="button"],
input[type="submit"],
input[type="file"],
button {
cursor: pointer
}
button,
input,
select,
textarea {
margin: 0
}
button,
input[type="button"] {
width: auto;
overflow: visible
}
.ie7 img {
-ms-interpolation-mode: bicubic
}
\ No newline at end of file
const { defineConfig } = require("@vue/cli-service")
const Version = new Date().getTime()
const { title } = require("./src/config")
process.env.VUE_APP_TITLE = title || "快益通"
// 是否为生产环境
const isProduction = process.env.NODE_ENV !== "development"
module.exports = defineConfig({
transpileDependencies: false,
lintOnSave: !isProduction, // eslint设置
productionSourceMap: false, // 生产环境下css 分离文件
devServer: {
port: 8080,
proxy: {
"/api/v2/pdms": {
target: process.env.VUE_APP_BASE_API,
ws: true,
changeOrigin: true,
secure: false,
headers: {
Referer: process.env.VUE_APP_BASE_API
}
}
}
},
css: {
// 是否使用css分离插件 ExtractTextPlugin
extract: {
// 修改打包后css文件名
filename: `static/css/[name].${Version}.css`,
chunkFilename: `static/css/[name].${Version}.css`
}
},
configureWebpack: {
output: {
filename: `static/js/[name].${Version}.js`,
chunkFilename: `static/js/[name].${Version}.js`
}
}
/*chainWebpack(config) {
// img的文件名修改
config.module
.rule("images")
.use("url-loader")
.tap(options => {
options.name = `static/img/[name].${Version}.[ext]`
options.fallback = {
loader: "file-loader",
options: {
name: `static/img/[name].${Version}.[ext]`
}
}
return options
})
}*/
})
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论