chore: 初始化北汽福田工位前端项目
23
.gitignore
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
.DS_Store
|
||||
node_modules
|
||||
/dist
|
||||
/dist-MES
|
||||
*.zip
|
||||
|
||||
# local env files
|
||||
.env.local
|
||||
.env.*.local
|
||||
|
||||
# Log files
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
.vscode
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw*
|
||||
29
README.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# MES
|
||||
|
||||
## Project setup
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
### Compiles and hot-reloads for development
|
||||
```
|
||||
npm run serve
|
||||
```
|
||||
|
||||
### Compiles and minifies for production
|
||||
```
|
||||
npm run build
|
||||
```
|
||||
|
||||
### Run your tests
|
||||
```
|
||||
npm run test
|
||||
```
|
||||
|
||||
### Lints and fixes files
|
||||
```
|
||||
npm run lint
|
||||
```
|
||||
|
||||
### Customize configuration
|
||||
See [Configuration Reference](https://cli.vuejs.org/config/).
|
||||
5
babel.config.js
Normal file
@@ -0,0 +1,5 @@
|
||||
module.exports = {
|
||||
presets: [
|
||||
'@vue/app'
|
||||
]
|
||||
}
|
||||
45
build/build.js
Normal file
@@ -0,0 +1,45 @@
|
||||
'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,
|
||||
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"
|
||||
)
|
||||
)
|
||||
})
|
||||
})
|
||||
64
build/check-versions.js
Normal file
@@ -0,0 +1,64 @@
|
||||
'use strict'
|
||||
const chalk = require('chalk')
|
||||
const semver = require('semver')
|
||||
const packageConfig = require('../package.json')
|
||||
const shell = require('shelljs')
|
||||
|
||||
function exec(cmd) {
|
||||
return require('child_process')
|
||||
.execSync(cmd)
|
||||
.toString()
|
||||
.trim()
|
||||
}
|
||||
|
||||
const versionRequirements = [
|
||||
{
|
||||
name: 'node',
|
||||
currentVersion: semver.clean(process.version),
|
||||
versionRequirement: packageConfig.engines.node
|
||||
}
|
||||
]
|
||||
|
||||
if (shell.which('npm')) {
|
||||
versionRequirements.push({
|
||||
name: 'npm',
|
||||
currentVersion: exec('npm --version'),
|
||||
versionRequirement: packageConfig.engines.npm
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = function() {
|
||||
const warnings = []
|
||||
|
||||
for (let i = 0; i < versionRequirements.length; i++) {
|
||||
const mod = versionRequirements[i]
|
||||
|
||||
if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
|
||||
warnings.push(
|
||||
mod.name +
|
||||
': ' +
|
||||
chalk.red(mod.currentVersion) +
|
||||
' should be ' +
|
||||
chalk.green(mod.versionRequirement)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if (warnings.length) {
|
||||
console.log('')
|
||||
console.log(
|
||||
chalk.yellow(
|
||||
'To use this template, you must update following to modules:'
|
||||
)
|
||||
)
|
||||
console.log()
|
||||
|
||||
for (let i = 0; i < warnings.length; i++) {
|
||||
const warning = warnings[i]
|
||||
console.log(' ' + warning)
|
||||
}
|
||||
|
||||
console.log()
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
BIN
build/logo.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
108
build/utils.js
Normal file
@@ -0,0 +1,108 @@
|
||||
'use strict'
|
||||
const path = require('path')
|
||||
const config = require('../config')
|
||||
const MiniCssExtractPlugin = require('mini-css-extract-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 = []
|
||||
|
||||
// Extract CSS when that option is specified
|
||||
// (which is the case during production build)
|
||||
if (options.extract) {
|
||||
loaders.push(MiniCssExtractPlugin.loader)
|
||||
} else {
|
||||
loaders.push('vue-style-loader')
|
||||
}
|
||||
|
||||
loaders.push(cssLoader)
|
||||
|
||||
if (options.usePostCSS) {
|
||||
loaders.push(postcssLoader)
|
||||
}
|
||||
|
||||
if (loader) {
|
||||
loaders.push({
|
||||
loader: loader + '-loader',
|
||||
options: Object.assign({}, loaderOptions, {
|
||||
sourceMap: options.sourceMap
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
return 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')
|
||||
})
|
||||
}
|
||||
}
|
||||
5
build/vue-loader.conf.js
Normal file
@@ -0,0 +1,5 @@
|
||||
'use strict'
|
||||
|
||||
module.exports = {
|
||||
// You can set the vue-loader configuration by yourself.
|
||||
}
|
||||
110
build/webpack.base.conf.js
Normal file
@@ -0,0 +1,110 @@
|
||||
'use strict'
|
||||
const path = require('path')
|
||||
const utils = require('./utils')
|
||||
const config = require('../config')
|
||||
const { VueLoaderPlugin } = require('vue-loader')
|
||||
const vueLoaderConfig = require('./vue-loader.conf')
|
||||
|
||||
function resolve(dir) {
|
||||
return path.join(__dirname, '..', dir)
|
||||
}
|
||||
|
||||
const createLintingRule = () => ({
|
||||
test: /\.(js|vue)$/,
|
||||
loader: 'eslint-loader',
|
||||
enforce: 'pre',
|
||||
include: [resolve('src'), resolve('test')],
|
||||
options: {
|
||||
formatter: require('eslint-friendly-formatter'),
|
||||
emitWarning: !config.dev.showEslintErrorsInOverlay
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = {
|
||||
context: path.resolve(__dirname, '../'),
|
||||
entry: {
|
||||
app: './src/main.js'
|
||||
},
|
||||
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'),
|
||||
'scss_vars': '@/styles/vars.scss',
|
||||
'excel': path.resolve(__dirname, '../src/excel')// 新增加一行
|
||||
}
|
||||
},
|
||||
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')
|
||||
]
|
||||
},
|
||||
{
|
||||
test: /\.svg$/,
|
||||
loader: 'svg-sprite-loader',
|
||||
include: [resolve('src/icons')],
|
||||
options: {
|
||||
symbolId: 'icon-[name]'
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
|
||||
loader: 'url-loader',
|
||||
exclude: [resolve('src/icons')],
|
||||
options: {
|
||||
limit: 10000,
|
||||
name: utils.assetsPath('img/[name].[hash:7].[ext]')
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
|
||||
loader: 'url-loader',
|
||||
options: {
|
||||
limit: 10000,
|
||||
name: utils.assetsPath('media/[name].[hash:7].[ext]')
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
|
||||
loader: 'url-loader',
|
||||
options: {
|
||||
limit: 10000,
|
||||
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
plugins: [new VueLoaderPlugin()],
|
||||
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'
|
||||
}
|
||||
}
|
||||
98
build/webpack.dev.conf.js
Normal file
@@ -0,0 +1,98 @@
|
||||
'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 HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
|
||||
const portfinder = require('portfinder')
|
||||
|
||||
function resolve(dir) {
|
||||
return path.join(__dirname, '..', dir)
|
||||
}
|
||||
|
||||
const HOST = process.env.HOST
|
||||
const PORT = process.env.PORT && Number(process.env.PORT)
|
||||
|
||||
const devWebpackConfig = merge(baseWebpackConfig, {
|
||||
mode: 'development',
|
||||
module: {
|
||||
rules: utils.styleLoaders({
|
||||
sourceMap: config.dev.cssSourceMap,
|
||||
usePostCSS: true
|
||||
})
|
||||
},
|
||||
// cheap-module-eval-source-map is faster for development
|
||||
devtool: config.dev.devtool,
|
||||
|
||||
// these devServer options should be customized in /config/index.js
|
||||
devServer: {
|
||||
clientLogLevel: 'warning',
|
||||
historyApiFallback: true,
|
||||
hot: true,
|
||||
compress: true,
|
||||
host: HOST || config.dev.host,
|
||||
port: PORT || config.dev.port,
|
||||
open: config.dev.autoOpenBrowser,
|
||||
overlay: config.dev.errorOverlay
|
||||
? { warnings: false, errors: true }
|
||||
: false,
|
||||
publicPath: config.dev.assetsPublicPath,
|
||||
proxy: config.dev.proxyTable,
|
||||
quiet: true, // necessary for FriendlyErrorsPlugin
|
||||
watchOptions: {
|
||||
poll: config.dev.poll
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
new webpack.DefinePlugin({
|
||||
'process.env': require('../config/dev.env')
|
||||
}),
|
||||
new webpack.HotModuleReplacementPlugin(),
|
||||
// https://github.com/ampedandwired/html-webpack-plugin
|
||||
new HtmlWebpackPlugin({
|
||||
filename: 'EquipmentConditionAnalysis.vue.html',
|
||||
template: 'EquipmentConditionAnalysis.vue.html',
|
||||
inject: true,
|
||||
favicon: resolve('MES.png'),
|
||||
title: 'vue-element-admin',
|
||||
templateParameters: {
|
||||
BASE_URL: config.dev.assetsPublicPath + config.dev.assetsSubDirectory
|
||||
}
|
||||
})
|
||||
]
|
||||
})
|
||||
|
||||
module.exports = new Promise((resolve, reject) => {
|
||||
portfinder.basePort = process.env.PORT || config.dev.port
|
||||
portfinder.getPort((err, port) => {
|
||||
if (err) {
|
||||
reject(err)
|
||||
} else {
|
||||
// publish the new Port, necessary for e2e tests
|
||||
process.env.PORT = port
|
||||
// add port to devServer config
|
||||
devWebpackConfig.devServer.port = port
|
||||
|
||||
// Add FriendlyErrorsPlugin
|
||||
devWebpackConfig.plugins.push(
|
||||
new FriendlyErrorsPlugin({
|
||||
compilationSuccessInfo: {
|
||||
messages: [
|
||||
`Your application is running here: http://${
|
||||
devWebpackConfig.devServer.host
|
||||
}:${port}`
|
||||
]
|
||||
},
|
||||
onErrors: config.dev.notifyOnErrors
|
||||
? utils.createNotifierCallback()
|
||||
: undefined
|
||||
})
|
||||
)
|
||||
|
||||
resolve(devWebpackConfig)
|
||||
}
|
||||
})
|
||||
})
|
||||
181
build/webpack.prod.conf.js
Normal file
@@ -0,0 +1,181 @@
|
||||
'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 ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin')
|
||||
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
|
||||
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin')
|
||||
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
|
||||
|
||||
function resolve(dir) {
|
||||
return path.join(__dirname, '..', dir)
|
||||
}
|
||||
|
||||
const env = require('../config/prod.env')
|
||||
|
||||
// For NamedChunksPlugin
|
||||
const seen = new Set()
|
||||
const nameLength = 4
|
||||
|
||||
const webpackConfig = merge(baseWebpackConfig, {
|
||||
mode: 'production',
|
||||
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:8].js'),
|
||||
chunkFilename: utils.assetsPath('js/[name].[chunkhash:8].js')
|
||||
},
|
||||
plugins: [
|
||||
// http://vuejs.github.io/vue-loader/en/workflow/production.html
|
||||
new webpack.DefinePlugin({
|
||||
'process.env': env
|
||||
}),
|
||||
// extract css into its own file
|
||||
new MiniCssExtractPlugin({
|
||||
filename: utils.assetsPath('css/[name].[contenthash:8].css'),
|
||||
chunkFilename: utils.assetsPath('css/[name].[contenthash:8].css')
|
||||
}),
|
||||
// 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: 'EquipmentConditionAnalysis.vue.html',
|
||||
inject: true,
|
||||
favicon: resolve('MES.png'),
|
||||
title: 'vue-admin-template',
|
||||
templateParameters: {
|
||||
BASE_URL: config.build.assetsPublicPath + config.build.assetsSubDirectory
|
||||
},
|
||||
minify: {
|
||||
removeComments: true,
|
||||
collapseWhitespace: true,
|
||||
removeAttributeQuotes: true
|
||||
// more options:
|
||||
// https://github.com/kangax/html-minifier#options-quick-reference
|
||||
}
|
||||
// default sort mode uses toposort which cannot handle cyclic deps
|
||||
// in certain cases, and in webpack 4, chunk order in HTML doesn't
|
||||
// matter anyway
|
||||
}),
|
||||
new ScriptExtHtmlWebpackPlugin({
|
||||
// `runtime` must same as runtimeChunk name. default is `runtime`
|
||||
inline: /runtime\..*\.js$/
|
||||
}),
|
||||
// keep chunk.id stable when chunk has no name
|
||||
new webpack.NamedChunksPlugin(chunk => {
|
||||
if (chunk.name) {
|
||||
return chunk.name
|
||||
}
|
||||
const modules = Array.from(chunk.modulesIterable)
|
||||
if (modules.length > 1) {
|
||||
const hash = require('hash-sum')
|
||||
const joinedHash = hash(modules.map(m => m.id).join('_'))
|
||||
let len = nameLength
|
||||
while (seen.has(joinedHash.substr(0, len))) len++
|
||||
seen.add(joinedHash.substr(0, len))
|
||||
return `chunk-${joinedHash.substr(0, len)}`
|
||||
} else {
|
||||
return modules[0].id
|
||||
}
|
||||
}),
|
||||
// keep module.id stable when vender modules does not change
|
||||
new webpack.HashedModuleIdsPlugin(),
|
||||
// copy custom static assets
|
||||
new CopyWebpackPlugin([
|
||||
{
|
||||
from: path.resolve(__dirname, '../static'),
|
||||
to: config.build.assetsSubDirectory,
|
||||
ignore: ['.*']
|
||||
}
|
||||
])
|
||||
],
|
||||
optimization: {
|
||||
splitChunks: {
|
||||
chunks: 'all',
|
||||
cacheGroups: {
|
||||
libs: {
|
||||
name: 'chunk-libs',
|
||||
test: /[\\/]node_modules[\\/]/,
|
||||
priority: 10,
|
||||
chunks: 'initial' // 只打包初始时依赖的第三方
|
||||
},
|
||||
elementUI: {
|
||||
name: 'chunk-elementUI', // 单独将 elementUI 拆包
|
||||
priority: 20, // 权重要大于 libs 和 app 不然会被打包进 libs 或者 app
|
||||
test: /[\\/]node_modules[\\/]element-ui[\\/]/
|
||||
}
|
||||
}
|
||||
},
|
||||
runtimeChunk: 'single',
|
||||
minimizer: [
|
||||
new UglifyJsPlugin({
|
||||
uglifyOptions: {
|
||||
mangle: {
|
||||
safari10: true
|
||||
}
|
||||
},
|
||||
sourceMap: config.build.productionSourceMap,
|
||||
cache: true,
|
||||
parallel: true
|
||||
}),
|
||||
// Compress extracted CSS. We are using this plugin so that possible
|
||||
// duplicated CSS from different components can be deduped.
|
||||
new OptimizeCSSAssetsPlugin()
|
||||
]
|
||||
}
|
||||
})
|
||||
|
||||
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.generateAnalyzerReport || config.build.bundleAnalyzerReport) {
|
||||
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer')
|
||||
.BundleAnalyzerPlugin
|
||||
|
||||
if (config.build.bundleAnalyzerReport) {
|
||||
webpackConfig.plugins.push(
|
||||
new BundleAnalyzerPlugin({
|
||||
analyzerPort: 8080,
|
||||
generateStatsFile: false
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
if (config.build.generateAnalyzerReport) {
|
||||
webpackConfig.plugins.push(
|
||||
new BundleAnalyzerPlugin({
|
||||
analyzerMode: 'static',
|
||||
reportFilename: 'bundle-report.html',
|
||||
openAnalyzer: false
|
||||
})
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = webpackConfig
|
||||
8
config/dev.env.js
Normal file
@@ -0,0 +1,8 @@
|
||||
'use strict'
|
||||
const merge = require('webpack-merge')
|
||||
const prodEnv = require('./prod.env')
|
||||
|
||||
module.exports = merge(prodEnv, {
|
||||
NODE_ENV: '"development"',
|
||||
BASE_API: '"https://easy-mock.com/mock/5950a2419adc231f356a6636/vue-admin"',
|
||||
})
|
||||
90
config/index.js
Normal file
@@ -0,0 +1,90 @@
|
||||
'use strict'
|
||||
// Template version: 1.2.6
|
||||
// see http://vuejs-templates.github.io/webpack for documentation.
|
||||
|
||||
const path = require('path')
|
||||
const os = require('os')
|
||||
|
||||
const networkInterfaces = os.networkInterfaces()
|
||||
|
||||
const ip = networkInterfaces['WLAN'][1] ? networkInterfaces['WLAN'][1].address : networkInterfaces['WLAN'][0].address
|
||||
console.log(ip)
|
||||
module.exports = {
|
||||
dev: {
|
||||
// Paths
|
||||
assetsSubDirectory: 'static',
|
||||
// assetsPublicPath: '/GQMobile/',
|
||||
assetsPublicPath: '/',
|
||||
proxyTable: {},
|
||||
// Various Dev Server settings
|
||||
host: '10.227.246.2', // can be overwritten by process.env.HOST
|
||||
port: 9528, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
|
||||
autoOpenBrowser: true,
|
||||
errorOverlay: true,
|
||||
notifyOnErrors: false,
|
||||
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
|
||||
// Use Eslint Loader?
|
||||
// If true, your code will be linted during bundling and
|
||||
// linting errors and warnings will be shown in the console.
|
||||
useEslint: true,
|
||||
// If true, eslint errors and warnings will also be shown in the error overlay
|
||||
// in the browser.
|
||||
showEslintErrorsInOverlay: false,
|
||||
|
||||
/**
|
||||
* Source Maps
|
||||
*/
|
||||
|
||||
// https://webpack.js.org/configuration/devtool/#development
|
||||
devtool: 'source-map',
|
||||
|
||||
// CSS Sourcemaps off by default because relative paths are "buggy"
|
||||
// with this option, according to the CSS-Loader README
|
||||
// (https://github.com/webpack/css-loader#sourcemaps)
|
||||
// In our experience, they generally work as expected,
|
||||
// just be aware of this issue when enabling this option.
|
||||
cssSourceMap: false
|
||||
},
|
||||
|
||||
build: {
|
||||
// Template for index.html
|
||||
index: path.resolve(__dirname, '../dist/index.html'),
|
||||
|
||||
// Paths
|
||||
assetsRoot: path.resolve(__dirname, '../dist'),
|
||||
assetsSubDirectory: 'static',
|
||||
|
||||
/**
|
||||
* You can set by youself according to actual condition
|
||||
* You will need to set this if you plan to deploy your site under a sub path,
|
||||
* for example GitHub pages. If you plan to deploy your site to https://foo.github.io/bar/,
|
||||
* then assetsPublicPath should be set to "/bar/".
|
||||
* In most cases please use '/' !!!
|
||||
*/
|
||||
assetsPublicPath: '/',
|
||||
|
||||
/**
|
||||
* Source Maps
|
||||
*/
|
||||
|
||||
productionSourceMap: false,
|
||||
// https://webpack.js.org/configuration/devtool/#production
|
||||
devtool: 'source-map',
|
||||
|
||||
// Gzip off by default as many popular static hosts such as
|
||||
// Surge or Netlify already gzip all static assets for you.
|
||||
// Before setting to `true`, make sure to:
|
||||
// npm install --save-dev compression-webpack-plugin
|
||||
productionGzip: false,
|
||||
productionGzipExtensions: ['js', 'css'],
|
||||
|
||||
// Run the build command with an extra argument to
|
||||
// View the bundle analyzer report after build finishes:
|
||||
// `npm run build --report`
|
||||
// Set to `true` or `false` to always turn it on or off
|
||||
bundleAnalyzerReport: process.env.npm_config_report || false,
|
||||
|
||||
// `npm run build:prod --generate_report`
|
||||
generateAnalyzerReport: process.env.npm_config_generate_report || false
|
||||
}
|
||||
}
|
||||
5
config/prod.env.js
Normal file
@@ -0,0 +1,5 @@
|
||||
'use strict'
|
||||
module.exports = {
|
||||
NODE_ENV: '"production"',
|
||||
BASE_API: '"https://easy-mock.com/mock/5950a2419adc231f356a6636/vue-admin"',
|
||||
}
|
||||
24475
package-lock.json
generated
Normal file
388
package.json
Normal file
@@ -0,0 +1,388 @@
|
||||
{
|
||||
"name": "mes",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
"lint": "vue-cli-service lint",
|
||||
"svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^0.21.4",
|
||||
"echarts": "^5.2.0",
|
||||
"element-ui": "^2.15.7",
|
||||
"file-saver": "^2.0.2",
|
||||
"html2canvas": "^1.4.1",
|
||||
"js-cookie": "^2.2.1",
|
||||
"js-export-excel": "^1.1.2",
|
||||
"mint-ui": "^2.2.13",
|
||||
"mqtt": "^4.3.7",
|
||||
"print-js": "^1.6.0",
|
||||
"qrcode": "^1.4.4",
|
||||
"qs": "^6.9.0",
|
||||
"sass-loader": "^7.3.1",
|
||||
"uuid": "^8.3.2",
|
||||
"vue": "^2.6.6",
|
||||
"vue-jsonp": "^0.1.8",
|
||||
"vue-print-nb": "^1.7.5",
|
||||
"vue-router": "^3.0.1",
|
||||
"vue-seamless-scroll": "^1.1.21",
|
||||
"vuex": "^3.0.1",
|
||||
"xlsx": "^0.17.1",
|
||||
"xlsx-style": "^0.8.13"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vue/cli-plugin-babel": "^3.5.0",
|
||||
"@vue/cli-plugin-eslint": "^3.5.0",
|
||||
"@vue/cli-service": "^3.5.0",
|
||||
"babel-eslint": "^10.0.1",
|
||||
"eslint": "^5.8.0",
|
||||
"eslint-plugin-vue": "^5.0.0",
|
||||
"jquery": "^3.6.4",
|
||||
"sass": "^1.62.0",
|
||||
"script-loader": "^0.7.2",
|
||||
"svg-sprite-loader": "^5.1.1",
|
||||
"vue-particles": "^1.0.9",
|
||||
"vue-template-compiler": "^2.5.21"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"root": true,
|
||||
"env": {
|
||||
"node": true
|
||||
},
|
||||
"extends": [
|
||||
"plugin:vue/essential",
|
||||
"eslint:recommended"
|
||||
],
|
||||
"rules": {
|
||||
"vue/max-attributes-per-line": [
|
||||
2,
|
||||
{
|
||||
"singleline": 10,
|
||||
"multiline": {
|
||||
"max": 1,
|
||||
"allowFirstLine": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"vue/name-property-casing": [
|
||||
"error",
|
||||
"PascalCase"
|
||||
],
|
||||
"accessor-pairs": 2,
|
||||
"arrow-spacing": [
|
||||
2,
|
||||
{
|
||||
"before": true,
|
||||
"after": true
|
||||
}
|
||||
],
|
||||
"block-spacing": [
|
||||
2,
|
||||
"always"
|
||||
],
|
||||
"brace-style": [
|
||||
2,
|
||||
"1tbs",
|
||||
{
|
||||
"allowSingleLine": true
|
||||
}
|
||||
],
|
||||
"camelcase": [
|
||||
0,
|
||||
{
|
||||
"properties": "always"
|
||||
}
|
||||
],
|
||||
"comma-dangle": [
|
||||
2,
|
||||
"never"
|
||||
],
|
||||
"comma-spacing": [
|
||||
2,
|
||||
{
|
||||
"before": false,
|
||||
"after": true
|
||||
}
|
||||
],
|
||||
"comma-style": [
|
||||
2,
|
||||
"last"
|
||||
],
|
||||
"constructor-super": 2,
|
||||
"curly": [
|
||||
2,
|
||||
"multi-line"
|
||||
],
|
||||
"dot-location": [
|
||||
2,
|
||||
"property"
|
||||
],
|
||||
"eol-last": 2,
|
||||
"eqeqeq": [
|
||||
2,
|
||||
"allow-null"
|
||||
],
|
||||
"generator-star-spacing": [
|
||||
2,
|
||||
{
|
||||
"before": true,
|
||||
"after": true
|
||||
}
|
||||
],
|
||||
"handle-callback-err": [
|
||||
2,
|
||||
"^(err|error)$"
|
||||
],
|
||||
"indent": [
|
||||
2,
|
||||
2,
|
||||
{
|
||||
"SwitchCase": 1
|
||||
}
|
||||
],
|
||||
"jsx-quotes": [
|
||||
2,
|
||||
"prefer-single"
|
||||
],
|
||||
"key-spacing": [
|
||||
2,
|
||||
{
|
||||
"beforeColon": false,
|
||||
"afterColon": true
|
||||
}
|
||||
],
|
||||
"keyword-spacing": [
|
||||
2,
|
||||
{
|
||||
"before": true,
|
||||
"after": true
|
||||
}
|
||||
],
|
||||
"new-cap": [
|
||||
2,
|
||||
{
|
||||
"newIsCap": true,
|
||||
"capIsNew": false
|
||||
}
|
||||
],
|
||||
"new-parens": 2,
|
||||
"no-array-constructor": 2,
|
||||
"no-caller": 2,
|
||||
"no-console": "off",
|
||||
"no-class-assign": 2,
|
||||
"no-cond-assign": 2,
|
||||
"no-const-assign": 2,
|
||||
"no-control-regex": 2,
|
||||
"no-delete-var": 2,
|
||||
"no-dupe-args": 2,
|
||||
"no-dupe-class-members": 2,
|
||||
"no-dupe-keys": 2,
|
||||
"no-duplicate-case": 2,
|
||||
"no-empty-character-class": 2,
|
||||
"no-empty-pattern": 2,
|
||||
"no-eval": 2,
|
||||
"no-ex-assign": 2,
|
||||
"no-extend-native": 2,
|
||||
"no-extra-bind": 2,
|
||||
"no-extra-boolean-cast": 2,
|
||||
"no-extra-parens": [
|
||||
2,
|
||||
"functions"
|
||||
],
|
||||
"no-fallthrough": 2,
|
||||
"no-floating-decimal": 2,
|
||||
"no-func-assign": 2,
|
||||
"no-implied-eval": 2,
|
||||
"no-inner-declarations": [
|
||||
2,
|
||||
"functions"
|
||||
],
|
||||
"no-invalid-regexp": 2,
|
||||
"no-irregular-whitespace": 2,
|
||||
"no-iterator": 2,
|
||||
"no-label-var": 2,
|
||||
"no-labels": [
|
||||
2,
|
||||
{
|
||||
"allowLoop": false,
|
||||
"allowSwitch": false
|
||||
}
|
||||
],
|
||||
"no-lone-blocks": 2,
|
||||
"no-mixed-spaces-and-tabs": 2,
|
||||
"no-multi-spaces": 2,
|
||||
"no-multi-str": 2,
|
||||
"no-multiple-empty-lines": [
|
||||
2,
|
||||
{
|
||||
"max": 1
|
||||
}
|
||||
],
|
||||
"no-native-reassign": 2,
|
||||
"no-negated-in-lhs": 2,
|
||||
"no-new-object": 2,
|
||||
"no-new-require": 2,
|
||||
"no-new-symbol": 2,
|
||||
"no-new-wrappers": 2,
|
||||
"no-obj-calls": 2,
|
||||
"no-octal": 2,
|
||||
"no-octal-escape": 2,
|
||||
"no-path-concat": 2,
|
||||
"no-proto": 2,
|
||||
"no-redeclare": 2,
|
||||
"no-regex-spaces": 2,
|
||||
"no-return-assign": [
|
||||
2,
|
||||
"except-parens"
|
||||
],
|
||||
"no-self-assign": 2,
|
||||
"no-self-compare": 2,
|
||||
"no-sequences": 2,
|
||||
"no-shadow-restricted-names": 2,
|
||||
"no-spaced-func": 2,
|
||||
"no-sparse-arrays": 2,
|
||||
"no-this-before-super": 2,
|
||||
"no-throw-literal": 2,
|
||||
"no-trailing-spaces": 2,
|
||||
"no-undef": 2,
|
||||
"no-undef-init": 2,
|
||||
"no-unexpected-multiline": 2,
|
||||
"no-unmodified-loop-condition": 2,
|
||||
"no-unneeded-ternary": [
|
||||
2,
|
||||
{
|
||||
"defaultAssignment": false
|
||||
}
|
||||
],
|
||||
"no-unreachable": 2,
|
||||
"no-unsafe-finally": 2,
|
||||
"no-unused-vars": [
|
||||
2,
|
||||
{
|
||||
"vars": "all",
|
||||
"args": "none"
|
||||
}
|
||||
],
|
||||
"no-useless-call": 2,
|
||||
"no-useless-computed-key": 2,
|
||||
"no-useless-constructor": 2,
|
||||
"no-useless-escape": 0,
|
||||
"no-whitespace-before-property": 2,
|
||||
"no-with": 2,
|
||||
"one-var": [
|
||||
2,
|
||||
{
|
||||
"initialized": "never"
|
||||
}
|
||||
],
|
||||
"operator-linebreak": [
|
||||
2,
|
||||
"after",
|
||||
{
|
||||
"overrides": {
|
||||
"?": "before",
|
||||
":": "before"
|
||||
}
|
||||
}
|
||||
],
|
||||
"padded-blocks": [
|
||||
2,
|
||||
"never"
|
||||
],
|
||||
"quotes": [
|
||||
2,
|
||||
"single",
|
||||
{
|
||||
"avoidEscape": true,
|
||||
"allowTemplateLiterals": true
|
||||
}
|
||||
],
|
||||
"semi": [
|
||||
2,
|
||||
"never"
|
||||
],
|
||||
"semi-spacing": [
|
||||
2,
|
||||
{
|
||||
"before": false,
|
||||
"after": true
|
||||
}
|
||||
],
|
||||
"space-before-blocks": [
|
||||
2,
|
||||
"always"
|
||||
],
|
||||
"space-before-function-paren": [
|
||||
2,
|
||||
"never"
|
||||
],
|
||||
"space-in-parens": [
|
||||
2,
|
||||
"never"
|
||||
],
|
||||
"space-infix-ops": 2,
|
||||
"space-unary-ops": [
|
||||
2,
|
||||
{
|
||||
"words": true,
|
||||
"nonwords": false
|
||||
}
|
||||
],
|
||||
"spaced-comment": [
|
||||
2,
|
||||
"always",
|
||||
{
|
||||
"markers": [
|
||||
"global",
|
||||
"globals",
|
||||
"eslint",
|
||||
"eslint-disable",
|
||||
"*package",
|
||||
"!",
|
||||
","
|
||||
]
|
||||
}
|
||||
],
|
||||
"template-curly-spacing": [
|
||||
2,
|
||||
"never"
|
||||
],
|
||||
"use-isnan": 2,
|
||||
"valid-typeof": 2,
|
||||
"wrap-iife": [
|
||||
2,
|
||||
"any"
|
||||
],
|
||||
"yield-star-spacing": [
|
||||
2,
|
||||
"both"
|
||||
],
|
||||
"yoda": [
|
||||
2,
|
||||
"never"
|
||||
],
|
||||
"prefer-const": 2,
|
||||
"object-curly-spacing": [
|
||||
2,
|
||||
"always",
|
||||
{
|
||||
"objectsInObjects": false
|
||||
}
|
||||
],
|
||||
"array-bracket-spacing": [
|
||||
2,
|
||||
"never"
|
||||
]
|
||||
},
|
||||
"parserOptions": {
|
||||
"parser": "babel-eslint"
|
||||
}
|
||||
},
|
||||
"browserslist": [
|
||||
"> 1%",
|
||||
"last 2 versions",
|
||||
"not ie <= 8"
|
||||
]
|
||||
}
|
||||
BIN
public/MES.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
public/OpImages/J07MA060-1.png
Normal file
|
After Width: | Height: | Size: 2.1 MiB |
BIN
public/OpImages/J07MA070-1.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
public/OpImages/J07MA110-1.png
Normal file
|
After Width: | Height: | Size: 2.7 MiB |
BIN
public/OpImages/J07PA010-1.png
Normal file
|
After Width: | Height: | Size: 1.9 MiB |
BIN
public/OpImages/J07PA010-2.png
Normal file
|
After Width: | Height: | Size: 1.9 MiB |
BIN
public/OpImages/J07PA010-3.png
Normal file
|
After Width: | Height: | Size: 1.9 MiB |
BIN
public/OpImages/J07PA010-4.png
Normal file
|
After Width: | Height: | Size: 1.6 MiB |
10
public/config.js
Normal file
@@ -0,0 +1,10 @@
|
||||
window.g = {
|
||||
mqttClient: null,
|
||||
mqttSubscriptionTopic: 'MES/InstantMessaging/BQ/',
|
||||
mqttPublishTopic: 'WEB/InstantMessaging/BQ/MisServer',
|
||||
// mqttIP: '10.227.246.200',
|
||||
mqttIP: '127.0.0.1',
|
||||
mqttPortNumber: '8083',
|
||||
// baseURL: 'http://10.227.246.200:10030/submit/MESCommonBase.ashx'
|
||||
baseURL: 'http://127.0.0.1:10030/submit/MESCommonBase.ashx'
|
||||
}
|
||||
BIN
public/heli.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
26
public/index.html
Normal file
@@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<link rel="icon" href="<%= BASE_URL %>MES.png">
|
||||
<title>MES</title>
|
||||
<script type="text/javascript">
|
||||
document.write("<script src='./config.js?v=" + new Date().getTime() + "'><\/script>");
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
<strong>We're sorry but MES doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
||||
</noscript>
|
||||
<div id="app"></div>
|
||||
<!-- built files will be auto injected -->
|
||||
</body>
|
||||
</html>
|
||||
<style>
|
||||
body{
|
||||
margin: 0;
|
||||
background:white;
|
||||
}
|
||||
</style>
|
||||
BIN
public/leftPic.jpg
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
public/login.png
Normal file
|
After Width: | Height: | Size: 625 KiB |
BIN
public/rightPic.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
17
src/App.vue
Normal file
@@ -0,0 +1,17 @@
|
||||
<template>
|
||||
<div id="app">
|
||||
<router-view />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style>
|
||||
#app {
|
||||
font-family: MiSans Bold, serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
color: #2c3e50;
|
||||
}
|
||||
.el-table tbody tr:hover > td {
|
||||
background-color: unset !important
|
||||
}
|
||||
</style>
|
||||
44
src/api/login.js
Normal file
@@ -0,0 +1,44 @@
|
||||
import request from '@/utils/request'
|
||||
import state from '@/store'
|
||||
import router from '@/router'
|
||||
export function login(username, password, OpName) {
|
||||
return request({
|
||||
url: '',
|
||||
method: 'post',
|
||||
data: {
|
||||
UserID: state.state.user.id,
|
||||
ModularID: router.currentRoute.path,
|
||||
type: '1',
|
||||
name: '菜单模块系统_用户名密码_查询数据_改造新增',
|
||||
param: `用户名=${username}&密码=${password}`
|
||||
}
|
||||
})
|
||||
}
|
||||
//
|
||||
export function getInfo(token) {
|
||||
return request({
|
||||
url: '',
|
||||
method: 'post',
|
||||
data: {
|
||||
UserID: state.state.user.id,
|
||||
ModularID: router.currentRoute.path,
|
||||
type: '1',
|
||||
name: '菜单模块系统_项目角色模块列表_二级_查询数据',
|
||||
param: `角色编号=${token}`
|
||||
}
|
||||
})
|
||||
}
|
||||
// 修改密码
|
||||
export function editPassword(num1, num2, num3, num4) {
|
||||
return request({
|
||||
url: '',
|
||||
method: 'post',
|
||||
data: {
|
||||
UserID: state.state.user.id,
|
||||
ModularID: router.currentRoute.path,
|
||||
type: '2',
|
||||
name: '账号信息_修改密码_MESWORK',
|
||||
param: '考勤编号=' + num1 + '=string&原始密码=' + num2 + '=string&新密码=' + num3 + '=string&返回=' + num4 + '=string=output'
|
||||
}
|
||||
})
|
||||
}
|
||||
BIN
src/assets/font/MiSans-Bold.ttf
Normal file
BIN
src/assets/font/MiSans-Demibold.ttf
Normal file
BIN
src/assets/font/MiSans-ExtraLight.ttf
Normal file
BIN
src/assets/font/MiSans-Heavy.ttf
Normal file
BIN
src/assets/font/MiSans-Light.ttf
Normal file
BIN
src/assets/font/MiSans-Medium.ttf
Normal file
BIN
src/assets/font/MiSans-Normal.ttf
Normal file
BIN
src/assets/font/MiSans-Regular.ttf
Normal file
BIN
src/assets/font/MiSans-Semibold.ttf
Normal file
BIN
src/assets/font/MiSans-Thin.ttf
Normal file
70
src/assets/font/Misans.css
Normal file
@@ -0,0 +1,70 @@
|
||||
@font-face {
|
||||
font-family: MiSans Demibold;
|
||||
src: url("MiSans-Demibold.ttf");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: block;
|
||||
}
|
||||
@font-face {
|
||||
font-family: MiSans Bold;
|
||||
src: url("MiSans-Bold.ttf");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: block;
|
||||
}
|
||||
@font-face {
|
||||
font-family: MiSans ExtraLight;
|
||||
src: url("MiSans-ExtraLight.ttf");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: block;
|
||||
}
|
||||
@font-face {
|
||||
font-family: MiSans Heavy;
|
||||
src: url("MiSans-Heavy.ttf");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: block;
|
||||
}
|
||||
@font-face {
|
||||
font-family: MiSans Light;
|
||||
src: url("MiSans-Light.ttf");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: block;
|
||||
}
|
||||
@font-face {
|
||||
font-family: MiSans Medium;
|
||||
src: url("MiSans-Medium.ttf");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: block;
|
||||
}
|
||||
@font-face {
|
||||
font-family: MiSans Normal;
|
||||
src: url("MiSans-Normal.ttf");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: block;
|
||||
}
|
||||
@font-face {
|
||||
font-family: MiSans Regular;
|
||||
src: url("MiSans-Regular.ttf");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: block;
|
||||
}
|
||||
@font-face {
|
||||
font-family: MiSans Semibold;
|
||||
src: url("MiSans-Semibold.ttf");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: block;
|
||||
}
|
||||
@font-face {
|
||||
font-family: MiSans Thin;
|
||||
src: url("MiSans-Thin.ttf");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: block;
|
||||
}
|
||||
BIN
src/assets/image/Andon.png
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
BIN
src/assets/image/DeviceManagement.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
src/assets/image/Init.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
src/assets/image/MESlogo.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
src/assets/image/MatchFail.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
src/assets/image/MatchSuccess.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
src/assets/image/MaterialPull.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
src/assets/image/MeasureFail.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
src/assets/image/MeasureSuccess.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
src/assets/image/OperationGuide.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
src/assets/image/OrderCompletion.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
src/assets/image/PassNoSuccess.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
src/assets/image/PassSuccess-assets/PassSuccess.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
src/assets/image/PassSuccess.png
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
src/assets/image/PassSuccess.psd
Normal file
BIN
src/assets/image/QualityInquiry.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
src/assets/image/RepairManagement.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
src/assets/image/StartWorkCircle.gif
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
src/assets/image/blinkrectangle.gif
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
src/assets/image/bluerectangle.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
src/assets/image/boltnew.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/assets/image/bule.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
src/assets/image/call.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
src/assets/image/caozuo.png
Normal file
|
After Width: | Height: | Size: 752 KiB |
BIN
src/assets/image/green.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
src/assets/image/greenFace.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
src/assets/image/green_bolt.gif
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
src/assets/image/greenrectangle.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
src/assets/image/grey.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
src/assets/image/leftPic.jpg
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
src/assets/image/leftPic1.jpg
Normal file
|
After Width: | Height: | Size: 9.5 KiB |
BIN
src/assets/image/logo.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
src/assets/image/nothing.png
Normal file
|
After Width: | Height: | Size: 152 B |
BIN
src/assets/image/red.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
src/assets/image/redFace.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
src/assets/image/redrectangle.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
src/assets/image/reset.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
src/assets/image/rightPic.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
src/assets/logo.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
@@ -0,0 +1,48 @@
|
||||
# vue-print-nb
|
||||
|
||||
This is a directive wrapper for printed, Simple, fast, convenient, light.
|
||||
|
||||
## Install
|
||||
|
||||
#### NPM
|
||||
```bash
|
||||
npm install vue-print-nb --save
|
||||
```
|
||||
|
||||
```javascript
|
||||
import Print from 'vue-print-nb'
|
||||
|
||||
Vue.use(Print);
|
||||
```
|
||||
|
||||
|
||||
## Description
|
||||
|
||||
#### Print the entire page:
|
||||
|
||||
```
|
||||
<button v-print>Print the entire page</button>
|
||||
```
|
||||
|
||||
|
||||
#### Print local range:
|
||||
|
||||
HTML:
|
||||
```
|
||||
<div id="printMe" style="background:red;">
|
||||
<p>葫芦娃,葫芦娃</p>
|
||||
<p>一根藤上七朵花 </p>
|
||||
<p>小小树藤是我家 啦啦啦啦 </p>
|
||||
<p>叮当当咚咚当当 浇不大</p>
|
||||
<p> 叮当当咚咚当当 是我家</p>
|
||||
<p> 啦啦啦啦</p>
|
||||
<p>...</p>
|
||||
</div>
|
||||
|
||||
<button v-print="'#printMe'">Print local range</button>
|
||||
```
|
||||
|
||||
|
||||
## License
|
||||
|
||||
[MIT](http://opensource.org/licenses/MIT)
|
||||
1
src/assets/vue-print-nb/.eslintignore
Normal file
@@ -0,0 +1 @@
|
||||
/lib
|
||||
BIN
src/assets/vue-print-nb/2021-05-12-18-28-08.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
src/assets/vue-print-nb/2021-05-12-18-28-56.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
354
src/assets/vue-print-nb/README.md
Normal file
@@ -0,0 +1,354 @@
|
||||
# vue-print-nb
|
||||
|
||||
This is a directive wrapper for printed, Simple, fast, convenient, light.
|
||||
<!-- TOC -->
|
||||
|
||||
- [vue-print-nb](#vue-print-nb)
|
||||
- [Install](#install)
|
||||
- [Vue2 Version:](#vue2-version)
|
||||
- [Vue3 Version:](#vue3-version)
|
||||
- [Description](#description)
|
||||
- [Usage Method:](#usage-method)
|
||||
- [Print the entire page:](#print-the-entire-page)
|
||||
- [Print local range:](#print-local-range)
|
||||
- [Print local range More:](#print-local-range-more)
|
||||
- [Print URL:](#print-url)
|
||||
- [Print Preview](#print-preview)
|
||||
- [Print Url Preview:](#print-url-preview)
|
||||
- [Print local range Preview](#print-local-range-preview)
|
||||
- [Print Async Url](#print-async-url)
|
||||
- [v-print API](#v-print-api)
|
||||
|
||||
<!-- /TOC -->
|
||||
## Install
|
||||
|
||||
[在线DEMO](https://power-kxlee.github.io/vue-print-nb/dist/index.html)
|
||||
|
||||
[ONLINE DEMO](https://power-kxlee.github.io/vue-print-nb/dist/index.html)
|
||||
|
||||
### Vue2 Version:
|
||||
```bash
|
||||
npm install vue-print-nb --save
|
||||
```
|
||||
|
||||
|
||||
```javascript
|
||||
import Print from 'vue-print-nb'
|
||||
// Global instruction
|
||||
Vue.use(Print);
|
||||
|
||||
//or
|
||||
|
||||
// Local instruction
|
||||
import print from 'vue-print-nb'
|
||||
|
||||
directives: {
|
||||
print
|
||||
}
|
||||
|
||||
```
|
||||
### Vue3 Version:
|
||||
```bash
|
||||
npm install vue3-print-nb --save
|
||||
```
|
||||
|
||||
```javascript
|
||||
// Global instruction
|
||||
import { createApp } from 'vue'
|
||||
import App from './App.vue'
|
||||
import print from 'vue3-print-nb'
|
||||
const app = createApp(App)
|
||||
app.use(print)
|
||||
app.mount('#app')
|
||||
|
||||
//or
|
||||
|
||||
// Local instruction
|
||||
import print from 'vue3-print-nb'
|
||||
|
||||
directives: {
|
||||
print
|
||||
}
|
||||
```
|
||||
|
||||
|
||||

|
||||
|
||||
## Description
|
||||
|
||||
Support two printing methods, direct printing page HTML, and printing URL
|
||||
|
||||
It's easy to use, Support Vue compatible browser version
|
||||
|
||||
|
||||
## Usage Method:
|
||||
|
||||
### Print the entire page:
|
||||
|
||||
```
|
||||
<button v-print>Print the entire page</button>
|
||||
```
|
||||
|
||||
|
||||
### Print local range:
|
||||
|
||||
HTML:
|
||||
```
|
||||
<div id="printMe" style="background:red;">
|
||||
<p>葫芦娃,葫芦娃</p>
|
||||
<p>一根藤上七朵花 </p>
|
||||
<p>小小树藤是我家 啦啦啦啦 </p>
|
||||
<p>叮当当咚咚当当 浇不大</p>
|
||||
<p> 叮当当咚咚当当 是我家</p>
|
||||
<p> 啦啦啦啦</p>
|
||||
<p>...</p>
|
||||
</div>
|
||||
|
||||
<button v-print="'#printMe'">Print local range</button>
|
||||
```
|
||||
Pass in a string type directly
|
||||
* `id`: ID of local print range
|
||||
|
||||
### Print local range More:
|
||||
HTML:
|
||||
```
|
||||
<button v-print="printObj">Print local range</button><div id="loading" v-show="printLoading"></div>
|
||||
|
||||
<div id="printMe" style="background:red;">
|
||||
<p>葫芦娃,葫芦娃</p>
|
||||
<p>一根藤上七朵花 </p>
|
||||
<p>小小树藤是我家 啦啦啦啦 </p>
|
||||
<p>叮当当咚咚当当 浇不大</p>
|
||||
<p> 叮当当咚咚当当 是我家</p>
|
||||
<p> 啦啦啦啦</p>
|
||||
<p>...</p>
|
||||
</div>
|
||||
```
|
||||
JavaScript:
|
||||
```
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
printLoading: true,
|
||||
printObj: {
|
||||
id: "printMe",
|
||||
popTitle: 'good print',
|
||||
extraCss: "https://cdn.bootcdn.net/ajax/libs/animate.css/4.1.1/animate.compat.css, https://cdn.bootcdn.net/ajax/libs/hover.css/2.3.1/css/hover-min.css",
|
||||
extraHead: '<meta http-equiv="Content-Language"content="zh-cn"/>',
|
||||
beforeOpenCallback (vue) {
|
||||
vue.printLoading = true
|
||||
console.log('打开之前')
|
||||
},
|
||||
openCallback (vue) {
|
||||
vue.printLoading = false
|
||||
console.log('执行了打印')
|
||||
},
|
||||
closeCallback (vue) {
|
||||
console.log('关闭了打印工具')
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
```
|
||||
You can also pass in an object type `Objcet`
|
||||
|
||||
|
||||
### Print URL:
|
||||
|
||||
If you need to print the specified URL, you can use the following method:
|
||||
(Ensure that your URL is the same source policy)
|
||||
|
||||
HTML:
|
||||
```
|
||||
<button v-print="printObj">Print local range</button>
|
||||
```
|
||||
|
||||
JavaScript:
|
||||
```
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
printObj: {
|
||||
url: 'http://localhost:8080/'
|
||||
beforeOpenCallback (vue) {
|
||||
console.log('打开之前')
|
||||
},
|
||||
openCallback (vue) {
|
||||
console.log('执行了打印')
|
||||
},
|
||||
closeCallback (vue) {
|
||||
console.log('关闭了打印工具')
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Print Preview
|
||||
Support print preview, pass in` preview:true `, All printing methods are supported
|
||||
|
||||
#### Print Url Preview:
|
||||
|
||||
HTML:
|
||||
```
|
||||
<button v-print="printObj">Print local range</button>
|
||||
```
|
||||
|
||||
JavaScript:
|
||||
```
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
|
||||
printObj: {
|
||||
url: 'http://localhost:8080/'
|
||||
preview: true,
|
||||
previewTitle: 'Test Title', // The title of the preview window. The default is 打印预览
|
||||
previewBeforeOpenCallback (vue) {
|
||||
console.log('正在加载预览窗口')
|
||||
},
|
||||
previewOpenCallback (vue) {
|
||||
console.log('已经加载完预览窗口')
|
||||
},
|
||||
beforeOpenCallback (vue) {
|
||||
console.log('打开之前')
|
||||
},
|
||||
openCallback (vue) {
|
||||
console.log('执行了打印')
|
||||
},
|
||||
closeCallback (vue) {
|
||||
console.log('关闭了打印工具')
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
```
|
||||

|
||||
|
||||
|
||||
#### Print local range Preview
|
||||
HTML:
|
||||
```
|
||||
<button v-print="printObj">Print local range</button><div id="loading" v-show="printLoading"></div>
|
||||
|
||||
<div id="printMe" style="background:red;">
|
||||
<p>葫芦娃,葫芦娃</p>
|
||||
<p>一根藤上七朵花 </p>
|
||||
<p>小小树藤是我家 啦啦啦啦 </p>
|
||||
<p>叮当当咚咚当当 浇不大</p>
|
||||
<p> 叮当当咚咚当当 是我家</p>
|
||||
<p> 啦啦啦啦</p>
|
||||
<p>...</p>
|
||||
</div>
|
||||
```
|
||||
JavaScript:
|
||||
```
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
printLoading: true,
|
||||
printObj: {
|
||||
id: "printMe",
|
||||
preview: true,
|
||||
previewTitle: 'print Title', // The title of the preview window. The default is 打印预览
|
||||
popTitle: 'good print',
|
||||
extraCss: "https://cdn.bootcdn.net/ajax/libs/animate.css/4.1.1/animate.compat.css, https://cdn.bootcdn.net/ajax/libs/hover.css/2.3.1/css/hover-min.css",
|
||||
extraHead: '<meta http-equiv="Content-Language"content="zh-cn"/>',
|
||||
previewBeforeOpenCallback (vue) {
|
||||
console.log('正在加载预览窗口')
|
||||
},
|
||||
previewOpenCallback (vue) {
|
||||
console.log('已经加载完预览窗口')
|
||||
},
|
||||
beforeOpenCallback (vue) {
|
||||
vue.printLoading = true
|
||||
console.log('打开之前')
|
||||
},
|
||||
openCallback (vue) {
|
||||
vue.printLoading = false
|
||||
console.log('执行了打印')
|
||||
},
|
||||
closeCallback (vue) {
|
||||
console.log('关闭了打印工具')
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||

|
||||
|
||||
### Print Async Url
|
||||
|
||||
Perhaps, your URL is obtained asynchronously. You can use the following method
|
||||
|
||||
HTML:
|
||||
```
|
||||
<button v-print="printObj">Print local range</button>
|
||||
```
|
||||
|
||||
JavaScript:
|
||||
```
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
printObj: {
|
||||
asyncUrl (reslove, vue) {
|
||||
setTimeout(() => {
|
||||
reslove('http://localhost:8080/')
|
||||
}, 2000)
|
||||
},
|
||||
previewBeforeOpenCallback (vue) {
|
||||
console.log('正在加载预览窗口')
|
||||
},
|
||||
previewOpenCallback (vue) {
|
||||
console.log('已经加载完预览窗口')
|
||||
},
|
||||
beforeOpenCallback (vue) {
|
||||
console.log('打开之前')
|
||||
},
|
||||
openCallback (vue) {
|
||||
console.log('执行了打印')
|
||||
},
|
||||
closeCallback (vue) {
|
||||
console.log('关闭了打印工具')
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
```
|
||||
Finally, use `reslove()` to return your URL
|
||||
|
||||
|
||||
## v-print API
|
||||
|
||||
| Parame | Explain | Type | OptionalValue | DefaultValue |
|
||||
| ------------------------- | ------------------------------------------------------------------------------------------------------- | ------------- | ------------------------------------------------- | ------------ |
|
||||
| id | Range print ID, required value | String | — | — |
|
||||
| standard | Document type (Print local range only) | String | html5/loose/strict | html5 |
|
||||
| extraHead | `<head></head>`Add DOM nodes in the node, and separate multiple nodes with `,` (Print local range only) | String | — | — |
|
||||
| extraCss | `<link>` New CSS style sheet , and separate multiple nodes with `,`(Print local range only) | String | — | - |
|
||||
| popTitle | `<title></title>` Content of label (Print local range only) | String | — | - |
|
||||
| openCallback | Call the successful callback function of the printing tool | Function | Returns the instance of `Vue` called at that time | - |
|
||||
| closeCallback | Close the callback function of printing tool success | Function | Returns the instance of `Vue` called at that time | - |
|
||||
| beforeOpenCallback | Callback function before calling printing tool | Function | Returns the instance of `Vue` called at that time | - |
|
||||
| url | Print the specified URL. (It is not allowed to set the ID at the same time) | string | - | - |
|
||||
| asyncUrl | Return URL through 'resolve()' and Vue | Function | - | - |
|
||||
| preview | Preview tool | Boolean | - | false |
|
||||
| previewTitle | Preview tool Title | String | - | '打印预览' |
|
||||
| previewPrintBtnLabel | The name of the preview tool button | String | - | '打印' |
|
||||
| zIndex | CSS of preview tool: z-index | String,Number | - | 20002 |
|
||||
| previewBeforeOpenCallback | Callback function before starting preview tool | Function | Returns the instance of `Vue` | - |
|
||||
| previewOpenCallback | Callback function after fully opening preview tool | Function | Returns the instance of `Vue` | - |
|
||||
| clickMounted | Click the callback function of the print button | Function | Returns the instance of `Vue` | - |
|
||||
|
||||
|
||||
|
||||
License:
|
||||
|
||||
[MIT](http://opensource.org/licenses/MIT)
|
||||
BIN
src/assets/vue-print-nb/dist/favicon.ico
vendored
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
src/assets/vue-print-nb/dist/fonts/element-icons.535877f5.woff
vendored
Normal file
BIN
src/assets/vue-print-nb/dist/fonts/element-icons.732389de.ttf
vendored
Normal file
2
src/assets/vue-print-nb/dist/js/app.0a5d3f05.js
vendored
Normal file
66
src/assets/vue-print-nb/dist/js/chunk-vendors.b78e38dd.js
vendored
Normal file
4069
src/assets/vue-print-nb/lib/print.common.js
Normal file
4079
src/assets/vue-print-nb/lib/print.umd.js
Normal file
2
src/assets/vue-print-nb/lib/print.umd.min.js
vendored
Normal file
55
src/assets/vue-print-nb/package.json
Normal file
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"name": "vue-print-nb",
|
||||
"version": "1.7.5",
|
||||
"description": "Vue plug-in, print! Good!",
|
||||
"main": "lib/print.umd.min.js",
|
||||
"author": "Power-kxLee",
|
||||
"private": false,
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
"lint": "vue-cli-service lint",
|
||||
"lib": "vue-cli-service build --target lib --name print --dest lib print/index.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"vue": "^2.6.11"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vue/cli-plugin-babel": "~4.5.0",
|
||||
"@vue/cli-plugin-eslint": "~4.5.0",
|
||||
"@vue/cli-service": "~4.5.0",
|
||||
"babel-eslint": "^10.1.0",
|
||||
"core-js": "^3.6.5",
|
||||
"echarts": "^5.0.2",
|
||||
"element-ui": "^2.15.5",
|
||||
"eslint": "^6.7.2",
|
||||
"eslint-plugin-vue": "^6.2.2",
|
||||
"less": "^3.9.0",
|
||||
"less-loader": "^4.1.0",
|
||||
"qrcodejs2": "0.0.2",
|
||||
"sass": "^1.32.8",
|
||||
"sass-loader": "^7.3.1",
|
||||
"vue-router": "^3.5.1",
|
||||
"vue-template-compiler": "^2.6.11"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"root": true,
|
||||
"env": {
|
||||
"node": true
|
||||
},
|
||||
"extends": [
|
||||
"plugin:vue/essential",
|
||||
"eslint:recommended"
|
||||
],
|
||||
"parserOptions": {
|
||||
"parser": "babel-eslint"
|
||||
},
|
||||
"rules": {}
|
||||
},
|
||||
"browserslist": [
|
||||
"> 1%",
|
||||
"last 2 versions",
|
||||
"not dead"
|
||||
]
|
||||
}
|
||||
6
src/assets/vue-print-nb/print/index.js
Normal file
@@ -0,0 +1,6 @@
|
||||
import Print from './packages/print.js';
|
||||
Print.install = function(Vue) {
|
||||
Vue.directive('print', Print);
|
||||
};
|
||||
|
||||
export default Print;
|
||||
3
src/assets/vue-print-nb/print/packages/css/print.css
Normal file
@@ -0,0 +1,3 @@
|
||||
div{
|
||||
|
||||
}
|
||||
BIN
src/assets/vue-print-nb/print/packages/images/print-icon.png
Normal file
|
After Width: | Height: | Size: 257 B |
87
src/assets/vue-print-nb/print/packages/print.js
Normal file
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
* @Author: lee
|
||||
* @Date: 2021-05-10 11:45:50
|
||||
* @LastEditors: lee
|
||||
* @LastEditTime: 2021-05-20 15:39:43
|
||||
* @Description: file content
|
||||
*/
|
||||
import Print from './printarea.js';
|
||||
/**
|
||||
* @file 打印
|
||||
* 指令`v-print`,默认打印整个窗口
|
||||
* 传入参数`v-print="'#id'"` , 参数为需要打印局部的盒子标识.
|
||||
*/
|
||||
const addEvent = (element, type, callback) => {
|
||||
if (element.addEventListener) {
|
||||
element.addEventListener(type, callback, false);
|
||||
} else if (element.attachEvent) {
|
||||
element.attachEvent('on' + type, callback);
|
||||
} else {
|
||||
element['on' + type] = callback;
|
||||
}
|
||||
}
|
||||
export default {
|
||||
directiveName: 'print',
|
||||
bind (el, binding, vnode) {
|
||||
let vue = vnode.context;
|
||||
let id = '';
|
||||
addEvent(el, 'click', () => {
|
||||
vue.$nextTick(() => {
|
||||
if (binding?.value?.clickMounted) {
|
||||
binding.value.clickMounted(vue)
|
||||
}
|
||||
if (typeof binding.value === 'string') {
|
||||
// 全局打印
|
||||
id = binding.value;
|
||||
localPrint();
|
||||
} else if (typeof binding.value === 'object' && !!binding.value.id) {
|
||||
// 局部打印
|
||||
id = binding.value.id;
|
||||
let ids = id.replace(new RegExp("#", "g"), '');
|
||||
let elsdom = document.getElementById(ids);
|
||||
if (!elsdom) console.log("id in Error"), id = '';
|
||||
localPrint();
|
||||
|
||||
} else if(binding?.value?.preview) {
|
||||
localPrint();
|
||||
} else {
|
||||
window.print();
|
||||
return
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
const localPrint = () => {
|
||||
new Print({
|
||||
ids: id, // * 局部打印必传入id
|
||||
vue,
|
||||
url: binding.value.url, // 打印指定的网址,这里不能跟id共存 如果共存id的优先级会比较高
|
||||
standard: '', // 文档类型,默认是html5,可选 html5,loose,strict
|
||||
extraHead: binding.value.extraHead, // 附加在head标签上的额外标签,使用逗号分隔
|
||||
extraCss: binding.value.extraCss, // 额外的css连接,多个逗号分开
|
||||
previewTitle: binding.value.previewTitle || '打印预览', // 打印预览的标题
|
||||
zIndex: binding.value.zIndex || 20002, // 预览窗口的z-index
|
||||
previewPrintBtnLabel: binding.value.previewPrintBtnLabel || '打印', // 打印预览的标题
|
||||
popTitle: binding.value.popTitle, // title的标题
|
||||
preview: binding.value.preview || false, // 是否启动预览模式
|
||||
asyncUrl: binding.value.asyncUrl,
|
||||
previewBeforeOpenCallback () { // 预览窗口打开之前的callback
|
||||
binding.value.previewBeforeOpenCallback && binding.value.previewBeforeOpenCallback(vue)
|
||||
},
|
||||
previewOpenCallback () { // 预览窗口打开之后的callback
|
||||
binding.value.previewOpenCallback && binding.value.previewOpenCallback(vue)
|
||||
},
|
||||
openCallback () { // 调用打印之后的回调事件
|
||||
binding.value.openCallback && binding.value.openCallback(vue)
|
||||
},
|
||||
closeCallback () {
|
||||
binding.value.closeCallback && binding.value.closeCallback(vue)
|
||||
},
|
||||
beforeOpenCallback () {
|
||||
binding.value.beforeOpenCallback && binding.value.beforeOpenCallback(vue)
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
}
|
||||
};
|
||||