Commit 9b0edb9f authored by 何鹏程's avatar 何鹏程

初始化项目

parents
Pipeline #138 failed with stages
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-2"
],
"plugins": ["transform-vue-jsx", "transform-runtime"]
}
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
.DS_Store
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.git
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
/dist
\ No newline at end of file
// https://github.com/michael-ciniawsky/postcss-load-config
module.exports = {
"plugins": {
"postcss-import": {},
"postcss-url": {},
// to edit target browsers: use "browserslist" field in package.json
"autoprefixer": {}
}
}
# md-node-cms
> A Vue.js project
## Build Setup
``` bash
# install dependencies
npm install
# serve with hot reload at localhost:8080
npm run dev
# build for production with minification
npm run build
# build for production and view the bundle analyzer report
npm run build --report
```
For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).
'use strict'
require('./check-versions')()
process.env.NODE_ENV = 'production'
const ora = require('ora')
const rm = require('rimraf')
const path = require('path')
const chalk = require('chalk')
const webpack = require('webpack')
const config = require('../config')
const webpackConfig = require('./webpack.prod.conf')
const spinner = ora('building for production...')
spinner.start()
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
if (err) throw err
webpack(webpackConfig, (err, stats) => {
spinner.stop()
if (err) throw err
process.stdout.write(stats.toString({
colors: true,
modules: false,
children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
chunks: false,
chunkModules: false
}) + '\n\n')
if (stats.hasErrors()) {
console.log(chalk.red(' Build failed with errors.\n'))
process.exit(1)
}
console.log(chalk.cyan(' Build complete.\n'))
console.log(chalk.yellow(
' Tip: built files are meant to be served over an HTTP server.\n' +
' Opening index.html over file:// won\'t work.\n'
))
})
})
'use strict'
const chalk = require('chalk')
const semver = require('semver')
const packageConfig = require('../package.json')
const shell = require('shelljs')
function exec (cmd) {
return require('child_process').execSync(cmd).toString().trim()
}
const versionRequirements = [
{
name: 'node',
currentVersion: semver.clean(process.version),
versionRequirement: packageConfig.engines.node
}
]
if (shell.which('npm')) {
versionRequirements.push({
name: 'npm',
currentVersion: exec('npm --version'),
versionRequirement: packageConfig.engines.npm
})
}
module.exports = function () {
const warnings = []
for (let i = 0; i < versionRequirements.length; i++) {
const mod = versionRequirements[i]
if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
warnings.push(mod.name + ': ' +
chalk.red(mod.currentVersion) + ' should be ' +
chalk.green(mod.versionRequirement)
)
}
}
if (warnings.length) {
console.log('')
console.log(chalk.yellow('To use this template, you must update following to modules:'))
console.log()
for (let i = 0; i < warnings.length; i++) {
const warning = warnings[i]
console.log(' ' + warning)
}
console.log()
process.exit(1)
}
}
'use strict'
const path = require('path')
const config = require('../config')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const packageConfig = require('../package.json')
exports.assetsPath = function (_path) {
const assetsSubDirectory = process.env.NODE_ENV === 'production'
? config.build.assetsSubDirectory
: config.dev.assetsSubDirectory
return path.posix.join(assetsSubDirectory, _path)
}
exports.cssLoaders = function (options) {
options = options || {}
const cssLoader = {
loader: 'css-loader',
options: {
sourceMap: options.sourceMap
}
}
const postcssLoader = {
loader: 'postcss-loader',
options: {
sourceMap: options.sourceMap
}
}
// generate loader string to be used with extract text plugin
function generateLoaders (loader, loaderOptions) {
const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
if (loader) {
loaders.push({
loader: loader + '-loader',
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
}
// Extract CSS when that option is specified
// (which is the case during production build)
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
fallback: 'vue-style-loader',
publicPath: '../../'
})
} else {
return ['vue-style-loader'].concat(loaders)
}
}
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders('sass'),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}
}
// Generate loaders for standalone style files (outside of .vue)
exports.styleLoaders = function (options) {
const output = []
const loaders = exports.cssLoaders(options)
for (const extension in loaders) {
const loader = loaders[extension]
output.push({
test: new RegExp('\\.' + extension + '$'),
use: loader
})
}
return output
}
exports.createNotifierCallback = () => {
const notifier = require('node-notifier')
return (severity, errors) => {
if (severity !== 'error') return
const error = errors[0]
const filename = error.file && error.file.split('!').pop()
notifier.notify({
title: packageConfig.name,
message: severity + ': ' + error.name,
subtitle: filename || '',
icon: path.join(__dirname, 'logo.png')
})
}
}
'use strict'
const utils = require('./utils')
const config = require('../config')
const merge = require('webpack-merge')
const isProduction = process.env.NODE_ENV === 'production'
const sourceMapEnabled = isProduction
? config.build.productionSourceMap
: config.dev.cssSourceMap
const extendLoaders = {
i18n: '@kazupon/vue-i18n-loader'
}
module.exports = {
loaders: merge(utils.cssLoaders({
sourceMap: sourceMapEnabled,
extract: isProduction
}),extendLoaders),
cssSourceMap: sourceMapEnabled,
cacheBusting: config.dev.cacheBusting,
transformToRequire: {
video: ['src', 'poster'],
source: 'src',
img: 'src',
image: 'xlink:href'
}
}
'use strict'
const path = require('path')
const utils = require('./utils')
const config = require('../config')
const vueLoaderConfig = require('./vue-loader.conf')
function resolve (dir) {
return path.join(__dirname, '..', dir)
}
const createLintingRule = () => ({
test: /\.(js|vue)$/,
loader: 'eslint-loader',
enforce: 'pre',
include: [resolve('src'),
resolve('test'),
resolve('/node_modules/_element-ui@2.14.1@element-ui/src'), //和下面截图文件名字对应起来即可正常打包!!!
resolve('/node_modules/_element-ui@2.14.1@element-ui/packages')
],
options: {
formatter: require('eslint-friendly-formatter'),
emitWarning: !config.dev.showEslintErrorsInOverlay
}
})
module.exports = {
context: path.resolve(__dirname, '../'),
entry: {
app: './src/main.js'
},
output: {
path: config.build.assetsRoot,
filename: '[name].js',
publicPath: process.env.NODE_ENV === 'production'
? config.build.assetsPublicPath
: config.dev.assetsPublicPath
},
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'),
'sysStatic': resolve('src/assets'),
'sysComponents': resolve('src/components'),
'sysPage': resolve('src/page')
}
},
module: {
rules: [
...(config.dev.useEslint ? [createLintingRule()] : []),
{
test: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig
},
{
test: /\.js$/,
loader: 'babel-loader',
include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client'), resolve('mock')]
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('media/[name].[hash:7].[ext]')
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
}
]
},
node: {
// prevent webpack from injecting useless setImmediate polyfill because Vue
// source contains it (although only uses it if it's native).
setImmediate: false,
// prevent webpack from injecting mocks to Node native modules
// that does not make sense for the client
dgram: 'empty',
fs: 'empty',
net: 'empty',
tls: 'empty',
child_process: 'empty'
}
}
'use strict'
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const path = require('path')
const baseWebpackConfig = require('./webpack.base.conf')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const portfinder = require('portfinder')
const HOST = process.env.HOST
const PORT = process.env.PORT && Number(process.env.PORT)
const devWebpackConfig = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
},
devtool: config.dev.devtool,
devServer: {
clientLogLevel: 'warning',
historyApiFallback: {
rewrites: [
{ from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
],
},
hot: true,
contentBase: false,
compress: true,
host: HOST || config.dev.host, //ip
port: PORT || config.dev.port, //端口
open: config.dev.autoOpenBrowser,
overlay: config.dev.errorOverlay
? { warnings: false, errors: true }
: false,
publicPath: config.dev.assetsPublicPath,
proxy: config.dev.proxyTable, //前端代理
quiet: true,
watchOptions: {
poll: config.dev.poll,
}
},
plugins: [
new webpack.DefinePlugin({
'process.env': require('../config/dev.env')
}),
new webpack.HotModuleReplacementPlugin(),
new webpack.NamedModulesPlugin(),
new webpack.NoEmitOnErrorsPlugin(),
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'index.html',
favicon: './favicon.ico',
inject: true
}),
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: config.dev.assetsSubDirectory,
ignore: ['.*']
}
])
]
})
module.exports = new Promise((resolve, reject) => {
portfinder.basePort = process.env.PORT || config.dev.port
portfinder.getPort((err, port) => {
if (err) {
reject(err)
} else {
process.env.PORT = port
devWebpackConfig.devServer.port = port
devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
compilationSuccessInfo: {
messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
},
onErrors: config.dev.notifyOnErrors
? utils.createNotifierCallback()
: undefined
}))
resolve(devWebpackConfig)
}
})
})
'use strict'
const path = require('path')
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const env = require('../config/prod.env')
const Version = new Date().getTime();
const webpackConfig = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({
sourceMap: config.build.productionSourceMap,
extract: true,
usePostCSS: true
})
},
devtool: config.build.productionSourceMap ? config.build.devtool : false,
output: {
path: config.build.assetsRoot,
filename: utils.assetsPath('js/[name].[chunkhash].'+ Version +'.js'),
chunkFilename: utils.assetsPath('js/[id].[chunkhash].'+ Version +'.js')
},
plugins: [
// http://vuejs.github.io/vue-loader/en/workflow/production.html
new webpack.DefinePlugin({
'process.env': env
}),
new UglifyJsPlugin({
uglifyOptions: {
compress: {
warnings: false
}
},
sourceMap: config.build.productionSourceMap,
parallel: true
}),
// extract css into its own file
new ExtractTextPlugin({
filename: utils.assetsPath('css/[name].[contenthash].css'),
// Setting the following option to `false` will not extract CSS from codesplit chunks.
// Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
// It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`,
// increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
allChunks: true,
}),
// Compress extracted CSS. We are using this plugin so that possible
// duplicated CSS from different components can be deduped.
new OptimizeCSSPlugin({
cssProcessorOptions: config.build.productionSourceMap
? { safe: true, map: { inline: false } }
: { safe: true }
}),
// generate dist index.html with correct asset hash for caching.
// you can customize output by editing /index.html
// see https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: config.build.index,
template: 'index.html',
inject: true,
minify: {
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true
// more options:
// https://github.com/kangax/html-minifier#options-quick-reference
},
// necessary to consistently work with multiple chunks via CommonsChunkPlugin
chunksSortMode: 'dependency'
}),
// keep module.id stable when vendor modules does not change
new webpack.HashedModuleIdsPlugin(),
// enable scope hoisting
new webpack.optimize.ModuleConcatenationPlugin(),
// split vendor js into its own file
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks (module) {
// any required modules inside node_modules are extracted to vendor
return (
module.resource &&
/\.js$/.test(module.resource) &&
module.resource.indexOf(
path.join(__dirname, '../node_modules')
) === 0
)
}
}),
// extract webpack runtime and module manifest to its own file in order to
// prevent vendor hash from being updated whenever app bundle is updated
new webpack.optimize.CommonsChunkPlugin({
name: 'manifest',
minChunks: Infinity
}),
// This instance extracts shared chunks from code splitted chunks and bundles them
// in a separate chunk, similar to the vendor chunk
// see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
new webpack.optimize.CommonsChunkPlugin({
name: 'app',
async: 'vendor-async',
children: true,
minChunks: 3
}),
// copy custom static assets
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: config.build.assetsSubDirectory,
ignore: ['.*']
}
])
]
})
if (config.build.productionGzip) {
const CompressionWebpackPlugin = require('compression-webpack-plugin')
webpackConfig.plugins.push(
new CompressionWebpackPlugin({
asset: '[path].gz[query]',
algorithm: 'gzip',
test: new RegExp(
'\\.(' +
config.build.productionGzipExtensions.join('|') +
')$'
),
threshold: 10240,
minRatio: 0.8
})
)
}
if (config.build.bundleAnalyzerReport) {
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
webpackConfig.plugins.push(new BundleAnalyzerPlugin())
}
module.exports = webpackConfig
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
NODE_ENV: '"development"'
})
'use strict'
const path = require('path')
module.exports = {
dev: {
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {
'/api': {
// target: 'http://172.16.15.100:801',// 开发环境地址
target: 'http://172.16.15.117:8084/',// 开发环境地址
// target: 'http://172.16.15.115:8010',// 开发环境地址
//target: 'http://172.16.15.100:8081',// 开发环境地址
changeOrigin: true,
pathRewrite: {
'^/api': '/api'
}
}
},
host: 'localhost',
port: 8086,
autoOpenBrowser: false,
errorOverlay: true,
notifyOnErrors: true,
poll: false,
useEslint: false,
showEslintErrorsInOverlay: false,
devtool: 'cheap-module-eval-source-map',
cacheBusting: true,
cssSourceMap: true
},
build: {
// Template for index.html
index: path.resolve(__dirname, '../dist/index.html'),
// Paths
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: '/',
/**
* Source Maps
*/
productionSourceMap: true,
// https://webpack.js.org/configuration/devtool/#production
devtool: '#source-map',
// Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you.
// Before setting to `true`, make sure to:
// npm install --save-dev compression-webpack-plugin
productionGzip: false,
productionGzipExtensions: ['js', 'css'],
// Run the build command with an extra argument to
// View the bundle analyzer report after build finishes:
// `npm run build --report`
// Set to `true` or `false` to always turn it on or off
bundleAnalyzerReport: process.env.npm_config_report
}
}
'use strict'
module.exports = {
NODE_ENV: '"production"'
}
favicon.ico

1.12 KB

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- IE使用当前浏览器的最高文档模式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<!-- 多核浏览器使用webkit内核 -->
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>明医咨询认证平台</title>
<!-- 引入阿里云oss-sdk -->
<script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-4.4.4.min.js"></script>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
/**
* 因Mock自身原因,不能直接模拟不带属性名的数组。这里需要的是[1,2,3],而不是{data: [1,2,3]}
* 以下被注释掉的方法不可取,因每次获取后,返回值不变
*/
// import Mock from 'mockjs'
// var data = Mock.mock({
// "data|7": [
// '@natural(60, 100)'
// ]
// })
// export default [{
// path: '/charts',
// data: data.data
// }]
export default [{
path: '/charts',
data: function() {
var res = []
for (var i = 0; i < 7; i++) {
res.push(parseInt(Math.random() * 100) + 1)
}
return res
}
}]
var data = {
'token': '@guid'
}
export default [{
path: '/getToken',
data: data
}]
export default {
path: '/groupList',
data: {
key: 'accountInfo',
name: '账号信息',
leaf: 0,
child: [
{
key: 'userInfo',
name: '用户信息',
leaf: 0,
child: [
{
key: 'userBasic',
name: '基本信息',
leaf: 0,
child: [
{
key: 'userName',
name: '用户名',
leaf: 1
},
{
key: 'loginName',
name: '登录名',
leaf: 1
},
{
key: 'name',
name: '姓名',
leaf: 1
}
]
}
]
},
{
key: 'adminInfo',
name: '管理员信息',
leaf: 0,
child: [
{
key: 'userBasic',
name: '基本信息',
leaf: 0,
child: [
{
key: 'userName',
name: '用户名',
leaf: 1
},
{
key: 'loginName',
name: '登录名',
leaf: 1
},
{
key: 'name',
name: '姓名',
leaf: 1
},
{
key: 'sex',
name: '性别',
leaf: 1
}
]
}
]
}
]
}
}
import Mock from 'mockjs'
import menuList from './menuList'
import login from './login'
import echarts from './echarts'
import table from './table'
import groupList from './groupList'
import getToken from './getToken'
let data = [].concat(menuList, login, echarts, table, groupList, getToken)
data.forEach(function(res) {
Mock.mock(res.path, res.data)
})
export default Mock
var data = {
'login': 'true',
'captcha': "@image('100x40', '#FFFFFF', '@word')",
'message': '用户名,密码,验证码随便填!若登陆失败,多点几次登陆@increment',
'uid': '@id',
'name': '@cname',
'token': '@guid'
}
export default [{
path: '/login',
data: data
}]
var data_hospital = {
menuType:2,
menuList:[
{
name: '胸痛中心',
permissions:[],
path: '/manage/projectManage',
icon: 'fa-book',
child: [
{
permissions:[
{btnName:'btn1',isShow:true}
],
path: '/hospital/index',
name: '首页',
icon: 'fa-book'
},
{
permissions:[
{btnName:'btn1',isShow:true}
],
path: '/hospital/certification',
name: '认证概况',
icon: 'fa-book'
},
{
permissions:[
{btnName:'btn1',isShow:true}
],
path: '/hospital/autnTask',
name: '认证任务',
icon: 'fa-book'
},
{
permissions:[
{btnName:'btn1',isShow:true}
],
path: '/hospital/cnstMls',
name: '建设材料',
icon: 'fa-book'
},
{
permissions:[
{btnName:'btn1',isShow:true}
],
path: '/hospital/qaCtl',
name: '质控数据',
icon: 'fa-book'
},
{
permissions:[
{btnName:'btn1',isShow:true}
],
path: '/hospital/ctfCutn',
name: '认证资讯',
icon: 'fa-book'
},
{
permissions:[
{btnName:'btn1',isShow:true}
],
path: '/hospital/news',
name: '消息中心',
icon: 'fa-book'
}
],
}
]
}
var data_manage = {
menuType:1,
menuList:[
{
permissions:[],
path: '/manage/projectManage',
name: '项目管理',
icon: 'fa-book',
child: []
},
{
permissions:[],
path: '/manage/medicalOfficer',
name: '医学联络官',
icon: 'fa-book',
child: []
},
{
permissions:[],
path: '/manage/systemInforms',
name: '系统通知',
icon: 'fa-book',
child: []
}
]
}
export default [{
path: '/user/menuList',
data: data_manage
}]
export default {
path: '/tableData',
data: {
head: [
{
key: 'name',
name: '姓名'
},
{
key: 'sex',
name: '性别'
},
{
key: 'age',
name: '年龄'
},
{
key: 'address',
name: '地址'
},
{
key: 'email',
name: '邮件'
},
{
key: 'remark',
name: '备注'
}
],
body: [
{
'name': '@cname',
'sex|1': ['男', '女'],
'age': '@natural(18, 60)',
'address': '@city(true) ',
'email': '@email()',
'remark': '@cparagraph(1)',
operation: 'edit,delete'
},
{
'name': '@cname',
'sex|1': ['男', '女'],
'age': '@natural(18, 60)',
'address': '@city(true)',
'email': '@email()',
'remark': '@cparagraph(1)',
operation: 'edit,delete'
}
]
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "md-vue-pm",
"version": "1.0.0",
"description": "A Vue.js project",
"author": "pangzhiyuan <pangzhiyuan>",
"private": true,
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.conf.js",
"start": "npm run dev",
"lint": "eslint --ext .js,.vue src",
"build": "node build/build.js"
},
"dependencies": {
"@types/node": "^10.5.2",
"axios": "^0.18.0",
"crypto-js": "^3.1.9-1",
"echarts": "^4.9.0",
"element-ui": "^2.4.3",
"js-cookie": "^2.2.0",
"lodash": "^4.17.10",
"ly-downloader": "^1.0.5",
"mockjs": "^1.0.1-beta3",
"nprogress": "^0.2.0",
"vue": "^2.5.2",
"vue-i18n": "^8.0.0",
"vue-router": "^3.0.1",
"vuex": "^3.0.1"
},
"devDependencies": {
"@kazupon/vue-i18n-loader": "^0.3.0",
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1",
"babel-eslint": "^8.2.1",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
"babel-loader": "^7.1.1",
"babel-plugin-syntax-jsx": "^6.18.0",
"babel-plugin-transform-runtime": "^6.22.0",
"babel-plugin-transform-vue-jsx": "^3.5.0",
"babel-polyfill": "^6.26.0",
"babel-preset-env": "^1.3.2",
"babel-preset-stage-2": "^6.22.0",
"babel-register": "^6.26.0",
"chalk": "^2.0.1",
"copy-webpack-plugin": "^4.0.1",
"css-loader": "^0.28.0",
"eslint": "^4.15.0",
"eslint-config-standard": "^10.2.1",
"eslint-friendly-formatter": "^3.0.0",
"eslint-loader": "^1.7.1",
"eslint-plugin-html": "^4.0.5",
"eslint-plugin-import": "^2.7.0",
"eslint-plugin-node": "^5.2.0",
"eslint-plugin-promise": "^3.4.0",
"eslint-plugin-standard": "^3.0.1",
"eslint-plugin-vue": "^4.0.0",
"express": "^4.16.3",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^1.1.4",
"friendly-errors-webpack-plugin": "^1.6.1",
"good-storage": "^1.0.1",
"html-webpack-plugin": "^2.30.1",
"http-proxy-middleware": "^0.18.0",
"node-notifier": "^5.1.2",
"node-sass": "^4.9.2",
"opn": "^5.3.0",
"optimize-css-assets-webpack-plugin": "^3.2.0",
"ora": "^1.2.0",
"portfinder": "^1.0.13",
"postcss-import": "^11.0.0",
"postcss-loader": "^2.0.8",
"postcss-pxtorem": "^5.1.1",
"postcss-url": "^7.2.1",
"rimraf": "^2.6.0",
"sass-loader": "^7.0.3",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"style-loader": "^0.21.0",
"uglifyjs-webpack-plugin": "^1.1.1",
"url-loader": "^0.5.8",
"vue-loader": "^13.3.0",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.5.2",
"webpack": "^3.6.0",
"webpack-bundle-analyzer": "^2.9.0",
"webpack-dev-server": "^2.9.1",
"webpack-merge": "^4.1.0"
},
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}
<template>
<div
id="app"
class="main-app"
>
<router-view></router-view>
</div>
</template>
<script>
export default {
// TODO: 全局状态加载及变更。请根据实际情况改写
beforeMount() {
},
methods: {
}
}
</script>
<style lang="scss">
</style>
import request from '../util/ajax'
export function login() {
return request({
url: ''
})
}
export function queryDictionaryList(params) {
return request({
url: '/api/team/dictionary/queryDictionaryList',
method: 'POST',
data: params
})
}
export function queryEmergencyHospitalList(params) {
return request({
url: '/api/team/hospital/queryEmergencyHospitalList',
method: 'POST',
data: params
})
}
export function queryExtendConfig(params) {
return request({
url: '/api/team/extend/queryExtendConfig',
method: 'POST',
data: params
})
}
\ No newline at end of file
import request from '../util/ajax'
export function queryEmergencyCarPageList(params) {
return request({
url: '/api/team/car/queryEmergencyCarPageList',
method: 'POST',
data: params
})
}
export function saveOrUpdateEmergencyCar(params) {
return request({
url: '/api/team/car/saveOrUpdateEmergencyCar',
method: 'POST',
data: params
})
}
export function deleteEmergencyCar(params) {
return request({
url: '/api/team/car/deleteEmergencyCar',
method: 'POST',
data: params
})
}
export function bindSiteToEmergencyCar(params) {
return request({
url: '/api/team/car/bindSiteToEmergencyCar',
method: 'POST',
data: params
})
}
export function queryTeamEmergencyCarInfo(params) {
return request({
url: '/api/team/car/queryTeamEmergencyCarInfo',
method: 'POST',
data: params
})
}
export function queryCarList(params) {
return request({
url: '/api/team/car/queryCarList',
method: 'POST',
data: params
})
}
import request from '../util/ajax'
export function queryEmergencyExpertPageList(params) {
return request({
url: '/api/team/expert/queryEmergencyExpertPageList',
method: 'POST',
data: params
})
}
export function addOrUpdateEmergencyExpert(params) {
return request({
url: '/api/team/expert/addOrUpdateEmergencyExpert',
method: 'POST',
data: params
})
}
export function queryInfoById(params) {
return request({
url: '/api/team/expert/queryInfoById',
method: 'POST',
data: params
})
}
export function deleteTeamEmergencyExpert(params) {
return request({
url: '/api/team/expert/deleteTeamEmergencyExpert',
method: 'POST',
data: params
})
}
\ No newline at end of file
import request from '../util/ajax'
export function queryEmergencySiteList(params) {
return request({
url: '/api/team/site/queryEmergencySiteList',
method: 'POST',
data: params
})
}
export function queryEmergencySitePageList(params) {
return request({
url: '/api/team/site/queryEmergencySitePageList',
method: 'POST',
data: params
})
}
export function saveOrUpdateEmergencySite(params) {
return request({
url: '/api/team/site/saveOrUpdateEmergencySite',
method: 'POST',
data: params
})
}
export function deleteEmergencySite(params) {
return request({
url: '/api/team/site/deleteEmergencySite',
method: 'POST',
data: params
})
}
export function auditEmergencySite(params) {
return request({
url: '/api/team/site/auditEmergencySite',
method: 'POST',
data: params
})
}
export function queryEmergencySiteDtoById(params) {
return request({
url: '/api/team/site/queryEmergencySiteDtoById',
method: 'POST',
data: params
})
}
\ No newline at end of file
.main-app {
width: 100%;
height: 100%;
position: static;
.main-wrapper {
height: 100%;
width: 100%;
.main-header {
height: 60px;
line-height: 60px;
background: #017BCE;
padding: 0 20px;
.p {
font-size: 24px;
color: #ffffff;
float: left;
}
.div {
float: right;
color: #FFFFFF;
img {
width: 24px;
height: 24px;
vertical-align: middle;
margin: -3px 8px 0;
}
}
}
.main-body {
position: inherit;
height: calc(100% - 60px);
background: #E0E2E4;
.main-nav {
height: 100%;
width: 230px;
float: left;
transition: width .3s linear;
overflow: hidden;
background-color: #ffffff;
box-shadow: 2px 0px 6px 0px rgba(0, 21, 41, 0.12);
.el-menu {
border-right: none;
.el-submenu__title {
height: 40px;
line-height: 40px;
color: #000000;
font-size: 16px;
.fa {
color: #1E70FE;
margin-right: 8px;
}
.el-submenu__icon-arrow {
font-weight: bold;
font-size: 16px;
margin-top: -8px;
right: 16px;
}
}
.el-menu-item {
height: 40px;
line-height: 40px;
font-size: 14px;
color: #000000;
}
&.el-menu--inline {
background-color: #F3F6F8;
}
}
.el-menu-item {
color: #000000;
&.is-active {
background-color: #D6D6D6;
color: #000000 !important;
}
&:hover {
background: #D6D6D6;
}
}
}
.main-content {
height: 100%;
overflow: auto;
.main-page {
padding: 20px;
height: 100%;
box-sizing: border-box;
display: flex;
flex-direction: column;
.main-page-header {
background: #FFFFFF;
margin-bottom: 20px;
padding: 20px 32px 6px;
.title {
font-size: 20px;
color: rgba(0, 0, 0, 0.87);
line-height: 20px;
margin-bottom: 33px;
}
.btns {
float: right;
}
}
.main-page-body {
background-color: #FFFFFF;
overflow: auto;
flex: 1;
}
}
// .btn_type1 {
// background: #2875CA;
// &:hover {
// background: #1f4977;
// }
// }
// .btn_type2 {
// border-color: #B2B2B2;
// }
}
}
}
}
.main-table {
.el-table {
th,
td {
padding: 0;
}
th {
.cell {
font-weight: normal;
color: #646464;
background: #F6F1D9;
line-height: 40px;
height: 40px;
}
}
td {
.cell {
color: #333333;
line-height: 30px;
height: 30px;
}
}
}
.main-table-pagination {
text-align: right;
margin-top: 16px;
.el-pagination {}
}
}
.el-form-item--small.el-form-item {
margin-bottom: 20px;
}
.el-checkbox__label {
padding-left: 5px;
}
.el-input__inner {
padding: 0 5px;
}
.el-radio__inner::after {
background: #40a2de;
width: 8px;
height: 8px;
}
.el-radio__label {
padding-left: 5px;
}
.el-form-item__label {
padding-right: 10px;
}
.el-tooltip__popper.is-dark {
opacity: 0.7;
}
.noData {
margin: 0 auto;
background: url("../images/CoverPage.png") no-repeat center;
height: 350px;
}
html,
body,
div,
section,
header,
footer,
aside,
ul,
ol,
li,
table,
tr,
th,
td,
button,
input,
textarea,
select,
h1,
h2,
h3,
h4,
h5,
h6,
em,
i,
strong,
p,
span,
blockquote {
margin: 0;
padding: 0;
}
h1,
h2,
h3,
h4,
h5,
h6,
em,
i,
strong,
input,
textarea,
button,
select {
font-weight: normal;
font-style: normal;
font-size: 100%;
}
ul,
ol {
list-style: none;
vertical-align: top;
}
table,
td,
th {
border-collapse: collapse;
border-spacing: 0;
}
input,
button,
select,
textarea {
outline: none;
background: none;
}
textarea {
resize: none;
}
img,
a img {
border: none;
vertical-align: top;
}
a,
a:link,
a:active,
a:visited {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
html {
height: 100%;
}
body {
font-size: 14px;
font-family: "Microsoft Yahei", Arial;
color: #666;
height: 100%;
}
.clear:after {
content: "";
display: block;
clear: both;
visibility: hidden;
height: 0;
}
/** 主题样式 **/
@import "../libs/element-variables-default";
$--font-path: '~element-ui/lib/theme-chalk/fonts';
/** 默认样式 **/
@import "~element-ui/packages/theme-chalk/src/index";
// 引入基础变量
@import 'reset';
@import '../font-awesome-4.7.0/scss/font-awesome.scss';
// 框架样式
@import 'common';
This source diff could not be displayed because it is too large. You can view the blob instead.
// Spinning Icons
// --------------------------
.#{$fa-css-prefix}-spin {
-webkit-animation: fa-spin 2s infinite linear;
animation: fa-spin 2s infinite linear;
}
.#{$fa-css-prefix}-pulse {
-webkit-animation: fa-spin 1s infinite steps(8);
animation: fa-spin 1s infinite steps(8);
}
@-webkit-keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}
@keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}
// Bordered & Pulled
// -------------------------
.#{$fa-css-prefix}-border {
padding: .2em .25em .15em;
border: solid .08em $fa-border-color;
border-radius: .1em;
}
.#{$fa-css-prefix}-pull-left { float: left; }
.#{$fa-css-prefix}-pull-right { float: right; }
.#{$fa-css-prefix} {
&.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
&.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
}
/* Deprecated as of 4.4.0 */
.pull-right { float: right; }
.pull-left { float: left; }
.#{$fa-css-prefix} {
&.pull-left { margin-right: .3em; }
&.pull-right { margin-left: .3em; }
}
// Base Class Definition
// -------------------------
.#{$fa-css-prefix} {
display: inline-block;
font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
font-size: inherit; // can't have font-size inherit on line above, so need to override
text-rendering: auto; // optimizelegibility throws things off #1094
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
// Fixed Width Icons
// -------------------------
.#{$fa-css-prefix}-fw {
width: (18em / 14);
text-align: center;
}
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
readers do not read off random characters that represent icons */
.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }
.#{$fa-css-prefix}-music:before { content: $fa-var-music; }
.#{$fa-css-prefix}-search:before { content: $fa-var-search; }
.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; }
.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; }
.#{$fa-css-prefix}-star:before { content: $fa-var-star; }
.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; }
.#{$fa-css-prefix}-user:before { content: $fa-var-user; }
.#{$fa-css-prefix}-film:before { content: $fa-var-film; }
.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; }
.#{$fa-css-prefix}-th:before { content: $fa-var-th; }
.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; }
.#{$fa-css-prefix}-check:before { content: $fa-var-check; }
.#{$fa-css-prefix}-remove:before,
.#{$fa-css-prefix}-close:before,
.#{$fa-css-prefix}-times:before { content: $fa-var-times; }
.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; }
.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; }
.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; }
.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; }
.#{$fa-css-prefix}-gear:before,
.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; }
.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; }
.#{$fa-css-prefix}-home:before { content: $fa-var-home; }
.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; }
.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; }
.#{$fa-css-prefix}-road:before { content: $fa-var-road; }
.#{$fa-css-prefix}-download:before { content: $fa-var-download; }
.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; }
.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; }
.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; }
.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; }
.#{$fa-css-prefix}-rotate-right:before,
.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; }
.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; }
.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; }
.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; }
.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; }
.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; }
.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; }
.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; }
.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; }
.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; }
.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; }
.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; }
.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; }
.#{$fa-css-prefix}-book:before { content: $fa-var-book; }
.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; }
.#{$fa-css-prefix}-print:before { content: $fa-var-print; }
.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; }
.#{$fa-css-prefix}-font:before { content: $fa-var-font; }
.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; }
.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; }
.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; }
.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; }
.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; }
.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; }
.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; }
.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; }
.#{$fa-css-prefix}-list:before { content: $fa-var-list; }
.#{$fa-css-prefix}-dedent:before,
.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; }
.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; }
.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; }
.#{$fa-css-prefix}-photo:before,
.#{$fa-css-prefix}-image:before,
.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; }
.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; }
.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; }
.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; }
.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; }
.#{$fa-css-prefix}-edit:before,
.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; }
.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; }
.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; }
.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; }
.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; }
.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; }
.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; }
.#{$fa-css-prefix}-play:before { content: $fa-var-play; }
.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; }
.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; }
.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; }
.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; }
.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; }
.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; }
.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; }
.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; }
.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; }
.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; }
.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; }
.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; }
.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; }
.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; }
.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; }
.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; }
.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; }
.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; }
.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; }
.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; }
.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; }
.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; }
.#{$fa-css-prefix}-mail-forward:before,
.#{$fa-css-prefix}-share:before { content: $fa-var-share; }
.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; }
.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; }
.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; }
.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; }
.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; }
.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; }
.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; }
.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; }
.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; }
.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; }
.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; }
.#{$fa-css-prefix}-warning:before,
.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; }
.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; }
.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; }
.#{$fa-css-prefix}-random:before { content: $fa-var-random; }
.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; }
.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; }
.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; }
.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; }
.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; }
.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; }
.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; }
.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; }
.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; }
.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; }
.#{$fa-css-prefix}-bar-chart-o:before,
.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; }
.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; }
.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; }
.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; }
.#{$fa-css-prefix}-key:before { content: $fa-var-key; }
.#{$fa-css-prefix}-gears:before,
.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; }
.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; }
.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; }
.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; }
.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; }
.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; }
.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; }
.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; }
.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; }
.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; }
.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; }
.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; }
.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; }
.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; }
.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; }
.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; }
.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; }
.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; }
.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; }
.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; }
.#{$fa-css-prefix}-facebook-f:before,
.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; }
.#{$fa-css-prefix}-github:before { content: $fa-var-github; }
.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; }
.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; }
.#{$fa-css-prefix}-feed:before,
.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; }
.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; }
.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; }
.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; }
.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; }
.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; }
.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; }
.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; }
.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; }
.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; }
.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; }
.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; }
.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; }
.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; }
.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; }
.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; }
.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; }
.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; }
.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; }
.#{$fa-css-prefix}-group:before,
.#{$fa-css-prefix}-users:before { content: $fa-var-users; }
.#{$fa-css-prefix}-chain:before,
.#{$fa-css-prefix}-link:before { content: $fa-var-link; }
.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; }
.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; }
.#{$fa-css-prefix}-cut:before,
.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; }
.#{$fa-css-prefix}-copy:before,
.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; }
.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; }
.#{$fa-css-prefix}-save:before,
.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; }
.#{$fa-css-prefix}-square:before { content: $fa-var-square; }
.#{$fa-css-prefix}-navicon:before,
.#{$fa-css-prefix}-reorder:before,
.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; }
.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; }
.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; }
.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; }
.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; }
.#{$fa-css-prefix}-table:before { content: $fa-var-table; }
.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; }
.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; }
.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; }
.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; }
.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; }
.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; }
.#{$fa-css-prefix}-money:before { content: $fa-var-money; }
.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; }
.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; }
.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; }
.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; }
.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; }
.#{$fa-css-prefix}-unsorted:before,
.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; }
.#{$fa-css-prefix}-sort-down:before,
.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; }
.#{$fa-css-prefix}-sort-up:before,
.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; }
.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; }
.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; }
.#{$fa-css-prefix}-rotate-left:before,
.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; }
.#{$fa-css-prefix}-legal:before,
.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; }
.#{$fa-css-prefix}-dashboard:before,
.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; }
.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; }
.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; }
.#{$fa-css-prefix}-flash:before,
.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; }
.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; }
.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; }
.#{$fa-css-prefix}-paste:before,
.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; }
.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; }
.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; }
.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; }
.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; }
.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; }
.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; }
.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; }
.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; }
.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; }
.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; }
.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; }
.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; }
.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; }
.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; }
.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; }
.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; }
.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; }
.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; }
.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; }
.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; }
.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; }
.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; }
.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; }
.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; }
.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; }
.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; }
.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; }
.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; }
.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; }
.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; }
.#{$fa-css-prefix}-mobile-phone:before,
.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; }
.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; }
.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; }
.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; }
.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; }
.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; }
.#{$fa-css-prefix}-mail-reply:before,
.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; }
.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; }
.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; }
.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; }
.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; }
.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; }
.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; }
.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; }
.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; }
.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; }
.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; }
.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; }
.#{$fa-css-prefix}-code:before { content: $fa-var-code; }
.#{$fa-css-prefix}-mail-reply-all:before,
.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; }
.#{$fa-css-prefix}-star-half-empty:before,
.#{$fa-css-prefix}-star-half-full:before,
.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; }
.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; }
.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; }
.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; }
.#{$fa-css-prefix}-unlink:before,
.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; }
.#{$fa-css-prefix}-question:before { content: $fa-var-question; }
.#{$fa-css-prefix}-info:before { content: $fa-var-info; }
.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; }
.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; }
.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; }
.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; }
.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; }
.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; }
.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; }
.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; }
.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; }
.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; }
.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; }
.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; }
.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; }
.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; }
.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; }
.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; }
.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; }
.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; }
.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; }
.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; }
.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; }
.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; }
.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; }
.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; }
.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; }
.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; }
.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; }
.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; }
.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; }
.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; }
.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; }
.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; }
.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; }
.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; }
.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; }
.#{$fa-css-prefix}-toggle-down:before,
.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; }
.#{$fa-css-prefix}-toggle-up:before,
.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; }
.#{$fa-css-prefix}-toggle-right:before,
.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; }
.#{$fa-css-prefix}-euro:before,
.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; }
.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; }
.#{$fa-css-prefix}-dollar:before,
.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; }
.#{$fa-css-prefix}-rupee:before,
.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; }
.#{$fa-css-prefix}-cny:before,
.#{$fa-css-prefix}-rmb:before,
.#{$fa-css-prefix}-yen:before,
.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; }
.#{$fa-css-prefix}-ruble:before,
.#{$fa-css-prefix}-rouble:before,
.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; }
.#{$fa-css-prefix}-won:before,
.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; }
.#{$fa-css-prefix}-bitcoin:before,
.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; }
.#{$fa-css-prefix}-file:before { content: $fa-var-file; }
.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; }
.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; }
.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; }
.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; }
.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; }
.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; }
.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; }
.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; }
.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; }
.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; }
.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; }
.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; }
.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; }
.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; }
.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; }
.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; }
.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; }
.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; }
.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; }
.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; }
.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; }
.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; }
.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; }
.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; }
.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; }
.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; }
.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; }
.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; }
.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; }
.#{$fa-css-prefix}-android:before { content: $fa-var-android; }
.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; }
.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; }
.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; }
.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; }
.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; }
.#{$fa-css-prefix}-female:before { content: $fa-var-female; }
.#{$fa-css-prefix}-male:before { content: $fa-var-male; }
.#{$fa-css-prefix}-gittip:before,
.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; }
.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; }
.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; }
.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; }
.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; }
.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; }
.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; }
.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; }
.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; }
.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; }
.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; }
.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; }
.#{$fa-css-prefix}-toggle-left:before,
.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; }
.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; }
.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; }
.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; }
.#{$fa-css-prefix}-turkish-lira:before,
.#{$fa-css-prefix}-try:before { content: $fa-var-try; }
.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; }
.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; }
.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; }
.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; }
.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; }
.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; }
.#{$fa-css-prefix}-institution:before,
.#{$fa-css-prefix}-bank:before,
.#{$fa-css-prefix}-university:before { content: $fa-var-university; }
.#{$fa-css-prefix}-mortar-board:before,
.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; }
.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; }
.#{$fa-css-prefix}-google:before { content: $fa-var-google; }
.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; }
.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; }
.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; }
.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; }
.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; }
.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; }
.#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; }
.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; }
.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; }
.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; }
.#{$fa-css-prefix}-language:before { content: $fa-var-language; }
.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; }
.#{$fa-css-prefix}-building:before { content: $fa-var-building; }
.#{$fa-css-prefix}-child:before { content: $fa-var-child; }
.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; }
.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; }
.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; }
.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; }
.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; }
.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; }
.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; }
.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; }
.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; }
.#{$fa-css-prefix}-automobile:before,
.#{$fa-css-prefix}-car:before { content: $fa-var-car; }
.#{$fa-css-prefix}-cab:before,
.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; }
.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; }
.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; }
.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; }
.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; }
.#{$fa-css-prefix}-database:before { content: $fa-var-database; }
.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; }
.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; }
.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; }
.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; }
.#{$fa-css-prefix}-file-photo-o:before,
.#{$fa-css-prefix}-file-picture-o:before,
.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; }
.#{$fa-css-prefix}-file-zip-o:before,
.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; }
.#{$fa-css-prefix}-file-sound-o:before,
.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; }
.#{$fa-css-prefix}-file-movie-o:before,
.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; }
.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; }
.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; }
.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; }
.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; }
.#{$fa-css-prefix}-life-bouy:before,
.#{$fa-css-prefix}-life-buoy:before,
.#{$fa-css-prefix}-life-saver:before,
.#{$fa-css-prefix}-support:before,
.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; }
.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; }
.#{$fa-css-prefix}-ra:before,
.#{$fa-css-prefix}-resistance:before,
.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; }
.#{$fa-css-prefix}-ge:before,
.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; }
.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; }
.#{$fa-css-prefix}-git:before { content: $fa-var-git; }
.#{$fa-css-prefix}-y-combinator-square:before,
.#{$fa-css-prefix}-yc-square:before,
.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; }
.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; }
.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; }
.#{$fa-css-prefix}-wechat:before,
.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; }
.#{$fa-css-prefix}-send:before,
.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; }
.#{$fa-css-prefix}-send-o:before,
.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; }
.#{$fa-css-prefix}-history:before { content: $fa-var-history; }
.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; }
.#{$fa-css-prefix}-header:before { content: $fa-var-header; }
.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; }
.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; }
.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; }
.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; }
.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; }
.#{$fa-css-prefix}-soccer-ball-o:before,
.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; }
.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; }
.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; }
.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; }
.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; }
.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; }
.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; }
.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; }
.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; }
.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; }
.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; }
.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; }
.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; }
.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; }
.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; }
.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; }
.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; }
.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; }
.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; }
.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; }
.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; }
.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; }
.#{$fa-css-prefix}-at:before { content: $fa-var-at; }
.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; }
.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; }
.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; }
.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; }
.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; }
.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; }
.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; }
.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; }
.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; }
.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; }
.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; }
.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; }
.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; }
.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; }
.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; }
.#{$fa-css-prefix}-shekel:before,
.#{$fa-css-prefix}-sheqel:before,
.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; }
.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; }
.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; }
.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; }
.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; }
.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; }
.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; }
.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; }
.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; }
.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; }
.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; }
.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; }
.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; }
.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; }
.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; }
.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; }
.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; }
.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; }
.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; }
.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; }
.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; }
.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; }
.#{$fa-css-prefix}-intersex:before,
.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; }
.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; }
.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; }
.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; }
.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; }
.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; }
.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; }
.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; }
.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; }
.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; }
.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; }
.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; }
.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; }
.#{$fa-css-prefix}-server:before { content: $fa-var-server; }
.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; }
.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; }
.#{$fa-css-prefix}-hotel:before,
.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; }
.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; }
.#{$fa-css-prefix}-train:before { content: $fa-var-train; }
.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; }
.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; }
.#{$fa-css-prefix}-yc:before,
.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; }
.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; }
.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; }
.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; }
.#{$fa-css-prefix}-battery-4:before,
.#{$fa-css-prefix}-battery:before,
.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; }
.#{$fa-css-prefix}-battery-3:before,
.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; }
.#{$fa-css-prefix}-battery-2:before,
.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; }
.#{$fa-css-prefix}-battery-1:before,
.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; }
.#{$fa-css-prefix}-battery-0:before,
.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; }
.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; }
.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; }
.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; }
.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; }
.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; }
.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; }
.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; }
.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; }
.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; }
.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; }
.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; }
.#{$fa-css-prefix}-hourglass-1:before,
.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; }
.#{$fa-css-prefix}-hourglass-2:before,
.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; }
.#{$fa-css-prefix}-hourglass-3:before,
.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; }
.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; }
.#{$fa-css-prefix}-hand-grab-o:before,
.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; }
.#{$fa-css-prefix}-hand-stop-o:before,
.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; }
.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; }
.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; }
.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; }
.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; }
.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; }
.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; }
.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; }
.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; }
.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; }
.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; }
.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; }
.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; }
.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; }
.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; }
.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; }
.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; }
.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; }
.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; }
.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; }
.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; }
.#{$fa-css-prefix}-tv:before,
.#{$fa-css-prefix}-television:before { content: $fa-var-television; }
.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; }
.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; }
.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; }
.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; }
.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; }
.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; }
.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; }
.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; }
.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; }
.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; }
.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; }
.#{$fa-css-prefix}-map:before { content: $fa-var-map; }
.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; }
.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; }
.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; }
.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; }
.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; }
.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; }
.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; }
.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; }
.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; }
.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; }
.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; }
.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; }
.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; }
.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; }
.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; }
.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; }
.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; }
.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; }
.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; }
.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; }
.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; }
.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; }
.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; }
.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; }
.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; }
.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; }
.#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; }
.#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; }
.#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; }
.#{$fa-css-prefix}-envira:before { content: $fa-var-envira; }
.#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; }
.#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; }
.#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; }
.#{$fa-css-prefix}-blind:before { content: $fa-var-blind; }
.#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; }
.#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; }
.#{$fa-css-prefix}-braille:before { content: $fa-var-braille; }
.#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; }
.#{$fa-css-prefix}-asl-interpreting:before,
.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; }
.#{$fa-css-prefix}-deafness:before,
.#{$fa-css-prefix}-hard-of-hearing:before,
.#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; }
.#{$fa-css-prefix}-glide:before { content: $fa-var-glide; }
.#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; }
.#{$fa-css-prefix}-signing:before,
.#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; }
.#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; }
.#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; }
.#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; }
.#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; }
.#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; }
.#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; }
.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; }
.#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; }
.#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; }
.#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; }
.#{$fa-css-prefix}-google-plus-circle:before,
.#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; }
.#{$fa-css-prefix}-fa:before,
.#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; }
.#{$fa-css-prefix}-handshake-o:before { content: $fa-var-handshake-o; }
.#{$fa-css-prefix}-envelope-open:before { content: $fa-var-envelope-open; }
.#{$fa-css-prefix}-envelope-open-o:before { content: $fa-var-envelope-open-o; }
.#{$fa-css-prefix}-linode:before { content: $fa-var-linode; }
.#{$fa-css-prefix}-address-book:before { content: $fa-var-address-book; }
.#{$fa-css-prefix}-address-book-o:before { content: $fa-var-address-book-o; }
.#{$fa-css-prefix}-vcard:before,
.#{$fa-css-prefix}-address-card:before { content: $fa-var-address-card; }
.#{$fa-css-prefix}-vcard-o:before,
.#{$fa-css-prefix}-address-card-o:before { content: $fa-var-address-card-o; }
.#{$fa-css-prefix}-user-circle:before { content: $fa-var-user-circle; }
.#{$fa-css-prefix}-user-circle-o:before { content: $fa-var-user-circle-o; }
.#{$fa-css-prefix}-user-o:before { content: $fa-var-user-o; }
.#{$fa-css-prefix}-id-badge:before { content: $fa-var-id-badge; }
.#{$fa-css-prefix}-drivers-license:before,
.#{$fa-css-prefix}-id-card:before { content: $fa-var-id-card; }
.#{$fa-css-prefix}-drivers-license-o:before,
.#{$fa-css-prefix}-id-card-o:before { content: $fa-var-id-card-o; }
.#{$fa-css-prefix}-quora:before { content: $fa-var-quora; }
.#{$fa-css-prefix}-free-code-camp:before { content: $fa-var-free-code-camp; }
.#{$fa-css-prefix}-telegram:before { content: $fa-var-telegram; }
.#{$fa-css-prefix}-thermometer-4:before,
.#{$fa-css-prefix}-thermometer:before,
.#{$fa-css-prefix}-thermometer-full:before { content: $fa-var-thermometer-full; }
.#{$fa-css-prefix}-thermometer-3:before,
.#{$fa-css-prefix}-thermometer-three-quarters:before { content: $fa-var-thermometer-three-quarters; }
.#{$fa-css-prefix}-thermometer-2:before,
.#{$fa-css-prefix}-thermometer-half:before { content: $fa-var-thermometer-half; }
.#{$fa-css-prefix}-thermometer-1:before,
.#{$fa-css-prefix}-thermometer-quarter:before { content: $fa-var-thermometer-quarter; }
.#{$fa-css-prefix}-thermometer-0:before,
.#{$fa-css-prefix}-thermometer-empty:before { content: $fa-var-thermometer-empty; }
.#{$fa-css-prefix}-shower:before { content: $fa-var-shower; }
.#{$fa-css-prefix}-bathtub:before,
.#{$fa-css-prefix}-s15:before,
.#{$fa-css-prefix}-bath:before { content: $fa-var-bath; }
.#{$fa-css-prefix}-podcast:before { content: $fa-var-podcast; }
.#{$fa-css-prefix}-window-maximize:before { content: $fa-var-window-maximize; }
.#{$fa-css-prefix}-window-minimize:before { content: $fa-var-window-minimize; }
.#{$fa-css-prefix}-window-restore:before { content: $fa-var-window-restore; }
.#{$fa-css-prefix}-times-rectangle:before,
.#{$fa-css-prefix}-window-close:before { content: $fa-var-window-close; }
.#{$fa-css-prefix}-times-rectangle-o:before,
.#{$fa-css-prefix}-window-close-o:before { content: $fa-var-window-close-o; }
.#{$fa-css-prefix}-bandcamp:before { content: $fa-var-bandcamp; }
.#{$fa-css-prefix}-grav:before { content: $fa-var-grav; }
.#{$fa-css-prefix}-etsy:before { content: $fa-var-etsy; }
.#{$fa-css-prefix}-imdb:before { content: $fa-var-imdb; }
.#{$fa-css-prefix}-ravelry:before { content: $fa-var-ravelry; }
.#{$fa-css-prefix}-eercast:before { content: $fa-var-eercast; }
.#{$fa-css-prefix}-microchip:before { content: $fa-var-microchip; }
.#{$fa-css-prefix}-snowflake-o:before { content: $fa-var-snowflake-o; }
.#{$fa-css-prefix}-superpowers:before { content: $fa-var-superpowers; }
.#{$fa-css-prefix}-wpexplorer:before { content: $fa-var-wpexplorer; }
.#{$fa-css-prefix}-meetup:before { content: $fa-var-meetup; }
// Icon Sizes
// -------------------------
/* makes the font 33% larger relative to the icon container */
.#{$fa-css-prefix}-lg {
font-size: (4em / 3);
line-height: (3em / 4);
vertical-align: -15%;
}
.#{$fa-css-prefix}-2x { font-size: 2em; }
.#{$fa-css-prefix}-3x { font-size: 3em; }
.#{$fa-css-prefix}-4x { font-size: 4em; }
.#{$fa-css-prefix}-5x { font-size: 5em; }
// List Icons
// -------------------------
.#{$fa-css-prefix}-ul {
padding-left: 0;
margin-left: $fa-li-width;
list-style-type: none;
> li { position: relative; }
}
.#{$fa-css-prefix}-li {
position: absolute;
left: -$fa-li-width;
width: $fa-li-width;
top: (2em / 14);
text-align: center;
&.#{$fa-css-prefix}-lg {
left: -$fa-li-width + (4em / 14);
}
}
// Mixins
// --------------------------
@mixin fa-icon() {
display: inline-block;
font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
font-size: inherit; // can't have font-size inherit on line above, so need to override
text-rendering: auto; // optimizelegibility throws things off #1094
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
@mixin fa-icon-rotate($degrees, $rotation) {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
-webkit-transform: rotate($degrees);
-ms-transform: rotate($degrees);
transform: rotate($degrees);
}
@mixin fa-icon-flip($horiz, $vert, $rotation) {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
-webkit-transform: scale($horiz, $vert);
-ms-transform: scale($horiz, $vert);
transform: scale($horiz, $vert);
}
// Only display content to screen readers. A la Bootstrap 4.
//
// See: http://a11yproject.com/posts/how-to-hide-content/
@mixin sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0,0,0,0);
border: 0;
}
// Use in conjunction with .sr-only to only display content when it's focused.
//
// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
//
// Credit: HTML5 Boilerplate
@mixin sr-only-focusable {
&:active,
&:focus {
position: static;
width: auto;
height: auto;
margin: 0;
overflow: visible;
clip: auto;
}
}
/* FONT PATH
* -------------------------- */
@font-face {
font-family: 'FontAwesome';
src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
// src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
font-weight: normal;
font-style: normal;
}
// Rotated & Flipped Icons
// -------------------------
.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
// Hook for IE8-9
// -------------------------
:root .#{$fa-css-prefix}-rotate-90,
:root .#{$fa-css-prefix}-rotate-180,
:root .#{$fa-css-prefix}-rotate-270,
:root .#{$fa-css-prefix}-flip-horizontal,
:root .#{$fa-css-prefix}-flip-vertical {
filter: none;
}
// Screen Readers
// -------------------------
.sr-only { @include sr-only(); }
.sr-only-focusable { @include sr-only-focusable(); }
// Stacked Icons
// -------------------------
.#{$fa-css-prefix}-stack {
position: relative;
display: inline-block;
width: 2em;
height: 2em;
line-height: 2em;
vertical-align: middle;
}
.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
position: absolute;
left: 0;
width: 100%;
text-align: center;
}
.#{$fa-css-prefix}-stack-1x { line-height: inherit; }
.#{$fa-css-prefix}-stack-2x { font-size: 2em; }
.#{$fa-css-prefix}-inverse { color: $fa-inverse; }
// Variables
// --------------------------
$fa-font-path: "~sysStatic/font-awesome-4.7.0/fonts" !default;
$fa-font-size-base: 14px !default;
$fa-line-height-base: 1 !default;
//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts" !default; // for referencing Bootstrap CDN font files directly
$fa-css-prefix: fa !default;
$fa-version: "4.7.0" !default;
$fa-border-color: #eee !default;
$fa-inverse: #fff !default;
$fa-li-width: (30em / 14) !default;
$fa-var-500px: "\f26e";
$fa-var-address-book: "\f2b9";
$fa-var-address-book-o: "\f2ba";
$fa-var-address-card: "\f2bb";
$fa-var-address-card-o: "\f2bc";
$fa-var-adjust: "\f042";
$fa-var-adn: "\f170";
$fa-var-align-center: "\f037";
$fa-var-align-justify: "\f039";
$fa-var-align-left: "\f036";
$fa-var-align-right: "\f038";
$fa-var-amazon: "\f270";
$fa-var-ambulance: "\f0f9";
$fa-var-american-sign-language-interpreting: "\f2a3";
$fa-var-anchor: "\f13d";
$fa-var-android: "\f17b";
$fa-var-angellist: "\f209";
$fa-var-angle-double-down: "\f103";
$fa-var-angle-double-left: "\f100";
$fa-var-angle-double-right: "\f101";
$fa-var-angle-double-up: "\f102";
$fa-var-angle-down: "\f107";
$fa-var-angle-left: "\f104";
$fa-var-angle-right: "\f105";
$fa-var-angle-up: "\f106";
$fa-var-apple: "\f179";
$fa-var-archive: "\f187";
$fa-var-area-chart: "\f1fe";
$fa-var-arrow-circle-down: "\f0ab";
$fa-var-arrow-circle-left: "\f0a8";
$fa-var-arrow-circle-o-down: "\f01a";
$fa-var-arrow-circle-o-left: "\f190";
$fa-var-arrow-circle-o-right: "\f18e";
$fa-var-arrow-circle-o-up: "\f01b";
$fa-var-arrow-circle-right: "\f0a9";
$fa-var-arrow-circle-up: "\f0aa";
$fa-var-arrow-down: "\f063";
$fa-var-arrow-left: "\f060";
$fa-var-arrow-right: "\f061";
$fa-var-arrow-up: "\f062";
$fa-var-arrows: "\f047";
$fa-var-arrows-alt: "\f0b2";
$fa-var-arrows-h: "\f07e";
$fa-var-arrows-v: "\f07d";
$fa-var-asl-interpreting: "\f2a3";
$fa-var-assistive-listening-systems: "\f2a2";
$fa-var-asterisk: "\f069";
$fa-var-at: "\f1fa";
$fa-var-audio-description: "\f29e";
$fa-var-automobile: "\f1b9";
$fa-var-backward: "\f04a";
$fa-var-balance-scale: "\f24e";
$fa-var-ban: "\f05e";
$fa-var-bandcamp: "\f2d5";
$fa-var-bank: "\f19c";
$fa-var-bar-chart: "\f080";
$fa-var-bar-chart-o: "\f080";
$fa-var-barcode: "\f02a";
$fa-var-bars: "\f0c9";
$fa-var-bath: "\f2cd";
$fa-var-bathtub: "\f2cd";
$fa-var-battery: "\f240";
$fa-var-battery-0: "\f244";
$fa-var-battery-1: "\f243";
$fa-var-battery-2: "\f242";
$fa-var-battery-3: "\f241";
$fa-var-battery-4: "\f240";
$fa-var-battery-empty: "\f244";
$fa-var-battery-full: "\f240";
$fa-var-battery-half: "\f242";
$fa-var-battery-quarter: "\f243";
$fa-var-battery-three-quarters: "\f241";
$fa-var-bed: "\f236";
$fa-var-beer: "\f0fc";
$fa-var-behance: "\f1b4";
$fa-var-behance-square: "\f1b5";
$fa-var-bell: "\f0f3";
$fa-var-bell-o: "\f0a2";
$fa-var-bell-slash: "\f1f6";
$fa-var-bell-slash-o: "\f1f7";
$fa-var-bicycle: "\f206";
$fa-var-binoculars: "\f1e5";
$fa-var-birthday-cake: "\f1fd";
$fa-var-bitbucket: "\f171";
$fa-var-bitbucket-square: "\f172";
$fa-var-bitcoin: "\f15a";
$fa-var-black-tie: "\f27e";
$fa-var-blind: "\f29d";
$fa-var-bluetooth: "\f293";
$fa-var-bluetooth-b: "\f294";
$fa-var-bold: "\f032";
$fa-var-bolt: "\f0e7";
$fa-var-bomb: "\f1e2";
$fa-var-book: "\f02d";
$fa-var-bookmark: "\f02e";
$fa-var-bookmark-o: "\f097";
$fa-var-braille: "\f2a1";
$fa-var-briefcase: "\f0b1";
$fa-var-btc: "\f15a";
$fa-var-bug: "\f188";
$fa-var-building: "\f1ad";
$fa-var-building-o: "\f0f7";
$fa-var-bullhorn: "\f0a1";
$fa-var-bullseye: "\f140";
$fa-var-bus: "\f207";
$fa-var-buysellads: "\f20d";
$fa-var-cab: "\f1ba";
$fa-var-calculator: "\f1ec";
$fa-var-calendar: "\f073";
$fa-var-calendar-check-o: "\f274";
$fa-var-calendar-minus-o: "\f272";
$fa-var-calendar-o: "\f133";
$fa-var-calendar-plus-o: "\f271";
$fa-var-calendar-times-o: "\f273";
$fa-var-camera: "\f030";
$fa-var-camera-retro: "\f083";
$fa-var-car: "\f1b9";
$fa-var-caret-down: "\f0d7";
$fa-var-caret-left: "\f0d9";
$fa-var-caret-right: "\f0da";
$fa-var-caret-square-o-down: "\f150";
$fa-var-caret-square-o-left: "\f191";
$fa-var-caret-square-o-right: "\f152";
$fa-var-caret-square-o-up: "\f151";
$fa-var-caret-up: "\f0d8";
$fa-var-cart-arrow-down: "\f218";
$fa-var-cart-plus: "\f217";
$fa-var-cc: "\f20a";
$fa-var-cc-amex: "\f1f3";
$fa-var-cc-diners-club: "\f24c";
$fa-var-cc-discover: "\f1f2";
$fa-var-cc-jcb: "\f24b";
$fa-var-cc-mastercard: "\f1f1";
$fa-var-cc-paypal: "\f1f4";
$fa-var-cc-stripe: "\f1f5";
$fa-var-cc-visa: "\f1f0";
$fa-var-certificate: "\f0a3";
$fa-var-chain: "\f0c1";
$fa-var-chain-broken: "\f127";
$fa-var-check: "\f00c";
$fa-var-check-circle: "\f058";
$fa-var-check-circle-o: "\f05d";
$fa-var-check-square: "\f14a";
$fa-var-check-square-o: "\f046";
$fa-var-chevron-circle-down: "\f13a";
$fa-var-chevron-circle-left: "\f137";
$fa-var-chevron-circle-right: "\f138";
$fa-var-chevron-circle-up: "\f139";
$fa-var-chevron-down: "\f078";
$fa-var-chevron-left: "\f053";
$fa-var-chevron-right: "\f054";
$fa-var-chevron-up: "\f077";
$fa-var-child: "\f1ae";
$fa-var-chrome: "\f268";
$fa-var-circle: "\f111";
$fa-var-circle-o: "\f10c";
$fa-var-circle-o-notch: "\f1ce";
$fa-var-circle-thin: "\f1db";
$fa-var-clipboard: "\f0ea";
$fa-var-clock-o: "\f017";
$fa-var-clone: "\f24d";
$fa-var-close: "\f00d";
$fa-var-cloud: "\f0c2";
$fa-var-cloud-download: "\f0ed";
$fa-var-cloud-upload: "\f0ee";
$fa-var-cny: "\f157";
$fa-var-code: "\f121";
$fa-var-code-fork: "\f126";
$fa-var-codepen: "\f1cb";
$fa-var-codiepie: "\f284";
$fa-var-coffee: "\f0f4";
$fa-var-cog: "\f013";
$fa-var-cogs: "\f085";
$fa-var-columns: "\f0db";
$fa-var-comment: "\f075";
$fa-var-comment-o: "\f0e5";
$fa-var-commenting: "\f27a";
$fa-var-commenting-o: "\f27b";
$fa-var-comments: "\f086";
$fa-var-comments-o: "\f0e6";
$fa-var-compass: "\f14e";
$fa-var-compress: "\f066";
$fa-var-connectdevelop: "\f20e";
$fa-var-contao: "\f26d";
$fa-var-copy: "\f0c5";
$fa-var-copyright: "\f1f9";
$fa-var-creative-commons: "\f25e";
$fa-var-credit-card: "\f09d";
$fa-var-credit-card-alt: "\f283";
$fa-var-crop: "\f125";
$fa-var-crosshairs: "\f05b";
$fa-var-css3: "\f13c";
$fa-var-cube: "\f1b2";
$fa-var-cubes: "\f1b3";
$fa-var-cut: "\f0c4";
$fa-var-cutlery: "\f0f5";
$fa-var-dashboard: "\f0e4";
$fa-var-dashcube: "\f210";
$fa-var-database: "\f1c0";
$fa-var-deaf: "\f2a4";
$fa-var-deafness: "\f2a4";
$fa-var-dedent: "\f03b";
$fa-var-delicious: "\f1a5";
$fa-var-desktop: "\f108";
$fa-var-deviantart: "\f1bd";
$fa-var-diamond: "\f219";
$fa-var-digg: "\f1a6";
$fa-var-dollar: "\f155";
$fa-var-dot-circle-o: "\f192";
$fa-var-download: "\f019";
$fa-var-dribbble: "\f17d";
$fa-var-drivers-license: "\f2c2";
$fa-var-drivers-license-o: "\f2c3";
$fa-var-dropbox: "\f16b";
$fa-var-drupal: "\f1a9";
$fa-var-edge: "\f282";
$fa-var-edit: "\f044";
$fa-var-eercast: "\f2da";
$fa-var-eject: "\f052";
$fa-var-ellipsis-h: "\f141";
$fa-var-ellipsis-v: "\f142";
$fa-var-empire: "\f1d1";
$fa-var-envelope: "\f0e0";
$fa-var-envelope-o: "\f003";
$fa-var-envelope-open: "\f2b6";
$fa-var-envelope-open-o: "\f2b7";
$fa-var-envelope-square: "\f199";
$fa-var-envira: "\f299";
$fa-var-eraser: "\f12d";
$fa-var-etsy: "\f2d7";
$fa-var-eur: "\f153";
$fa-var-euro: "\f153";
$fa-var-exchange: "\f0ec";
$fa-var-exclamation: "\f12a";
$fa-var-exclamation-circle: "\f06a";
$fa-var-exclamation-triangle: "\f071";
$fa-var-expand: "\f065";
$fa-var-expeditedssl: "\f23e";
$fa-var-external-link: "\f08e";
$fa-var-external-link-square: "\f14c";
$fa-var-eye: "\f06e";
$fa-var-eye-slash: "\f070";
$fa-var-eyedropper: "\f1fb";
$fa-var-fa: "\f2b4";
$fa-var-facebook: "\f09a";
$fa-var-facebook-f: "\f09a";
$fa-var-facebook-official: "\f230";
$fa-var-facebook-square: "\f082";
$fa-var-fast-backward: "\f049";
$fa-var-fast-forward: "\f050";
$fa-var-fax: "\f1ac";
$fa-var-feed: "\f09e";
$fa-var-female: "\f182";
$fa-var-fighter-jet: "\f0fb";
$fa-var-file: "\f15b";
$fa-var-file-archive-o: "\f1c6";
$fa-var-file-audio-o: "\f1c7";
$fa-var-file-code-o: "\f1c9";
$fa-var-file-excel-o: "\f1c3";
$fa-var-file-image-o: "\f1c5";
$fa-var-file-movie-o: "\f1c8";
$fa-var-file-o: "\f016";
$fa-var-file-pdf-o: "\f1c1";
$fa-var-file-photo-o: "\f1c5";
$fa-var-file-picture-o: "\f1c5";
$fa-var-file-powerpoint-o: "\f1c4";
$fa-var-file-sound-o: "\f1c7";
$fa-var-file-text: "\f15c";
$fa-var-file-text-o: "\f0f6";
$fa-var-file-video-o: "\f1c8";
$fa-var-file-word-o: "\f1c2";
$fa-var-file-zip-o: "\f1c6";
$fa-var-files-o: "\f0c5";
$fa-var-film: "\f008";
$fa-var-filter: "\f0b0";
$fa-var-fire: "\f06d";
$fa-var-fire-extinguisher: "\f134";
$fa-var-firefox: "\f269";
$fa-var-first-order: "\f2b0";
$fa-var-flag: "\f024";
$fa-var-flag-checkered: "\f11e";
$fa-var-flag-o: "\f11d";
$fa-var-flash: "\f0e7";
$fa-var-flask: "\f0c3";
$fa-var-flickr: "\f16e";
$fa-var-floppy-o: "\f0c7";
$fa-var-folder: "\f07b";
$fa-var-folder-o: "\f114";
$fa-var-folder-open: "\f07c";
$fa-var-folder-open-o: "\f115";
$fa-var-font: "\f031";
$fa-var-font-awesome: "\f2b4";
$fa-var-fonticons: "\f280";
$fa-var-fort-awesome: "\f286";
$fa-var-forumbee: "\f211";
$fa-var-forward: "\f04e";
$fa-var-foursquare: "\f180";
$fa-var-free-code-camp: "\f2c5";
$fa-var-frown-o: "\f119";
$fa-var-futbol-o: "\f1e3";
$fa-var-gamepad: "\f11b";
$fa-var-gavel: "\f0e3";
$fa-var-gbp: "\f154";
$fa-var-ge: "\f1d1";
$fa-var-gear: "\f013";
$fa-var-gears: "\f085";
$fa-var-genderless: "\f22d";
$fa-var-get-pocket: "\f265";
$fa-var-gg: "\f260";
$fa-var-gg-circle: "\f261";
$fa-var-gift: "\f06b";
$fa-var-git: "\f1d3";
$fa-var-git-square: "\f1d2";
$fa-var-github: "\f09b";
$fa-var-github-alt: "\f113";
$fa-var-github-square: "\f092";
$fa-var-gitlab: "\f296";
$fa-var-gittip: "\f184";
$fa-var-glass: "\f000";
$fa-var-glide: "\f2a5";
$fa-var-glide-g: "\f2a6";
$fa-var-globe: "\f0ac";
$fa-var-google: "\f1a0";
$fa-var-google-plus: "\f0d5";
$fa-var-google-plus-circle: "\f2b3";
$fa-var-google-plus-official: "\f2b3";
$fa-var-google-plus-square: "\f0d4";
$fa-var-google-wallet: "\f1ee";
$fa-var-graduation-cap: "\f19d";
$fa-var-gratipay: "\f184";
$fa-var-grav: "\f2d6";
$fa-var-group: "\f0c0";
$fa-var-h-square: "\f0fd";
$fa-var-hacker-news: "\f1d4";
$fa-var-hand-grab-o: "\f255";
$fa-var-hand-lizard-o: "\f258";
$fa-var-hand-o-down: "\f0a7";
$fa-var-hand-o-left: "\f0a5";
$fa-var-hand-o-right: "\f0a4";
$fa-var-hand-o-up: "\f0a6";
$fa-var-hand-paper-o: "\f256";
$fa-var-hand-peace-o: "\f25b";
$fa-var-hand-pointer-o: "\f25a";
$fa-var-hand-rock-o: "\f255";
$fa-var-hand-scissors-o: "\f257";
$fa-var-hand-spock-o: "\f259";
$fa-var-hand-stop-o: "\f256";
$fa-var-handshake-o: "\f2b5";
$fa-var-hard-of-hearing: "\f2a4";
$fa-var-hashtag: "\f292";
$fa-var-hdd-o: "\f0a0";
$fa-var-header: "\f1dc";
$fa-var-headphones: "\f025";
$fa-var-heart: "\f004";
$fa-var-heart-o: "\f08a";
$fa-var-heartbeat: "\f21e";
$fa-var-history: "\f1da";
$fa-var-home: "\f015";
$fa-var-hospital-o: "\f0f8";
$fa-var-hotel: "\f236";
$fa-var-hourglass: "\f254";
$fa-var-hourglass-1: "\f251";
$fa-var-hourglass-2: "\f252";
$fa-var-hourglass-3: "\f253";
$fa-var-hourglass-end: "\f253";
$fa-var-hourglass-half: "\f252";
$fa-var-hourglass-o: "\f250";
$fa-var-hourglass-start: "\f251";
$fa-var-houzz: "\f27c";
$fa-var-html5: "\f13b";
$fa-var-i-cursor: "\f246";
$fa-var-id-badge: "\f2c1";
$fa-var-id-card: "\f2c2";
$fa-var-id-card-o: "\f2c3";
$fa-var-ils: "\f20b";
$fa-var-image: "\f03e";
$fa-var-imdb: "\f2d8";
$fa-var-inbox: "\f01c";
$fa-var-indent: "\f03c";
$fa-var-industry: "\f275";
$fa-var-info: "\f129";
$fa-var-info-circle: "\f05a";
$fa-var-inr: "\f156";
$fa-var-instagram: "\f16d";
$fa-var-institution: "\f19c";
$fa-var-internet-explorer: "\f26b";
$fa-var-intersex: "\f224";
$fa-var-ioxhost: "\f208";
$fa-var-italic: "\f033";
$fa-var-joomla: "\f1aa";
$fa-var-jpy: "\f157";
$fa-var-jsfiddle: "\f1cc";
$fa-var-key: "\f084";
$fa-var-keyboard-o: "\f11c";
$fa-var-krw: "\f159";
$fa-var-language: "\f1ab";
$fa-var-laptop: "\f109";
$fa-var-lastfm: "\f202";
$fa-var-lastfm-square: "\f203";
$fa-var-leaf: "\f06c";
$fa-var-leanpub: "\f212";
$fa-var-legal: "\f0e3";
$fa-var-lemon-o: "\f094";
$fa-var-level-down: "\f149";
$fa-var-level-up: "\f148";
$fa-var-life-bouy: "\f1cd";
$fa-var-life-buoy: "\f1cd";
$fa-var-life-ring: "\f1cd";
$fa-var-life-saver: "\f1cd";
$fa-var-lightbulb-o: "\f0eb";
$fa-var-line-chart: "\f201";
$fa-var-link: "\f0c1";
$fa-var-linkedin: "\f0e1";
$fa-var-linkedin-square: "\f08c";
$fa-var-linode: "\f2b8";
$fa-var-linux: "\f17c";
$fa-var-list: "\f03a";
$fa-var-list-alt: "\f022";
$fa-var-list-ol: "\f0cb";
$fa-var-list-ul: "\f0ca";
$fa-var-location-arrow: "\f124";
$fa-var-lock: "\f023";
$fa-var-long-arrow-down: "\f175";
$fa-var-long-arrow-left: "\f177";
$fa-var-long-arrow-right: "\f178";
$fa-var-long-arrow-up: "\f176";
$fa-var-low-vision: "\f2a8";
$fa-var-magic: "\f0d0";
$fa-var-magnet: "\f076";
$fa-var-mail-forward: "\f064";
$fa-var-mail-reply: "\f112";
$fa-var-mail-reply-all: "\f122";
$fa-var-male: "\f183";
$fa-var-map: "\f279";
$fa-var-map-marker: "\f041";
$fa-var-map-o: "\f278";
$fa-var-map-pin: "\f276";
$fa-var-map-signs: "\f277";
$fa-var-mars: "\f222";
$fa-var-mars-double: "\f227";
$fa-var-mars-stroke: "\f229";
$fa-var-mars-stroke-h: "\f22b";
$fa-var-mars-stroke-v: "\f22a";
$fa-var-maxcdn: "\f136";
$fa-var-meanpath: "\f20c";
$fa-var-medium: "\f23a";
$fa-var-medkit: "\f0fa";
$fa-var-meetup: "\f2e0";
$fa-var-meh-o: "\f11a";
$fa-var-mercury: "\f223";
$fa-var-microchip: "\f2db";
$fa-var-microphone: "\f130";
$fa-var-microphone-slash: "\f131";
$fa-var-minus: "\f068";
$fa-var-minus-circle: "\f056";
$fa-var-minus-square: "\f146";
$fa-var-minus-square-o: "\f147";
$fa-var-mixcloud: "\f289";
$fa-var-mobile: "\f10b";
$fa-var-mobile-phone: "\f10b";
$fa-var-modx: "\f285";
$fa-var-money: "\f0d6";
$fa-var-moon-o: "\f186";
$fa-var-mortar-board: "\f19d";
$fa-var-motorcycle: "\f21c";
$fa-var-mouse-pointer: "\f245";
$fa-var-music: "\f001";
$fa-var-navicon: "\f0c9";
$fa-var-neuter: "\f22c";
$fa-var-newspaper-o: "\f1ea";
$fa-var-object-group: "\f247";
$fa-var-object-ungroup: "\f248";
$fa-var-odnoklassniki: "\f263";
$fa-var-odnoklassniki-square: "\f264";
$fa-var-opencart: "\f23d";
$fa-var-openid: "\f19b";
$fa-var-opera: "\f26a";
$fa-var-optin-monster: "\f23c";
$fa-var-outdent: "\f03b";
$fa-var-pagelines: "\f18c";
$fa-var-paint-brush: "\f1fc";
$fa-var-paper-plane: "\f1d8";
$fa-var-paper-plane-o: "\f1d9";
$fa-var-paperclip: "\f0c6";
$fa-var-paragraph: "\f1dd";
$fa-var-paste: "\f0ea";
$fa-var-pause: "\f04c";
$fa-var-pause-circle: "\f28b";
$fa-var-pause-circle-o: "\f28c";
$fa-var-paw: "\f1b0";
$fa-var-paypal: "\f1ed";
$fa-var-pencil: "\f040";
$fa-var-pencil-square: "\f14b";
$fa-var-pencil-square-o: "\f044";
$fa-var-percent: "\f295";
$fa-var-phone: "\f095";
$fa-var-phone-square: "\f098";
$fa-var-photo: "\f03e";
$fa-var-picture-o: "\f03e";
$fa-var-pie-chart: "\f200";
$fa-var-pied-piper: "\f2ae";
$fa-var-pied-piper-alt: "\f1a8";
$fa-var-pied-piper-pp: "\f1a7";
$fa-var-pinterest: "\f0d2";
$fa-var-pinterest-p: "\f231";
$fa-var-pinterest-square: "\f0d3";
$fa-var-plane: "\f072";
$fa-var-play: "\f04b";
$fa-var-play-circle: "\f144";
$fa-var-play-circle-o: "\f01d";
$fa-var-plug: "\f1e6";
$fa-var-plus: "\f067";
$fa-var-plus-circle: "\f055";
$fa-var-plus-square: "\f0fe";
$fa-var-plus-square-o: "\f196";
$fa-var-podcast: "\f2ce";
$fa-var-power-off: "\f011";
$fa-var-print: "\f02f";
$fa-var-product-hunt: "\f288";
$fa-var-puzzle-piece: "\f12e";
$fa-var-qq: "\f1d6";
$fa-var-qrcode: "\f029";
$fa-var-question: "\f128";
$fa-var-question-circle: "\f059";
$fa-var-question-circle-o: "\f29c";
$fa-var-quora: "\f2c4";
$fa-var-quote-left: "\f10d";
$fa-var-quote-right: "\f10e";
$fa-var-ra: "\f1d0";
$fa-var-random: "\f074";
$fa-var-ravelry: "\f2d9";
$fa-var-rebel: "\f1d0";
$fa-var-recycle: "\f1b8";
$fa-var-reddit: "\f1a1";
$fa-var-reddit-alien: "\f281";
$fa-var-reddit-square: "\f1a2";
$fa-var-refresh: "\f021";
$fa-var-registered: "\f25d";
$fa-var-remove: "\f00d";
$fa-var-renren: "\f18b";
$fa-var-reorder: "\f0c9";
$fa-var-repeat: "\f01e";
$fa-var-reply: "\f112";
$fa-var-reply-all: "\f122";
$fa-var-resistance: "\f1d0";
$fa-var-retweet: "\f079";
$fa-var-rmb: "\f157";
$fa-var-road: "\f018";
$fa-var-rocket: "\f135";
$fa-var-rotate-left: "\f0e2";
$fa-var-rotate-right: "\f01e";
$fa-var-rouble: "\f158";
$fa-var-rss: "\f09e";
$fa-var-rss-square: "\f143";
$fa-var-rub: "\f158";
$fa-var-ruble: "\f158";
$fa-var-rupee: "\f156";
$fa-var-s15: "\f2cd";
$fa-var-safari: "\f267";
$fa-var-save: "\f0c7";
$fa-var-scissors: "\f0c4";
$fa-var-scribd: "\f28a";
$fa-var-search: "\f002";
$fa-var-search-minus: "\f010";
$fa-var-search-plus: "\f00e";
$fa-var-sellsy: "\f213";
$fa-var-send: "\f1d8";
$fa-var-send-o: "\f1d9";
$fa-var-server: "\f233";
$fa-var-share: "\f064";
$fa-var-share-alt: "\f1e0";
$fa-var-share-alt-square: "\f1e1";
$fa-var-share-square: "\f14d";
$fa-var-share-square-o: "\f045";
$fa-var-shekel: "\f20b";
$fa-var-sheqel: "\f20b";
$fa-var-shield: "\f132";
$fa-var-ship: "\f21a";
$fa-var-shirtsinbulk: "\f214";
$fa-var-shopping-bag: "\f290";
$fa-var-shopping-basket: "\f291";
$fa-var-shopping-cart: "\f07a";
$fa-var-shower: "\f2cc";
$fa-var-sign-in: "\f090";
$fa-var-sign-language: "\f2a7";
$fa-var-sign-out: "\f08b";
$fa-var-signal: "\f012";
$fa-var-signing: "\f2a7";
$fa-var-simplybuilt: "\f215";
$fa-var-sitemap: "\f0e8";
$fa-var-skyatlas: "\f216";
$fa-var-skype: "\f17e";
$fa-var-slack: "\f198";
$fa-var-sliders: "\f1de";
$fa-var-slideshare: "\f1e7";
$fa-var-smile-o: "\f118";
$fa-var-snapchat: "\f2ab";
$fa-var-snapchat-ghost: "\f2ac";
$fa-var-snapchat-square: "\f2ad";
$fa-var-snowflake-o: "\f2dc";
$fa-var-soccer-ball-o: "\f1e3";
$fa-var-sort: "\f0dc";
$fa-var-sort-alpha-asc: "\f15d";
$fa-var-sort-alpha-desc: "\f15e";
$fa-var-sort-amount-asc: "\f160";
$fa-var-sort-amount-desc: "\f161";
$fa-var-sort-asc: "\f0de";
$fa-var-sort-desc: "\f0dd";
$fa-var-sort-down: "\f0dd";
$fa-var-sort-numeric-asc: "\f162";
$fa-var-sort-numeric-desc: "\f163";
$fa-var-sort-up: "\f0de";
$fa-var-soundcloud: "\f1be";
$fa-var-space-shuttle: "\f197";
$fa-var-spinner: "\f110";
$fa-var-spoon: "\f1b1";
$fa-var-spotify: "\f1bc";
$fa-var-square: "\f0c8";
$fa-var-square-o: "\f096";
$fa-var-stack-exchange: "\f18d";
$fa-var-stack-overflow: "\f16c";
$fa-var-star: "\f005";
$fa-var-star-half: "\f089";
$fa-var-star-half-empty: "\f123";
$fa-var-star-half-full: "\f123";
$fa-var-star-half-o: "\f123";
$fa-var-star-o: "\f006";
$fa-var-steam: "\f1b6";
$fa-var-steam-square: "\f1b7";
$fa-var-step-backward: "\f048";
$fa-var-step-forward: "\f051";
$fa-var-stethoscope: "\f0f1";
$fa-var-sticky-note: "\f249";
$fa-var-sticky-note-o: "\f24a";
$fa-var-stop: "\f04d";
$fa-var-stop-circle: "\f28d";
$fa-var-stop-circle-o: "\f28e";
$fa-var-street-view: "\f21d";
$fa-var-strikethrough: "\f0cc";
$fa-var-stumbleupon: "\f1a4";
$fa-var-stumbleupon-circle: "\f1a3";
$fa-var-subscript: "\f12c";
$fa-var-subway: "\f239";
$fa-var-suitcase: "\f0f2";
$fa-var-sun-o: "\f185";
$fa-var-superpowers: "\f2dd";
$fa-var-superscript: "\f12b";
$fa-var-support: "\f1cd";
$fa-var-table: "\f0ce";
$fa-var-tablet: "\f10a";
$fa-var-tachometer: "\f0e4";
$fa-var-tag: "\f02b";
$fa-var-tags: "\f02c";
$fa-var-tasks: "\f0ae";
$fa-var-taxi: "\f1ba";
$fa-var-telegram: "\f2c6";
$fa-var-television: "\f26c";
$fa-var-tencent-weibo: "\f1d5";
$fa-var-terminal: "\f120";
$fa-var-text-height: "\f034";
$fa-var-text-width: "\f035";
$fa-var-th: "\f00a";
$fa-var-th-large: "\f009";
$fa-var-th-list: "\f00b";
$fa-var-themeisle: "\f2b2";
$fa-var-thermometer: "\f2c7";
$fa-var-thermometer-0: "\f2cb";
$fa-var-thermometer-1: "\f2ca";
$fa-var-thermometer-2: "\f2c9";
$fa-var-thermometer-3: "\f2c8";
$fa-var-thermometer-4: "\f2c7";
$fa-var-thermometer-empty: "\f2cb";
$fa-var-thermometer-full: "\f2c7";
$fa-var-thermometer-half: "\f2c9";
$fa-var-thermometer-quarter: "\f2ca";
$fa-var-thermometer-three-quarters: "\f2c8";
$fa-var-thumb-tack: "\f08d";
$fa-var-thumbs-down: "\f165";
$fa-var-thumbs-o-down: "\f088";
$fa-var-thumbs-o-up: "\f087";
$fa-var-thumbs-up: "\f164";
$fa-var-ticket: "\f145";
$fa-var-times: "\f00d";
$fa-var-times-circle: "\f057";
$fa-var-times-circle-o: "\f05c";
$fa-var-times-rectangle: "\f2d3";
$fa-var-times-rectangle-o: "\f2d4";
$fa-var-tint: "\f043";
$fa-var-toggle-down: "\f150";
$fa-var-toggle-left: "\f191";
$fa-var-toggle-off: "\f204";
$fa-var-toggle-on: "\f205";
$fa-var-toggle-right: "\f152";
$fa-var-toggle-up: "\f151";
$fa-var-trademark: "\f25c";
$fa-var-train: "\f238";
$fa-var-transgender: "\f224";
$fa-var-transgender-alt: "\f225";
$fa-var-trash: "\f1f8";
$fa-var-trash-o: "\f014";
$fa-var-tree: "\f1bb";
$fa-var-trello: "\f181";
$fa-var-tripadvisor: "\f262";
$fa-var-trophy: "\f091";
$fa-var-truck: "\f0d1";
$fa-var-try: "\f195";
$fa-var-tty: "\f1e4";
$fa-var-tumblr: "\f173";
$fa-var-tumblr-square: "\f174";
$fa-var-turkish-lira: "\f195";
$fa-var-tv: "\f26c";
$fa-var-twitch: "\f1e8";
$fa-var-twitter: "\f099";
$fa-var-twitter-square: "\f081";
$fa-var-umbrella: "\f0e9";
$fa-var-underline: "\f0cd";
$fa-var-undo: "\f0e2";
$fa-var-universal-access: "\f29a";
$fa-var-university: "\f19c";
$fa-var-unlink: "\f127";
$fa-var-unlock: "\f09c";
$fa-var-unlock-alt: "\f13e";
$fa-var-unsorted: "\f0dc";
$fa-var-upload: "\f093";
$fa-var-usb: "\f287";
$fa-var-usd: "\f155";
$fa-var-user: "\f007";
$fa-var-user-circle: "\f2bd";
$fa-var-user-circle-o: "\f2be";
$fa-var-user-md: "\f0f0";
$fa-var-user-o: "\f2c0";
$fa-var-user-plus: "\f234";
$fa-var-user-secret: "\f21b";
$fa-var-user-times: "\f235";
$fa-var-users: "\f0c0";
$fa-var-vcard: "\f2bb";
$fa-var-vcard-o: "\f2bc";
$fa-var-venus: "\f221";
$fa-var-venus-double: "\f226";
$fa-var-venus-mars: "\f228";
$fa-var-viacoin: "\f237";
$fa-var-viadeo: "\f2a9";
$fa-var-viadeo-square: "\f2aa";
$fa-var-video-camera: "\f03d";
$fa-var-vimeo: "\f27d";
$fa-var-vimeo-square: "\f194";
$fa-var-vine: "\f1ca";
$fa-var-vk: "\f189";
$fa-var-volume-control-phone: "\f2a0";
$fa-var-volume-down: "\f027";
$fa-var-volume-off: "\f026";
$fa-var-volume-up: "\f028";
$fa-var-warning: "\f071";
$fa-var-wechat: "\f1d7";
$fa-var-weibo: "\f18a";
$fa-var-weixin: "\f1d7";
$fa-var-whatsapp: "\f232";
$fa-var-wheelchair: "\f193";
$fa-var-wheelchair-alt: "\f29b";
$fa-var-wifi: "\f1eb";
$fa-var-wikipedia-w: "\f266";
$fa-var-window-close: "\f2d3";
$fa-var-window-close-o: "\f2d4";
$fa-var-window-maximize: "\f2d0";
$fa-var-window-minimize: "\f2d1";
$fa-var-window-restore: "\f2d2";
$fa-var-windows: "\f17a";
$fa-var-won: "\f159";
$fa-var-wordpress: "\f19a";
$fa-var-wpbeginner: "\f297";
$fa-var-wpexplorer: "\f2de";
$fa-var-wpforms: "\f298";
$fa-var-wrench: "\f0ad";
$fa-var-xing: "\f168";
$fa-var-xing-square: "\f169";
$fa-var-y-combinator: "\f23b";
$fa-var-y-combinator-square: "\f1d4";
$fa-var-yahoo: "\f19e";
$fa-var-yc: "\f23b";
$fa-var-yc-square: "\f1d4";
$fa-var-yelp: "\f1e9";
$fa-var-yen: "\f157";
$fa-var-yoast: "\f2b1";
$fa-var-youtube: "\f167";
$fa-var-youtube-play: "\f16a";
$fa-var-youtube-square: "\f166";
/*!
* Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
*/
@import "variables";
@import "mixins";
@import "path";
@import "core";
@import "larger";
@import "fixed-width";
@import "list";
@import "bordered-pulled";
@import "animated";
@import "rotated-flipped";
@import "stacked";
@import "icons";
@import "screen-reader";
/* Element Chalk Variables */
/* Colors
-------------------------- */
$--color-white: #fff !default;
$--color-333: #333 !default;
$--color-666: #666 !default;
$--color-999: #999 !default;
$--color-primary: #017BCE !default;
$--color-primary-light: #026CB4 !default;
$--color-text-primary: #017BCE !default;
$--link-color: $--color-primary-light !default;
$--link-hover-color: $--color-primary !default;
/* Checkbox
-------------------------- */
$--checkbox-font-size: 14px !default;
$--checkbox-font-weight: 500 !default;
$--checkbox-color: $--color-666 !default;
$--checkbox-input-height: 14px !default;
$--checkbox-input-width: 14px !default;
$--checkbox-border-radius: 0px !default;
$--checkbox-input-fill: $--color-white !default;
$--checkbox-input-border: 1px solid #40a2de !default;
$--checkbox-input-border-color: #40a2de !default;
$--checkbox-icon-color: $--color-white !default;
$--radio-input-height: 14px !default;
$--radio-input-width: 14px !default;
$--checkbox-bordered-height: 30px !default;
$--checkbox-bordered-small-height: 30px !default;
/* Input
-------------------------- */
$--input-height: 30px !default;
$--input-border: 1px solid #40a2de !default;
$--input-border-color: #40a2de !default;
$--input-border-radius: 0 !default;
$--input-hover-border: #40a2de !default;
/* Radio
-------------------------- */
$--radio-input-height: 14px !default;
$--radio-input-width: 14px !default;
$--radio-input-border: 1px solid #40a2de !default;
$--radio-checked-input-border-color: #40a2de !default;
$--radio-checked-icon-color: #fff !default;
/* Select
-------------------------- */
$--select-border-color-hover: #40a2de !default;
/* Tooltip
-------------------------- */
$--tooltip-fill: #000 !default;
$--tooltip-color: $--color-white !default;
$--tooltip-font-size: 12px !default;
$--tooltip-arrow-size: 6px !default;
$--tooltip-padding: 10px !default;
$--tooltip-border-color: #000 !default;
export const tableDataMixin = {
data() {
return {
pageNum: 1,
pageSize: 10,
pageSizes: [10, 20, 50],
total: 0,
sortName: '',
sortValue: '',
pagination: true,
multipleSelection: []
}
},
mounted() {
if (this.$refs.searchForm) {
let _this = this
// enter键登录
this.$refs.searchForm.$el.onkeydown = function(e) {
let key = window.event.keyCode
if (key === 13) {
_this.getTableData()
}
}
}
},
methods: {
search() {
this.tableData.loading = true
/* this.pageNum = 1*/
this.getTableData()
},
handleSizeChange(val) {
this.pageNum = 1
this.pageSize = val
this.getTableData()
},
handleCurrentChange(val) {
this.pageNum = val
this.getTableData()
},
handleRowClick(row, event, column) {
this.$refs.table.toggleRowSelection(row)
},
handleSelectionChange(val) {
this.multipleSelection = val
},
tableRowClassName({row, rowIndex}) {
for (let item of this.multipleSelection) {
if (item.id && item.id === row.id) {
return 'selected-row'
}
}
},
handleSortChange({prop, order}) {
this.sortName = prop
if (order === 'descending') {
this.sortValue = 'desc'
} else {
this.sortValue = 'asc'
}
this.getTableData()
},
dealTableResponse(res) {
this.tableData.loading = false
if (res && res.msg==201) {
this.tableData.body = res.respData.list
if(this.tableData.body.length==0){
this.pagination = false
}else {
this.pagination = true
}
this.pageNum = res.respData.pageNum > 0 ? res.respData.pageNum : 1
this.pageSize = res.respData.pageSize ? res.respData.pageSize :10
this.total = res.respData.total
} else {
this.$message.error(res.msg)
}
},
resetForm(formName) {
this.$refs[formName].resetFields()
this.search()
}
}
}
<template>
<div class="main-table">
<slot></slot>
<div
class="main-table-pagination"
v-if="pagination"
>
<el-pagination
:current-page="pageNum"
:page-size="pageSize"
background
:page-sizes="pageSizes"
:total="total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:layout="pageLayout"
:class="align"
>
</el-pagination>
</div>
</div>
</template>
<script>
export default {
name: 'TableMixin',
props: {
pagination: Boolean,
paginationAlign: {
type: String,
default: 'right'
},
pageLayout: {
type: String,
default: 'total, sizes, prev, pager, next, jumper'
},
pageSize: {
type: Number,
default: 10
},
pageSizes: {
type: Array,
default: function() {
return [10, 20, 50]
}
},
total: {
type: Number,
default: 0
},
pageNum: {
type: Number,
default: 1
},
handleSizeChange: {
type: Function,
default: function() {
return null
}
},
handleCurrentChange: {
type: Function,
default: function() {
return null
}
}
},
computed: {
align() {
let res
switch (this.paginationAlign) {
case 'right':
res = 'textR'
break
case 'center':
res = 'textC'
break
default:
res = ''
}
return res
}
}
}
</script>
<style lang="scss">
.sys-table {
position: relative;
}
</style>
// 组件全局注册
import Vue from 'vue'
import TableMixin from './TableMixin'
// 组件库
const Components = [
TableMixin
]
// 注册全局组件
Components.map((com) => {
Vue.component(com.name, com)
})
export default Vue
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import 'babel-polyfill'
import Vue from 'vue'
import App from './App'
import router from './router'
import ElementUI from 'element-ui';
import Echarts from 'echarts';
import store from './store'
import axios from './util/ajax'
import 'sysStatic/css/theme-default-new.scss'
//import '../mock/index.js'
import './components/install'
import {message} from './util/resetMessage';
Vue.config.productionTip = false
Vue.prototype.$axios = axios;
Vue.prototype.$echarts = Echarts;
Vue.use(ElementUI)
Vue.prototype.$message = message;
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
axios,
store,
components: { App },
template: '<App/>'
})
<template>
<el-dialog
title="绑定站点"
:visible.sync="dialogVisible"
width="500px"
@closed="closedHandler"
:close-on-click-modal="false"
>
<el-form
ref="dataForm"
:model="dataForm"
size="small"
label-width="150px"
:rules="rules"
v-loading="loading"
>
<el-form-item
label="站点名称"
prop="siteId"
>
<el-select
v-model="dataForm.siteId"
placeholder="请选择站点"
style="width: 100%"
>
<el-option
v-for="item in siteList"
:label="item.siteName"
:key="item.id"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item
label="上级医院名称"
prop="hospitalCode"
>
<el-select
v-model="dataForm.hospitalCode"
placeholder="请选择上级医院"
style="width: 100%"
>
<el-option
v-for="item in hospitalList"
:label="item.hospitalName"
:key="item.id"
:value="item.hospitalCode"
/>
</el-select>
</el-form-item>
</el-form>
<span
slot="footer"
class="dialog-footer"
>
<el-button
size="small"
@click="dialogVisible = false"
>取 消</el-button>
<el-button
type="primary"
size="small"
@click="submitForm()"
>确 定</el-button>
</span>
</el-dialog>
</template>
<script>
import { queryTeamEmergencyCarInfo, bindSiteToEmergencyCar } from '@/api/emergencyCar'
import { queryEmergencyHospitalList } from '@/api/common'
import { queryEmergencySiteList } from '@/api/site'
export default {
data() {
return {
dialogVisible: false,
loading: false,
dataForm: {
siteId: '',
hospitalCode: ''
},
siteList: [],
hospitalList: [],
rules: {
siteId: [
{ required: true, message: '请选择站点' },
],
hospitalCode: [
{ required: true, message: '请选择上级医院' },
]
}
}
},
mounted() {
//获取可选择的医院
queryEmergencyHospitalList().then(res => {
this.hospitalList = res.respData
})
queryEmergencySiteList().then(res => {
this.siteList = res.respData
})
},
methods: {
init(id) {
this.dialogVisible = true
this.loading = true
if (!id) {
this.$message.error('救护车id不能为空')
return
}
queryTeamEmergencyCarInfo({ id: id }).then(res => {
if (res.msg === 201) {
const { hospitalCode, siteId } = res.respData
this.dataForm = {
id: id,
hospitalCode: hospitalCode,
siteId: siteId
}
this.$nextTick(() => {
this.loading = false
this.$refs.dataForm.clearValidate()
})
} else {
this.$message.error(res.content);
}
})
},
submitForm() {
this.$refs.dataForm.validate((valid) => {
if (valid) {
const params = {
...this.dataForm
}
const hospital = this.hospitalList.find(i => i.hospitalCode === this.dataForm.hospitalCode)
if (!hospital) {
this.$message.error('无效数据');
return
}
const { hospitalName, id } = hospital
params.hospitalName = hospitalName
params.hospitalId = id
const site = this.siteList.find(i => i.id === this.dataForm.siteId)
if (!site) {
this.$message.error('无效数据');
return
}
const { siteName } = site
params.siteName = siteName
bindSiteToEmergencyCar(params).then(res => {
if (res.msg === 201) {
this.dialogVisible = false
this.$message.success('绑定成功')
this.$emit('subsucc')
} else {
this.$message.error(res.content)
}
})
}
})
},
closedHandler() {
this.$refs.dataForm.resetFields()
}
}
}
</script>
<style>
</style>
\ No newline at end of file
<template>
<el-dialog
title="武汉市医疗急救车辆信息填写"
:visible.sync="dialogVisible"
width="1200px"
@closed="closedHandler"
:close-on-click-modal="false"
class="emergencyCarDialog"
>
<el-form
ref="dataForm"
:model="dataForm"
size="small"
label-width="300px"
:rules="rules"
v-loading="loading"
>
<el-row>
<el-col :span="12">
<el-form-item
label="车辆使用单位(请填写单位全称)"
prop="vehicleUsingUnit"
>
<el-input
placeholder="请输入车辆使用单位"
v-model="dataForm.vehicleUsingUnit"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="辖区(多个院区则填写主院区所属辖区)"
prop="area"
>
<el-select
v-model="dataForm.area"
placeholder="请选择辖区"
style="width: 100%"
>
<el-option
v-for="item in areaList"
:label="item.name"
:key="item.id"
:value="item.val"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item
label="单位性质"
prop="unitType"
>
<el-radio-group v-model="dataForm.unitType">
<el-radio :label="1">公立医疗</el-radio>
<el-radio :label="2">民营医院</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="车辆类型"
prop="vechieType"
>
<el-select
v-model="dataForm.vechieType"
placeholder="请选择车辆类型"
style="width: 100%"
>
<el-option
v-for="item in vechieTypeList"
:label="item.name"
:key="item.id"
:value="item.val"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item
label="车辆管理负责人"
prop="vehicleManager"
>
<el-input
placeholder="请输入车辆管理负责人"
v-model="dataForm.vehicleManager"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="是否为院前急救车(车辆用途)"
prop="isPreHospitalVechie"
>
<el-radio-group v-model="dataForm.isPreHospitalVechie">
<el-radio :label="1"></el-radio>
<el-radio :label="2"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item
label="负责人联系方式(11位手机号)"
prop="contactPhone"
>
<el-input
placeholder="请输入负责人联系方式"
v-model="dataForm.contactPhone"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="车辆来源"
prop="vechieSource"
>
<el-radio-group v-model="dataForm.vechieSource">
<el-radio :label="1">购买</el-radio>
<el-radio :label="2">捐赠</el-radio>
<el-radio :label="3">划拨</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item
label="车辆品牌"
prop="vechieBrand"
>
<el-input
placeholder="请输入车辆品牌"
v-model="dataForm.vechieBrand"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="首次登记日期"
prop="firstRegisterDate"
>
<el-date-picker
type="datetime"
placeholder="请选择首次登记日期"
v-model="dataForm.firstRegisterDate"
style="width: 100%;"
format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item
label="车辆识别代码(11位车架号)"
prop="vechieVinCode"
>
<el-input
placeholder="请输入车辆识别代码"
v-model="dataForm.vechieVinCode"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="车辆使用状态"
prop="vechieUseStatus"
>
<el-radio-group v-model="dataForm.vechieUseStatus">
<el-radio :label="1">在用</el-radio>
<el-radio :label="2">闲置</el-radio>
<el-radio :label="3">其他</el-radio>
</el-radio-group>
<el-input
v-if="dataForm.vechieUseStatus === 3"
placeholder="若选择其他,请手动输入车辆使用状态"
v-model="dataForm.otherStatus"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item
label="车辆是否上牌"
prop="vechieIsLicense"
>
<el-radio-group v-model="dataForm.vechieIsLicense">
<el-radio :label="1"></el-radio>
<el-radio :label="2"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="车辆特殊用途"
prop="vechieSpecialPurpose"
>
<el-select
v-model="dataForm.vechieSpecialPurpose"
placeholder="请选择车辆特殊用途"
style="width: 100%"
>
<el-option
v-for="item in vechieSpecialPurposeList"
:label="item.name"
:key="item.id"
:value="item.val"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item
label="车牌号"
prop="licensePlateNumber"
>
<el-input
placeholder="请输入车牌号"
v-model="dataForm.licensePlateNumber"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="备注(若无可略过)"
prop="remark"
>
<el-input
placeholder="请输入备注"
v-model="dataForm.remark"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<span
slot="footer"
class="dialog-footer"
>
<el-button
size="small"
@click="dialogVisible = false"
>取 消</el-button>
<el-button
type="primary"
size="small"
@click="submitForm()"
>确 定</el-button>
</span>
</el-dialog>
</template>
<script>
import { getDic } from '../../../util/dict'
import { saveOrUpdateEmergencyCar, queryTeamEmergencyCarInfo } from '@/api/emergencyCar'
export default {
name: 'emergencyCarDialog',
data() {
const checkVechieUseStatus = (rule, value, callback) => {
if (value === 3 && !(this.dataForm.otherStatus)) {
callback(new Error('若选择其他,请手动输入车辆使用状态'))
} else {
callback()
}
}
const checkContactPhone = (rule, value, callback) => {
let reg = /^[1][3,4,5,7,8,9][0-9]{9}$/;
if (!reg.test(value)) {
callback(new Error("请输入正确格式的联系方式"))
} else {
callback()
}
};
return {
dialogVisible: false,
loading: false,
dataForm: {
vehicleUsingUnit: '',
area: '',
unitType: '',
vechieType: '',
vehicleManager: '',
isPreHospitalVechie: '',
contactPhone: '',
vechieSource: '',
vechieBrand: '',
firstRegisterDate: '',
vechieVinCode: '',
vechieUseStatus: '',
vechieIsLicense: '',
vechieSpecialPurpose: '',
licensePlateNumber: '',
remark: ''
},
rules: {
vehicleUsingUnit: [
{ required: true, message: '请输入车辆使用单位' },
],
area: [
{ required: true, message: '请选择辖区' },
],
unitType: [
{ required: true, message: '请选择单位性质' },
],
vechieType: [
{ required: true, message: '请选择车辆类型' },
],
vehicleManager: [
{ required: true, message: '请输入车辆管理负责人' },
],
isPreHospitalVechie: [
{ required: true, message: '请选择是否为院前急救车' },
],
contactPhone: [
{ required: true, message: '请输入负责人联系方式' },
{ validator: checkContactPhone }
],
vechieSource: [
{ required: true, message: '请选择车辆来源' },
],
vechieBrand: [
{ required: true, message: '请输入车辆品牌' },
],
firstRegisterDate: [
{ required: true, message: '请选择首次登记日期' },
],
vechieVinCode: [
{ required: true, max: 11, message: '请输入正确格式的车辆识别代码' }
],
vechieUseStatus: [
{ required: true, message: '请选择车辆使用状态' },
{ validator: checkVechieUseStatus }
],
vechieIsLicense: [
{ required: true, message: '请选择车辆是否上牌' },
],
licensePlateNumber: [
{ required: true, message: '请输入车牌号' },
],
},
vechieTypeList: [],
areaList: [],
type: 'add',
vechieSpecialPurposeList: []
}
},
mounted() {
// 获取字典
getDic(['vechie_type', 'area', 'vechie_special_purpose']).then(res => {
this.vechieTypeList = res.vechie_type
this.areaList = res.area
this.vechieSpecialPurposeList = res.vechie_special_purpose
})
},
methods: {
resetForm(formName) {
this.$refs[formName].resetFields()
this.search()
},
submitForm() {
this.$refs.dataForm.validate((valid) => {
if (valid) {
const params = {
...this.dataForm
}
saveOrUpdateEmergencyCar(params).then(res => {
if (res.msg === 201) {
this.dialogVisible = false
this.$message.success(this.type === 'add' ? '新增成功!' : '修改成功')
this.$emit('subsucc')
} else {
this.$message.error(res.content)
}
})
}
})
},
init(type, id) {
this.dialogVisible = true
this.loading = true
this.type = type
if (type === 'update') {
if (!id) {
this.$message.error('救护车id不能为空')
return
}
queryTeamEmergencyCarInfo({ id: id }).then(res => {
if (res.msg === 201) {
this.dataForm = res.respData
this.$nextTick(() => {
this.loading = false
this.$refs.dataForm.clearValidate()
})
} else {
this.$message.error(res.content);
}
})
} else {
this.dataForm = {}
this.$nextTick(() => {
this.loading = false
this.$refs.dataForm.clearValidate()
})
}
},
closedHandler() {
this.$refs.dataForm.resetFields()
}
}
}
</script>
<style lang="scss">
.emergencyCarDialog {
.el-input {
// width: 200px;
}
}
</style>
<template>
<div class="main-page">
<div class="main-page-header">
<p class="title">急救车资源</p>
<el-form
:inline="true"
:model="searchForm"
ref="searchForm"
size="small"
>
<el-form-item
prop="vechieType"
label="车辆类型"
>
<el-select
v-model="searchForm.vechieType"
placeholder="请选择车辆类型"
style="width: 100%"
:clearable="true"
>
<el-option
v-for="item in vechieTypeList"
:label="item.name"
:key="item.id"
:value="item.val"
/>
</el-select>
</el-form-item>
<el-form-item
prop="vechieUseStatus"
label="车辆状态"
>
<el-radio-group v-model="searchForm.vechieUseStatus">
<el-radio label="">全部</el-radio>
<el-radio label="1">在用</el-radio>
<el-radio label="2">闲置</el-radio>
<el-radio label="3">其他</el-radio>
</el-radio-group>
</el-form-item>
<div class="btns">
<el-button
type="primary"
size="small"
@click="search"
>查询</el-button>
<el-button
size="small"
@click="resetForm('searchForm')"
>重置</el-button>
</div>
</el-form>
</div>
<div class="main-page-body">
<div class="mainContent">
<div class="bt">
<el-button
type="primary"
size="small"
@click="showEmergencyCarDialog()"
>新增</el-button>
</div>
<table-mixin
:pageSize="pageSize"
:pageNum="pageNum"
:total="total"
:pagination="pagination"
:handleSizeChange="handleSizeChange"
:handleCurrentChange="handleCurrentChange"
>
<el-table
v-loading="tableData.loading"
:data="tableData.body"
@sort-change="handleSortChange"
>
<div
slot="empty"
class="noData"
></div>
<el-table-column
label="序号"
type="index"
width="50"
>
</el-table-column>
<el-table-column
v-for="(item,index) in tableData.head"
:prop="item.key"
:label="item.name"
align="left"
:formatter="item.formatter"
:sortable="item.sortable"
:fixed="item.fixed"
:key="index"
:width="item.width"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
label="操作"
align="left"
width="auto"
min-width="200px"
>
<template slot-scope="scope">
<el-link
type="primary"
@click="showEmergencyCarDialog('update', scope.row.id)"
>修改</el-link>
<el-link
type="primary"
@click="delHandler(scope.row.id)"
>删除</el-link>
<el-link
type="primary"
@click="siteHandler(scope.row.id)"
>绑定站点</el-link>
</template>
</el-table-column>
</el-table>
</table-mixin>
<EmergencyCarDialog
ref="emergencyCarDialog"
@subsucc="search"
/>
<BindSiteDialog
ref="bindSiteDialog"
@subsucc="search"
/>
</div>
</div>
</div>
</template>
<script>
import { tableDataMixin } from '../../common/js/mixin'
import EmergencyCarDialog from './components/emergencyCarDialog.vue'
import BindSiteDialog from './components/bindSiteDialog.vue'
import { queryEmergencyCarPageList, deleteEmergencyCar } from '@/api/emergencyCar'
import { getDic } from '../../util/dict'
export default {
name: 'emergencyCar',
mixins: [tableDataMixin],
components: {
EmergencyCarDialog,
BindSiteDialog
},
data() {
return {
searchForm: {
vechieUseStatus: '',
vechieType: ''
},
vechieTypeList: [],
areaList: [],
tableData: {
loading: false,
head: [
{
name: '车辆使用单位',
key: 'vehicleUsingUnit',
sortable: false,
width: '200',
fixed: false
},
{
name: '辖区',
key: 'area',
sortable: false,
width: '120',
fixed: false,
formatter: this.areaFormatter
},
{
name: '急救车牌号',
key: 'licensePlateNumber',
sortable: false,
width: '120',
fixed: false
},
{
name: '车辆负责人',
key: 'vehicleManager',
sortable: false,
width: '200',
fixed: false
},
{
name: '当前车辆状态',
key: 'vechieUseStatus',
sortable: false,
width: '80',
fixed: false,
formatter: this.vechieUseStatusFormatter
},
{
name: '是否院前急救',
key: 'isPreHospitalVechie',
sortable: false,
width: '80',
fixed: false,
formatter: this.isPreHospitalVechieFormatter
},
{
name: '车辆类型',
key: 'vechieType',
sortable: false,
width: '120',
fixed: false,
formatter: this.vechieTypeFormatter
}
],
body: [],
option: [],
condition: []
}
}
},
mounted() {
// 获取字典
getDic(['vechie_type', 'area']).then(res => {
this.vechieTypeList = res.vechie_type
this.areaList = res.area
})
this.search()
},
methods: {
getTableData() {
this.tableData.loading = true
const params = {
...this.searchForm,
pageNo: this.pageNum,
pageSize: this.pageSize
}
queryEmergencyCarPageList(params).then((res) => {
if (res.msg == 201) {
this.dealTableResponse(res)
} else {
this.$message.error(res.content)
}
})
},
showEmergencyCarDialog(type = 'add', id = '') {
this.$refs.emergencyCarDialog.init(type, id)
},
siteHandler(id = "") {
this.$refs.bindSiteDialog.init(id)
},
areaFormatter(row, column, cellValue, index) {
const area = this.areaList.find(i => i.val === cellValue)
return area ? area.name : ''
},
vechieUseStatusFormatter(row, column, cellValue, index) {
const vechieUseStatusList = ['', '在用', '闲置', '其他']
return vechieUseStatusList[cellValue] || ''
},
isPreHospitalVechieFormatter(row, column, cellValue, index) {
const isPreHospitalVechieList = ['', '是', '否']
return isPreHospitalVechieList[cellValue] || ''
},
vechieTypeFormatter(row, column, cellValue, index) {
const vechieType = this.vechieTypeList.find(i => i.val === cellValue)
return vechieType ? vechieType.name : ''
},
delHandler(id) {
this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$message({
type: 'success',
message: '删除成功!'
});
deleteEmergencyCar({ id: id }).then(res => {
if (res.msg === 201) {
this.$message.success('删除成功!')
} else {
this.$message.success(res.content)
}
this.search()
})
})
}
}
}
</script>
<style lang="scss" scoped>
.mainContent {
padding: 20px;
.bt {
text-align: right;
margin-bottom: 16px;
}
}
</style>
<template>
<div>
401:没有操作权限
<a @click="back">返回上一页</a>
</div>
</template>
<script>
export default {
methods: {
back() {
this.$router.go(-1)
}
}
}
</script>
<template>
<div>
403:访问被拒绝
<a @click="back">返回上一页</a>
</div>
</template>
<script>
export default {
methods: {
back() {
this.$router.go(-1)
}
}
}
</script>
<template>
<div>
404
<a @click="back">返回上一页</a>
</div>
</template>
<script>
export default {
methods: {
back() {
this.$router.go(-1)
}
}
}
</script>
<template>
<div>
500:系统出现未知错误
<a @click="back">返回首页</a>
</div>
</template>
<script>
export default {
methods: {
back() {
this.$router.replace('home')
}
}
}
</script>
<template>
<div class="error-page">
<router-view></router-view>
</div>
</template>
<template>
<el-dialog
title="绑定站点"
:visible.sync="dialogVisible"
width="500px"
@closed="closedHandler"
:close-on-click-modal="false"
>
<el-form
ref="dataForm"
:model="dataForm"
size="small"
label-width="150px"
:rules="rules"
v-loading="loading"
>
<el-form-item
label="站点名称"
prop="siteId"
>
<el-select
v-model="dataForm.siteId"
placeholder="请选择站点"
style="width: 100%"
>
<el-option
v-for="item in siteList"
:label="item.siteName"
:key="item.id"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item
label="上级医院名称"
prop="hospitalCode"
>
<el-select
v-model="dataForm.hospitalCode"
placeholder="请选择上级医院"
style="width: 100%"
>
<el-option
v-for="item in hospitalList"
:label="item.hospitalName"
:key="item.id"
:value="item.hospitalCode"
/>
</el-select>
</el-form-item>
</el-form>
<span
slot="footer"
class="dialog-footer"
>
<el-button
size="small"
@click="dialogVisible = false"
>取 消</el-button>
<el-button
type="primary"
size="small"
@click="submitForm()"
>确 定</el-button>
</span>
</el-dialog>
</template>
<script>
import { queryTeamEmergencyCarInfo, bindSiteToEmergencyCar } from '@/api/emergencyCar'
import { queryEmergencyHospitalList } from '@/api/common'
import { queryEmergencySiteList } from '@/api/site'
export default {
data() {
return {
dialogVisible: false,
loading: false,
dataForm: {
siteId: '',
hospitalCode: ''
},
siteList: [],
hospitalList: [],
rules: {
siteId: [
{ required: true, message: '请选择站点' },
],
hospitalCode: [
{ required: true, message: '请选择上级医院' },
]
}
}
},
mounted() {
//获取可选择的医院
queryEmergencyHospitalList().then(res => {
this.hospitalList = res.respData
})
queryEmergencySiteList().then(res => {
this.siteList = res.respData
})
},
methods: {
init(id) {
this.dialogVisible = true
this.loading = true
if (!id) {
this.$message.error('救护车id不能为空')
return
}
queryTeamEmergencyCarInfo({ id: id }).then(res => {
if (res.msg === 201) {
const { hospitalCode, siteId } = res.respData
this.dataForm = {
id: id,
hospitalCode: hospitalCode,
siteId: siteId
}
this.$nextTick(() => {
this.loading = false
this.$refs.dataForm.clearValidate()
})
} else {
this.$message.error(res.content);
}
})
},
submitForm() {
this.$refs.dataForm.validate((valid) => {
if (valid) {
const params = {
...this.dataForm
}
const hospital = this.hospitalList.find(i => i.hospitalCode === this.dataForm.hospitalCode)
if (!hospital) {
this.$message.error('无效数据');
return
}
const { hospitalName, id } = hospital
params.hospitalName = hospitalName
params.hospitalId = id
const site = this.siteList.find(i => i.id === this.dataForm.siteId)
if (!site) {
this.$message.error('无效数据');
return
}
const { siteName } = site
params.siteName = siteName
bindSiteToEmergencyCar(params).then(res => {
if (res.msg === 201) {
this.dialogVisible = false
this.$message.success('绑定成功')
this.$emit('subsucc')
} else {
this.$message.error(res.content)
}
})
}
})
},
closedHandler() {
this.$refs.dataForm.resetFields()
}
}
}
</script>
<style>
</style>
\ No newline at end of file
<template>
<div class="main-page">
<div class="main-page-header">
<p class="title">急诊专家资源</p>
<el-form
:inline="true"
:model="searchForm"
ref="searchForm"
size="small"
>
<el-form-item
prop="hospitalCode"
label="医院名称"
>
<el-select
v-model="searchForm.hospitalCode"
placeholder="请选择医院"
style="width: 100%"
:clearable="true"
>
<el-option
v-for="item in hospitalList"
:label="item.hospitalName"
:key="item.id"
:value="item.hospitalCode"
/>
</el-select>
</el-form-item>
<div class="btns">
<el-button
type="primary"
size="small"
@click="search"
>查询</el-button>
<el-button
size="small"
@click="resetForm('searchForm')"
>重置</el-button>
</div>
</el-form>
</div>
<div class="main-page-body">
<div class="mainContent">
<div class="bt">
<el-button
type="primary"
size="small"
@click="showSaveDialog()"
>新增</el-button>
</div>
<table-mixin
:pageSize="pageSize"
:pageNum="pageNum"
:total="total"
:pagination="pagination"
:handleSizeChange="handleSizeChange"
:handleCurrentChange="handleCurrentChange"
>
<el-table
v-loading="tableData.loading"
:data="tableData.body"
@sort-change="handleSortChange"
>
<div
slot="empty"
class="noData"
></div>
<el-table-column
label="序号"
type="index"
width="50"
>
</el-table-column>
<el-table-column
v-for="(item,index) in tableData.head"
:prop="item.key"
:label="item.name"
align="left"
:formatter="item.formatter"
:sortable="item.sortable"
:fixed="item.fixed"
:key="index"
:width="item.width"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
label="操作"
align="left"
width="auto"
min-width="200px"
>
<template slot-scope="scope">
<el-link
type="primary"
@click="showSaveDialog('update', scope.row.id)"
>修改</el-link>
<el-link
type="primary"
@click="delHandler(scope.row.id)"
>删除</el-link>
<el-link
type="primary"
v-if="scope.row.auditStatus === 1"
@click="auditHandler(scope.row.id)"
>审核</el-link>
</template>
</el-table-column>
</el-table>
</table-mixin>
<!-- <SaveDialog
ref="saveDialog"
@subsucc="search"
/> -->
</div>
</div>
</div>
</template>
<script>
import { tableDataMixin } from '../../common/js/mixin'
import { queryEmergencyHospitalList } from '@/api/common'
import { queryEmergencyExpertPageList, addOrUpdateEmergencyExpert, deleteTeamEmergencyExpert } from '@/api/expert'
// import SaveDialog from './components/saveDialog.vue'
export default {
name: 'sitePage',
mixins: [tableDataMixin],
components: {
// SaveDialog
},
data() {
return {
searchForm: {
hospitalCode: ''
},
hospitalList: [],
tableData: {
loading: false,
head: [
{
name: '医院名称',
key: 'hospitalName',
sortable: false,
width: '200',
fixed: false
},
{
name: '姓名',
key: 'expertName',
sortable: false,
width: '150',
fixed: false
},
{
name: '性别',
key: 'expertSex',
sortable: false,
width: '120',
fixed: false
},
{
name: '职称',
key: 'expertTitle',
sortable: false,
width: '200',
fixed: false
},
{
name: '科室',
key: 'emergencyName',
sortable: false,
width: '150',
fixed: false
},
{
name: '审核状态',
key: 'auditStatusName',
sortable: false,
width: '100',
fixed: false
}
],
body: [],
option: [],
condition: []
}
}
},
mounted() {
//获取可选择的医院
queryEmergencyHospitalList().then(res => {
this.hospitalList = res.respData
})
this.search()
},
methods: {
getTableData() {
this.tableData.loading = true
const params = {
...this.searchForm,
pageNo: this.pageNum,
pageSize: this.pageSize
}
queryEmergencyExpertPageList(params).then((res) => {
if (res.msg == 201) {
this.dealTableResponse(res)
} else {
this.$message.error(res.content)
}
})
},
showSaveDialog(type = 'add', id = '') {
this.$refs.saveDialog.init(type, id)
},
auditHandler(id) {
this.$confirm('是否审批通过?', '提示', {
confirmButtonText: '通过',
cancelButtonText: '拒绝',
distinguishCancelAndClose: true,
type: 'warning'
}).then(() => {
this.auditData(id, 2)
}).catch(action => {
if (action === 'cancel') {
this.auditData(id, 3)
}
})
},
auditData(id, auditStatus) {
auditEmergencySite({ id: id, auditStatus: auditStatus }).then(res => {
if (res.msg === 201) {
this.$message.success('操作成功!')
} else {
this.$message.error(res.content)
}
this.search()
})
},
siteStatusFormatter(row, column, cellValue, index) {
const siteStatusList = ['', '启用', '停用']
return siteStatusList[cellValue] || ''
},
delHandler(id) {
this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteEmergencySite({ id: id }).then(res => {
if (res.msg === 201) {
this.$message.success('删除成功!')
} else {
this.$message.error(res.content)
}
this.search()
})
})
}
}
}
</script>
<style lang="scss" scoped>
.mainContent {
padding: 20px;
.bt {
text-align: right;
margin-bottom: 16px;
}
}
</style>
<template>
<div>
绿道
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>
\ No newline at end of file
<template>
<div class='main-header'>
<p class="p">
区域急危重症救治协同平台
</p>
<div class="div">
<img
src="../../assets/images/user.png"
alt=""
>
<span>张医生</span>
</div>
</div>
</template>
<script>
export default {
data() {
return {}
},
mounted() {
},
methods: {
},
}
</script>
<style lang="scss">
</style>
<template>
<div class="main-nav">
<el-menu
ref="navbar"
:default-active="activeIndex"
text-color="#333"
active-text-color="#1F71FF"
router
:default-openeds="openeds"
>
<nav-bar-item
v-for="(item, index) in leftMenu"
:item="item"
:navIndex="String(index)"
:index="index"
:key="index"
:class="{'is-active':activeIndex==index}"
></nav-bar-item>
</el-menu>
</div>
</template>
<script>
import { mapGetters, mapActions } from 'vuex'
import NavBarItem from './NavBarItem'
import Bus from '../../util/Bus';
export default {
props: {
},
data() {
return {
activeIndex: '0',
openeds: ['0', '1', '2'],
leftMenu: []
}
},
watch: {
},
mounted() {
this.leftMenu = [
{
name: '急救资源',
icon: 'fa-address-book-o',
child: [
{ name: '急救车资源', path: '/resources/emergencyCar' },
{ name: '急救绿道资源', path: '/resources/greenWay' },
{ name: '急诊科抢救资源', path: '/resources/rescue' },
{ name: '急诊专家资源', path: '/resources/expert' },
{ name: '急救药品耗材资源', path: '/resources/medical' },
{ name: '急诊站点资源', path: '/resources/sitePage' }
]
},
{
name: '业务监管',
icon: 'fa-address-book-o',
child: [
{ name: '急救站点查询', path: '/business/siteQuery' },
]
},
{
name: '基础信息管理',
icon: 'fa-address-book-o',
child: [
{ name: '用户管理', path: '/basicInfo/user' },
{ name: '菜单管理', path: '/basicInfo/nav' },
]
}
]
},
created() {
},
methods: {
},
components: { NavBarItem }
}
</script>
<style>
</style>
<template>
<el-submenu
v-if="item.child && item.child.length"
:index="navIndex"
>
<!-- 创建父级菜单 -->
<template slot="title">
<i
class="fa fa-fw"
:class="item.icon"
></i>
<span>{{ item.name }}</span>
</template>
<!-- 创建子菜单 -->
<nav-bar-item
v-for="(subItem,i) in item.child"
:key="navIndex+'-'+i"
:navIndex="navIndex+'-'+i"
:item="subItem"
>
</nav-bar-item>
</el-submenu>
<el-menu-item
v-else
:index="item.path"
:route="{path: item.path}"
>
<i
class="fa fa-fw"
:class="item.icon"
:Icons="'icon'+navIndex"
></i>
<span>{{ item.name }}</span>
</el-menu-item>
</template>
<script>
export default {
name: 'NavBarItem',
props: ['item', 'navIndex'],
mounted() {
// console.log(this.item)
}
}
</script>
<template>
<div class="main-wrapper">
<!--顶部菜单-->
<header-bar></header-bar>
<div class="main-body">
<nav-bar></nav-bar>
<div
class="main-content"
:style="{left: menuType ? '200px': '0'}"
>
<router-view></router-view>
</div>
</div>
</div>
</template>
<script>
import HeaderBar from './HeaderBar'
import NavBar from './NavBar'
import { mapGetters } from 'vuex'
export default {
data() {
return {
}
},
methods: {
},
computed: {
...mapGetters([
'menuType'
])
},
components: {
HeaderBar,
NavBar
}
}
</script>
<template>
<div>
药品耗材
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>
\ No newline at end of file
<template>
<div>
nav
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>
\ No newline at end of file
<template>
<div>
抢救资源
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>
\ No newline at end of file
<template>
<el-dialog
title="武汉市医疗急救站点信息填写"
:visible.sync="dialogVisible"
width="600px"
@closed="closedHandler"
:close-on-click-modal="false"
>
<el-form
ref="dataForm"
:model="dataForm"
size="small"
label-width="300px"
:rules="rules"
v-loading="loading"
>
<el-form-item
label="站点名称(请填写单位全称)"
prop="siteName"
>
<el-input
placeholder="请输入站点名称"
v-model="dataForm.siteName"
/>
</el-form-item>
<el-form-item
label="辖区(多个院区则填写主院区所属辖区)"
prop="area"
>
<el-select
v-model="dataForm.area"
placeholder="请选择辖区"
style="width: 100%"
>
<el-option
v-for="item in areaList"
:label="item.name"
:key="item.id"
:value="item.val"
/>
</el-select>
</el-form-item>
<el-form-item
label="站点位置"
prop="siteLocation"
>
<el-input
placeholder="请输入站点位置"
v-model="dataForm.siteLocation"
/>
</el-form-item>
<el-form-item
label="站点经度"
prop="siteLongitude"
>
<el-input
placeholder="请输入站点经度"
v-model="dataForm.siteLongitude"
/>
</el-form-item>
<el-form-item
label="站点纬度"
prop="siteLatitude"
>
<el-input
placeholder="请输入站点纬度"
v-model="dataForm.siteLatitude"
/>
</el-form-item>
<el-form-item
label="上级医院名称"
prop="hospitalCode"
>
<el-select
v-model="dataForm.hospitalCode"
placeholder="请选择上级医院"
style="width: 100%"
>
<el-option
v-for="item in hospitalList"
:label="item.hospitalName"
:key="item.id"
:value="item.hospitalCode"
/>
</el-select>
</el-form-item>
<el-form-item
label="站点状态"
prop="siteStatus"
>
<el-radio-group v-model="dataForm.siteStatus">
<el-radio :label="1">启用</el-radio>
<el-radio :label="2">停用</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<span
slot="footer"
class="dialog-footer"
>
<el-button
size="small"
@click="dialogVisible = false"
>取 消</el-button>
<el-button
type="primary"
size="small"
@click="submitForm()"
>确 定</el-button>
</span>
</el-dialog>
</template>
<script>
import { queryEmergencySiteDtoById, saveOrUpdateEmergencySite } from '@/api/site'
import { queryEmergencyHospitalList } from '@/api/common'
import { getDic } from '@/util/dict'
export default {
data() {
return {
dialogVisible: false,
loading: false,
dataForm: {
siteName: '',
area: '',
siteLocation: '',
siteLongitude: '',
siteLatitude: '',
hospitalCode: '',
siteStatus: ''
},
areaList: [],
hospitalList: [],
rules: {
siteName: [
{ required: true, message: '请输入站点名称' },
],
area: [
{ required: true, message: '请选择辖区' },
],
siteStatus: [
{ required: true, message: '请选择站点状态' },
]
}
}
},
mounted() {
//获取可选择的医院
queryEmergencyHospitalList().then(res => {
this.hospitalList = res.respData
})
getDic(['area']).then(res => {
this.areaList = res.area
})
},
methods: {
init(type, id) {
this.dialogVisible = true
this.loading = true
this.type = type
if (type === 'update') {
if (!id) {
this.$message.error('救护车id不能为空')
return
}
queryEmergencySiteDtoById({ id: id }).then(res => {
if (res.msg === 201) {
this.dataForm = res.respData || {}
this.$nextTick(() => {
this.loading = false
this.$refs.dataForm.clearValidate()
})
} else {
this.$message.error(res.content);
}
})
} else {
this.dataForm = {}
this.$nextTick(() => {
this.loading = false
this.$refs.dataForm.clearValidate()
})
}
},
submitForm() {
this.$refs.dataForm.validate((valid) => {
if (valid) {
const params = {
...this.dataForm
}
const hospital = this.hospitalList.find(i => i.hospitalCode === this.dataForm.hospitalCode)
if (!hospital) {
this.$message.error('无效数据');
return
}
const { hospitalName } = hospital
params.hospitalName = hospitalName
const area = this.areaList.find(i => i.id === this.dataForm.area)
if (!area) {
this.$message.error('无效数据');
return
}
const { areaName } = area
params.areaName = areaName
saveOrUpdateEmergencySite(params).then(res => {
if (res.msg === 201) {
this.dialogVisible = false
this.$message.success(this.type === 'add' ? '新增成功!' : '修改成功')
this.$emit('subsucc')
} else {
this.$message.error(res.content)
}
})
}
})
},
closedHandler() {
this.$refs.dataForm.resetFields()
}
}
}
</script>
<style>
</style>
\ No newline at end of file
<template>
<div class="main-page">
<div class="main-page-header">
<p class="title">急诊站点资源</p>
<el-form
:inline="true"
:model="searchForm"
ref="searchForm"
size="small"
>
<el-form-item
prop="area"
label="辖区"
>
<el-select
v-model="searchForm.area"
placeholder="请选择车辆类型"
style="width: 100%"
:clearable="true"
>
<el-option
v-for="item in areaList"
:label="item.name"
:key="item.id"
:value="item.val"
/>
</el-select>
</el-form-item>
<el-form-item
prop="siteStatus"
label="启用状态"
>
<el-radio-group v-model="searchForm.siteStatus">
<el-radio label="">全部</el-radio>
<el-radio label="1">启用</el-radio>
<el-radio label="2">停用</el-radio>
</el-radio-group>
</el-form-item>
<div class="btns">
<el-button
type="primary"
size="small"
@click="search"
>查询</el-button>
<el-button
size="small"
@click="resetForm('searchForm')"
>重置</el-button>
</div>
</el-form>
</div>
<div class="main-page-body">
<div class="mainContent">
<div class="bt">
<el-button
type="primary"
size="small"
@click="showSaveDialog()"
>新增</el-button>
</div>
<table-mixin
:pageSize="pageSize"
:pageNum="pageNum"
:total="total"
:pagination="pagination"
:handleSizeChange="handleSizeChange"
:handleCurrentChange="handleCurrentChange"
>
<el-table
v-loading="tableData.loading"
:data="tableData.body"
@sort-change="handleSortChange"
>
<div
slot="empty"
class="noData"
></div>
<el-table-column
label="序号"
type="index"
width="50"
>
</el-table-column>
<el-table-column
v-for="(item,index) in tableData.head"
:prop="item.key"
:label="item.name"
align="left"
:formatter="item.formatter"
:sortable="item.sortable"
:fixed="item.fixed"
:key="index"
:width="item.width"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
label="操作"
align="left"
width="auto"
min-width="200px"
>
<template slot-scope="scope">
<el-link
type="primary"
@click="showSaveDialog('update', scope.row.id)"
>修改</el-link>
<el-link
type="primary"
@click="delHandler(scope.row.id)"
>删除</el-link>
<el-link
type="primary"
v-if="scope.row.auditStatus === 1"
@click="auditHandler(scope.row.id)"
>审核</el-link>
</template>
</el-table-column>
</el-table>
</table-mixin>
<SiteDialog
ref="siteDialog"
@subsucc="search"
/>
</div>
</div>
</div>
</template>
<script>
import { tableDataMixin } from '../../common/js/mixin'
import { queryEmergencySitePageList, deleteEmergencySite, auditEmergencySite } from '@/api/site'
import { getDic } from '../../util/dict'
import SiteDialog from './components/siteDialog.vue'
export default {
name: 'sitePage',
mixins: [tableDataMixin],
components: {
SiteDialog
},
data() {
return {
searchForm: {
area: '',
siteStatus: ''
},
areaList: [],
tableData: {
loading: false,
head: [
{
name: '站点名称',
key: 'siteName',
sortable: false,
width: '200',
fixed: false
},
{
name: '所在辖区',
key: 'areaName',
sortable: false,
width: '120',
fixed: false
},
{
name: '站点位置',
key: 'siteLocation',
sortable: false,
width: '120',
fixed: false
},
{
name: '上级医院名称',
key: 'hospitalName',
sortable: false,
width: '200',
fixed: false
},
{
name: '启用状态',
key: 'siteStatus',
sortable: false,
width: '80',
fixed: false,
formatter: this.siteStatusFormatter
},
{
name: '审核状态',
key: 'auditStatusName',
sortable: false,
width: '80',
fixed: false
}
],
body: [],
option: [],
condition: []
}
}
},
mounted() {
// 获取字典
getDic(['area']).then(res => {
this.areaList = res.area
})
this.search()
},
methods: {
getTableData() {
this.tableData.loading = true
const params = {
...this.searchForm,
pageNo: this.pageNum,
pageSize: this.pageSize
}
queryEmergencySitePageList(params).then((res) => {
if (res.msg == 201) {
this.dealTableResponse(res)
} else {
this.$message.error(res.content)
}
})
},
showSaveDialog(type = 'add', id = '') {
this.$refs.siteDialog.init(type, id)
},
auditHandler(id) {
this.$confirm('是否审批通过?', '提示', {
confirmButtonText: '通过',
cancelButtonText: '拒绝',
distinguishCancelAndClose: true,
type: 'warning'
}).then(() => {
this.auditData(id, 2)
}).catch(action => {
if (action === 'cancel') {
this.auditData(id, 3)
}
})
},
auditData(id, auditStatus) {
auditEmergencySite({ id: id, auditStatus: auditStatus }).then(res => {
if (res.msg === 201) {
this.$message.success('操作成功!')
} else {
this.$message.error(res.content)
}
this.search()
})
},
siteStatusFormatter(row, column, cellValue, index) {
const siteStatusList = ['', '启用', '停用']
return siteStatusList[cellValue] || ''
},
delHandler(id) {
this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteEmergencySite({ id: id }).then(res => {
if (res.msg === 201) {
this.$message.success('删除成功!')
} else {
this.$message.error(res.content)
}
this.search()
})
})
}
}
}
</script>
<style lang="scss" scoped>
.mainContent {
padding: 20px;
.bt {
text-align: right;
margin-bottom: 16px;
}
}
</style>
<template>
<div class="main-page siteQuery">
<div class="main-page-body">
<el-row style="height: 100%">
<el-col
style="height: 100%"
:span="12"
>
<baidu-map
class="map"
:center="center"
:zoom="zoom"
@ready="handler"
ak="OdRZ7iA9KGrKwFqufVTI3eTHOHDriGV7"
>
</baidu-map>
</el-col>
<el-col
style="height: 100%"
:span="12"
>
<div class="top main-table">
<div class="title"><span class="bed"><span class="red">{{areaName}}</span>站点信息</span> (共<span class="red"> {{siteListData.length}} </span>个站点)</div>
<el-table
:data="siteListData"
style="width: 100%"
highlight-current-row
ref="siteListData"
@current-change="getCarDataList"
>
<el-table-column
label="序号"
type="index"
width="50px"
>
</el-table-column>
<el-table-column
prop="siteName"
label="站点名称"
width="180"
>
</el-table-column>
<el-table-column
prop="siteLocation"
label="站点位置"
width="180"
>
</el-table-column>
<el-table-column
prop="carCount"
label="车辆数"
width="80px"
>
</el-table-column>
<el-table-column
prop="hospitalName"
label="所在医疗机构"
>
</el-table-column>
</el-table>
</div>
<div class="bottom main-table">
<div class="title"><span class="bed"><span class="red">{{siteName}}</span>车辆明细信息</span> (共<span class="red"> {{carListData.length}} </span>辆急救车)</div>
<el-table
:data="carListData"
style="width: 100%"
>
<el-table-column
label="序号"
type="index"
width="50px"
>
</el-table-column>
<el-table-column
prop="licensePlateNumber"
label="车牌号"
width="120"
>
</el-table-column>
<el-table-column
prop="vechieType"
label="车辆类型"
width="120"
:formatter="vechieTypeFormatter"
>
</el-table-column>
<el-table-column
prop="vechieUseStatus"
label="车辆状态"
width="80"
:formatter="vechieUseStatusFormatter"
>
</el-table-column>
<el-table-column
prop="vechieSpecialPurpose"
label="车辆特殊用途"
width="120"
:formatter="vechieSpecialPurposeFormatter"
>
</el-table-column>
<el-table-column
prop="isPreHospitalVechie"
label="是否院前急救车"
width="80"
:formatter="isPreHospitalVechieFormatter"
>
</el-table-column>
<el-table-column
prop="vehicleUsingUnit"
label="车辆使用单位"
>
</el-table-column>
</el-table>
</div>
</el-col>
</el-row>
</div>
</div>
</template>
<script>
import BaiduMap from 'vue-baidu-map/components/map/Map.vue'
import { queryEmergencySiteList } from '@/api/site'
import { queryCarList } from '@/api/emergencyCar'
import { getDic } from '@/util/dict'
export default {
components: {
BaiduMap
},
data() {
return {
center: { lng: 114.3162, lat: 30.581084 },
zoom: 12,
BMap: null,
map: null,
areaName: '武汉市',
siteName: '',
siteListData: [],
carListData: [],
allData: [],
vechieTypeList: []
}
},
mounted() {
},
methods: {
handler({ BMap, map }) {
//划分出行政区
map.enableScrollWheelZoom(true);
getDic(['area', 'vechie_type', 'vechie_special_purpose']).then(res => {
this.vechieTypeList = res.vechie_type
this.vechieSpecialPurposeList = res.vechie_special_purpose
if (res.area && res.area.length > 0) {
res.area.forEach(item => {
this.getBoundary(item.name, BMap, map)
})
}
})
// 地图上打点
queryEmergencySiteList().then(res => {
if (res.msg === 201) {
if (res.respData && res.respData.length > 0) {
res.respData.forEach(item => {
if (item.siteLatitude && item.siteLongitude) {
const point = new BMap.Point(item.siteLongitude, item.siteLatitude)
const marker = new BMap.Marker(point)
map.addOverlay(marker)
}
})
this.allData = res.respData
this.siteListData = res.respData
if (res.respData && res.respData[0]) {
this.$refs.siteListData.setCurrentRow(res.respData[0]);
}
}
} else {
this.$message.error(res.content)
}
})
},
getBoundary(districtName, BMap, map) {
const bdary = new BMap.Boundary()
const that = this
bdary.get(districtName, function(rs) { //获取行政区域
var count = rs.boundaries.length; //行政区域的点有多少个
for (var i = 0; i < count; i++) {
var ply = new BMap.Polygon(rs.boundaries[i], {
fillColor: '#' + (Math.random() * 0xFFFFFF << 0).toString(16),
fillOpacity: 0.3
}); //建立多边形覆盖物
map.addOverlay(ply); //添加覆盖物
ply.addEventListener('click', () => {
that.getSiteListData(districtName)
})
}
});
},
getSiteListData(districtName) {
this.areaName = districtName
const dataList = this.allData.filter(i => i.areaName === districtName)
this.siteListData = dataList || []
if (dataList && dataList[0]) {
this.$refs.siteListData.setCurrentRow(dataList[0]);
} else {
this.siteName = ''
this.carListData = []
}
},
getCarDataList(val) {
if (!val) {
return
}
this.siteName = val.siteName || ''
queryCarList({ siteId: val.id }).then(res => {
if (res.msg === 201) {
this.carListData = res.respData || []
} else {
this.carListData = []
this.$message.error(res.content)
}
})
},
vechieTypeFormatter(row, column, cellValue, index) {
const vechieType = this.vechieTypeList.find(i => i.val === cellValue)
return vechieType ? vechieType.name : ''
},
vechieUseStatusFormatter(row, column, cellValue, index) {
const vechieUseStatusList = ['', '在用', '闲置', '其他']
return vechieUseStatusList[cellValue] || ''
},
vechieSpecialPurposeFormatter(row, column, cellValue, index) {
const vechieSpecialPurpose = this.vechieSpecialPurposeList.find(i => i.val === cellValue)
return vechieSpecialPurpose ? vechieSpecialPurpose.name : ''
},
vechieSpecialPurposeFormatter(row, column, cellValue, index) {
const vechieSpecialPurpose = this.vechieSpecialPurposeList.find(i => i.val === cellValue)
return vechieSpecialPurpose ? vechieSpecialPurpose.name : ''
},
isPreHospitalVechieFormatter(row, column, cellValue, index) {
const isPreHospitalVechieList = ['', '是', '否']
return isPreHospitalVechieList[cellValue] || ''
}
}
}
</script>
<style lang="scss" scope>
.siteQuery {
.map {
width: 100%;
height: 100%;
padding: 20px;
box-sizing: border-box;
}
.top,
.bottom {
height: 50%;
padding-top: 20px;
box-sizing: border-box;
}
.title {
font-size: 20px;
margin-bottom: 20px;
.bed {
font-weight: bold;
}
.red {
color: red;
}
}
}
</style>
\ No newline at end of file
<template>
<div>
user
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>
\ No newline at end of file
import store from '../../store'
const hasPermission = {
install(Vue) {
Vue.directive('hasPermission', {
bind(el, binding, vnode) {
let tagNavList = store.getters.tagNavList
let permissionList = []
for (let tag of tagNavList) {
if (tag.path === vnode.context.$route.path) {
permissionList = tag.permission
break
}
}
/* if (!permissionList) {
console.error(`权限判断不生效。因路由中不包含permission字段,请检查路由表设置。当前路由地址:${vnode.context.$route.path}`)
return
}
if (typeof (permissionList) !== 'object' || !permissionList.length) {
console.error(`权限判断不生效。因路由中permission字段非数组类型或内容为空,请检查路由表设置。当前路由地址:${vnode.context.$route.path}`)
return
}*/
if (permissionList && permissionList.length>0 && !permissionList.includes(binding.value)) {
el.parentNode.removeChild(el)
}
}
})
}
}
export default hasPermission
// 组件全局注册
import Vue from 'vue'
import hasPermission from './hasPermission'
const Plugins = [
hasPermission
]
// 注册插件
Plugins.map((plugin) => {
Vue.use(plugin)
})
export default Vue
import Vue from 'vue'
import VueRouter from 'vue-router'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import {Auth} from '@/util/auth'
import staticRoute from './staticRoute'
NProgress.configure({showSpinner: false})
Vue.use(VueRouter)
//以下代码解决路由地址重复的报错问题
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
return originalPush.call(this, location).catch(err => err)
}
const router = new VueRouter({
mode: 'hash',
routes: staticRoute
})
// 路由跳转前验证
router.beforeEach((to, from, next) => {
// 开启进度条
NProgress.start()
// 判断用户是否处于登录状态
next()
})
router.afterEach(() => {
NProgress.done() // 结束Progress
})
export default router
const Layout = () => import('../page/layout')
const staticRoute = [
{
path: '/',
redirect: '/resources/emergencyCar'
},
{
path: '/error',
component: () => import('../page/error'),
children: [
{
path: '401',
component: () => import('../page/error/401')
},
{
path: '403',
component: () => import('../page/error/403')
},
{
path: '404',
component: () => import('../page/error/404')
},
{
path: '500',
component: () => import('../page/error/500')
}
]
},
{
path: '/resources',
component: Layout,
children: [
{
path: '/resources/emergencyCar',
component: () => import('../page/emergencyCar/index')
},
{
path: '/resources/sitePage',
component: () => import('../page/sitePage/index')
},
{
path: '/resources/rescue',
component: () => import('../page/rescue/index')
},
{
path: '/resources/medical',
component: () => import('../page/medical/index')
},
{
path: '/resources/greenWay',
component: () => import('../page/greenWay/index')
},
{
path: '/resources/expert',
component: () => import('../page/expert/index')
},
]
},
{
path: '/business',
component: Layout,
children: [
{
path: '/business/siteQuery',
component: () => import('../page/siteQuery/index')
}
]
},
{
path: '/basicInfo',
component: Layout,
children: [
{
path: '/basicInfo/user',
component: () => import('../page/user/index')
},
{
path: '/basicInfo/nav',
component: () => import('../page/nav/index')
}
]
},
{
path: '*',
redirect: '/error/404'
}
]
export default staticRoute
// 免登录白名单页面
const whiteList = [
'/login',
// '/register'
]
export default whiteList
import * as types from './mutation-types'
import {Cache, Auth} from '@/util/auth'
export const clearStore = function({commit, state}) {
commit(types.SET_TOKEN, Cache.clearToken())
commit(types.SET_MENULIST, Cache.clearPermission())
commit(types.SET_TAGNAVLIST, [])
commit(types.SET_USERINFO, Auth.clearLoginInfo())
commit(types.SET_OPENEDPAGELIST, Cache.clearOpenedPages())
commit(types.SET_BREADCRUMBLIST, Cache.clearBreadcrumb())
}
export const saveToken = function({commit}, data) {
commit(types.SET_TOKEN, Cache.setToken(data))
}
export const saveMenuType = function({commit}, data) {
commit(types.SET_MENUTYPE, Cache.setMenuType(data))
}
export const saveLeftMenu = function({commit}, data) {
commit(types.SET_LEFTMENU,data)
}
export const saveMenuList = function({commit}, data) {
commit(types.SET_MENULIST, Cache.setPermission(data))
commit(types.SET_TAGNAVLIST, Cache.getTagNavList(data))
}
export const saveMsgChange = function({commit}, data) {
commit(types.SET_MSGCHANGE,data)
}
export const saveUserUserInfo = function({commit}, data) {
commit(types.SET_USERINFO, Auth.setLoginInfo(data))
}
export const saveOpenedPageList = function({commit}, data) {
commit(types.SET_OPENEDPAGELIST, Cache.setOpenedPages(data))
}
export const insertOpenedPageList = function({commit}, data) {
commit(types.SET_OPENEDPAGELIST, Cache.insertOpenedPages(data))
}
export const deleteOpenedPageList = function({commit}, data) {
commit(types.SET_OPENEDPAGELIST, Cache.deleteOpenedPages(data))
}
export const saveBreadcrumbList = function({commit}, data) {
commit(types.SET_BREADCRUMBLIST, Cache.setBreadcrumb(data))
}
export const token = state => state.token
export const menuList = state => state.menuList
export const menuType = state => state.menuType
export const leftMenu = state => state.leftMenu
export const tagNavList = state => state.tagNavList
export const userInfo = state => state.userInfo
export const openedPageList = state => state.openedPageList
export const breadcrumbList = state => state.breadcrumbList
export const msgChange = state => state.msgChange
import Vue from 'vue'
import Vuex from 'vuex'
// import vuexModules from './modules'
import state from './state'
import mutations from './mutations'
import * as actions from './actions'
import * as getters from './getters'
import createLogger from 'vuex/dist/logger'
Vue.use(Vuex)
const debug = process.env.NODE_ENV !== 'production'
export default new Vuex.Store({
state,
mutations,
getters,
actions,
// modules: vuexModules,
strict: debug,
plugins: debug ? [createLogger()] : []
})
export const SET_TOKEN = 'SET_TOKEN'
export const SET_MENUTYPE = 'SET_MENUTYPE'
export const SET_MSGCHANGE = 'SET_MSGCHANGE'
export const SET_MENULIST = 'SET_MENULIST'
export const SET_LEFTMENU = 'SET_LEFTMENU'
export const SET_TAGNAVLIST = 'SET_TAGNAVLIST'
export const SET_USERINFO = 'SET_USERINFO'
export const SET_OPENEDPAGELIST = 'SET_OPENEDPAGELIST'
export const SET_BREADCRUMBLIST = 'SET_BREADCRUMBLIST'
import * as types from './mutation-types'
export default {
[types.SET_TOKEN](state, data) {
state.token = data
},
[types.SET_MENULIST](state, data) {
state.menuList = data
},
[types.SET_MSGCHANGE](state, data) {
state.msgChange = data
},
[types.SET_MENUTYPE](state, data) {
state.menuType = data
},
[types.SET_LEFTMENU](state, data) {
state.leftMenu = data
},
[types.SET_TAGNAVLIST](state, data) {
state.tagNavList = data
},
[types.SET_USERINFO](state, data) {
state.userInfo = data
},
[types.SET_OPENEDPAGELIST](state, data) {
state.openedPageList = data
},
[types.SET_BREADCRUMBLIST](state, data) {
state.breadcrumbList = data
}
}
import {Cache, Auth} from '@/util/auth'
export default {
// 通知框等需要自动消失的时间
// duration: 5000
token: Cache.getToken(),
menuList: Cache.getPermission(),
tagNavList: Cache.getTagNavList(Cache.getPermission()),
userInfo: Auth.getLoginInfo(),
// 已经打开的页面
openedPageList: Cache.getOpenedPages(),
breadcrumbList: Cache.getBreadcrumb(),
menuType: Cache.getMenuType(),
leftMenu: [],
msgChange:false
}
import Vue from 'vue';
export default new Vue();
/**
* axios全局配置
* TODO: 拦截器全局配置,根据实际情况修改
*/
import axios from 'axios'
import store from '../store'
import router from '../router'
import {Message} from 'element-ui'
import {Auth} from '@/util/auth'
// import {Encrypt} from '../util/secret'
const CancelToken = axios.CancelToken
// 超时设置
const service = axios.create({
// 请求超时时间
timeout: 30000
})
// http request 拦截器
// 每次请求都为http头增加token字段,其内容为token
service.interceptors.request.use(
config => {
if (store.getters.token) {
config.headers['token'] = getToken()
}
return config
},
err => {
return Promise.reject(err)
}
)
// http response 拦截器
service.interceptors.response.use(
response => {
return Promise.resolve(response.data)
},
error => {
if (error.response) {
switch (error.response.msg) {
case 401:
Message({
message: '认证失败,请重新登录!',
type: 'error'
})
store.dispatch('clearStore')
router.push('/login')
break
case 403:
router.push('error/403')
break
case 404:
router.push('error/404')
break
default:
Message({
message: `服务器错误!`,
type: 'error'
})
}
return Promise.reject(error.response.data)
}
}
)
export default service
import Cookies from 'js-cookie'
import storage from 'good-storage'
const Cache = {
TOKEN: 'token',
MENUTYPE: 'menuType',
PERMISSION: 'permission',
OPENEDPAGES: 'openedPages',
BREADCRUMB: 'breadcrumb',
setToken: function(token) {
storage.set(this.TOKEN, token)
return token
},
setPermission: function(val) {
storage.set(this.PERMISSION, val)
return val
},
getToken: function() {
return storage.get(this.TOKEN, '')
},
setMenuType: function(menuType) {
storage.set(this.MENUTYPE, menuType)
return menuType
},
getMenuType: function() {
return storage.get(this.MENUTYPE, '')
},
getPermission: function() {
return storage.get(this.PERMISSION, [])
},
clearToken: function() {
storage.remove(this.TOKEN)
return ''
},
clearPermission: function() {
storage.remove(this.PERMISSION)
storage.remove(this.MENUTYPE)
return []
},
setOpenedPages: function(val) {
storage.set(this.OPENEDPAGES, val)
return val
},
getOpenedPages: function() {
return storage.get(this.OPENEDPAGES, [])
},
clearOpenedPages: function() {
storage.remove(this.OPENEDPAGES)
return []
},
setBreadcrumb: function(val) {
storage.set(this.BREADCRUMB, val)
return val
},
getBreadcrumb: function() {
return storage.get(this.BREADCRUMB, [])
},
clearBreadcrumb: function() {
storage.remove(this.BREADCRUMB)
return []
},
insertOpenedPages: function(data) {
let pages = Cache.getOpenedPages()
let flag = pages.some(v => {
let pathEq = v.path === data.path
let queryEq = JSON.stringify(v.query) === JSON.stringify(data.query)
return pathEq && queryEq
})
if (!flag) {
pages.push(data)
}
Cache.setOpenedPages(pages)
return pages
},
deleteOpenedPages: function(data) {
let pages = Cache.getOpenedPages()
for (let [i, v] of pages.entries()) {
let pathEq = v.path === data.path
let queryEq = JSON.stringify(v.query) === JSON.stringify(data.query)
if (pathEq && queryEq) {
pages.splice(i, 1)
}
}
Cache.setOpenedPages(pages)
return pages
},
getTagNavList: function(data) {
let list = []
this.flatNavList(data, list)
return list
},
flatNavList(obj, list) {
for (let v of obj) {
if (v.child && v.child.length) {
this.flatNavList(v.child, list)
} else {
list.push(v)
}
}
}
}
const Auth = {
// 在Cookie中记录登录状态的key
loginKey: 'userInfo',
// 当前是否是登录状态
getLoginInfo: function() {
return Cookies.get(this.loginKey)
},
// 设置登录状态
setLoginInfo: function(obj) {
// TODO: 设置超时登录时间,在该时间范围内没有任何请求操作则自动删除
var maxAge = new Date(new Date().getTime() + 30 * 60 * 1000)
Cookies.set(this.loginKey, obj, {
expires: maxAge
})
return obj
},
// 移除登录状态
clearLoginInfo: function() {
Cookies.remove(this.loginKey)
}
}
export {Auth, Cache}
/*!
* Clamp.js 0.5.1
*
* Copyright 2011-2013, Joseph Schmitt http://joe.sh
* Released under the WTFPL license
* http://sam.zoy.org/wtfpl/
*/
(function(){window.$clamp=function(c,d){function s(a,b){n.getComputedStyle||(n.getComputedStyle=function(a,b){this.el=a;this.getPropertyValue=function(b){var c=/(\-([a-z]){1})/g;"float"==b&&(b="styleFloat");c.test(b)&&(b=b.replace(c,function(a,b,c){return c.toUpperCase()}));return a.currentStyle&&a.currentStyle[b]?a.currentStyle[b]:null};return this});return n.getComputedStyle(a,null).getPropertyValue(b)}function t(a){a=a||c.clientHeight;var b=u(c);return Math.max(Math.floor(a/b),0)}function x(a){return u(c)*
a}function u(a){var b=s(a,"line-height");"normal"==b&&(b=1.2*parseInt(s(a,"font-size")));return parseInt(b)}function l(a){if(a.lastChild.children&&0<a.lastChild.children.length)return l(Array.prototype.slice.call(a.children).pop());if(a.lastChild&&a.lastChild.nodeValue&&""!=a.lastChild.nodeValue&&a.lastChild.nodeValue!=b.truncationChar)return a.lastChild;a.lastChild.parentNode.removeChild(a.lastChild);return l(c)}function p(a,d){if(d){var e=a.nodeValue.replace(b.truncationChar,"");f||(h=0<k.length?
k.shift():"",f=e.split(h));1<f.length?(q=f.pop(),r(a,f.join(h))):f=null;m&&(a.nodeValue=a.nodeValue.replace(b.truncationChar,""),c.innerHTML=a.nodeValue+" "+m.innerHTML+b.truncationChar);if(f){if(c.clientHeight<=d)if(0<=k.length&&""!=h)r(a,f.join(h)+h+q),f=null;else return c.innerHTML}else""==h&&(r(a,""),a=l(c),k=b.splitOnChars.slice(0),h=k[0],q=f=null);if(b.animate)setTimeout(function(){p(a,d)},!0===b.animate?10:b.animate);else return p(a,d)}}function r(a,c){a.nodeValue=c+b.truncationChar}d=d||{};
var n=window,b={clamp:d.clamp||2,useNativeClamp:"undefined"!=typeof d.useNativeClamp?d.useNativeClamp:!0,splitOnChars:d.splitOnChars||[".","-","\u2013","\u2014"," "],animate:d.animate||!1,truncationChar:d.truncationChar||"\u2026",truncationHTML:d.truncationHTML},e=c.style,y=c.innerHTML,z="undefined"!=typeof c.style.webkitLineClamp,g=b.clamp,v=g.indexOf&&(-1<g.indexOf("px")||-1<g.indexOf("em")),m;b.truncationHTML&&(m=document.createElement("span"),m.innerHTML=b.truncationHTML);var k=b.splitOnChars.slice(0),
h=k[0],f,q;"auto"==g?g=t():v&&(g=t(parseInt(g)));var w;z&&b.useNativeClamp?(e.overflow="hidden",e.textOverflow="ellipsis",e.webkitBoxOrient="vertical",e.display="-webkit-box",e.webkitLineClamp=g,v&&(e.height=b.clamp+"px")):(e=x(g),e<=c.clientHeight&&(w=p(l(c),e)));return{original:y,clamped:w}}})();
\ No newline at end of file
/**
* 缓存数据字典
* 把数据字典缓存到
* */
import { queryDictionaryList } from '@/api/common'
// 超时时间15分钟
const timeOut = 1000 * 60 * 15
// const timeOut = 1000
// 静态字典
const dist = {
hospital_grade: [
{ name: '未分级', val: 1 },
{ name: '一级', val: 2 },
{ name: '二级', val: 3 },
{ name: '三级', val: 4 }
],
hospital_class: [
{ name: '甲等', val: 1 },
{ name: '已等', val: 2 },
{ name: '丙等', val: 3 },
{ name: '未评定', val: 4 }
]
}
export async function getDic(list){
let data = {}
if (!Array.isArray(list) && list.length === 0) {
return data
}
const paramsList = []
list.forEach(item => {
if (dist[item]) { // 是否静态
data[item] = dist[item]
} else if(getSS(item)) { // 是否还在缓存中
data[item] = getSS(item)
}else{ // 发请求获取
paramsList.push(item)
}
})
if (paramsList.length > 0) {
const res = await queryDictionaryList({ nameList: paramsList })
if (res && res.respData) {
// 缓存字典
setSS(res.respData)
data = Object.assign(data, res.respData)
}
}
return data
}
function getSS(item) {
const data = sessionStorage.getItem(item)
if (data) {
// 判断是否超时
const time = sessionStorage.getItem(item + '_time') || 0
if (parseInt(time) > new Date().getTime() - timeOut){
return JSON.parse(data)
} else {
// 清除超时缓存
sessionStorage.removeItem(item)
sessionStorage.removeItem(item + '_time')
return false
}
} else {
return false
}
}
function setSS(obj) {
for (const key in obj) {
if (Object.hasOwnProperty.call(obj, key)) {
const item = obj[key];
sessionStorage.setItem(key, JSON.stringify(item))
sessionStorage.setItem(key + '_time', new Date().getTime())
}
}
}
\ No newline at end of file
// 国际化设置
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import messages from '@/lang'
Vue.use(VueI18n)
const i18n = new VueI18n({
// 当前语言环境
locale: 'zhCN',
// 默认语言环境。如果locale中无匹配项则采用该项值
fallbackLocale: 'zhCN',
messages
})
export default i18n
// 计算根节点1rem的值
(function(doc, win) {
let docEl = doc.documentElement
// recalF,
let resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'
let recalc = function() {
var clientWidth = docEl.clientWidth
if (!clientWidth) return
// 按照效果图尺寸及方便计算的规则,确认1rem基本字号大小。此处为1rem=10px
docEl.style.fontSize = parseInt(10 * (clientWidth / 1024)) + 'px'
}
if (!doc.addEventListener) return
win.addEventListener(resizeEvt, recalc, false)
doc.addEventListener('DOMContentLoaded', recalc, false)
})(document, window)
// 重置消息弹框,防止多个弹框出现
import {Message} from 'element-ui';
let messageInstance = null;
const resetMessage = (options) => {
if(messageInstance) {
messageInstance.close()
}
messageInstance = Message(options)
}
['error','success','info','warning'].forEach(type => {
resetMessage[type] = options => {
if(typeof options === 'string') {
options = {
message:options
}
}
options.type = type
return resetMessage(options)
}
})
export const message = resetMessage
// 引用AES源码js
const CryptoJS = require('crypto-js')
function Encrypt(word) {
var key = CryptoJS.enc.Utf8.parse('authentication')
var srcs = CryptoJS.enc.Utf8.parse(word)
var encrypted = CryptoJS.DES.encrypt(srcs, key, {mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7})
return encrypted.toString()
}
function Decrypt(word) {
var key = CryptoJS.enc.Utf8.parse('authentication')
var decrypt = CryptoJS.DES.decrypt(word, key, {mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7})
return CryptoJS.enc.Utf8.stringify(decrypt).toString()
}
export {
Encrypt,
Decrypt
}
// 基准大小
const baseSize = 12
// 设置 rem 函数
function setRem () {
// 当前页面宽度相对于 750 宽的缩放比例,可根据自己需要修改。
const scale = document.documentElement.clientWidth / 1440
// 设置页面根节点字体大小
document.documentElement.style.fontSize = (baseSize * Math.min(scale, 2)) + 'px'
}
// 初始化
setRem()
// 改变窗口大小时重新设置 rem
window.onresize = function () {
setRem()
}
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment