Commit 7a19e2d4 by golton_gao

update: init code

parents
Showing with 6841 additions and 0 deletions
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-2"
],
"plugins": ["transform-runtime"],
"env": {
"test": {
"presets": ["env", "stage-2"],
"plugins": ["istanbul"]
}
}
}
// http://eslint.org/docs/user-guide/configuring
module.exports = {
root: true,
parser: 'babel-eslint',
parserOptions: {
sourceType: 'module'
},
env: {
browser: true,
},
// https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style
extends: 'standard',
// required to lint *.vue files
plugins: [
'html'
],
// add your custom rules here
'rules': {
// 关闭全等
'eqeqeq': [0],
'no-unused-vars': [2, {
// 允许声明未使用变量
'vars': 'local',
// 参数不检查
'args': 'none'
}],
// 关闭语句强制分号结尾
'semi': [0],
// 空行最多不能超过100行
'no-multiple-empty-lines': [0, { 'max': 100 }],
// 关闭禁止混用tab和空格
'no-mixed-spaces-and-tabs': [0],
// 关闭检测是否是驼峰写法
'camelcase': 0,
// 关闭禁用不必要的转义
'no-useless-escape': 0,
// 关闭禁用抛出异常字面量
'no-throw-literal': 0,
// 关闭禁止重新声明变量
'no-redeclare': 0,
// allow paren-less arrow functions
'arrow-parens': 0,
// allow async-await
'generator-star-spacing': 0,
// allow debugger during development
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
'indent': [2, 2, {
'SwitchCase': 1 // switch case 缩进2个空格
}]
}
}
\ No newline at end of file
.DS_Store
node_modules/
dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
// https://github.com/michael-ciniawsky/postcss-load-config
module.exports = {
"plugins": {
// to edit target browsers: use "browserlist" field in package.json
"autoprefixer": {}
}
}
{
"name": "满意度模块",
"identifier": "com.jffc.vcd.module.satisfaction.test",
"build": 28,
"version": "2.0.8",
"releaseNote": "域名修改"
}
{
"name": "满意度模块",
"identifier": "com.jffc.vcd.module.satisfaction",
"build": 28,
"version": "2.0.8",
"releaseNote": "域名修改"
}
{
"name": "满意度模块",
"identifier": "com.jffc.vcd.module.satisfaction.test",
"build": 28,
"version": "2.0.8",
"releaseNote": "域名修改"
}
\ No newline at end of file
# vue-cordova-demo
> A VueCordova 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
# build for production and view the bundle
npm run jffc-build
# check for cordova requirements
npm run jffc-check
# build for ios production with cordova
npm run jffc-ios
# build for android production with cordova
npm run jffc-android
# build for web production with cordova & serve with hot reload at localhost:3040
npm run jffc-browser
# build V+ H5 production
npm run jffc-vbuild
# add cordova platforms ios
npm run jffc-add-ios
# add cordova platforms android
npm run jffc-add-android
# add cordova platforms browser
npm run jffc-add-browser
# save for cordova plugins
npm run jffc-save
# add cordova plugin camera
npm run jffc-add-camera
# add cordova plugin console
npm run jffc-add-console
# add cordova plugin device
npm run jffc-add-device
# add cordova plugin sqlite-storage
npm run jffc-add-sqlite
# add cordova plugin file
npm run jffc-add-file
# add cordova plugin dialogs
npm run jffc-add-dialogs
# add cordova plugin splashscreen
npm run jffc-add-splashscreen
# add cordova plugin statusbar
npm run jffc-add-statusbar
```
For detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).
#切换接口环境
1. 修改main.js文件中接口地址
axios.defaults.baseURL = APIPath.TESTHOST 或者(APIPath.HOST)
2. 修改http.js文件中请求头部Authorization参数
#打包
1. 无论测试环境还是正式环境,均运行以下命令进行打包。打包之前,注意路径的切换。
```
npm run jffc-vbuild
```
#更新内容:
1. 目标成绩只有区域、城市维度显示,其他的不显示
当前正式环境版本信息:
"identifier": "com.jffc.vcd.module.satisfaction",
"version": "2.0.6",
"build": 26,
当前测试环境版本信息:
"identifier": "com.jffc.vcd.module.satisfaction.test",
"version": "1.5.6",
"build": 20,
require('./check-versions')()
process.env.NODE_ENV = 'production'
var ora = require('ora')
var rm = require('rimraf')
var path = require('path')
var chalk = require('chalk')
var webpack = require('webpack')
var config = require('../config')
var webpackConfig = require('./webpack.prod.conf')
// 设置package.json的name与version跟随config.xml里配置 @add by evanxu 2017-06-29
// 改变package版本号
var fs = require('fs')
var xml2js = require('xml2js')
var parser = new xml2js.Parser({explicitArray: false})
var versiony = require('versiony')
var xml = fs.readFileSync(process.cwd() + '/config.xml', {encoding: 'utf-8'}).toString()
parser.parseString(xml, (err, result) => {
if (err) throw err
versiony.version(result.widget.$.version).major().to('package.json')
})
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'
))
var spinner = ora('building for production...')
spinner.start()
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
if (err) throw err
webpack(webpackConfig, function (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'))
})
})
var chalk = require('chalk')
var semver = require('semver')
var packageConfig = require('../package.json')
var shell = require('shelljs')
function exec (cmd) {
return require('child_process').execSync(cmd).toString().trim()
}
var 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 () {
var warnings = []
for (var i = 0; i < versionRequirements.length; i++) {
var 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 (var i = 0; i < warnings.length; i++) {
var warning = warnings[i]
console.log(' ' + warning)
}
console.log()
process.exit(1)
}
}
/* eslint-disable */
require('eventsource-polyfill')
var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true')
hotClient.subscribe(function (event) {
if (event.action === 'reload') {
window.location.reload()
}
})
require('./check-versions')()
var config = require('../config')
if (!process.env.NODE_ENV) {
process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV)
}
var opn = require('opn')
var path = require('path')
var express = require('express')
var webpack = require('webpack')
var proxyMiddleware = require('http-proxy-middleware')
var webpackConfig = require('./webpack.dev.conf')
// default port where dev server listens for incoming traffic
var port = process.env.PORT || config.dev.port
// automatically open browser, if not set will be false
var autoOpenBrowser = !!config.dev.autoOpenBrowser
// Define HTTP proxies to your custom API backend
// https://github.com/chimurai/http-proxy-middleware
var proxyTable = config.dev.proxyTable
var app = express()
var compiler = webpack(webpackConfig)
var devMiddleware = require('webpack-dev-middleware')(compiler, {
publicPath: webpackConfig.output.publicPath,
quiet: true
})
var hotMiddleware = require('webpack-hot-middleware')(compiler, {
log: () => {}
})
// force page reload when html-webpack-plugin template changes
compiler.plugin('compilation', function (compilation) {
compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
hotMiddleware.publish({ action: 'reload' })
cb()
})
})
// proxy api requests
Object.keys(proxyTable).forEach(function (context) {
var options = proxyTable[context]
if (typeof options === 'string') {
options = { target: options }
}
app.use(proxyMiddleware(options.filter || context, options))
})
// handle fallback for HTML5 history API
app.use(require('connect-history-api-fallback')())
// serve webpack bundle output
app.use(devMiddleware)
// enable hot-reload and state-preserving
// compilation error display
app.use(hotMiddleware)
// serve pure static assets
var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory)
app.use(staticPath, express.static('./static'))
var uri = 'http://localhost:' + port
var _resolve
var readyPromise = new Promise(resolve => {
_resolve = resolve
})
console.log('> Starting dev server...')
devMiddleware.waitUntilValid(() => {
console.log('> Listening at ' + uri + '\n')
// when env is testing, don't need open it
if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') {
opn(uri)
}
_resolve()
})
var server = app.listen(port)
module.exports = {
ready: readyPromise,
close: () => {
server.close()
}
}
var path = require('path')
var config = require('../config')
var ExtractTextPlugin = require('extract-text-webpack-plugin')
exports.assetsPath = function (_path) {
var assetsSubDirectory = process.env.NODE_ENV === 'production'
? config.build.assetsSubDirectory
: config.dev.assetsSubDirectory
return path.posix.join(assetsSubDirectory, _path)
}
exports.cssLoaders = function (options) {
options = options || {}
var cssLoader = {
loader: 'css-loader',
options: {
minimize: process.env.NODE_ENV === 'production',
sourceMap: options.sourceMap
}
}
// generate loader string to be used with extract text plugin
function generateLoaders (loader, loaderOptions) {
var loaders = [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'
})
} 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) {
var output = []
var loaders = exports.cssLoaders(options)
for (var extension in loaders) {
var loader = loaders[extension]
output.push({
test: new RegExp('\\.' + extension + '$'),
use: loader
})
}
return output
}
require('./check-versions')()
process.env.NODE_ENV = 'production'
var ora = require('ora')
var rm = require('rimraf')
var path = require('path')
var chalk = require('chalk')
var webpack = require('webpack')
var config = require('../config')
var webpackConfig = require('./webpack.prov.conf')
// 设置package.json的name与version跟随config.xml里配置 @add by evanxu 2017-06-29
// 改变package版本号
var fs = require('fs')
var xml2js = require('xml2js')
var parser = new xml2js.Parser({explicitArray: false})
var versiony = require('versiony')
var xml = fs.readFileSync(process.cwd() + '/config.xml', {encoding: 'utf-8'}).toString()
parser.parseString(xml, (err, result) => {
if (err) throw err
versiony.version(result.widget.$.version).major().to('package.json')
})
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'
))
var spinner = ora('building for V+Production...')
spinner.start()
rm(path.join(config.prov.assetsRoot, config.prov.assetsSubDirectory), err => {
if (err) throw err
webpack(webpackConfig, function (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(' V+Build failed with errors.\n'))
process.exit(1)
}
console.log(chalk.cyan(' V+Build complete.\n'))
})
})
var utils = require('./utils')
var config = require('../config')
var isProduction = process.env.NODE_ENV === 'production'
module.exports = {
loaders: utils.cssLoaders({
sourceMap: isProduction
? config.build.productionSourceMap
: config.dev.cssSourceMap,
extract: isProduction
})
}
var path = require('path')
var utils = require('./utils')
var config = require('../config')
var vueLoaderConfig = require('./vue-loader.conf')
const vuxLoader = require('vux-loader')
function resolve (dir) {
return path.join(__dirname, '..', dir)
}
const webpackConfig = {
entry: {
app: ['babel-polyfill', './src/main.js']
},
output: {
path: config.build.assetsRoot,
filename: '[name].js',
publicPath: process.env.NODE_ENV === 'production'
? config.build.assetsPublicPath
: config.dev.assetsPublicPath
},
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src')
}
},
module: {
rules: [
{
test: /\.(js|vue)$/,
loader: 'eslint-loader',
enforce: 'pre',
include: [resolve('src'), resolve('test')],
options: {
formatter: require('eslint-friendly-formatter')
}
},
// {
// test: /\.less$/,
// loader: 'style-loader!css-loader!less-loader'
// },
{
test: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig
},
{
test: /\.js$/,
loader: 'babel-loader',
include: [resolve('src'), resolve('test')]
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
}
]
}
}
module.exports = vuxLoader.merge(webpackConfig, {
options: {},
plugins: [{
name: 'vux-ui'
}]
})
var utils = require('./utils')
var webpack = require('webpack')
var config = require('../config')
var merge = require('webpack-merge')
var baseWebpackConfig = require('./webpack.base.conf')
var HtmlWebpackPlugin = require('html-webpack-plugin')
var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
// 设置package.json的name与version跟随config.xml里配置 @add by evanxu 2017-06-29
// 设置版本号、时间
var exdate = require('exdate')
var fs = require('fs')
var xml2js = require('xml2js')
var parser = new xml2js.Parser({explicitArray: false})
var xml = fs.readFileSync(process.cwd() + '/config.xml', {encoding: 'utf-8'}).toString()
var versions;
parser.parseString(xml, (err, result) => {
if (err) {
throw err
}
versions = result.widget.$.version
})
var ds = new Date()
var dates = exdate.format(ds, 'yyyy-MM-dd HH:mm')
// add hot-reload related code to entry chunks
Object.keys(baseWebpackConfig.entry).forEach(function (name) {
baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name])
})
module.exports = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap })
},
// cheap-module-eval-source-map is faster for development
devtool: '#cheap-module-eval-source-map',
plugins: [
new webpack.DefinePlugin({
'process.env': config.dev.env,
'process.vers': JSON.stringify(versions),
'process.dates': JSON.stringify(dates)
}),
// https://github.com/glenjamin/webpack-hot-middleware#installation--usage
new webpack.HotModuleReplacementPlugin(),
new webpack.NoEmitOnErrorsPlugin(),
// https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'index.html',
inject: true
}),
new FriendlyErrorsPlugin()
]
})
var path = require('path')
var utils = require('./utils')
var webpack = require('webpack')
var config = require('../config')
var merge = require('webpack-merge')
var baseWebpackConfig = require('./webpack.base.conf')
var CopyWebpackPlugin = require('copy-webpack-plugin')
var HtmlWebpackPlugin = require('html-webpack-plugin')
var ExtractTextPlugin = require('extract-text-webpack-plugin')
var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
// 设置package.json的name与version跟随config.xml里配置 @add by evanxu 2017-06-29
// 设置版本号、时间
var exdate = require('exdate')
var fs = require('fs')
var xml2js = require('xml2js')
var parser = new xml2js.Parser({explicitArray: false})
var xml = fs.readFileSync(process.cwd() + '/config.xml', {encoding: 'utf-8'}).toString()
var versions;
parser.parseString(xml, (err, result) => {
if (err) {
throw err
}
versions = result.widget.$.version
})
var ds = new Date()
var dates = exdate.format(ds, 'yyyy-MM-dd HH:mm')
var env = config.build.env
var webpackConfig = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({
sourceMap: config.build.productionSourceMap,
extract: true
})
},
devtool: config.build.productionSourceMap ? '#source-map' : false,
output: {
path: config.build.assetsRoot,
filename: utils.assetsPath('js/[name].[chunkhash].js'),
chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
},
plugins: [
// http://vuejs.github.io/vue-loader/en/workflow/production.html
new webpack.DefinePlugin({
'process.env': env,
'process.vers': JSON.stringify(versions),
'process.dates': JSON.stringify(dates)
}),
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
},
sourceMap: true
}),
// extract css into its own file
new ExtractTextPlugin({
filename: utils.assetsPath('css/[name].[contenthash].css')
}),
// Compress extracted CSS. We are using this plugin so that possible
// duplicated CSS from different components can be deduped.
new OptimizeCSSPlugin({
cssProcessorOptions: {
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'
}),
// split vendor js into its own file
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks: function (module, count) {
// 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',
chunks: ['vendor']
}),
// copy custom static assets
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: config.build.assetsSubDirectory,
ignore: ['.*']
}
])
]
})
if (config.build.productionGzip) {
var 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) {
var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
webpackConfig.plugins.push(new BundleAnalyzerPlugin())
}
module.exports = webpackConfig
var path = require('path')
var utils = require('./utils')
var webpack = require('webpack')
var config = require('../config')
var merge = require('webpack-merge')
var baseWebpackConfig = require('./webpack.base.conf')
var CopyWebpackPlugin = require('copy-webpack-plugin')
var HtmlWebpackPlugin = require('html-webpack-plugin')
var ExtractTextPlugin = require('extract-text-webpack-plugin')
var ZipPlugin = require('zip-webpack-plugin')
var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
// 设置版本号、时间
var exdate = require('exdate')
var fs = require('fs')
var xml2js = require('xml2js')
var parser = new xml2js.Parser({explicitArray: false})
var xml = fs.readFileSync(process.cwd() + '/config.xml', {encoding: 'utf-8'}).toString()
var versions;
parser.parseString(xml, (err, result) => {
if (err) {
throw err
}
versions = result.widget.$.version
})
var ds = new Date()
var dates = exdate.format(ds, 'yyyy-MM-dd HH:mm')
var env = config.prov.env
var webpackConfig = merge(baseWebpackConfig, {
module: {
rules: utils.styleLoaders({
sourceMap: config.prov.productionSourceMap,
extract: true
})
},
devtool: config.prov.productionSourceMap ? '#source-map' : false,
output: {
path: config.prov.assetsRoot,
filename: utils.assetsPath('js/[name].[chunkhash].js'),
chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
},
plugins: [
// http://vuejs.github.io/vue-loader/en/workflow/production.html
new webpack.DefinePlugin({
'process.env': env,
'process.vers': JSON.stringify(versions),
'process.dates': JSON.stringify(dates)
}),
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
},
sourceMap: true
}),
// extract css into its own file
new ExtractTextPlugin({
filename: utils.assetsPath('css/[name].[contenthash].css')
}),
// Compress extracted CSS. We are using this plugin so that possible
// duplicated CSS from different components can be deduped.
new OptimizeCSSPlugin({
cssProcessorOptions: {
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.prov.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'
}),
// split vendor js into its own file
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks: function (module, count) {
// 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',
chunks: ['vendor']
}),
// copy custom static assets
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: config.prov.assetsSubDirectory,
ignore: ['.*']
},
// 设置文件复制粘贴
{
from: path.resolve(path.join(__dirname, '../', config.prov.appConfFile)),
to: path.resolve(path.join(config.prov.assetsRoot, config.prov.appConfFile)),
toType: 'file',
force: true,
flatten: true
}
])
]
})
if (config.prov.productionGzip) {
var CompressionWebpackPlugin = require('compression-webpack-plugin')
webpackConfig.plugins.push(
new CompressionWebpackPlugin({
asset: '[path].gz[query]',
algorithm: 'gzip',
test: new RegExp(
'\\.(' +
config.prov.productionGzipExtensions.join('|') +
')$'
),
threshold: 10240,
minRatio: 0.8
})
)
}
// 设置压缩打包
if (config.prov.packToZip) {
webpackConfig.plugins.push(
new ZipPlugin({
path: config.prov.assetsRoot,
filename: 'vpackage.zip'
})
)
}
if (config.prov.bundleAnalyzerReport) {
var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
webpackConfig.plugins.push(new BundleAnalyzerPlugin())
}
module.exports = webpackConfig
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.jffc.vcd.module.satisfaction" version="1.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>SatisfactionModule</name>
<description>
建发满意度模块
</description>
<author email="evanxuyi@gmail.com" href="http://cordova.io">
Core Team
</author>
<content src="index.html" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
<allow-intent href="market:*" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
<preference name="DisallowOverscroll" value="true" />
<preference name="BackupWebStorage" value="local" />
</platform>
<preference name="StatusBarBackgroundColor" value="#2c3e50" />
<preference name="StatusBarOverlaysWebView" value="false" />
<preference name="FadeSplashScreen" value="false" />
<preference name="SplashScreenDelay" value="1000" />
<preference name="ShowSplashScreenSpinner" value="false" />
<plugin name="cordova-plugin-whitelist" spec="1" />
<plugin name="cordova-plugin-camera" spec="~2.4.1" />
<plugin name="cordova-plugin-statusbar" spec="~2.2.3" />
<plugin name="cordova-plugin-splashscreen" spec="~4.0.3" />
<plugin name="cordova-plugin-dialogs" spec="~1.3.3" />
<plugin name="cordova-plugin-file" spec="~4.3.3" />
<plugin name="cordova-sqlite-storage" spec="~2.0.4" />
<plugin name="cordova-plugin-device" spec="~1.1.6" />
<plugin name="cordova-plugin-console" spec="~1.0.7" />
<engine name="browser" spec="^5.0.3" />
<engine name="ios" spec="^4.4.0" />
<engine name="android" spec="^6.2.3" />
</widget>
var merge = require('webpack-merge')
var prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
NODE_ENV: '"development"'
})
// see http://vuejs-templates.github.io/webpack for documentation.
var path = require('path')
module.exports = {
build: {
env: require('./prod.env'),
index: path.resolve(__dirname, '../www/index.html'),
assetsRoot: path.resolve(__dirname, '../www'),
assetsSubDirectory: 'static',
assetsPublicPath: '',
productionSourceMap: true,
// 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
},
dev: {
env: require('./dev.env'),
port: 8080,
autoOpenBrowser: true,
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {},
// 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
},
// 2017-11-21 新增集成V+ @evanxu
prov: {
env: require('./prov.env'),
index: path.resolve(__dirname, '../dist/index.html'),
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: '',
productionSourceMap: false,
appConfFile: 'CubeModule.json',
eslint: true,
autoRoutes: true,
autoImportStyle: true,
friendlyErrorsPlugin: false,
packToZip: true,
// 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
/* 本地调试 */
// port: 3041,
// autoOpenBrowser: true,
// assetsSubDirectory: 'static',
// assetsPublicPath: '/',
// proxyTable: {},
// cssSourceMap: false
}
}
module.exports = {
NODE_ENV: '"production"'
}
var merge = require('webpack-merge')
var prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
NODE_ENV: '"provt"'
})
<!--
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
-->
# Cordova Hooks
Cordova Hooks represent special scripts which could be added by application and plugin developers or even by your own build system to customize cordova commands. See Hooks Guide for more details: http://cordova.apache.org/docs/en/edge/guide_appdev_hooks_index.md.html#Hooks%20Guide.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no,width=device-width">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="jf">
<meta name="apple-mobile-web-app-title" content="contact">
<meta name="format-detection" content="telephone=no,email=no,adress=no" />
<meta name="mobile-web-app-capable" content="jf">
<title>建发房产满意度模块</title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected 通过集成V+埋点 cordova.js 无需再自己添加 -->
</body>
</html>
{}
\ No newline at end of file
This diff could not be displayed because it is too large.
{
"name": "satisfaction_module",
"version": "1.0.1",
"description": "建发满意度模块",
"author": "Evan Xu <evanxuyi@gmail.com>,Weshine Chen <80368178@qq.com>",
"private": true,
"scripts": {
"dev": "node build/dev-server.js",
"start": "node build/dev-server.js",
"build": "node build/build.js",
"lint": "eslint --ext .js,.vue src",
"jffc-check": "cordova requirements",
"jffc-build": "node build/build.js",
"jffc-ios": "cordova build ios",
"jffc-android": "cordova build android",
"jffc-browser": "cordova prepare browser && cross-env PORT=3004 node build/dev-server.js",
"jffc-vbuild": "node build/vt-build.js",
"jffc-save": "cordova plugin save",
"jffc-add-ios": "cordova platforms add ios@4.4.0",
"jffc-add-android": "cordova platforms add android@6.2.3",
"jffc-add-browser": "cordova platforms add browser",
"jffc-add-camera": "cordova plugin add cordova-plugin-camera",
"jffc-add-console": "cordova plugin add cordova-plugin-console",
"jffc-add-device": "cordova plugin add cordova-plugin-device",
"jffc-add-sqlite": "cordova plugin add cordova-sqlite-storage",
"jffc-add-file": "cordova plugin add cordova-plugin-file",
"jffc-add-dialogs": "cordova plugin add cordova-plugin-dialogs",
"jffc-add-splashscreen": "cordova plugin add cordova-plugin-splashscreen",
"jffc-add-statusbar": "cordova plugin add cordova-plugin-statusbar"
},
"dependencies": {
"axios": "^0.16.2",
"babel-polyfill": "^6.23.0",
"cordova-android": "^6.2.3",
"cordova-browser": "^5.0.3",
"cordova-ios": "^4.4.0",
"cordova-plugin-camera": "~2.4.1",
"cordova-plugin-console": "~1.0.7",
"cordova-plugin-device": "~1.1.6",
"cordova-plugin-dialogs": "~1.3.3",
"cordova-plugin-file": "~4.3.3",
"cordova-plugin-splashscreen": "~4.0.3",
"cordova-plugin-statusbar": "~2.2.3",
"cordova-plugin-whitelist": "1",
"cordova-sqlite-storage": "~2.0.4",
"date-time-picker": "^0.5.2",
"echarts": "^4.1.0",
"exdate": "0.0.4",
"vue": "^2.3.3",
"vue-router": "^2.3.1",
"vuex": "^2.3.1",
"vux": "^2.9.2"
},
"devDependencies": {
"autoprefixer": "^6.7.2",
"babel-core": "^6.22.1",
"babel-eslint": "^7.1.1",
"babel-loader": "^6.2.10",
"babel-plugin-transform-runtime": "^6.22.0",
"babel-preset-env": "^1.3.2",
"babel-preset-stage-2": "^6.22.0",
"babel-register": "^6.22.0",
"chalk": "^1.1.3",
"connect-history-api-fallback": "^1.3.0",
"copy-webpack-plugin": "^4.0.1",
"cross-env": "^5.0.1",
"css-loader": "^0.28.0",
"eslint": "^3.19.0",
"eslint-config-standard": "^6.2.1",
"eslint-friendly-formatter": "^2.0.7",
"eslint-loader": "^1.7.1",
"eslint-plugin-html": "^2.0.0",
"eslint-plugin-promise": "^3.4.0",
"eslint-plugin-standard": "^2.0.1",
"eventsource-polyfill": "^0.9.6",
"express": "^4.14.1",
"extract-text-webpack-plugin": "^2.0.0",
"file-loader": "^0.11.1",
"friendly-errors-webpack-plugin": "^1.1.3",
"html-webpack-plugin": "^2.28.0",
"http-proxy-middleware": "^0.17.3",
"less": "^3.8.1",
"less-loader": "^4.1.0",
"mockjs": "^1.0.1-beta3",
"opn": "^4.0.2",
"optimize-css-assets-webpack-plugin": "^1.3.0",
"ora": "^1.2.0",
"rimraf": "^2.6.0",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"url-loader": "^0.5.8",
"versiony": "^2.0.1",
"vue-loader": "^12.1.0",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.3.3",
"vux-loader": "^1.2.9",
"webpack": "^2.6.1",
"webpack-bundle-analyzer": "^2.2.1",
"webpack-dev-middleware": "^1.10.0",
"webpack-hot-middleware": "^2.18.0",
"webpack-merge": "^4.1.0",
"xml2js": "^0.4.19",
"zip-webpack-plugin": "^1.1.0"
},
"engines": {
"node": ">= 4.0.0",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
],
"cordova": {
"platforms": [
"browser",
"ios",
"android"
],
"plugins": {
"cordova-plugin-camera": {
"CAMERA_USAGE_DESCRIPTION": " ",
"PHOTOLIBRARY_USAGE_DESCRIPTION": " "
},
"cordova-plugin-console": {},
"cordova-plugin-device": {},
"cordova-plugin-dialogs": {},
"cordova-plugin-splashscreen": {},
"cordova-plugin-statusbar": {},
"cordova-plugin-whitelist": {},
"cordova-plugin-file": {},
"cordova-sqlite-storage": {}
}
}
}
\ No newline at end of file
<template>
<div id="app">
<transition :name="this.$router.isBack ? 'page-out' : 'page-in'">
<router-view></router-view>
</transition>
</div>
</template>
<script>
export default {
name: 'app',
created () {
if (process.env.NODE_ENV === 'provt') {
// 兼容V+模块
console.log('当前环境:', process.env.NODE_ENV)
// todo:1、获取V+用户信息 this.$nativeApi.account.getUser()
// 2、根据用户信息,设置vuex,方便调用 this.$store.dispatch()
// 3、跳转至首页 this.$router.push('/') or 退出 this.$nativeApi.navigator.exit()
this.$nativeApi.system.statusBarColor([205, 61, 61])
this.$nativeApi.system.statusBarStyle([1])
this.$nativeApi.system.setBounces([0])
} else {
// APP模块(生产环境、开发环境)
console.log('当前环境:', process.env.NODE_ENV)
// todo:1、获取当前用户信息
// 2、根据用户信息,设置vuex,方便调用 this.$store.dispatch()
// 3、跳转至首页 this.$router.push('/') or 退出 this.$router.back()
}
}
}
</script>
<style scoped>
#app {
height: 100%;
}
</style>
.page-out-enter-active,
.page-out-leave-active,
.page-in-enter-active,
.page-in-leave-active {
will-change: transform;
transition: all 500ms;
height: 100%;
width: 100%;
top: 0;
position: absolute;
backface-visibility: visible;
perspective: 1000;
}
/* 页面退出动画效果 */
.page-out-enter {
opacity: 0;
transform: translate3d(-100%, 0, 0);
-webkit-transform: translate3d(-100%, 0, 0);
}
.page-out-enter-to {
opacity: 1;
}
.page-out-leave-active {
opacity: 0.5;
transform: translate3d(100%, 0, 0);
-webkit-transform: translate3d(100%, 0, 0);
}
/* 页面进入动画效果 */
.page-in-enter {
transform: translate3d(100%, 0, 0);
-webkit-transform: translate3d(100%, 0, 0);
}
.page-in-enter-to {
-webkit-transform: translateX(0);
transform: translateX(0);
}
.page-in-leave-active {
opacity: 0.5;
}
.list-out-enter-active,
.list-out-leave-active,
.list-in-enter-active,
.list-in-leave-active {
will-change: transform;
transition: all 300ms;
width: 100%;
backface-visibility: visible;
perspective: 1000;
}
/* 页面进入动画效果 */
.list-in-enter {
transform: translate3d(100%, 0, 0);
-webkit-transform: translate3d(100%, 0, 0);
}
.list-in-enter-to {
-webkit-transform: translateX(0);
transform: translateX(0);
}
.list-in-leave-active {
opacity: 0;
transform: translate3d(100%, 0, 0);
-webkit-transform: translate3d(100%, 0, 0);
}
/* 页面退出动画效果 */
.list-out-enter {
opacity: 1;
background-color: #0e1721;
}
.list-out-enter-to {
opacity: 1;
background-color: red;
transform: translate3d(100%, 0, 0);
-webkit-transform: translate3d(100%, 0, 0);
}
.list-out-leave-active {
background-color: blue;
opacity: 1;
}
.margin-left-normal {
margin-left: 0.2rem;
}
.padding-left-normal {
padding-left: 0.2rem;
}
.margin-bottom-normal {
margin-bottom: 0.2rem;
}
.margin-top-normal {
margin-top: 0.2rem;
}
.flexCenter {
align-items: center;
}
.flexStart {
align-items: flex-start;
}
.flexEnd {
align-items: flex-end;
}
.textLeft {
text-align: left;
}
.textRight {
text-align: right;
}
.textCenter {
text-align: center;
}
.flex-1 {
flex: 1;
}
.right-arrow {
background-image: url(../images/ic_arrow_left@2x.png);
background-repeat: no-repeat;
background-size: 100% 100%;
width: 0.4rem;
height: 0.4rem;
}
.top3-rank {
background-image: url(../images/bg_ranking@2x.png);
background-repeat: no-repeat;
background-size: 100% 100%;
width: 0.4rem;
height: 0.48rem;
line-height: 0.48rem;
}
.after3-rank {
background-color: #474f5a;
border-radius: 3px;
width: 0.4rem;
height: 0.4rem;
line-height: 0.4rem;
}
.infoIcon {
background-image: url(../images/ic_explain@2x.png);
background-repeat: no-repeat;
background-size: 100% 100%;
width: 0.4rem;
height: 0.4rem;
}
.alignLeft {
text-align: left;
}
.fontColor1 {
color: #6b6f7b;
}
.fontColor2 {
color: #333333;
}
.fontColor3 {
color: #cd0001;
}
.fontColor4 {
color: #0e1721;
}
.fontColor5 {
color: #cd3d3d;
}
.white {
background: white;
}
.bgColor1 {
background-color: #cd3d3d;
}
.bgColor2 {
background-color: white;
}
.bgColor3 {
background-color: #f9f9fb;
}
.bgColor4 {
background-color: #cd3d3d;
}
.font14 {
font-size: 14px;
}
.font12 {
font-size: 12px;
}
.visibility {
visibility: visible;
}
.inVisibility {
display: none;
}
.hidden {
visibility: hidden;
}
/*
框架 全局 基础样式
** 可写在这 **
*/
* {
list-style: none;
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
}
*:not(input,textarea) {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
ul,
li,
div,
span,
em,
a,
i {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, input, textarea, p, blockquote, th, td{margin:0;padding:0;}
fieldset, img, input, textarea{border:0;}
address, caption, cite, code, dfn, em, th, var{font-style:normal; font-weight:normal;}
ol, ul{list-style:none;}
h1, h2, h3, h4, h5, h6{font-size:100%; font-weight:normal;}
html,body{-webkit-user-select:none;-moz-user-select:none;user-select:none;height:100%;}
a:active,
a:hover {
text-decoration: underline;
}
a,img{-webkit-touch-callout:none}
img{ width: 100%; vertical-align:middle;}
ol,
ul {
margin: 0;
}
input {
outline: none;
border: 0;
}
button {
border: 0;
margin: 0;
padding: 0;
}
body {
font-size: 16px;
background: #f3f5f6;
-webkit-overflow-scrolling: touch;
}
a {
text-decoration: none;
}
a,button,input,textarea{
-webkit-tap-highlight-color: rgba(0,0,0,0);
outline:0;
}
.flex {
display: flex;
display: -webkit-flex;
}
/* 排列方法 row=从左到右,column=从上到下 */
/* wrap=换行排列 */
.flex-flow-r-w {
flex-flow: row wrap;
}
.flex-flow-c-n {
flex-flow: column nowrap;
}
.flex-flow-c-w {
flex-flow: column wrap;
}
.flex-in {
display: -webkit-flex;
display: inline-flex;
}
.flex-wrap {
flex-wrap: wrap;
}
.flex-wrap-r {
flex-wrap: wrap-reverse;
}
.flex-l {
align-items: flex-start;
}
.flex-l-l {
justify-content: flex-start;
}
.flex-c {
align-items: center;
}
.flex-c-c {
justify-content: center;
}
.flex-r {
align-items: flex-end;
}
.flex-r-r {
justify-content: flex-end;
}
.flex-item-gsb-1 {
flex: 1 1 auto;
}
.flex-item-gsb-0 {
flex: 0 0 auto;
}
/* 元素左对齐布局 */
.flex-self-l {
align-self: flex-start;
}
/* 元素中间齐布局 */
.flex-self-c {
align-self: center;
}
/* 元素右对齐布局 */
.flex-self-r {
align-self: flex-end;
}
/* 子元素换行布局 */
.flex-dir-column {
flex-direction: column;
}
.pl-li-del {
width: 0.4rem;
height: 0.4rem;
background: url(../images/ic_cancel_selected@2x.png) no-repeat center/80%;
}
/* 自适应 */
@media screen and (max-width: 10000px) {
html {
font-size: 100px;
}
}
@media screen and (max-width: 750px) {
html {
font-size: 100px;
}
}
@media screen and (max-width: 720px) {
html {
font-size: 96px;
}
}
@media screen and (max-width: 414px) {
html {
font-size: 55.2px;
}
}
@media screen and (max-width: 412px) {
html {
font-size: 54.933333px;
}
}
@media screen and (max-width: 384px) {
html {
font-size: 51.2px;
}
}
@media screen and (max-width: 375px) {
html {
font-size: 50px;
}
}
@media screen and (max-width: 360px) {
html {
font-size: 48px;
}
}
@media screen and (max-width: 320px) {
html {
font-size: 42.66667px;
}
}
import nativeApi from './cordova/index'
export default {
install (Vue, config) {
var nativeApiObj = nativeApi(config)
Vue.$nativeApi = nativeApiObj
Vue.prototype.$nativeApi = nativeApiObj
}
}
'use strict'
import NativeApi from '../native/nativeApi'
import { sleep } from '../native/utils'
/**
* 底座模块名称
* @type {{MIDEA_COMMON: string, MIDEA_USER: string, MIDEA_BARCODE: string, MIDEA_MAP: string, MIDEA_ANNTO: string, MIDEA_SALE: string}}
*/
const MODULE_NAMES = {
MIDEA_COMMON: 'MideaCommon',
MIDEA_USER: 'MideaUser',
MIDEA_BARCODE: 'MideaBarcode',
MIDEA_MAP: 'MideaMap',
MIDEA_ANNTO: 'MideaAnnto',
MIDEA_SALE: 'MideaSale'
}
/**
* Cordova Api父类,包含基本配置和基本入口方法
* @extends NativeApi
*/
export default class CordovaApi extends NativeApi {
constructor (conf) {
conf = conf || {}
conf.platform = 'cordova'
super(conf)
if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {
var self = this
if (!window.document.getElementById('cordovaJS')) {
var script = window.document.createElement('script')
script.id = 'cordovaJS'
script.src = 'cordova.js'
script.type = 'text/javascript'
script.async = false
script.onload = function () {
console.log('Loading Cordova Plugin...')
window.document.addEventListener('deviceready', function () {
self.doReady(self)
}, false)
}
script.onerror = function () {
console.error('Cannot Load Cordova Plugin!')
}
window.document.body.appendChild(script)
}
}
}
set methods (methods) {
this._methods = methods
}
get methods () {
return this._methods
}
get moduleNames () {
return MODULE_NAMES
}
/**
* 调用cordova对象的exec方法
* @param module 所属模块
* @param method 方法名称
* @param params 附带参数
* @return {Promise}
*/
callApi (module, method, params) {
let self = this
self.log(module, method, params)
return new Promise((resolve, reject) => {
(async function () {
for (var i = 0; i < self.maxRetryTimes; i++) {
if (!self.ready || !window.cordova) {
if (i === self.maxRetryTimes - 1) {
reject('Cordova is not ready, no retry')
} else {
await sleep(self.retrySleepTime * (i + 1))
console.error('Cordova is not ready, retry later')
}
}
}
try {
window.cordova.exec(function (msg) {
resolve(msg)
}, function (msg) {
reject(msg)
}, module, method, params || [])
} catch (e) {
reject(e)
}
})()
})
}
}
import CordovaApi from './cordovaApi'
import System from './modules/system'
import GeoLocation from './modules/geoLocation'
import UserInteraction from './modules/userInteraction'
import Account from './modules/account'
import Navigator from './modules/navigator'
import DataInteraction from './modules/DataInteraction'
export default function (config) {
return new CordovaApi(config)
.setModules(
System,
GeoLocation,
UserInteraction,
Account,
Navigator,
DataInteraction
)
}
/** @module extend/common **/
import * as types from '../types'
import BaseModel from '../../native/BaseModel'
/**
* 用户账户
* @extends BaseModel
*/
export default class Account extends BaseModel {
static get moduleName () {
return types.MODULE_NAME_ACCOUNT
}
/**
* 获取当前应用登录的用户的信息
* @param {Array=} params 无参数
* @return {Promise}
* @result cn: 中文名, cookie: 用户的cookie, departmentName: 完整的部门名称, employeenumber: 员工号, gender: 性别(0 女, 1男), mail: 邮箱, mobile: 手机号码, ou: 组织架构的部门模块名, positionName: 岗位, sessionkey: 用户的sessionKey, ssoToken: 用户的ssoToken, telephonenumber: 固定电话, uid: 用户uid, uniqueIdentifier: 用户的唯一标识, userIcon: 用户头像
*/
getUser (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_USER, 'getUser', params)
}
/**
* 获取用户是否登录
* @param {Array=} params 无参数
* @return {Promise}
* @result {isLogin: 是否登录}
*/
isLogin (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_USER, 'isLogin', params)
}
/**
* 注销当前用户
* @param {Array=} params 无参数
* @return {Promise}
* @result #
*/
logout (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_USER, 'logout', params)
}
/**
* 验证密码当前用户的密码。优先验证二阶段密码,如手势、语音、人脸识别等。验证失败两次将退出当前打开的应用
* @param {Array=} params 无参数
* @return {Promise}
* @result 1:成功 0:失败
*/
authPassword (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_USER, 'authPassword', params)
}
/**
* 获取当前用户的密码
* @param {Array=} params 无参数
* @return {Promise}
* @result password 密码
*/
getUserPassword (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_USER, 'getUserPassword', params)
}
/**
* 跳转到页面
* @param {Array=} params 跳转到登录页面
* @return {Promise}
* @result #
*/
toLogin (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_USER, 'toLogin', params)
}
}
/** @module extend/common **/
import * as types from '../types'
import BaseModel from '../../native/BaseModel'
/**
* 原生与h5数据交互相关
* @extends BaseModel
*/
export default class DataInteraction extends BaseModel {
static get moduleName () {
return types.MODULE_NAME_DATA_INTERACTION
}
/**
* 获取H5信息
* @param {Array=} params ['key'] key为想要获得的参数
* @return {Promise}
* @result 参数key的值
*/
getH5Info (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'getH5Info', params)
}
/**
* 保存H5信息
* @param {Array=} params ['key', 'value'] 保存参数的key,参数的值
* @return {Promise}
* @result #
*/
saveH5Info (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'saveH5Info', params)
}
/**
* 获取模块或用户的未读消息(美信、美的通identifier)
* @param {Array=} params 第一次参数:应用模块名称(例如:com.midea.demo)或者用户id(xxx或者xxx@midea.com.cn),如果第一个参数传的是用户Id,则一定要传第二个参数;第二个参数固定为“IM”,如果传了第二个参数,则第一个参数必定是用户id,
* @return {Promise}
* @result 返回代表未读消息数目的int类型数据
*/
getMessageUnread (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'getMessageUnread', params)
}
/**
* 获取扩展字段
* @param {Array=} params 模块名 com.midea.demo
* @return {Promise}
* @result 返回拓展字段,{extra: {action: 'xxx'}} 需要和底座商量决定action的值
*/
getExtra (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'getExtra', params)
}
/**
* 获取设备信息
* @return {Promise}
* @result 返回相关设备信息的object类型数据
*/
getDeviceInfo (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'getDeviceInfo', params)
}
}
/** @module extend/common **/
import * as types from '../types'
import BaseModel from '../../native/BaseModel'
/**
* 地图定位导航相关接口
* @extends BaseModel
*/
export default class GeoLocation extends BaseModel {
static get moduleName () {
return types.MODULE_NAME_GEO_LOCATION
}
/**
* 持续定位,每隔指定时间返回定位信息
* @param {Array=} params [间隔时间(ms)]
* @return {Promise}
* @result #
*/
startUpdatingLocation (params) {
return this.nativeApi.callApi('MideaMap', 'startUpdatingLocation', params)
}
/**
* 停止持续定位
* @param {Array=} params 无参数
* @return {Promise}
* @result #
*/
stopUpdatingLocation (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_MAP, 'stopUpdatingLocation', params)
}
/**
* 周边搜索
* @param {Array=} params 无参数
* @return {Promise}
* @result [{"citycode": 区号,"title": 标题,"poiId": "B02F50X8AR","address": 详细地址,"province": 省份,"longitude": 经度,"latitude": 维度,"city": 城市}]
*/
getPois (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_MAP, 'getPois', params)
}
/**
* 获取经纬度
* @param {Array=} params 无参数
* @return {Promise}
* @result {address: 详细地址city: 城市citycode: 区号district: 区latitude: 维度longitude: 经度province: 省份street: 街道}
*/
location (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_MAP, 'location', params)
}
/**
* 从目的地开始路线导航
* @param {Array=} params 无参数
* @return {Promise}
* @result #
*/
selectWidget (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_MAP, 'selectWidget', params)
}
/**
* 从目的地开始路线导航
* @param {Array=} params params ["113.2045723720553", "23.033276740700192", "112.84994614670291", "23.193689802924411", "广州2"]==>["终点的经度", "终点的纬度", "起始点的经度", "起始点的纬度", "要去的位置"]
* @return {Promise}
* @result #
*/
navToWithFrom (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_MAP, 'navToWithFrom', params)
}
}
/** @module extend/common **/
import * as types from '../types'
import BaseModel from '../../native/BaseModel'
/**
* 应用导航器
* @extends BaseModel
*/
export default class Navigator extends BaseModel {
static get moduleName () {
return types.MODULE_NAME_NAVIGATOR
}
/**
* 从当前页面跳转到设置页面
* @param {Array=} params 无参数
* @return {Promise}
* @result #
*/
showSetView (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'showSetView', params)
}
/**
* 从当前页面跳转到我的页面
* @param {Array=} params 无参数
* @return {Promise}
* @result #
*/
showMyView (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'showMyView', params)
}
/**
* 跳转到页面
* @param {Array=} params ['messageView'] 从当前页面跳转到消息页面(不支持美信),["messageListView", "com.midea.demo"] 跳转到消息List二级页面(美信、美的通)
* @return {Promise}
* @result #
*/
showAppView (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'showAppView', params)
}
/**
* 启动指定App的指定应用
* @param {Array=} params ['包名', 'AppKey'] (demo) ['com.midea.maptest', '1779d8c8fd110fd5f7caf31652d82e8c']
* @return {Promise}
* @result #
*/
startApp (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'startApp', params)
}
/**
* 跳转到个人信息页面(支持美信,新版美的通)
* @param {Array=} params ['用户ID'] 精确
* @return {Promise}
* @result #
*/
vcard (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_USER, 'vcard', params)
}
/**
* 跳转到指定应用
* @param {Array=} params ['widgetKey', params]
* @return {Promise}
* @result #
*/
showWidget (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'showWidget', params)
}
/**
* 选择应用
* @param {Array=} params 无
* @return {Promise}
* @result #
*/
selectWidget (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'selectWidget', params)
}
/**
* 退出应用
* @param {Array=} params 无
* @return {Promise}
* @result #
*/
exit (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'exit', params)
}
/**
* 用系统浏览器打开网址
* @param {Array=} params ['网址']
* @return {Promise}
* @result #
*/
openSysBrowser (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'openSysBrowser', params)
}
}
/** @module extend/common **/
import * as types from '../types'
import BaseModel from '../../native/BaseModel'
/**
* 系统通用接口
* @extends BaseModel
*/
export default class System extends BaseModel {
static get moduleName () {
return types.MODULE_NAME_SYSTEM
}
/**
* 跳转到手机通讯录系统页面,选择后返回json对象
* @param {Array=} params 无参数
* @return {Promise}
* @result {Object} {"name":"aaa","phone":"95079"}
*/
getContact (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_USER, 'getContact', params)
}
/**
* 获取手机当前系统语言
* @param {Array=} params 无参数
* @return {Promise}
* @result {String} language=cn
*/
language (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'language', params)
}
/**
* 显示导航控件
* @param {Array=} params 无参数
* @return {Promise}
* @result #
*/
showNav (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'showNav', params)
}
/**
* 隐藏导航控件
* @param {Array=} params 无参数
* @return {Promise}
* @result #
*/
hideNav (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'hideNav', params)
}
/**
* 显示底部控件
* @param {Array=} params 无参数
* @return {Promise}
* @result #
*/
showMenu (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'showMenu', params)
}
/**
* 弹出输入键盘
* @param {Array=} params 无参数
* @return {Promise}
* @result #
*/
showInput (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'showInput', params)
}
/**
* 输入键盘消失
* @param {Array=} params 无参数
* @return {Promise}
* @result #
*/
hideInput (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'hideInput', params)
}
/**
* 切换键盘到中午输入法
* @param {Array=} params 无参数
* @return {Promise}
* @result #
*/
toggleInput (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'toggleInput', params)
}
/**
* 显示浮动按钮
* @param {Array=} params 无参数
* @return {Promise}
* @result #
*/
showFloat (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'showFloat', params)
}
/**
* 隐藏浮动按钮
* @param {Array=} params 无参数
* @return {Promise}
* @result #
*/
hideFloat (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'hideFloat', params)
}
/**
* 改变状态栏背景色
* @param {Array=} params [230, 130, 80, 1] [Red,Green,Blue,Alpha]
* @return {Promise}
* @result #
*/
statusBarColor (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'statusBarColor', params)
}
/**
* 设置状态栏样式 1 为白色字体 0 为黑色字体
*/
statusBarStyle (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'statusContentStyle', params)
}
/**
* 复制
* @param {Array=} params ["xxx"] 复制内容xxx到剪切板
* @return {Promise}
* @result #
*/
copy (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'copy', params)
}
/**
* 粘贴结果
* @param {Array=} params 无参数
* @return {Promise}
* @result 返回字符串为剪切板(复制)的内容
*/
paste (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'paste', params)
}
/**
* 检查是否安装指定apk请求参数
* @param {Array=} params 安装版名称 com.midea.mlearning.in.test
* @return {Promise}
* @result 若安装了则返回true,否则返回false
*/
apk (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'apk', params)
}
/**
* 安卓和ios拨打电话
* @param {Array=} params [tel, '电话号码']
* @return {Promise}
* @result #
*/
callPhone (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'callPhone', params)
}
/**
* 获取webview的宽度和高度
* @param {Array=} params 无
* @return {Promise}
* @result {webviewWidth: 宽, webviewHeigh: 高}
*/
webview (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'webview', params)
}
/**
* 获取指定url图片的Base64编码数据
* @param {Array=} params ['url']
* @return {Promise}
* @result {base64: 图片数据}
*/
getBase64s (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'getBase64s', params)
}
/**
* 弹出扫码框
* @param {Array=} params 无参数
* @return {Promise}
* @result 弹出扫码框,扫码并返回结果
*/
scan (params) {
return this.nativeApi.callApi('MideaBarcode', 'scan', params)
}
/**
* 统计的事件
* @param {Array=} params [{ 'key': 'event', 'value': '测试样例' }] key是统计事件的名称,value是事件的值
* @return {Promise}
* @result #
*/
onEvent (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'onEvent', params)
}
setBounces (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'setBounces', params)
}
}
/** @module extend/common **/
import * as types from '../types'
import BaseModel from '../../native/BaseModel'
/**
* 用户交互相关
* @extends BaseModel
*/
export default class UserInteraction extends BaseModel {
static get moduleName () {
return types.MODULE_NAME_USER_INTERACTION
}
/**
* 切换屏幕方向
* @param {Array=} params [0|1|2|3] 0-竖屏 1-横屏 2-开启自动旋转 3-关闭自动旋转
* @return {Promise}
* @result #
*/
orientation (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'orientation', params)
}
/**
* 开启响应摇动手机,如果不调用停止响应摇动接口,会一直监听,直到调用停止接口或者kill手机进程
* @param {Array=} params 无
* @return {Promise}
* @result #
*/
shake (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'shake', params)
}
/**
* 停止响应摇动手机
* @param {Array=} params 无
* @return {Promise}
* @result #
*/
shakeStop (params) {
return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON, 'shakeStop', params)
}
}
export const MODULE_NAME_NAVIGATOR = 'navigator'
export const MODULE_NAME_SYSTEM = 'system'
export const MODULE_NAME_USER_INTERACTION = 'userInteraction'
export const MODULE_NAME_DATA_INTERACTION = 'dataInteraction'
export const MODULE_NAME_ACCOUNT = 'account'
export const MODULE_NAME_GEO_LOCATION = 'geoLocation'
const _MIDEA_COMMON = 'MideaCommon'
const _MIDEA_USER = 'MideaUser'
const _MIDEA_BARCODE = 'MideaBarcode'
const _MIDEA_MAP = 'MideaMap'
const _MIDEA_ANNTO = 'MideaAnnto'
const _MIDEA_SALE = 'MideaSale'
const _MIDEA_PDF = 'MideaPdf'
export default {
callApi (name, method, params) {
/**
* 调用cordova的方法
* @param name {string} 方法组、类别
* @param method {string} 方法名称
* @param params {Array} 参数
* @return {promise}
*/
var promise = new Promise((resolve, reject) => {
if (window.cordova) {
try {
window.cordova.exec((msg) => {
resolve(msg)
}, (msg) => {
reject(msg)
}, name, method, params || [])
} catch (e) {
console.log('_error', 'widget error:', e)
reject(e)
}
} else {
console.log('_debug', 'Cordova is not exist')
reject('Cordova is not exist')
}
})
return promise
},
/**
* 验证密码,主要用于hr自助认证
* @return {promise}
*/
password () {
return this.callApi(_MIDEA_COMMON, 'authPassword').then((message) => {
if (message === 0) {
this.password()
} else if (message === -1) {
this.exit()
}
})
},
/**
* 显示菜单
* @return {*|promise}
*/
showMenu: function () {
return this.callApi(_MIDEA_COMMON, 'showMenu', null)
},
/**
* 显示导航
* @return {*|promise}
*/
showNav: function () {
return this.callApi(_MIDEA_COMMON, 'showNav', null)
},
/**
* 隐藏导航
* @return {*|promise}
*/
hideNav: function () {
return this.callApi(_MIDEA_COMMON, 'hideNav', null)
},
/**
* 退出应用
* @return {*|promise}
*/
exit: function () {
return this.callApi(_MIDEA_COMMON, 'exit', null)
},
/**
* 后退
* @return {*|promise}
*/
goBack: function () {
return this.callApi(_MIDEA_COMMON, 'goBack', null)
},
/**
* 开始监听手机摇动
* @return {*|promise}
*/
shake: function () {
return this.callApi(_MIDEA_COMMON, 'shake', null)
},
/**
* 停止监听手机摇动
* @return {*|promise}
*/
shakeStop: function () {
return this.callApi(_MIDEA_COMMON, 'shakeStop', null)
},
/**
* 显示悬浮菜单
* @return {*|promise}
*/
showFloat: function () {
return this.callApi(_MIDEA_COMMON, 'showFloat', null)
},
/**
* 隐藏悬浮菜单
* @return {*|promise}
*/
hideFloat: function () {
return this.callApi(_MIDEA_COMMON, 'hideFloat', null)
},
/**
* 获取当前语言
* @return {*|promise}
*/
language: function () {
return this.callApi(_MIDEA_COMMON, 'language', null)
},
/**
* 获取用户信息
* @return {*|promise}
*/
getUser: function () {
return this.callApi(_MIDEA_USER, 'getUser', null)
},
/**
* 获取用户信息-直通宝
* @return {*|promise}
*/
getUserMap: function () {
return this.callApi(_MIDEA_USER, 'getUserMap', null)
},
/**
* 启动扫码
* @return {*|promise}
*/
scan: function () {
return this.callApi(_MIDEA_BARCODE, 'scan', null)
},
/**
* 启动扫码
* @return {*|promise}
*/
scanNow: function () {
return this.callApi(_MIDEA_BARCODE, 'scanNow', null)
},
/**
* 获取扫码结果
* @return {*|promise}
*/
getScanExtra: function () {
return this.callApi(_MIDEA_BARCODE, 'getScanExtra', null)
},
/**
* 获取位置信息
* @param arr {array} 参数
* @return {*|promise}
*/
location: function (arr) {
return this.callApi(_MIDEA_MAP, 'location', arr)
},
/**
* 开始更新位置信息
* @param arr {array} 参数
* @return {*|promise}
*/
startUpdatingLocation: function (arr) {
return this.callApi(_MIDEA_MAP, 'startUpdatingLocation', arr)
},
/**
* 停止更新位置信息
* @return {*|promise}
*/
stopUpdatingLocation: function () {
return this.callApi(_MIDEA_MAP, 'stopUpdatingLocation', null)
},
/**
* 导航
* @param arr {array} 参数
* @return {*|promise}
*/
navigation: function (arr) {
return this.callApi(_MIDEA_MAP, 'navTo', arr)
},
/**
* 开启订单跟踪-直通宝
* @param p {array} 参数
* @return {*|promise}
*/
startOrder: function (p) {
return this.callApi(_MIDEA_ANNTO, 'startOrder', p)
},
/**
* 结束订单跟踪-直通宝
* @param p {array} 参数
* @return {*|promise}
*/
stopOrder: function (p) {
return this.callApi(_MIDEA_ANNTO, 'stopOrder', p)
},
/**
* 拍照或选择图片
* @param params {object} 参数
* @return {*}
*/
getPicture: function (params) {
var promise = new Promise((resolve, reject) => {
try {
navigator.camera.getPicture(function (msg) {
resolve(msg)
}, function (msg) {
reject(msg)
},
params)
} catch (e) {
console.log('_warn', 'Cordova maybe not exist.')
reject(e)
}
})
return promise
},
/**
* 获取通讯录
* @param fields {string} 查找内容
* @param options {array} 参数
* @return {*}
*/
getContact: function (fields, options) {
var promise = new Promise((resolve, reject) => {
try {
navigator.service.contacts.find(fields,
function (msg) {
resolve(msg)
}, function (msg) {
reject(msg)
},
options)
} catch (e) {
console.log('_warn', 'Cordova maybe not exist.')
reject(e)
}
})
return promise
},
/**
* 组织架构单选
* @return {*|promise}
*/
orgChoose: function () {
return this.callApi(_MIDEA_USER, 'orgChoose', null)
},
/**
* 组织架构多选
* @param p {array} 参数
* @return {*|promise}
*/
orgMuChoose: function (p) {
return this.callApi(_MIDEA_USER, 'orgMuChoose', p)
},
/**
* 改变状态栏颜色-仅IOS
* @param p {array} 参数 [r, g, b]
* @return {*|promise}
*/
changeColor: function (p) {
return this.callApi(_MIDEA_COMMON, 'statusBarColor', p)
},
/**
* 登出,注销用户
* @return {*|promise}
*/
logout: function () {
return this.callApi(_MIDEA_COMMON, 'logout', null)
},
/**
* 获取webview信息
* @return {*|promise}
*/
webview: function () {
return this.callApi(_MIDEA_COMMON, 'webview', null)
},
/**
* 获取屏幕信息
* @return {*|promise}
*/
screen: function () {
return this.callApi(_MIDEA_COMMON, 'screen', null)
},
/**
* 获取额外启动参数
* @param params {array} 参数
* @return {*|promise}
*/
getExtra: function (params) {
return this.callApi(_MIDEA_COMMON, 'getExtra', params)
},
/**
* 获取设备信息
* @return {*|promise}
*/
getDeviceInfo: function () {
return this.callApi(_MIDEA_COMMON, 'getDeviceInfo', null)
},
/**
* 用外部浏览器打开链接
* @param url {string} 链接地址url
* @return {*|promise}
*/
openUrl: function (url) {
return this.callApi(_MIDEA_COMMON, 'openSysBrowser', [url])
},
/**
* h5事件监听
* @param params {array} 参数
* @return {*|promise}
*/
statistics: function (params) {
return this.callApi(_MIDEA_COMMON, 'onEvent', params)
},
/**
* 分享
* @param params {array} 参数
* @return {*|promise}
*/
share: function (params) {
return this.callApi(_MIDEA_COMMON, 'share', params)
},
/**
* 打开应用页面
* @return {*|promise}
*/
showAppView: function () {
return this.callApi(_MIDEA_COMMON, 'showAppView', ['messageView'])
},
/**
* 打开时间日期选择
* @param params {array} 参数
* @return {*}
*/
showPicker: function (params) {
var promise = new Promise((resolve, reject) => {
if (window.datePicker) {
params = Object.assign({
date: new Date(),
mode: 'date',
type: 'day'
}, params)
window.datePicker && window.datePicker.show(params, function (date) {
resolve(date)
})
} else {
reject()
}
})
return promise
},
/**
* 打开通讯录
* @return {*|promise}
*/
getPhoneMan: function () {
return this.callApi(_MIDEA_USER, 'getContact', null)
},
/**
* 打开个人设置页面
* @return {*|promise}
*/
goPersonalSet: function () {
return this.callApi(_MIDEA_COMMON, 'showSetView', null)
},
/**
* 打开“我的”页面
* @return {*|promise}
*/
goMyView: function () {
return this.callApi(_MIDEA_COMMON, 'showMyView', null)
},
/**
* 打开widget
* @param params {array} 参数
* @return {*|promise}
*/
showWidget: function (params) {
return this.callApi(_MIDEA_COMMON, 'showWidget', params)
},
/**
* 显示键盘
* @return {*|promise}
*/
showInput: function () {
return this.callApi(_MIDEA_COMMON, 'showInput', null)
},
/**
* 隐藏键盘
* @return {*|promise}
*/
hideInput: function () {
return this.callApi(_MIDEA_COMMON, 'hideInput', null)
},
/**
* 打开消息页面
* @return {*|promise}
*/
showMessageView: function () {
return this.callApi(_MIDEA_COMMON, 'showAppView', ['messageView'])
},
/**
* 打开美的通导购的意见反馈
* @return {*|promise}
*/
showFeedback: function () {
return this.callApi(_MIDEA_SALE, 'showFeedback', null)
},
/**
* 批量将图片转换成base64码
* @param pictureList {array} 图片列表
* @return {*|promise}
*/
getBase64CodeFromPictures: function (pictureList) {
return this.callApi(_MIDEA_COMMON, 'getBase64s', pictureList)
},
/**
* 跳转到系统设置页面,
* @param arr arr[0]为要跳转的对应的设置页面,暂时支持 蜂窝网络:CellularNetWork,WIFI:WIFI
* @returns {*}
*/
gotoSystemSetting: function (arr) {
return this.callApi(_MIDEA_COMMON, 'gotoSystemSetting', arr)
},
/**
* 附件展示
* @param param {array} 附件链接url列表
* @return {Promise}
*/
showPdf: function (param) {
return this.callApi(_MIDEA_PDF, 'showPdf', param)
},
/**
* 附件txt展示
* @param param {array} 参数
* @return {Promise}
*/
showTxt: function (param) {
return this.callApi(_MIDEA_PDF, 'showTxt', param)
},
/**
* @description c4a对称加密
* @param params {string} 字符串
* @returns {Promise}
*/
financeAesEncrypt: function (params) {
return this.callApi('MideaFinancePlugin', 'AESEncrypt', [params])
},
/**
* @description c4a对称解密
* @param params {string} 字符串
* @returns {Promise}
*/
financeAesDecrypt: function (params) {
return this.callApi('MideaFinancePlugin', 'AESDecrypt', [params])
},
/**
* @description c4a非对称加密
* @param params {string} 字符串
* @returns {Promise}
*/
financeRsaEncrypt: function (params) {
return this.callApi('MideaFinancePlugin', 'RSAEncrypt', [params])
},
/**
* @description c4a非对称解密
* @param params {string}
* @returns {Promise}
*/
financeRsaDecrypt: function (params) {
return this.callApi('MideaFinancePlugin', 'RSADecrypt', [params])
},
/**
* @description 返回c4a获取密钥的url
* @param params {object} 对象,{baseUrl,keygroup,keyversion}
* @returns {Promise}
*/
financeSecurityKey: function (params) {
return this.callApi('MideaFinancePlugin', 'getSecurityKeyUrl', [params])
},
/**
* @description 获取底座密码
* @returns {Promise}
*/
financeUserPassWord: function () {
return this.callApi(_MIDEA_USER, 'getUserPassword', [])
},
/**
* @description 美的金融保存json
* @param key {string}
* @param value {string}
* @returns {Promise}
*/
financeSaveJson: function (key, value) {
return this.callApi('MideaFinancePlugin', 'saveJson', [key, value])
},
/**
* @description 美的金融读取json
* @param key {string}
* @returns {Promise}
*/
financeGetJson: function (key) {
return this.callApi('MideaFinancePlugin', 'getJson', [key])
},
/**
* @description 打电话(底座有bug)
* @param phoneNumber {string}
* @returns {Promise}
*/
financeCall: function (phoneNumber) {
return this.callApi(_MIDEA_COMMON, 'callPhone', [phoneNumber])
},
/**
* @description 获取美的金融底座版本信息
* @param params {string}
* @returns {Promise}
*/
financeGetVersionInfo: function (params) {
return this.callApi('MideaFinancePlugin', 'getVersionInfo', [params])
},
/**
* @description 更新美的金融底座版本
* @param params {string}
* @returns {Promise}
*/
financeUpdateApp: function (params) {
return this.callApi('MideaFinancePlugin', 'updateApp', [params])
}
}
export function throwError (msg, name = '') {
const e = new Error()
e.message = msg
if (name) {
e.name = name
}
throw e
}
'use strict'
export default class BaseModel {
constructor (nativeApi) {
this.nativeApi = nativeApi
}
static get moduleName () {
return ''
}
get nativeApi () {
return this._nativeApi
}
set nativeApi (nativeApi) {
this._nativeApi = nativeApi
}
get config () {
return this.nativeApi.config
}
get debug () {
return this.nativeApi.debug
}
get platform () {
return this.nativeApi.platform
}
get ready () {
return this.nativeApi.ready
}
log () {
this.nativeApi.log()
}
debugLog () {
this.nativeApi.debugLog()
}
error () {
this.nativeApi.error()
}
info () {
this.nativeApi.info()
}
warn () {
this.nativeApi.warn()
}
}
'use strict'
import { printLog, singleInstance } from './utils'
import { throwError } from '../log'
let __instance = singleInstance()
export default class NativeApi {
constructor (conf) {
if (__instance()) return __instance()
this.config = conf
__instance(this)
}
get config () {
return this._config || {}
}
set config (conf) {
this._config = conf
}
get debug () {
return this.config.debug || false
}
get platform () {
return this.config.platform || 'native'
}
get maxRetryTimes () {
return typeof this.config.maxRetryTimes === 'number' ? this.config.maxRetryTimes : 5
}
get retrySleepTime () {
return typeof this.config.retrySleepTime === 'number' ? this.config.retrySleepTime : 100
}
get ready () {
return this.config.ready || false
}
set ready (isReady) {
this.config.ready = isReady
}
doReady (self) {
self.ready = true
}
setModule (Module, name = Module.moduleName || Module.name) {
// console.log('native api: ' + Module.toString())
// console.log(Module.moduleName)
// console.log(Module.name)
// console.log(name)
if (!name) {
const str = Module.toString()
const arr1 = str.match(/class\s+(.*?)\s+[\S\s]*\{/i)
const arr2 = str.match(/function\s+(.*?)\s*\(.*?\)[\S\s]*\{/i)
// console.log(str)
// console.log(arr1)
// console.log(arr2[1])
name = arr1 && arr1.length > 1
? arr1[1]
: (
arr2 && arr2.length > 1
? arr2[1]
: ''
)
}
name = name
? name.slice(0, 1).toLowerCase() + name.slice(1)
: ''
console.log(name)
if (!name || name.length <= 3) {
throwError('Cannot found Module Name: ' + name + '\n' + Module.toString(), 'MissedModule')
}
this.addModuleName(name)
this[name] = new Module(this)
return this
}
setModules () {
const len = arguments.length
const args = len > 0
? arguments
: []
for (let i = 0; i < len; i++) {
this.setModule(args[i])
}
return this
}
set moduleList (moduleList) {
this.config.moduleList = moduleList
}
get moduleList () {
return this.config.moduleList || []
}
addModuleName (name) {
let moduleList = this.moduleList
moduleList.push(name)
this.moduleList = moduleList
}
log () {
printLog(arguments, this.debug, 'log')
}
debugLog () {
printLog(arguments, this.debug, 'debug')
}
error () {
printLog(arguments, this.debug, 'error')
}
info () {
printLog(arguments, this.debug, 'info')
}
warn () {
printLog(arguments, this.debug, 'warn')
}
}
'use strict'
export async function sleep (timeout) {
return new Promise((resolve, reject) => {
setTimeout(function () {
resolve()
}, timeout)
})
}
export function singleInstance () {
let instance
return (newInstance) => {
if (newInstance) {
instance = newInstance
}
return instance
}
}
export function printLog (_arguments, debug = true, level = 'log') {
if (debug) {
let console = window.console || {}
let logFn = console[level] || console.log
let args = []
let length = _arguments.length
if (length > 0 && typeof _arguments[0] === 'number') {
args = _arguments
} else {
for (let i = 0; i < length; i++) {
args.push(_arguments[i])
if (i === 0 && length > 1) {
args.push('=>')
} else if (i < length - 1) {
args.push(',')
}
}
}
logFn.apply(console, args)
}
}
// 获取设备信息id
import VMT from '@/main'
/* global VMT,device:true */
const getDeviceid = () => {
return new Promise((resolve, reject) => {
if (process.env.NODE_ENV === 'provt') {
VMT.$nativeApi.dataInteraction.getDeviceInfo().then(data => {
// alert('data:' + JSON.stringify(data))
resolve(data.deviceId)
}).catch(err => {
// alert('err:' + JSON.stringify(err))
console.log(err)
const deviceid = 'DEVICEERR' + parseInt(Math.random() * 100)
reject(deviceid)
})
} else if (process.env.NODE_ENV === 'production') {
resolve(device.uuid)
} else {
const deviceid = 'DEVICETEST' + parseInt(Math.random() * 100)
reject(deviceid)
}
})
}
export default getDeviceid
// 弹窗方法api
const Alert = (title, func) => {
const titl = title
if (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'provt') {
navigator.notification.alert(titl, func, '', '确定');
} else {
window.alert(titl)
func()
}
}
const Confirm = (title, func) => {
const tit = title
if (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'provt') {
navigator.notification.confirm(tit, function (buttonIndex) {
if (buttonIndex == 1) {
func(true)
} else {
func(false)
}
}, '', ['确定', '取消'])
} else {
let res = window.confirm(tit)
if (res) {
func(true)
} else {
func(false)
}
}
}
export default {
Alert,
Confirm
}
// 获取图片方法api
const imgPackageHeader = 'data:image/jpeg;base64,'
const imgDefaultBase64Code = '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'
const destinationTypes = {
THUMB_URL_AND_FILE_URI: -1, // 非cordova自带类型, 返回略缩图和原图的url的json对象
DATA_URL: 0, // Return image as base64-encoded string
FILE_URI: 1, // Return image file URI
NATIVE_URI: 2 // Return image native URI (e.g. assets-library:// on iOS or content:// on Android)
}
const Camera = window.Camera = {}
Camera.DestinationType = {
THUMB_URL_AND_FILE_URI: -1, // 非cordova自带类型, 返回略缩图和原图的url的json对象
DATA_URL: 0, // Return image as base64-encoded string
FILE_URI: 1, // Return image file URI
NATIVE_URI: 2 // Return image native URI (e.g. assets-library:// on iOS or content:// on Android)
}
Camera.PictureSourceType = {
PHOTOLIBRARY: 0,
CAMERA: 1,
SAVEDPHOTOALBUM: 2
}
Camera.EncodingType = {
JPEG: 0, // Return JPEG encoded image
PNG: 1 // Return PNG encoded image
}
Camera.MediaType = {
PICTURE: 0, // allow selection of still pictures only. DEFAULT. Will return format specified via DestinationType
VIDEO: 1, // allow selection of video only, WILL ALWAYS RETURN FILE_URI
ALLMEDIA: 2 // allow selection from all media types
}
Camera.Direction = {
BACK: 0, // Use the back-facing camera
FRONT: 1 // Use the front-facing camera
}
// 获取图片方法
var getPicture = function (type, params, feedback) {
params = params || {}
var quality = params.hasOwnProperty('quality') ? params.quality : 35
var allowEdit = params.hasOwnProperty('allowEdit') ? params.allowEdit : false
var saveToPhotoAlbum = params.hasOwnProperty('saveToPhotoAlbum') ? params.saveToPhotoAlbum : false
if (!window.cordova) {
console.log('非发布环境,用本地图片代替')
feedback({
base64Code: imgDefaultBase64Code,
base64Url: imgPackageHeader + imgDefaultBase64Code
})
} else {
console.log('发布环境,调用拍照接口')
// SEGI兼容在这边做
navigator.camera.getPicture(function (data) {
feedback({
base64Code: data,
base64Url: imgPackageHeader + data
})
}, function (msg) {
console.log('拍照失败原因:', msg)
}, {
quality: quality,
destinationType: destinationTypes.DATA_URL,
allowEdit: allowEdit,
encodingType: Camera.EncodingType.JPEG,
targetWidth: 375,
targetHeight: 667,
saveToPhotoAlbum: saveToPhotoAlbum,
sourceType: type,
mediaType: Camera.MediaType.PICTURE,
correctOrientation: true,
cameraDirection: Camera.Direction.BACK
})
}
}
// 获取图片方式
var selectPicture = function (key, feedback) {
let maxNum = 1
let isSingle = true
let quality = 35
let allowEdit = false
let saveToPhotoAlbum = false
let noneSelect = false
let widthRate = 1
let heightRate = 1
let maxWidth = 720
let maxHeight = 1280
let params = {
isSingle: isSingle,
maxNum: maxNum,
quality: quality,
allowEdit: allowEdit,
saveToPhotoAlbum: saveToPhotoAlbum,
noneSelect: noneSelect,
widthRate: widthRate,
heightRate: heightRate,
maxWidth: maxWidth,
maxHeight: maxHeight
}
if (key === '1') {
getPicture(Camera.PictureSourceType.CAMERA, params, feedback)
} else if (key === '2') {
getPicture(Camera.PictureSourceType.SAVEDPHOTOALBUM, params, feedback)
}
}
var urlEncodeForBase64Code = function (base64Code) {
return base64Code ? base64Code.replace(/\+/g, '%2B') : ''
}
export default {
selectPicture: selectPicture,
urlEncodeForBase64Code: urlEncodeForBase64Code
}
/*
封装 定义 数据请求API
*/
let URL_API = {};
// API接口
let API = {
// 服务器host
Host: 'https://csm.cndservice.com/csm/staticfactionReport',
TestHost: 'https://csmtest.cndservice.com/csm/staticfactionReport',
// 2. 公共模块
// 2.1. 登录
// Login: 'app/loginNew',
// 2.2. 登出url
LogOut: 'loginout',
// --------------- 满意度接口 开始 ---------------
// 获取本月、集团累计以及去年标杆满意度数据
GroupSatisfaction: '/getGroupSatisfaction',
// 获取总体满意度排名数据
OverallSatisfaction: '/getOverAllSatisfaction',
// 获取集团均值、去年集团均值以及去年标杆
GroupSatisfactionAvg: '/getGroupSatisfactionAvg',
// 获取二级指标数据
TwoIndicators: '/getTwoIndicators',
// 获取交房情况数据
HouseSituation: '/getHouseSituation',
// 获取交房情况数据
RoomData: '/getRoomData',
// 获取项目交房信息
ProjectInfoToRoom: '/getProjectInfoToRoom',
// 获取项目风险预警信息
ProjectInfoToRisk: '/getProjectInfoRisk'
// --------------- 满意度接口 结束 ---------------
};
for (let key in API) {
if (API.hasOwnProperty(key)) {
const KEY = key.toUpperCase();
URL_API[KEY] = API[key];
}
}
export default URL_API;
/**
* [setStorage 设置本地存储,避免多次调用JSON.stringify方法,并对数据类型做了判断,避免字符串数据的多次转化]
* @param {[String]} key [key识别]
* @param {[Unknown]} data [存储的数据]
*/
export const setStorage = (key, data) => {
var toString = Object.prototype.toString
var notString = toString.call(data) !== '[object String]'
// console.log(data)
// estimate the type of data
if (notString) {
localStorage.setItem(key, JSON.stringify(data))
} else {
localStorage.setItem(key, data)
}
}
/**
* [getStorage 获取本地存储]
* @param {[String]} key [key识别]
* @return {[type]} [description]
*/
export const getStorage = (key) => {
var data = localStorage.getItem(key)
try {
return JSON.parse(data)
} catch (e) {
return data
}
}
/**
* [removeStorage]
* @param {[type]} key [description]
* @return {[type]} [description]
*/
export const removeStorage = (key) => {
key && localStorage.removeItem(key)
}
function Base64 () {
// private property
var _keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
// public method for encoding
this.encode = function (input) {
var output = '';
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = _utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
_keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
_keyStr.charAt(enc3) + _keyStr.charAt(enc4);
}
return output;
}
// public method for decoding
this.decode = function (input) {
var output = '';
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '');
while (i < input.length) {
enc1 = _keyStr.indexOf(input.charAt(i++));
enc2 = _keyStr.indexOf(input.charAt(i++));
enc3 = _keyStr.indexOf(input.charAt(i++));
enc4 = _keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
}
output = _utf8_decode(output);
return output;
}
// private method for UTF-8 encoding
var _utf8_encode = function (string) {
string = string.replace(/\r\n/g, '\n');
var utftext = '';
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
} else if ((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
} else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
}
// private method for UTF-8 decoding
var _utf8_decode = function (utftext) {
var string = '';
var i = 0;
var c = 0;
var c2 = 0;
while (i < utftext.length) {
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
} else if ((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i + 1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
} else {
c2 = utftext.charCodeAt(i + 1);
var c3 = utftext.charCodeAt(i + 2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
}
return string;
}
}
var b = new Base64()
export default b
/*
连接服务器数据接口,返回数据
*/
import APIPath from './APIPath'
import { postJson } from '../utils/http'
// --------------- 满意度接口 开始 ---------------
// 获取本月、集团累计、去年标杆满意度
export async function GroupSatisfaction (params) {
const { orgId, orgMonth } = params
let res = await postJson(APIPath.GROUPSATISFACTION, { orgId, orgMonth })
return checkCode(checkStatus(res))
}
// 获取总体满意度排名数据
export async function OverallSatisfaction (params) {
const { orgId, quotaCode, orgMonth, orderBy = 1 } = params
let res = await postJson(APIPath.OVERALLSATISFACTION, { orgId, quotaCode, orgMonth, orderBy })
return checkCode(checkStatus(res))
}
// 获取二级指标
export async function TwoIndicators (params) {
const { orgId, orgMonth } = params
let res = await postJson(APIPath.TWOINDICATORS, { orgId, orgMonth })
return checkCode(checkStatus(res))
}
// 获取集团均值、去年集团均值以及去年标杆
export async function GroupSatisfactionAvg (params) {
const { orgId, orgMonth } = params
let res = await postJson(APIPath.GROUPSATISFACTIONAVG, { orgId, orgMonth })
return checkCode(checkStatus(res))
}
// 获取交房情况数据
// projectId, batchNum 不传,默认查询集团,查询项目需要传值
export async function HouseSituation (params) {
const { projectId, batchNum, userId } = params
let res = await postJson(APIPath.HOUSESITUATION, { projectId, batchNum, userId })
return checkCode(checkStatus(res))
}
// 获取交房(已交房、未交房)数据
export async function RoomData (params) {
const { type } = params
let res = await postJson(APIPath.ROOMDATA, { type })
return checkCode(checkStatus(res))
}
// 获取项目交房信息
export async function ProjectInfoToRoom (params) {
const { projectId, batchNum, type } = params
let res = await postJson(APIPath.PROJECTINFOTOROOM, { projectId, batchNum, type })
return checkCode(checkStatus(res))
}
// 获取项目风险预警信息
export async function ProjectInfoToRisk (params) {
const { projectId, batchNum, orgId } = params
let res = await postJson(APIPath.PROJECTINFOTORISK, { projectId, batchNum, orgId })
return checkCode(checkStatus(res))
}
// --------------- 满意度接口 结束 ---------------
export const RESULT_OK = 0
// 处理来自网络或者服务器掉错误
function checkStatus (response) {
if (response.status === 200) {
return response.data
}
// 返回的数据格式跟接口文档规定的格式相同
return {
code: -404,
message: response.statusText,
data: response.statusText
}
}
// 处理来自接口响应成功返回的错误
function checkCode (data) {
return new Promise((resolve, reject) => {
if (data.code != RESULT_OK) {
reject(data.message)
} else {
resolve(data.data)
}
})
}
import * as Storage from './Storage'
import APIPath from './APIPath'
import * as Fetch from './request'
import DateTimePicker from 'date-time-picker'
/*
时间选择配置
*/
const dateOptions = (del) => {
if (del) {
const { defs, min } = del
return {
lang: 'zh-CN',
format: 'yyyy-MM-dd',
default: defs,
min
}
} else {
return {
lang: 'zh-CN',
format: 'yyyy-MM-dd'
}
}
}
const timeOptions = {
lang: 'EN',
format: 'HH:mm',
minuteStep: 5,
min: '00:00',
max: '23:59'
}
const dateConfig = {
day: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
shortDay: ['日', '一', '二', '三', '四', '五', '六'],
MDW: 'M月d日D',
YM: 'yyyy年M月',
OK: '确定',
CANCEL: '取消'
}
/*
参数过滤
*/
const paramFormat = (data) => {
return data.replace(/\//g, '~2F').replace(/\+/g, '~2B').replace(/=/g, '~3D')
}
/**
* 获取当前年月,格式为yyyymm
* 月份小于10,前一位补0
*/
function getCurrentYearMonth () {
let date = new Date()
let m = date.getMonth() + 1
return `${date.getFullYear()}${m + 1 < 10 ? '0' + m : m}`
}
export {
getCurrentYearMonth,
Storage,
APIPath,
Fetch,
DateTimePicker,
dateOptions,
timeOptions,
dateConfig,
paramFormat
}
/*
封装 定义 连接方法、返回数据格式
*/
// import qs from 'qs';
import axios from 'axios';
const fetchPath = (options) => {
let {
method,
data,
header,
url
} = options;
switch (method.toLowerCase()) {
case 'get':
return axios({
method,
url,
headers: { 'Authorization': header },
params: data
});
case 'post':
return axios({
method,
url,
headers: { 'Authorization': header },
data
})
default:
return axios(options);
}
};
/**
* Requests a URL, returning a promise.
*
* @param {string} url The URL we want to request
* @param {object} [options] The options we want to pass to "fetch"
* @return {object} An object containing either "data" or "err"
*/
export default function request (options) {
return fetchPath(options).then((response) => {
const { data } = response
const { status, msg } = data
return {
statusMsg: msg,
statusCode: status,
...data
};
}).catch((error) => {
const { message } = error
return {
statusMsg: message,
statusCode: -1000
};
});
}
<template>
<div class="base-page">
<title-bar :title="title" />
<loading ref="loading" :show="this.$store.state.showLoading" />
<div class="main">
<slot></slot>
</div>
</div>
</template>
<script>
import Loading from '@/components/Loading'
export default {
name: 'BasePage',
props: ['title'],
components: {
'loading': Loading
}
}
</script>
<style scoped>
.base-page {
display: flex;
flex-direction: column;
height: 100%;
background-color: rgb(245, 245, 247);
}
.title-bar {
position: fixed;
top: 0;
width: 100%;
z-index: 999;
}
.main {
margin-top: 1rem;
overflow: auto;
flex: 1;
display: flex;
flex-direction: column;
}
</style>
<template>
<div class="list-container white">
<div ref="listChartContainer" class="list-chart">
<ul v-if="currentMode == 'list'" :class="['decimal']">
<li class="header-line">
<span>排名</span>
<span style="flex:1;">{{typeColTitle}}</span>
<span v-if="showTargetValue" class="goal-col">目标</span>
<span class="score-col">得分</span>
<span v-if="type !== 'group'" class="total-col">集团整体排名</span>
</li>
<li v-for="(it, index) in currentList" @click="itemClickHandle(it)" :key="index">
<!-- 第一列:排名-->
<span class="rank" :class="{'top3-rank': it.rank < 4, 'after3-rank': it.rank > 3}">{{it.rank}}</span>
<!-- 第二列:区域、城市、项目-->
<span style="flex:1;">
<span class="orgName">{{it.orgName}}</span>
</span>
<!-- 第三列:目标分-->
<div v-if="showTargetValue" class="goal-col"><div v-if="it.targetValue" class="goal-value">{{it.targetValue}}</div></div>
<!-- 第四列:得分 -->
<div class="score-col">
<span >{{it.orgAccount}}</span>
<span class="right-arrow"></span>
</div>
<!-- 第五列:集团整体排名 -->
<div v-if="type !== 'group'" class="total-col">
<div class="rank-total">
<span :class="[parseInt(it.rankNum) ? 'textRight' : 'flexCenter','font14' ]">{{it.rankNum}}</span><span class="split">/</span><span :class="['fontColor1', 'font12']">{{it.totalNum}}</span>
</div>
<div :class="[parseInt(it.rankCount) ? 'left contentStart' : 'flexCenter', 'signContainer', 'rankLevel']">
<span :class="[parseInt(it.rankCount) > 0 ? 'rise' : parseInt(it.rankCount) < 0 ? 'fall' : '', 'sign']" />
<span :class="[parseInt(it.rankCount) > 0 ? 'up' : parseInt(it.rankCount) < 0 ? 'down' : 'fontColor1 font14']">{{formatCountValue(it.rankCount)}}</span>
</div>
</div>
</li>
</ul>
<transition name="list-in">
<keep-alive key="chart">
<sort-chart key="chart" v-if="currentMode == 'chart'" :list="list" :type="type" :class="['chart']" @chart-item-click="itemClickHandle"></sort-chart>
</keep-alive>
</transition>
</div>
<div class="bottom-tab">
<button :class="[{buttonSelected: currentMode == 'list'}]" type="button" @click="changeMode('list')">列表模式</button>
<button :class="[{buttonSelected: currentMode == 'chart'}]" type="button" @click="changeMode('chart')">图表模式</button>
</div>
</div>
</template>
<script>
import SortChart from './CommonSortChart'
export default {
name: 'CommonList',
props: {
type: {
type: String,
required: true
},
mode: {
type: String,
default: 'list',
validator: function (value) {
return ['list', 'chart'].indexOf(value) !== -1
}
},
list: {
type: Array,
required: true
}
},
data () {
return {
currentMode: this.mode,
height: 0
}
},
computed: {
currentList () {
let rank = 1
return this.list.map((it, i) => {
if (i > 0) {
if (Number(it.beforeOrgAccount) !== Number(this.list[i - 1].beforeOrgAccount)) {
rank = i + 1
}
}
return Object.assign({}, it, {rank})
})
},
typeColTitle () {
switch (this.type) {
case 'group':
return '集群'
case 'colony':
return '事业部'
case 'area':
return '城市'
case 'city':
return '项目'
default:
return '项目'
}
},
showTargetValue () {
// 目标成绩只有区域、城市维度,没有项目维度
switch (this.type) {
case 'group':
case 'area':
return true
case 'city':
return false
default:
return false
}
}
},
methods: {
itemClickHandle (item) {
this.$emit('enter-next-page', {...item, mode: this.currentMode})
},
changeMode (mode) {
if (mode == 'list') {
this.currentMode = 'list'
} else if (mode == 'chart') {
this.currentMode = 'chart'
}
this.$store.commit('satisfaction/setListMode', this.currentMode)
},
formatCountValue (countValue) {
if (parseInt(countValue)) {
return Math.abs(countValue)
}
return countValue
}
},
components: {
'sort-chart': SortChart
}
}
</script>
<style scoped>
.list-container {
display: flex;
flex-direction: column;
overflow: auto;
flex: 1;
}
.list-chart {
display: flex;
flex: 1;
overflow-x: hidden;
}
.decimal {
list-style-type: decimal;
overflow-y: auto;
flex: 1;
width: 100%;
min-width: 100%;
}
.chart {
width: 100%;
overflow: hidden;
flex: 1;
}
.header-line {
color: #0e1721;
font-size: 16px;
font-weight: bold;
}
li {
display: flex;
padding: 0 0.2rem;
height: 0.9rem;
align-items: center;
cursor: pointer;
font-size: 14px;
}
li:nth-child(odd) {
background: #f9f9fb;
}
.rank {
color: white;
margin-right: 0.1rem;
text-align: center;
align-items: center;
vertical-align: middle;
}
.orgName {
flex: 1;
text-align: left;
}
button {
border-radius: 3px;
width: 40%;
height: 100%;
background: #f3f4f7;
color: #6b6f7b;
}
.buttonSelected {
background: #cd3d3d;
color: white;
}
.bottom-tab {
margin: 0 0.2rem;
border-top: 1px solid #ebeff3;
height: 0.6rem;
padding: 0.2rem 0;
display: flex;
justify-content: space-around;
align-items: center;
}
.rank-col {
width: 40px;
}
.score-col {
width: 60px;
}
.goal-col {
width: 50px;
}
.goal-value {
width: 50px;
height: 0.6rem;
line-height: 0.6rem;
color: white;
background-color: #cd3d3d;
}
.total-col {
width: 100px;
/* width: 1.1rem; */
display: flex;
justify-content: center;
}
.rank-total {
width: 65%;
/* flex: 1; */
text-align: right;
}
.split {
padding: 0 2px 0;
}
/* 箭头排名指示 */
.rankLevel {
width: 35%;
/* flex: 1; */
margin-left: 5px;
}
.up {
color: rgb(0, 154, 91);
}
.down {
color: rgb(205, 0, 1);
}
.fall {
background-image: url(../assets/images/ic_fall@2x.png);
background-repeat: no-repeat;
background-size: 100% 100%;
width: 0.2rem;
}
.rise {
background-image: url(../assets/images/ic_rise@2x.png);
background-repeat: no-repeat;
background-size: 100% 100%;
width: 0.2rem;
}
.contentStart {
justify-content: flex-start;
}
.signContainer {
display: flex;
align-items: center;
line-height: 15px;
font-size: 15px;
justify-content: center;
}
.sign {
height: 12px;
line-height: 12px;
margin-left: 3px;
}
/* 箭头指示结束 */
</style>
<template>
<div class="flex flex-dir-column">
<switch-tab class="tabs" :tabs="[{text:'升序'},{text:'降序'}]" :currentTab="sortTypeTab" @on-item-click="onSwitchChange" />
<div id="sortchart" ref="sortchart"></div>
</div>
</template>
<script>
/** 满意度排名图表 */
import * as echarts from 'echarts';
import { mapGetters, mapActions } from 'vuex'
import SwitchTab from './SwitchTab'
export default {
name: 'SortChart',
props: {
type: {
type: String,
required: true
},
list: {
type: Array,
required: true
}
},
components: {
switchTab: SwitchTab
},
data () {
return {
chartList: []
}
},
mounted () {
this.initChart()
},
watch: {
list: function (val, oldVal) {
this.updateChartData()
}
},
computed: {
...mapGetters({
groupMean: 'satisfaction/groupMean',
lastYearGroupMean: 'satisfaction/lastYearGroupMean',
industryBenchmarking: 'satisfaction/industryBenchmarking'
}),
dataSource: function () {
// 默认为降序
this.chartList = this.list.filter(item => !isNaN(item.orgAccount)).map((item, index) => {
return Object.assign({}, item, {orgAccount: parseFloat(item.orgAccount)})
})
if (this.sortType() == 'asc') {
return this.chartList.reverse()
} else {
return this.chartList
}
},
targetValueSource () {
return this.dataSource.map(item => this.showTargetValue && item.targetValue || null)
},
minTargetValue () {
// 最小非空目标值
return this.dataSource.reduce((pre, cur) => {
let targetValue = parseFloat(cur.targetValue)
if (targetValue && pre > targetValue) {
pre = targetValue
}
return pre
}, 100)
},
maxTargetValue () {
// 最大非空目标值
return this.dataSource.reduce((pre, cur) => {
let targetValue = parseFloat(cur.targetValue)
if (targetValue && pre < targetValue) {
pre = targetValue
}
return pre
}, 0)
},
minValue: function () {
let min = 0;
this.chartList.map((item, index) => {
let account = parseFloat(item.orgAccount)
if (index == 0) {
min = account
} else {
if (item.orgAccount) {
min = Math.min(min, account)
}
}
})
min = Math.min(min, this.minTargetValue)
// 使指标线能够在可视范围内看到
if (this.groupMean) {
min = Math.min(min, this.groupMean)
}
if (this.lastYearGroupMean) {
min = Math.min(min, this.lastYearGroupMean)
}
if (this.industryBenchmarking) {
min = Math.min(min, this.industryBenchmarking)
}
// 修正x轴最小值,起始坐标为最小值-5
min = min > 5 ? min - 5 : 0
return min;
},
maxValue: function () {
let max = 0;
this.chartList.map((item, index) => {
let account = parseFloat(item.orgAccount)
if (index == 0) {
max = account
} else {
if (item.orgAccount) {
max = Math.max(max, account)
}
}
})
max = Math.max(max, this.maxTargetValue)
// 使指标线能够在可视范围内看到
if (this.groupMean) {
max = Math.max(max, this.groupMean)
}
if (this.lastYearGroupMean) {
max = Math.max(max, this.lastYearGroupMean)
}
if (this.industryBenchmarking) {
max = Math.max(max, this.industryBenchmarking)
}
// 修正x轴最大值
max = max + 1 > 100 ? 100 : max + 1
return max;
},
sortTypeTab: function () {
return this.sortType() == 'asc' ? 0 : 1
},
showTargetValue () {
// 目标成绩只有区域、城市维度,没有项目维度
switch (this.type) {
case 'group':
case 'area':
return true
case 'city':
return false
default:
return false
}
}
},
methods: {
...mapActions('satisfaction', [
'setSortType'
]),
sortType () {
return this.$store.state.satisfaction[this.$store.state.satisfaction.type].sort || 'desc'
},
getLabelValue (name, value) {
return `${name}:${value}`
},
chartOpt () {
return {
grid: {
left: '5%',
top: 50,
bottom: 10,
containLabel: true
},
color: ['green', '#efb703', '#0c73c2'],
legend: {
show: true,
top: 5,
left: 'center',
width: 300,
selectedMode: false,
data: []
},
xAxis: {
scale: true,
position: 'top',
splitLine: {
show: false
},
axisTick: {
length: 2
},
axisLine: {
lineStyle: {
color: '#f0f0f2'
}
},
axisLabel: {
color: '#708ca6'
},
min: 0,
max: 10,
splitNumber: 8 // x轴分割段数
},
yAxis: {
type: 'category',
axisTick: {
show: false
},
axisLine: {
show: false
},
axisLabel: {
interval: 0,
show: true,
color: 'transparent',
formatter: (value, index) => {
if (value && value.length > 6) {
return value.substring(0, 6)
}
return value
}
},
inverse: true // 反向坐标轴
},
dataZoom: [
{
type: 'inside',
startValue: 0,
endValue: 4,
zoomLock: true, // 锁定选择区域
orient: 'vertical'
},
{
type: 'slider',
zoomLock: true, // 锁定选择区域
showDetail: false, // 拖拽时不显示数值信息
width: 5,
orient: 'vertical',
backgroundColor: 'white',
borderRadius: 10,
dataBackground: {
lineStyle: {
opacity: 0
},
areaStyle: {
opacity: 0
}
},
fillerColor: '#cd3d3d',
handleSize: 1
}
],
series: [
{
type: 'bar',
name: '目标值',
color: '#999999',
barGap: '-90%',
barWidth: 23,
label: {
show: false
},
silent: true,
itemStyle: {
barBorderRadius: [0, 20, 20, 0]
}
},
{
type: 'bar',
label: {
show: true,
position: 'left',
color: '#6b6f7b',
formatter: (params) => {
let { data } = params
let label = ''
let space = ''
if (data.orgName.length > 6) {
label = data.orgName.substring(0, 6) + '\n' + data.orgName.substring(6) + '\n'
space = ' '.repeat((6 - String(data.orgAccount).length))
} else {
label = data.orgName + '\n'
if (data.orgName.length > String(data.orgAccount).length) {
space = ' '.repeat((data.orgName.length - String(data.orgAccount).length))
}
}
label += `{a|${space}${data.orgAccount}分}`
return label
},
rich: {
a: {
lineHeight: 16,
color: '#6b6f7b',
position: 'left',
align: 'center'
}
}
},
barWidth: 15,
color: '#cd3d3d',
itemStyle: {
barBorderRadius: [0, 10, 10, 0]
},
emphasis: {
itemStyle: {
color: '#cd3d3d'
}
}
},
{
type: 'line',
name: '集团均值',
id: 'groupMean',
lineStyle: {
width: 0
},
showSymbol: false,
markLine: {
silent: true,
symbol: ['', ''],
label: {
show: false
},
lineStyle: {
type: 'solid',
color: 'green'
},
data: []
}
},
{
type: 'line',
name: '去年集团均值',
id: 'lastYearGroupMean',
lineStyle: {
width: 0
},
showSymbol: false,
markLine: {
silent: true,
symbol: ['', ''],
label: {
show: false
},
lineStyle: {
type: 'solid',
color: '#efb703'
},
data: []
}
},
{
type: 'line',
name: '行业标杆',
id: 'industryBenchmarking',
lineStyle: {
width: 0
},
showSymbol: false,
markLine: {
silent: true,
symbol: ['', ''],
label: {
show: false
},
lineStyle: {
type: 'solid',
color: '#0c73c2'
},
data: []
}
}
]
}
},
initChart () {
this.$echart = echarts.init(this.$refs.sortchart)
this.$echartHeight = this.$el.clientHeight
// 点击事件
this.$echart.getZr().on('click', this.itemClick)
// 配置图表
this.$echart.setOption(this.chartOpt())
// 更新数据
this.updateChartData()
},
itemClick (params) {
if (this.chartList.length <= 0) {
return
}
let highlightIndex = -1
// 判断点击点是否在坐标系里面
let con = this.$echart.containPixel({seriesIndex: 0}, [params.event.zrX, params.event.zrY])
if (con) {
// 获取点击点在坐标系中对应的值
let res = this.$echart.convertFromPixel({gridIndex: 0}, [params.event.zrX, params.event.zrY])
highlightIndex = res[1]
this.$echart.dispatchAction({
type: 'highlight',
seriesIndex: 0,
dataIndex: highlightIndex
})
this.$emit('chart-item-click', this.chartList[highlightIndex])
if (highlightIndex != -1) {
this.$echart.dispatchAction({
type: 'downplay',
seriesIndex: 0,
dataIndex: highlightIndex
})
}
}
},
resetChart () {
this.$echart.clear()
this.$echart.setOption(this.chartOpt())
},
resizeChart () {
let dataSize = this.dataSource.length
let barHeight = 15
let barCategoryGap = (this.$refs.sortchart.clientHeight - 90 - barHeight * 5) / 5
let height = barHeight * dataSize + barCategoryGap * (dataSize - 1) + 95
// 目标值柱状宽度=得分柱状宽度+8, barGap为两个柱状重叠的比率
this.$echart.setOption({
xAxis: {
min: this.minValue,
max: this.maxValue
},
series: [
{
barWidth: barHeight + 8,
barGap: `-${100 - (4 * 100 / (barHeight + 8))}%`
},
{
barWidth: barHeight
}
]
})
// 可视区域最多显示5条柱状图
if (dataSize < 5) {
this.$echart.setOption({
dataZoom: [
{
endValue: dataSize % 5 - 1
},
{
backgroundColor: '#cd3d3d'
}
]
})
this.$echart.resize({height})
} else if (dataSize == 5) {
// 50为图例高度
if (height + 50 > this.$refs.sortchart.clientHeight) {
height = this.$refs.sortchart.clientHeight
}
this.$echart.resize({height})
} else {
// 50为图例高度
if (height > this.$refs.sortchart.clientHeight) {
height = this.$refs.sortchart.clientHeight
}
this.$echart.resize({height})
}
},
updateChartData () {
// 清空图表配置,再重新配置
this.$echart.clear()
this.$echart.setOption(this.chartOpt())
if (this.dataSource instanceof Array && this.dataSource.length > 0) {
this.$echart.setOption({
dataset: {
dimensions: ['orgName', 'orgAccount', 'targetValue'],
source: this.dataSource
}
})
if (this.targetValueSource.length > 0) {
this.$echart.setOption({
series: [
{
data: this.targetValueSource
}
]
})
}
// 添加集团均值、去年集团均值、行业标杆线
this.addMarkLine()
// 动态计算高度
this.resizeChart()
} else {
this.resetChart()
}
},
addMarkLine () {
// 添加集团均值、去年集团均值、行业标杆线
let data = []
if (this.groupMean) {
data.push({name: this.getLabelValue('集团均值', this.groupMean), icon: 'line'})
this.$echart.setOption({
series: [
{},
{},
{
name: this.getLabelValue('集团均值', this.groupMean),
markLine: {
data: [{name: '集团均值', xAxis: this.groupMean}]
}
}
]
})
}
if (this.lastYearGroupMean) {
data.push({name: this.getLabelValue('去年集团均值', this.lastYearGroupMean), icon: 'line'})
this.$echart.setOption({
series: [
{},
{},
{},
{
name: this.getLabelValue('去年集团均值', this.lastYearGroupMean),
markLine: {
data: [{name: '去年集团均值', xAxis: this.lastYearGroupMean}]
}
}
]
})
}
if (this.industryBenchmarking) {
data.push({name: this.getLabelValue('行业标杆', this.industryBenchmarking), icon: 'line'})
this.$echart.setOption({
series: [
{},
{},
{},
{},
{
name: this.getLabelValue('行业标杆', this.industryBenchmarking),
markLine: {
data: [{name: '行业标杆', xAxis: this.industryBenchmarking}]
}
}
]
})
}
if (this.showTargetValue && this.targetValueSource.length > 0) {
data.push({name: '目标值', icon: 'rect'})
}
if (data.length > 0) {
this.$echart.setOption({
legend: {
data: data
}
})
}
},
onSwitchChange (item, index) {
if (index == 0) {
this.setSortType('asc')
} else {
this.setSortType('desc')
}
this.dataSource.reverse()
this.updateChartData()
}
}
}
</script>
<style scoped>
#sortchart {
overflow: hidden;
flex: 1;
}
.tabs {
width: 40%;
flex-direction: row;
align-self: center;
margin-top: 10px;
}
</style>
<template>
<div class="table-container white">
<div ref="theader" class="table-header">
<span class="col1 fontColor2">指标名称</span>
<span v-if="showTargetValue" class="col2 fontColor2 textCenter">目标</span>
<span class="col2 fontColor2 textCenter">本月</span>
<span class="col3 fontColor2 textCenter">累计</span>
<span class="col4 fontColor2"></span>
</div>
<div ref="tbody" class="table-body">
<div class="row" v-for="(it,index) in list" :key="index">
<span class="fontColor1 font14 col1">{{it.indicatorName}}</span>
<div v-if="showTargetValue" class="goal-col"><div v-if="it.targetValue" class="goal-value">{{it.targetValue}}</div></div>
<div class="col2">
<span :class="[parseFloat(it.thisMonthNum) ? 'textRight' : 'flexCenter', 'fontColor1', 'font14', 'flex-1']">{{it.thisMonthNum}}</span>
<div :class="[parseFloat(it.thisMonthCountValue) ? 'left contentStart' : 'flexCenter', 'signContainer', 'flex-1']">
<span :class="[it.thisMonthCountValue > 0 ? 'rise' : it.thisMonthCountValue < 0 ? 'fall' : '', 'sign']" />
<span :class="[it.thisMonthCountValue > 0 ? 'up' : it.thisMonthCountValue < 0 ? 'down' : 'fontColor1 font14', 'countValue']" >{{formatCountValue(it.thisMonthCountValue)}}</span>
</div>
</div>
<div class="col3">
<span :class="[parseFloat(it.totalNum) ? 'textRight' : 'flexCenter', 'fontColor1', 'font14', 'flex-1']">{{it.totalNum}}</span>
<div :class="[parseFloat(it.thisMonthCountValue) ? 'left contentStart' : 'flexCenter', 'signContainer', 'flex-1']">
<span :class="[it.totalCountValue > 0 ? 'rise' : it.totalCountValue < 0 ? 'fall' : '', 'sign']" />
<span :class="[it.totalCountValue > 0 ? 'up' : it.totalCountValue < 0 ? 'down' : 'fontColor1 font14', 'countValue']" >{{formatCountValue(it.totalCountValue)}}</span>
</div>
</div>
<div class="col4"><span v-if="it.remark != 0" class="infoIcon" @click="alertTip(it.remark)"></span></div>
</div>
</div>
</div>
</template>
<script>
import Dialog from '@/base/plugins/dialog'
export default {
name: 'CommonTable',
props: {
type: {
type: String
},
list: {
type: Array,
required: true
}
},
mounted () {
this.$refs.tbody.style.height = window.innerHeight - this.$el.offsetTop - this.$refs.theader.offsetHeight + 'px'
},
computed: {
showTargetValue () {
// 目标成绩只有区域、城市维度,没有项目维度
switch (this.type) {
case 'group':
case 'area':
return true
case 'city':
return false
default:
return false
}
}
},
watch: {
list: function (val, oldVal) {
this.$refs.tbody.style.height = window.innerHeight - this.$el.offsetTop - this.$refs.theader.offsetHeight + 'px'
}
},
methods: {
alertTip (tip) {
Dialog.Alert(tip, function () {})
},
formatCountValue (countValue) {
if (parseInt(countValue)) {
return Math.abs(countValue)
}
return countValue
}
}
}
</script>
<style scoped>
.table-container {
padding-left: 0.2rem;
padding-right: 0.2rem;
}
.table-header {
display: flex;
align-items: center;
height: 1rem;
font-weight: bold;
border-bottom: 1px solid #f0f0f2;
}
.table-body {
overflow: auto;
flex: 1;
}
.row {
display: flex;
height: 0.9rem;
align-items: center;
}
.col1 {
flex: 1;
text-align: left;
padding-left: 0.2rem;
}
.col2, .col3 {
width: 1.1rem;
display: flex;
justify-content: center;
}
.col4 {
width: 0.5rem;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.contentStart {
justify-content: flex-start;
}
.signContainer {
display: flex;
align-items: center;
line-height: 15px;
font-size: 15px;
justify-content: center;
}
.sign {
height: 12px;
line-height: 12px;
margin-left: 3px;
}
.countValue {
height: 12px;
line-height: 12px;
font-size: 12px;
}
.row:nth-child(even) {
background: #f9f9fb;
}
.gray {
color: gray;
}
.up {
color: rgb(0, 154, 91);
}
.down {
color: rgb(205, 0, 1);
}
.fall {
background-image: url(../assets/images/ic_fall@2x.png);
background-repeat: no-repeat;
background-size: 100% 100%;
width: 0.2rem;
}
.rise {
background-image: url(../assets/images/ic_rise@2x.png);
background-repeat: no-repeat;
background-size: 100% 100%;
width: 0.2rem;
}
.goal-col {
width: 50px;
}
.goal-value {
widows: 50px;
height: 0.6rem;
line-height: 0.6rem;
color: white;
background-color: #cd3d3d;
}
</style>
<template>
<group class="group">
<datetime v-model="value" :default-selected-value="date" :display-format="format" @on-confirm="handleConfirm" @on-change="handleDateChange" format="YYYY-MM"></datetime>
</group>
</template>
<script>
import { Datetime, Group } from 'vux'
export default {
name: 'MyDateTime',
components: {
Datetime,
Group
},
props: ['date'],
mounted () {
this.$nextTick(() => {
this.value = this.innerValue
})
this.value = this.innerValue
},
data () {
return {
value: '',
current: '',
format (val) {
val = val.replace(/-/g, '')
return `${val.substring(0, 4)}${val.substring(4, 6)}月`
}
}
},
computed: {
innerValue () {
if (this.date && this.date.length === 6) {
return `${this.date.substring(0, 4)}-${this.date.substring(4, 6)}`
}
return this.date
}
},
watch: {
date (newVal, oldVal) {
this.value = this.innerValue
}
},
methods: {
handleDateChange (value) {
this.current = value.replace(/-/g, '')
},
handleConfirm (v) {
if (this.current !== this.value) {
this.value = this.current
this.$emit('on-date-change', this.current.replace(/-/g, ''))
}
}
}
}
</script>
<style lang="less">
.group {
a:active, a:hover {
text-decoration: none;
}
.vux-cell-value {
color: #0e1721;
}
.vux-no-group-title {
margin-top: 0;
}
.vux-cell-primary {
text-align: start;
}
}
</style>
<style scoped>
.datetime {
background: white;
height: 0.9rem;
min-height: 0.9rem;
font-weight: bold;
font-size: 14px;
display: flex;
align-items: center;
padding-left: 0.2rem;
}
</style>
<template>
<div class="item-title">
<span class="indicate"> </span>
<span class="title">{{title}}</span>
<slot></slot>
</div>
</template>
<script>
export default {
name: 'ItemTitle',
props: ['title']
}
</script>
<style scoped>
.item-title {
position: relative;
display: flex;
border-bottom: 1px solid #ebeff3;
align-items: center;
height: 0.9rem;
}
.indicate {
background: #cd3d3d;
width: 4px;
height: 18px;
margin-left: 0.2rem;
margin-right: 0.1rem;
}
.title {
color: #333333;
font-weight: bold;
font-size: 16px;
height: 16px;
line-height: 16px;
align-self: center;
}
</style>
<template>
<transition :name="transition">
<div
class="weui-loading_toast vux-loading"
:class="!text ? 'vux-loading-no-text' : ''"
v-show="show">
<div class="weui-mask_transparent"></div>
<div
class="weui-toast"
:style="{
position: position
}">
<i class="weui-loading weui-icon_toast"></i>
<p class="weui-toast__content" v-if="text">{{ text || 'loading' }}</p>
</div>
</div>
</transition>
</template>
<script>
// 根据vux loading组件修改
export default {
name: 'loading',
model: {
prop: 'show',
event: 'change'
},
props: {
show: {
type: Boolean,
default: true
},
text: {
type: String,
default: '加载中...'
},
position: {
type: String,
default: 'fixed'
},
transition: {
type: String,
default: 'vux-mask'
}
},
watch: {
show (val) {
this.$emit('update:show', val)
}
}
}
</script>
<style scoped>
.loading {
position: fixed;
width: 30vw;
height: 30vw;
z-index: 9999;
background: rgba(0, 0, 0, 0.7);
display: flex;
flex-direction: column;
vertical-align: middle;
text-align: center;
}
.weui-toast {
position: fixed;
width: 7.6em;
min-height: 7.6em;
top: calc(50% - 7.6em / 2.0);
left: 50%;
margin-left: -3.8em;
background: rgba(17,17,17,0.7);
text-align: center;
border-radius: 5px;
color: #FFFFFF;
}
.weui-toast__content {
margin: 0 0 15px;
color: #FFFFFF;
}
.vux-loading .weui-toast {
z-index: 999;
}
.weui-icon_toast.weui-loading {
margin: 30px 0 0;
width: 38px;
height: 38px;
vertical-align: baseline;
display: inline-block;
}
.vux-mask-enter, .vux-mask-leave-active,
.vux-mask-leave-active, .vux-mask-enter-active {
position: relative;
z-index: 1;
}
.vux-mask-enter, .vux-mask-leave-active {
opacity: 0;
}
.vux-mask-leave-active, .vux-mask-enter-active {
transition: opacity 300ms;
}
.vux-loading-no-text .weui-toast {
min-height: 98px;
}
.weui-mask {
position: fixed;
z-index: 1000;
top: 0;
right: 0;
left: 0;
bottom: 0;
background: rgba(0, 0, 0, .6);
}
/** 透明遮罩层 预留顶部标题栏高度,阻止页面上下滚动 */
.weui-mask_transparent{
position: fixed;
z-index: 1000;
top: 1rem;
right: 0;
left: 0;
bottom: 0;
}
.weui-loading {
width: 20px;
height: 20px;
display: inline-block;
vertical-align: middle;
animation: weuiLoading 1s steps(12, end) infinite;
background: transparent url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=") no-repeat;
background-size: 100%;
}
.weui-loading.weui-loading_transparent{
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxMjAnIGhlaWdodD0nMTIwJyB2aWV3Qm94PScwIDAgMTAwIDEwMCc+PHBhdGggZmlsbD0nbm9uZScgZD0nTTAgMGgxMDB2MTAwSDB6Jy8+PHJlY3QgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjU2KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgwIC0zMCknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjUpJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKDMwIDEwNS45OCA2NSknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjQzKScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSg2MCA3NS45OCA2NSknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjM4KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSg5MCA2NSA2NSknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjMyKScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgxMjAgNTguNjYgNjUpJy8+PHJlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC4yOCknIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoMTUwIDU0LjAyIDY1KScvPjxyZWN0IHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyB4PSc0Ni41JyB5PSc0MCcgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwuMjUpJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKDE4MCA1MCA2NSknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjIpJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKC0xNTAgNDUuOTggNjUpJy8+PHJlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC4xNyknIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoLTEyMCA0MS4zNCA2NSknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjE0KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgtOTAgMzUgNjUpJy8+PHJlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC4xKScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgtNjAgMjQuMDIgNjUpJy8+PHJlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC4wMyknIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoLTMwIC01Ljk4IDY1KScvPjwvc3ZnPgo=");
}
@-webkit-keyframes weuiLoading {
0% {
transform: rotate3d(0, 0, 1, 0deg);
}
100% {
transform: rotate3d(0, 0, 1, 360deg);
}
}
@keyframes weuiLoading {
0% {
transform: rotate3d(0, 0, 1, 0deg);
}
100% {
transform: rotate3d(0, 0, 1, 360deg);
}
}
</style>
<template>
<div class="satis-info-container">
<div class="group-info">
<div>
<span class="fontColor1">去年标杆满意度</span>
<span class="fontColor3 margin-left-normal">{{lastYearBenchmarking}}</span>
</div>
<div v-if="groupAccumulative">
<span class="fontColor1">集团累计满意度</span>
<span class="fontColor3 margin-left-normal">{{groupAccumulative}}</span>
</div>
</div>
<div class="current-item-info">
<div class="current-month">
<span class="fontColor1">本月满意度</span>
<span class="fontColor4">{{satisfactionThisMonth}}</span>
</div>
<div class="gradient-line"/>
<div class="current-month">
<span class="fontColor1">累计满意度</span>
<span class="fontColor4">{{groupSatisfactionTotal}}</span>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'SatisfactionInfo',
props: [
'lastYearBenchmarking',
'groupAccumulative',
'satisfactionThisMonth',
'groupSatisfactionTotal'
]
}
</script>
<style scoped>
.satis-info-container {
background-color: white;
}
.group-info {
display: flex;
align-items: center;
margin-left: 0.2rem;
margin-right: 0.2rem;
height: 0.9rem;
border-bottom: 1px solid #ebeff3;
justify-content: space-between;
}
.group-info div {
display: flex;
align-items: center;
}
.current-item-info {
display: flex;
flex-direction: row;
min-height: 2rem;
align-items: center;
}
.current-month {
flex: 1;
display: flex;
flex-direction: column;
}
.current-month span:nth-child(2) {
font-size: 0.6rem;
font-weight: bold;
height: 0.6rem;
color: #0e1721;
}
.gradient-line {
flex: 0;
width: 1px;
min-height: 2rem;
background: linear-gradient(rgba(245, 245, 247, 0), rgb(245, 245, 247), rgba(245, 245, 247, 0));
}
</style>
<template>
<div class="tabs">
<ul>
<li v-for="(it, index) in tabs" :key="index" @click="itemClickHandle(it, index)">
<span :class="[{tabSelected: currentTab == index}, 'tabNormal']">{{it.text}}</span>
</li>
</ul>
</div>
</template>
<script>
export default {
props: ['tabs', 'currentTab'],
methods: {
itemClickHandle (item, index) {
if (this.currentTab != index) {
this.$emit('on-item-click', item, index)
}
}
}
}
</script>
<style scoped>
.tabs {
display: inline-block;
-webkit-tap-highlight-color: transparent;
-webkit-touch-callout: none;
-webkit-user-select: none;
user-select: none;
}
.tabs ul {
height: auto;
display: flex;
border: 1px solid #cd3d3d;
border-radius: 20px;
}
.tabs ul li {
flex: 1;
cursor: pointer;
}
.tabs ul li span {
display: block;
font-size: 14px;
line-height: 24px;
}
.tabNormal {
color: #cd3d3d;
}
.tabSelected {
background-color: #cd3d3d;
color: white;
}
.tabs ul li:first-child span {
border-left: 1px solid #cd3d3d;
border-top-left-radius: 20px;
border-bottom-left-radius: 20px;
}
.tabs ul li:last-child span {
border-left: 1px solid #cd3d3d;
border-top-right-radius: 20px;
border-bottom-right-radius: 20px;
}
</style>
<template>
<div class="title-bar">
<span class="back" v-if="isShowBack" @click="back"><img :src="backIcon"/></span>
<span class="title">{{title}}</span>
</div>
</template>
<script>
import backIcon from '../assets/images/ic_back@2x.png'
export default {
name: 'TitleBar',
props: {
title: String,
isShowBack: {
type: Boolean,
default: true
},
backIcon: {
type: String,
default: backIcon
},
backHandle: {
type: Function
}
},
methods: {
back () {
if (this.backHandle) {
this.backHandle()
} else {
this.$router.back()
}
}
}
}
</script>
<style scoped>
.title-bar {
background: #CD3D3D;
height: 1rem;
min-height: 1rem;
display: flex;
justify-content: center;
align-items: center;
}
.title-bar span {
color: white;
vertical-align: center;
}
.back {
-webkit-tap-highlight-color: transparent;
-webkit-touch-callout: none;
-webkit-user-select: none;
user-select: none;
position: absolute;
left: 0px;
padding-left: 0.2rem;
padding-right: 0.2rem;
height: 1rem;
line-height: 1rem;
}
.back img {
width: 0.5rem;
height: 0.5rem;
}
.title {
font-size: 20px;
}
</style>
// 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 Vue from 'vue'
import App from '@/App'
import router from '@/router'
import store from '@/vuex/store'
import TitleBar from '@/components/TitleBar'
import BasePage from '@/components/BasePage'
import axios from 'axios'
import { APIPath } from './common'
import Dialog from '@/base/plugins/dialog'
// 全局axios默认配置
// axios.defaults.baseURL = APIPath.HOST // 正式环境
axios.defaults.baseURL = APIPath.TESTHOST // 测试环境
Vue.prototype.$axios = axios
// 获取屏幕宽高
Vue.prototype.getViewportSize = function () {
return {
width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,
height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
}
}
/* V+兼容 */
import nativeApi from './base/NativeApi/cordova'
Vue.use(nativeApi, Object.assign({ debug: true, maxRetryTimes: 10, retrySleepTime: 100 }))
// 判断是否V+模块
Vue.prototype.$vPlusModule = process.env.NODE_ENV === 'provt'
Vue.config.productionTip = false
Vue.component('title-bar', TitleBar) // 全局注册标题栏
Vue.component('page', BasePage)
Vue.prototype.$dialog = Dialog // 全局的对话框
let VMT
/* eslint-disable no-new */
if (process.env.NODE_ENV === 'production') {
document.addEventListener('deviceready', function () {
VMT = new Vue({
el: '#app',
router,
store,
render: h => h(App)
})
})
} else {
VMT = new Vue({
el: '#app',
router,
store,
render: h => h(App)
})
}
export default VMT
import Vue from 'vue'
import Router from 'vue-router'
import ProjectSatisfaction from '@/screen/ProjectSatisfaction'
import GroupSatisfaction from '@/screen/GroupSatisfaction'
import AreaSatisfaction from '@/screen/AreaSatisfaction'
import CitySatisfaction from '@/screen/CitySatisfaction'
import ColonySatisfaction from '@/screen/ColonySatisfaction'
Vue.use(Router)
const router = new Router({
routes: [{
path: '/',
name: 'GroupSatisfaction',
component: GroupSatisfaction
},
{
path: '/areaSatisfaction',
name: 'AreaSatisfaction',
component: AreaSatisfaction
},
{
path: '/colonySatisfaction',
name: 'ColonySatisfaction',
component: ColonySatisfaction
},
{
path: '/citySatisfaction',
name: 'CitySatisfaction',
component: CitySatisfaction
},
{
path: '/projectSatisfaction',
name: 'ProjectSatisfaction',
component: ProjectSatisfaction
}]
})
// 手动维护路由记录
router.myHistory = []
Router.prototype.isBack = false
router.afterEach((to, from) => {
if (router.myHistory.indexOf(to.fullPath) == -1) {
router.isBack = false
router.myHistory.push(to.fullPath)
} else {
if (router.myHistory[router.myHistory.length - 1] == from.fullPath) {
router.isBack = true
router.myHistory.pop()
}
}
})
export default router
<template>
<page :title="this.currentOrgName">
<date-time :date="month" @on-date-change="handleDateChange" />
<satisfaction-info class="margin-top-normal margin-bottom-normal"
:lastYearBenchmarking="lastYearBenchmarking"
:groupAccumulative="groupAccumulative"
:satisfactionThisMonth="satisfactionThisMonth"
:groupSatisfactionTotal="groupSatisfactionTotal" />
<div class="tab-container">
<button :class="['tab', 'white', {tabSelected: currentTab == 'list'}]"
@click="currentTab = 'list'">
{{listTab}}
</button>
<button :class="['tab', 'white', {tabSelected: currentTab == 'table'}]"
@click="currentTab = 'table'">
{{tableTab}}
</button>
</div>
<keep-alive>
<component
:is="currentTabComponent"
:type="type"
:list="getCurrentList"
:mode="currentListMode"
@enter-next-page="enterNextPage" />
</keep-alive>
</page>
</template>
<script>
import { mapActions, mapGetters, mapMutations } from 'vuex'
import CommonList from '@/components/CommonList'
import CommonTable from '@/components/CommonTable'
import SatisfactionInfo from '@/components/SatisfactionInfo'
import DateTime from '@/components/DateTime'
export default {
name: 'AreaSatisfaction',
created () {
this.month = this.currentYearMonth
this.setSatisfactionType(this.type)
if (!this.$router.isBack) {
this.fetchData()
} else {
this.fetchData()
this.$store.commit('satisfaction/resetByType', 'city')
}
},
data () {
return {
month: '',
type: 'area',
currentTab: 'list',
listTab: '总体满意度排名(累计)',
tableTab: '事业部二级指标'
}
},
computed: {
...mapGetters('satisfaction', [
'currentMonth',
'currentList',
'currentTwoIndicators',
'satisfactionThisMonth',
'benchmarkSatisfactionLastYear',
'groupSatisfactionTotal',
'lastYearBenchmarking',
'groupAccumulative',
'currentListMode',
'currentOrgId',
'currentOrgName'
]),
currentTabComponent () {
return 'common-' + this.currentTab
},
getCurrentList () {
if (this.currentTab == 'list') {
return this.currentList || []
} else {
return this.currentTwoIndicators || []
}
},
currentYearMonth () {
return this.currentMonth.replace('年', '').replace('月', '')
}
},
components: {
'satisfaction-info': SatisfactionInfo,
'common-list': CommonList,
'common-table': CommonTable,
'date-time': DateTime
},
methods: {
...mapActions('satisfaction', [
'setMonth',
'getGroupSatisfaction',
'getOverallSatisfaction',
'getGroupSatisfactionAvg',
'getTwoIndicators',
'setSatisfactionType',
'saveRouteParams',
'setListMode'
]),
...mapMutations([
'showLoading'
]),
fetchData () {
this.showLoading(true)
this.$axios.all([
this.getGroupSatisfaction({orgId: this.currentOrgId, orgMonth: this.currentYearMonth}),
this.getOverallSatisfaction({orgId: this.currentOrgId, quotaCode: '', orgMonth: this.currentYearMonth}),
this.getGroupSatisfactionAvg({orgId: '', orgMonth: this.currentYearMonth}),
this.getTwoIndicators({orgId: this.currentOrgId, orgMonth: this.currentYearMonth})
])
.then(this.$axios.spread(() => {
this.showLoading(false)
}))
.catch(error => {
this.showLoading(false)
this.$dialog.Alert(error, function () {})
})
},
enterNextPage (payload) {
let { mode, orgId, orgName } = payload
this.saveRouteParams({type: 'city', orgId, orgName, mode})
this.setListMode(mode)
this.$router.push({name: 'CitySatisfaction', params: payload})
},
handleDateChange (value) {
this.month = value
this.setMonth(value)
this.fetchData()
}
}
}
</script>
<style scoped>
.tab-container {
display: flex;
min-height: 0.9rem;
height: 0.9rem;
}
.tab {
flex: 1;
font-size: 14px;
cursor: pointer;
border-bottom: solid #ebeff3 1px;
height: 0.9rem;
}
.tabSelected {
color: #cd3d3d;
border-bottom: solid #cd3d3d 3px;
}
</style>
<template>
<page :title="this.currentOrgName">
<date-time :date="month" @on-date-change="handleDateChange" />
<satisfaction-info class="margin-top-normal margin-bottom-normal"
:lastYearBenchmarking="lastYearBenchmarking"
:groupAccumulative="groupAccumulative"
:satisfactionThisMonth="satisfactionThisMonth"
:groupSatisfactionTotal="groupSatisfactionTotal" />
<div class="tab-container">
<button :class="['tab', 'white', {tabSelected: currentTab == 'list'}]"
@click="currentTab = 'list'">
{{listTab}}
</button>
<button :class="['tab', 'white', {tabSelected: currentTab == 'table'}]"
@click="currentTab = 'table'">
{{tableTab}}
</button>
</div>
<keep-alive>
<component
:is="currentTabComponent"
:type="type"
:list="getCurrentList"
:mode="currentListMode"
@enter-next-page="enterNextPage" />
</keep-alive>
</page>
</template>
<script>
import { mapActions, mapGetters, mapMutations } from 'vuex'
import CommonList from '@/components/CommonList'
import CommonTable from '@/components/CommonTable'
import SatisfactionInfo from '@/components/SatisfactionInfo'
import DateTime from '@/components/DateTime'
export default {
name: 'CitySatisfaction',
created () {
this.month = this.currentYearMonth
this.setSatisfactionType(this.type)
if (!this.$router.isBack) {
this.fetchData()
} else {
this.fetchData()
this.$store.commit('satisfaction/resetByType', 'project')
}
},
data () {
return {
month: this.currentMonth,
type: 'city',
currentTab: 'list',
listTab: '总体满意度排名(累计)',
tableTab: '城市二级指标'
}
},
computed: {
...mapGetters('satisfaction', [
'currentMonth',
'currentList',
'currentTwoIndicators',
'satisfactionThisMonth',
'benchmarkSatisfactionLastYear',
'groupSatisfactionTotal',
'lastYearBenchmarking',
'groupAccumulative',
'currentListMode',
'currentOrgId',
'currentOrgName'
]),
currentTabComponent () {
return 'common-' + this.currentTab
},
getCurrentList () {
if (this.currentTab == 'list') {
return this.currentList || []
} else {
return this.currentTwoIndicators || []
}
},
currentYearMonth () {
return this.currentMonth.replace('年', '').replace('月', '')
}
},
components: {
'satisfaction-info': SatisfactionInfo,
'common-list': CommonList,
'common-table': CommonTable,
'date-time': DateTime
},
methods: {
...mapActions('satisfaction', [
'setMonth',
'getGroupSatisfaction',
'getOverallSatisfaction',
'getGroupSatisfactionAvg',
'getTwoIndicators',
'setSatisfactionType',
'saveRouteParams',
'setListMode'
]),
...mapMutations([
'showLoading'
]),
fetchData () {
this.showLoading(true)
this.$axios.all([
this.getGroupSatisfaction({orgId: this.currentOrgId, orgMonth: this.currentYearMonth}),
this.getOverallSatisfaction({orgId: this.currentOrgId, quotaCode: '', orgMonth: this.currentYearMonth}),
this.getGroupSatisfactionAvg({orgId: '', orgMonth: this.currentYearMonth}),
this.getTwoIndicators({orgId: this.currentOrgId, orgMonth: this.currentYearMonth})
])
.then(this.$axios.spread(() => {
this.showLoading(false)
}))
.catch(error => {
this.showLoading(false)
this.$dialog.Alert(error, function () {})
})
},
enterNextPage (payload) {
let { mode, orgId, orgName } = payload
this.saveRouteParams({type: 'project', orgId, orgName, mode})
this.setListMode(mode)
this.$router.push({name: 'ProjectSatisfaction', params: payload})
},
handleDateChange (value) {
this.month = value
this.setMonth(value)
this.fetchData()
}
}
}
</script>
<style scoped>
.tab-container {
display: flex;
min-height: 0.9rem;
height: 0.9rem;
}
.tab {
flex: 1;
font-size: 14px;
cursor: pointer;
border-bottom: solid #ebeff3 1px;
height: 0.9rem;
}
.tabSelected {
color: #cd3d3d;
border-bottom: solid #cd3d3d 3px;
}
</style>
<template>
<page :title="this.currentOrgName">
<date-time :date="month" @on-date-change="handleDateChange" />
<satisfaction-info class="margin-top-normal margin-bottom-normal"
:lastYearBenchmarking="lastYearBenchmarking"
:groupAccumulative="groupAccumulative"
:satisfactionThisMonth="satisfactionThisMonth"
:groupSatisfactionTotal="groupSatisfactionTotal" />
<div class="tab-container">
<button :class="['tab', 'white', {tabSelected: currentTab == 'list'}]"
@click="currentTab = 'list'">
{{listTab}}
</button>
<button :class="['tab', 'white', {tabSelected: currentTab == 'table'}]"
@click="currentTab = 'table'">
{{tableTab}}
</button>
</div>
<keep-alive>
<component
:is="currentTabComponent"
:type="type"
:list="getCurrentList"
:mode="currentListMode"
@enter-next-page="enterNextPage" />
</keep-alive>
</page>
</template>
<script>
import { mapActions, mapGetters, mapMutations } from 'vuex'
import CommonList from '@/components/CommonList'
import CommonTable from '@/components/CommonTable'
import SatisfactionInfo from '@/components/SatisfactionInfo'
import DateTime from '@/components/DateTime'
export default {
name: 'ColonySatisfaction',
created () {
this.month = this.currentYearMonth
this.setSatisfactionType(this.type)
if (!this.$router.isBack) {
this.fetchData()
} else {
this.fetchData()
this.$store.commit('satisfaction/resetByType', 'area')
}
},
data () {
return {
month: '',
type: 'colony',
currentTab: 'list',
listTab: '总体满意度排名(累计)',
tableTab: '集群二级指标'
}
},
computed: {
...mapGetters('satisfaction', [
'currentMonth',
'currentList',
'currentTwoIndicators',
'satisfactionThisMonth',
'benchmarkSatisfactionLastYear',
'groupSatisfactionTotal',
'lastYearBenchmarking',
'groupAccumulative',
'currentListMode',
'currentOrgId',
'currentOrgName'
]),
currentTabComponent () {
return 'common-' + this.currentTab
},
getCurrentList () {
if (this.currentTab == 'list') {
return this.currentList || []
} else {
return this.currentTwoIndicators || []
}
},
currentYearMonth () {
return this.currentMonth.replace('年', '').replace('月', '')
}
},
components: {
'satisfaction-info': SatisfactionInfo,
'common-list': CommonList,
'common-table': CommonTable,
'date-time': DateTime
},
methods: {
...mapActions('satisfaction', [
'setMonth',
'getGroupSatisfaction',
'getOverallSatisfaction',
'getGroupSatisfactionAvg',
'getTwoIndicators',
'setSatisfactionType',
'saveRouteParams',
'setListMode'
]),
...mapMutations([
'showLoading'
]),
fetchData () {
this.showLoading(true)
this.$axios.all([
this.getGroupSatisfaction({orgId: this.currentOrgId, orgMonth: this.currentYearMonth}),
this.getOverallSatisfaction({orgId: this.currentOrgId, quotaCode: '', orgMonth: this.currentYearMonth}),
this.getGroupSatisfactionAvg({orgId: '', orgMonth: this.currentYearMonth}),
this.getTwoIndicators({orgId: this.currentOrgId, orgMonth: this.currentYearMonth})
])
.then(this.$axios.spread(() => {
this.showLoading(false)
}))
.catch(error => {
this.showLoading(false)
this.$dialog.Alert(error, function () {})
})
},
enterNextPage (payload) {
let { mode, orgId, orgName } = payload
this.saveRouteParams({type: 'area', orgId, orgName, mode})
this.setListMode(mode)
this.$router.push({name: 'AreaSatisfaction', params: payload})
},
handleDateChange (value) {
this.month = value
this.setMonth(value)
this.fetchData()
}
}
}
</script>
<style scoped>
.tab-container {
display: flex;
min-height: 0.9rem;
height: 0.9rem;
}
.tab {
flex: 1;
font-size: 14px;
cursor: pointer;
border-bottom: solid #ebeff3 1px;
height: 0.9rem;
}
.tabSelected {
color: #cd3d3d;
border-bottom: solid #cd3d3d 3px;
}
</style>
<template>
<div class="container">
<title-bar :title="title" :isShowBack="this.$vPlusModule" :backHandle="backHandle"></title-bar>
<loading ref="loading" :show="this.$store.state.showLoading" />
<date-time :date="month" @on-date-change="handleDateChange" />
<satisfaction-info class="margin-top-normal margin-bottom-normal"
:lastYearBenchmarking="lastYearBenchmarking"
:satisfactionThisMonth="satisfactionThisMonth"
:groupSatisfactionTotal="groupSatisfactionTotal" />
<div class="tab-container">
<button :class="['tab', 'white', {tabSelected: currentTab == 'list'}]"
@click="currentTab = 'list'">
{{listTab}}
</button>
<button :class="['tab', 'white', {tabSelected: currentTab == 'table'}]"
@click="currentTab = 'table'">
{{tableTab}}
</button>
</div>
<keep-alive>
<component
:is="currentTabComponent"
:type="type"
:list="getCurrentList"
:mode="currentListMode"
@enter-next-page="enterNextPage"
></component>
</keep-alive>
</div>
</template>
<script>
import '@/assets/css/base.css'
import '@/assets/css/app.css'
import { mapActions, mapGetters, mapMutations } from 'vuex'
import CommonList from '@/components/CommonList'
import CommonTable from '@/components/CommonTable'
import SatisfactionInfo from '@/components/SatisfactionInfo'
import DateTime from '@/components/DateTime'
import Loading from '@/components/Loading'
import { getCurrentYearMonth } from '@/common'
export default {
name: 'GroupSatisfaction',
created () {
if (this.currentYearMonth) {
this.month = this.currentYearMonth
} else {
this.month = getCurrentYearMonth()
}
this.setMonth(this.month)
this.setSatisfactionType(this.type)
if (!this.$router.isBack) {
this.setListMode('list')
this.fetchData()
} else {
this.fetchData()
this.$store.commit('satisfaction/resetByType', 'colony')
}
},
data () {
return {
month: '',
title: '集团满意度',
type: 'group',
orgId: '',
currentTab: 'list',
listTab: '总体满意度排名(累计)',
tableTab: '集团二级指标'
}
},
computed: {
...mapGetters('satisfaction', [
'currentMonth',
'currentList',
'currentTwoIndicators',
'satisfactionThisMonth',
'benchmarkSatisfactionLastYear',
'groupSatisfactionTotal',
'lastYearBenchmarking',
'currentListMode'
]),
currentTabComponent () {
return 'common-' + this.currentTab
},
getCurrentList () {
if (this.currentTab == 'list') {
return this.currentList || []
} else {
return this.currentTwoIndicators || []
}
},
currentYearMonth () {
return this.currentMonth
}
},
watch: {
currentMonth (newVal, oldVal) {
let yearmonth = newVal.replace('年', '').replace('月', '')
if (yearmonth != this.month) {
this.month = yearmonth
}
}
},
components: {
'satisfaction-info': SatisfactionInfo,
'common-list': CommonList,
'common-table': CommonTable,
'date-time': DateTime,
'loading': Loading
},
methods: {
...mapActions('satisfaction', [
'setMonth',
'getGroupSatisfaction',
'getOverallSatisfaction',
'getGroupSatisfactionAvg',
'getTwoIndicators',
'setSatisfactionType',
'saveRouteParams',
'setListMode'
]),
...mapMutations([
'showLoading'
]),
fetchData () {
this.showLoading(true)
this.$axios.all([
this.getGroupSatisfaction({orgId: this.orgId, orgMonth: this.currentYearMonth}),
this.getOverallSatisfaction({orgId: this.orgId, quotaCode: '', orgMonth: this.currentYearMonth}),
this.getGroupSatisfactionAvg({orgId: '', orgMonth: this.currentYearMonth}),
this.getTwoIndicators({orgId: this.orgId, orgMonth: this.currentYearMonth})
])
.then(this.$axios.spread(() => {
this.showLoading(false)
}))
.catch(error => {
this.showLoading(false)
this.$dialog.Alert(error, function () {})
})
},
enterNextPage (payload) {
let { mode, orgId, orgName } = payload
this.saveRouteParams({type: 'colony', orgId, orgName, mode})
this.setListMode(mode)
this.$router.push({name: 'ColonySatisfaction', params: payload})
},
backHandle () {
if (this.$vPlusModule) {
this.$nativeApi.navigator.exit()
} else {
this.$router.back()
}
},
handleDateChange (value) {
this.month = value
this.setMonth(value)
this.fetchData()
}
}
}
</script>
<style scoped>
.container {
height: 100%;
display: flex;
flex-direction: column;
}
.tab-container {
display: flex;
min-height: 0.9rem;
height: 0.9rem;
}
.tab {
flex: 1;
font-size: 14px;
cursor: pointer;
border-bottom: solid #ebeff3 1px;
height: 0.9rem;
}
.tabSelected {
color: #cd3d3d;
border-bottom: solid #cd3d3d 3px;
}
</style>
<template>
<page :title="title">
<date-time :date="month" @on-date-change="handleDateChange" />
<satisfaction-info class="margin-top-normal margin-bottom-normal"
:lastYearBenchmarking="lastYearBenchmarking"
:groupAccumulative="groupAccumulative"
:satisfactionThisMonth="satisfactionThisMonth"
:groupSatisfactionTotal="groupSatisfactionTotal" />
<index-table :list="currentTwoIndicators" :type="type"/>
</page>
</template>
<script>
import { mapActions, mapGetters, mapMutations } from 'vuex'
import CommonTable from '@/components/CommonTable'
import SatisfactionInfo from '@/components/SatisfactionInfo'
import DateTime from '@/components/DateTime'
export default {
name: 'ProjectSatisfaction',
created () {
this.month = this.currentYearMonth
this.setSatisfactionType(this.type)
this.fetchData()
},
data () {
return {
month: this.currentMonth,
type: 'project'
}
},
computed: {
...mapGetters('satisfaction', [
'currentMonth',
'satisfactionThisMonth',
'benchmarkSatisfactionLastYear',
'groupSatisfactionTotal',
'lastYearBenchmarking',
'groupAccumulative',
'currentTwoIndicators'
]),
title () {
return this.$route.params.orgName
},
orgId () {
return this.$route.params.orgId
},
currentYearMonth () {
return this.currentMonth.replace('年', '').replace('月', '')
}
},
methods: {
...mapActions('satisfaction', [
'setMonth',
'getGroupSatisfaction',
'getTwoIndicators',
'setSatisfactionType'
]),
...mapMutations([
'showLoading'
]),
fetchData () {
this.showLoading(true)
this.$axios.all([
this.getGroupSatisfaction({orgId: this.orgId, orgMonth: this.currentYearMonth}),
this.getTwoIndicators({orgId: this.orgId, orgMonth: this.currentYearMonth})
])
.then(this.$axios.spread(() => {
this.showLoading(false)
}))
.catch(error => {
this.showLoading(false)
this.$dialog.Alert(error, function () {})
})
},
handleDateChange (value) {
this.month = value
this.setMonth(value)
this.fetchData()
}
},
components: {
'satisfaction-info': SatisfactionInfo,
'index-table': CommonTable,
'date-time': DateTime
}
}
</script>
<style scoped>
.container {
display: flex;
flex-direction: column;
background: rgb(245, 245, 247);
height: 100%;
}
</style>
/*
封装 定义 连接方法、返回数据格式
*/
// import qs from 'qs';
import axios from 'axios';
// import {APIPath} from '../common'
// import Dialog from '@/base/plugins/dialog'
// 全局axios默认配置
// axios.defaults.baseURL = APIPath.HOST
// axios.defaults.baseURL = APIPath.TESTHOST
axios.defaults.headers = {
'X-Requested-With': 'XMLHttpRequest',
// 'Authorization': 'Basic c21zc2VydmljZXVzZXI6ZmRjVXNlcjY1NCNAIQ=='// 正式环境 账号 smsserviceuser 密码 fdcUser654#@! // todo 获取登录后的账号密码进行封装 'Basic c21zc2VydmljZXVzZXI6ZmRjVXNlcjY1NCNAIQ=='
'Authorization': 'Basic c21zc2VydmljZXVzZXI6amZmY0AxMjM=' // 测试环境 账号 wuqk@cndrealty.com 密码 123456
}
axios.defaults.timeout = 60 * 1000
// 传json格式参数,不需要
// axios.defaults.transformRequest = [function (params) {
// console.log(params)
// 数据序列化
// return qs.stringify(params)
// }]
let cancel
let promiseArr = {}
const CancelToken = axios.CancelToken
// axios拦截器
axios.interceptors.request.use(config => {
let params = JSON.stringify(config.data)
let key = config.url + '?' + params
// 同一个URL,但是参数不同
if (promiseArr[key]) {
promiseArr[key]('操作取消')
promiseArr[key] = cancel
} else {
promiseArr[key] = cancel
}
return config
}, error => {
return Promise.reject(error)
})
axios.interceptors.response.use(response => {
return response
}, error => {
return Promise.reject(error)
})
export function get (url, params = {}) {
return new Promise((resolve, reject) => {
axios({
method: 'get',
url,
params,
cancelToken: new CancelToken(c => {
cancel = c
})
}).then(res => {
resolve(res)
})
})
}
export function post (url, params = {}) {
return new Promise((resolve, reject) => {
axios({
method: 'post',
url: url,
data: params,
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
cancelToken: new CancelToken(c => {
cancel = c
})
}).then(res => {
resolve(res)
})
})
}
export function postJson (url, params = {}) {
return new Promise((resolve, reject) => {
axios({
method: 'post',
url: url,
data: params,
dataType: 'json',
headers: {
'Content-Type': 'application/json; charset=UTF-8'
},
cancelToken: new CancelToken(c => {
cancel = c
})
}).then(res => {
resolve(res)
}).catch(err => {
// errorHandle(errorParse(err))
reject(errorParse(err))
})
})
}
/**
* 解析错误类型,返回错误信息
* @param {*} error
*/
function errorParse (error) {
let message = error
if (error.code == 'ECONNABORTED') { // 请求超时
message = '请求超时!请检查网络连接是否正常!'
return message
}
if (error.message != '操作取消') {
if (error.response) {
switch (error.response.status) {
case 404:
message = '404错误!请检查url是否拼写正确!\n' + error.request.responseURL
break
case 400:
message = '请求错误(400)'
break
case 401:
message = '未授权,请重新登录(401)'
break
case 403:
message = '拒绝访问(403)'
break
case 408:
message = '请求超时(408)'
break
case 500:
message = '服务器错误(500)'
break
case 501:
message = '服务未实现(501)'
break
case 502:
message = '网络错误(502)'
break
case 503:
message = '服务不可用(503)'
break
case 504:
message = '网络超时(504)'
break
case 505:
message = 'HTTP版本不受支持(505)'
break
default:
message = error
}
}
}
return message
}
// function errorHandle (error) {
// Dialog.Alert(error, function () {})
// }
/*
actions.js
封装 获取相应 数据、状态值 方法
*/
/* global cordova:true */
// 引入接口
// import * as Connect from '@/common/connect'
import Base64 from '@/common/base64'
import axios from 'axios'
/*
测试数据分配,10: 房产,20: 物业。
*/
const TESTTYPES = 10
/* V+集成登录获取信息 */
export const getVUserInfo = ({ commit }, data) => {
return new Promise((resolve, reject) => {
const { uname, pwd, host } = data.data
const datas = {
username: uname,
password: Base64.encode(pwd)
}
axios({
method: 'post',
url: host + 'app/loginNew',
data: datas
}).then(res => {
console.log('comein:' + JSON.stringify(res.data))
if (res.data.status === 200) {
// 设置用户数据 userInfo
const dats = res.data.record
// 设置httpHead
const b2v = 'Basic ' + Base64.encode(uname + ':' + pwd)
const datas = {
userInfo: dats,
host,
header: b2v
}
commit('getInfos', { data: datas })
resolve()
} else {
reject(res.data.exception)
}
}).catch(error => {
console.log('fail:' + JSON.stringify(error))
reject(error)
})
})
}
/* 获取用户信息 */
export const getUserInfo = ({ commit }, data) => {
return new Promise((resolve, reject) => {
// console.log('function ' + JSON.stringify(data))
// 同步到state
if (process.env.NODE_ENV === 'production') {
cordova.exec(function (result) {
const dats = JSON.parse(result)
commit('getInfo', { data: dats, type: data.type })
resolve()
}, function (error) {
navigator.notification.alert(error)
resolve()
}, 'YFPlugin', data.type, [])
} else {
// 房产
const adf = {
'username': '邴博',
'cell': '13506027389',
'fid': 'DzmkcfSZQ\/CdF77ixahmwxO33n8=',
'userId': 'bingb@cndrealty.com'
}
// 物业
const adw = {
'username': '刘燕美',
'cell': '1',
'fid': 'dsG2\/e2wTMOehOmJU3HQ3hO33n8=',
'userId': 'liuym@ehomeol.cn'
}
commit('getInfo', {
data: TESTTYPES === 10 ? adf : adw,
type: data.type
})
resolve()
}
})
}
/* 获取hosts */
export const getHttpHost = ({ commit }, data) => {
return new Promise((resolve, reject) => {
// console.log('function ' + JSON.stringify(data))
// 同步到state
if (process.env.NODE_ENV === 'production') {
cordova.exec(function (result) {
commit('getInfo', { data: result, type: data.type })
resolve()
}, function (error) {
navigator.notification.alert(error)
resolve()
}, 'YFPlugin', data.type, [])
} else {
commit('getInfo', { data: 'http://csmtest.cndrealty.com/csm/', type: data.type })
resolve()
}
})
}
/* 获取httpHead */
export const getHttpHeadValue = ({ commit }, data) => {
return new Promise((resolve, reject) => {
// console.log('function ' + JSON.stringify(data))
// 同步到state
if (process.env.NODE_ENV === 'production') {
cordova.exec(function (result) {
commit('getInfo', { data: result, type: data.type })
resolve()
}, function (error) {
navigator.notification.alert(error)
resolve()
}, 'YFPlugin', data.type, [])
} else {
TESTTYPES === 10 ? commit('getInfo', { data: 'Basic YmluZ2JAY25kcmVhbHR5LmNvbTppdGFk', type: data.type }) : commit('getInfo', { data: 'Basic bGl1eW1AZWhvbWVvbC5jbjppdGFk', type: data.type })
resolve()
}
})
}
/*
清除Vuex缓存设置
*/
export const clearVuexData = ({ commit, state }, data) => {
const { userInfo, HttpHeadValue, HttpHost } = state
const datas = {
userInfo,
HttpHeadValue,
HttpHost
}
commit('reSetStateData', datas)
}
import { GroupSatisfaction, OverallSatisfaction, GroupSatisfactionAvg, TwoIndicators } from '@/common/connect'
const state = {
type: 'group',
month: '',
group: {info: {}, list: [], table: []},
colony: {info: {}, list: [], table: []},
area: {info: {}, list: [], table: []},
city: {info: {}, list: [], table: []},
project: {info: {}, list: [], table: []},
lastYearBenchmarking: '', // 去年标杆满意度
groupAccumulative: '', // 集团累计满意度
groupMean: '', // 集团均值
lastYearGroupMean: '', // 去年集团均值
industryBenchmarking: '' // 行业标杆
}
const getters = {
satisfactionThisMonth: state => state[state.type].info.monthSatisfaction ? state[state.type].info.monthSatisfaction : '',
benchmarkSatisfactionLastYear: state => state[state.type].info.lastYearSatisfaction ? state[state.type].info.lastYearSatisfaction : '',
groupSatisfactionTotal: state => state[state.type].info.totalSatisfaction ? state[state.type].info.totalSatisfaction : '',
currentList: state => state[state.type].list,
currentTwoIndicators: state => state[state.type].table,
currentMonth: state => state.month,
lastYearBenchmarking: state => state.lastYearBenchmarking,
groupAccumulative: state => state.groupAccumulative,
groupMean: state => state.groupMean,
lastYearGroupMean: state => state.lastYearGroupMean,
industryBenchmarking: state => state.industryBenchmarking,
currentListMode: state => state[state.type].listMode || 'list',
currentOrgId: state => state[state.type].orgId,
currentOrgName: state => state[state.type].orgName
}
const actions = {
setSortType ({commit}, sort) {
commit('setSortType', sort)
},
setMonth ({commit}, month) {
commit('setMonth', month)
},
setParentItem ({commit}, item) {
commit('setParentItem', item)
},
saveRouteParams ({commit}, params) {
commit('saveRouteParams', params)
},
// 保存满意度排名显示模式:列表、图表
setListMode ({commit}, mode) {
commit('setListMode', mode)
},
// 保存满意度级别的类型:集团、区域、城市、项目
setSatisfactionType ({commit}, type) {
commit('setSatisfactionType', type)
},
async getGroupSatisfaction ({commit}, params) {
let json = await GroupSatisfaction(params)
let {orgId} = params
if (json instanceof Array && json.length > 0) {
commit('setGroupSatisfaction', json[0])
if (orgId == '') {
commit('setLastYearBenchmarking', json[0].lastYearSatisfaction)
commit('setGroupAccumulative', json[0].totalSatisfactionGroup)
commit('setMonth', json[0].monthDisplay.replace('年', '').replace('月', ''))
}
}
},
async getOverallSatisfaction ({commit}, params) {
let json = await OverallSatisfaction(params)
if (json instanceof Array) {
commit('setGroupSatisfactionSortList', json)
}
},
async getGroupSatisfactionAvg ({commit}, params) {
let json = await GroupSatisfactionAvg(params)
if (json instanceof Array && json.length > 0) {
commit('setGroupMean', json[0].totalSatisfaction)
commit('setLastYearGroupMean', json[0].lastYearSatisfactionGroup)
commit('setIndustryBenchmarking', json[0].lastYearSatisfactionSign)
}
},
async getTwoIndicators ({commit}, params) {
let json = await TwoIndicators(params)
if (json && json.monthList && json.totalList && json.monthList.length == json.totalList.length) {
let indicatorInfoList = []
json.monthList.map((item, index) => {
indicatorInfoList.push({'rank': item.rank, 'indicatorName': item.indexName, 'thisMonthNum': item.indexValue, 'thisMonthCountValue': item.countValue, 'remark': item.remark, 'totalNum': json.totalList[index].indexValue, 'totalCountValue': json.totalList[index].countValue, 'targetValue': json.totalList[index].targetValue})
})
let compareFun = function (obj1, obj2) {
return parseInt(obj1.rank) - parseInt(obj2.rank)
}
commit('setTwoIndicators', indicatorInfoList.sort(compareFun))
}
},
resetByType ({commit}, type) {
commit('resetByType')
},
reset ({commit}) {
commit('resetState')
}
}
const mutations = {
setSortType (state, sort) {
state[state.type] = { ...state[state.type], sort }
},
setMonth (state, month) {
state.month = month
},
setParentItem (state, item) {
state[state.type].parent = item
},
saveRouteParams (state, params) {
let { type, orgId, orgName, mode } = params
state[type].orgId = orgId
state[type].orgName = orgName
state[type].listMode = mode
},
setListMode (state, mode) {
state[state.type].listMode = mode
},
setSatisfactionType (state, type) {
state.type = type
},
// 设置去年标杆满意度
setLastYearBenchmarking (state, lastYearSatisfaction) {
state.lastYearBenchmarking = lastYearSatisfaction
},
// 设置集团累计满意度
setGroupAccumulative (state, totalSatisfactionGroup) {
state.groupAccumulative = totalSatisfactionGroup
},
setGroupSatisfaction (state, satisfactions) {
state[state.type].info = satisfactions
},
setGroupSatisfactionSortList (state, orgInfoList) {
state[state.type].list = orgInfoList
},
// 设置集团均值
setGroupMean (state, groupMean) {
state.groupMean = groupMean
},
// 设置去年集团均值
setLastYearGroupMean (state, lastYearGroupMean) {
state.lastYearGroupMean = lastYearGroupMean
},
// 设置行业标杆
setIndustryBenchmarking (state, industryBenchmarking) {
state.industryBenchmarking = industryBenchmarking
},
setTwoIndicators (state, indicatorInfoList) {
state[state.type].table = indicatorInfoList
},
resetByType (state, type) {
state[type] = {info: {}, list: [], table: []}
},
resetState (state) {
state.type = 'group'
state.month = ''
state.group = {info: {}, list: [], table: []}
state.colony = {info: {}, list: [], table: []}
state.area = {info: {}, list: [], table: []}
state.city = {info: {}, list: [], table: []}
state.project = {info: {}, list: [], table: []}
state.lastYearBenchmarking = ''
state.groupAccumulative = ''
state.groupMean = ''
state.lastYearGroupMean = ''
state.industryBenchmarking = ''
}
}
export default {
namespaced: true,
state,
getters,
actions,
mutations
}
/*
mutations.js
同步 actions 方法 返回的数据
*/
// 异步返回数据 封装
export default {
showLoading (state, show) {
state.showLoading = show
},
// 更新 HttpHost、HttpHeadValue、UserInfo
getInfo (state, data) {
// 根据不同参数,同步数据到state
switch (data.type) {
case 'getUserInfo':
state.userInfo = data.data
break;
case 'getHttpHeadValue':
state.HttpHeadValue = data.data
break;
case 'getHttpHost':
state.HttpHost = data.data
break;
}
},
// 更新 HttpHost、HttpHeadValue、UserInfo,兼容V+
getInfos (state, data) {
const { userInfo, host, header } = data.data
state.userInfo = userInfo
state.HttpHost = host
state.HttpHeadValue = header
},
// 清空数据
reSetStateData (state, data) {
Object.assign(state, data)
}
}
/*
Vuex: state初始化
*/
export default {
// 用户信息
userInfo: null,
// 头部信息
HttpHeadValue: null,
// Host
HttpHost: null,
showLoading: false
}
/*
Vuex 状态管理
*/
import Vue from 'vue'
import Vuex from 'vuex'
import * as actions from './actions'
import mutations from './mutations'
import state from './state'
import satisfaction from './modules/satisfaction'
Vue.use(Vuex)
const debug = process.env.NODE_ENV !== 'production'
Vue.config.debug = debug
export default new Vuex.Store({
modules: {
satisfaction
},
state,
mutations,
actions,
strict: debug
})
File mode changed
/// <reference path="..\.vscode\typings\cordova\cordova.d.ts"/>
\ No newline at end of file
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no,width=device-width"><meta name=apple-mobile-web-app-capable content=yes><meta name=apple-mobile-web-app-status-bar-style content=jf><meta name=apple-mobile-web-app-title content=contact><meta name=format-detection content="telephone=no,email=no,adress=no"><meta name=mobile-web-app-capable content=jf><title>建发房产满意度模块</title><link href=static/css/app.9e5ff92c4238ee75bc97b1ec14da0796.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=static/js/manifest.8326d7bec85bb0bbc184.js></script><script type=text/javascript src=static/js/vendor.ec3ecc7b129bd5a914c9.js></script><script type=text/javascript src=static/js/app.f6aed37b9c3087dc5100.js></script></body></html>
\ No newline at end of file
#app[data-v-5f795eed]{height:100%}.container[data-v-3ad6a846]{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;background:#f5f5f7;height:100%}.table-container[data-v-3a0a054e]{padding-left:.2rem;padding-right:.2rem}.table-header[data-v-3a0a054e]{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:1rem;font-weight:700;border-bottom:1px solid #f0f0f2}.table-body[data-v-3a0a054e]{overflow:auto;-ms-flex:1;flex:1}.row[data-v-3a0a054e]{display:-ms-flexbox;display:flex;height:.9rem;-ms-flex-align:center;align-items:center}.col1[data-v-3a0a054e]{-ms-flex:1;flex:1;text-align:left;padding-left:.2rem}.col2[data-v-3a0a054e],.col3[data-v-3a0a054e]{width:1.1rem}.col2[data-v-3a0a054e],.col3[data-v-3a0a054e],.col4[data-v-3a0a054e]{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.col4[data-v-3a0a054e]{width:.5rem;height:100%;-ms-flex-align:center;align-items:center}.contentStart[data-v-3a0a054e]{-ms-flex-pack:start;justify-content:flex-start}.signContainer[data-v-3a0a054e]{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;line-height:15px;font-size:15px;-ms-flex-pack:center;justify-content:center}.sign[data-v-3a0a054e]{height:12px;line-height:12px;margin-left:3px}.countValue[data-v-3a0a054e]{height:12px;line-height:12px;font-size:12px}.row[data-v-3a0a054e]:nth-child(2n){background:#f9f9fb}.gray[data-v-3a0a054e]{color:gray}.up[data-v-3a0a054e]{color:#009a5b}.down[data-v-3a0a054e]{color:#cd0001}.fall[data-v-3a0a054e]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkQzODBBQ0ZCODk3MTExRThBREYwOUY0RDAzQTg3MTBFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkQzODBBQ0ZDODk3MTExRThBREYwOUY0RDAzQTg3MTBFIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RDM4MEFDRjk4OTcxMTFFOEFERjA5RjREMDNBODcxMEUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RDM4MEFDRkE4OTcxMTFFOEFERjA5RjREMDNBODcxMEUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4ioHHdAAAAyUlEQVR42mL8//8/AwycY2RiwAIsgXgnEB8HYndsCoz+/4OzsZqABliAmBeKCQJiDIR54S+1DCQJjBo4aiAEfIbSfxiIzAXIQBeIuYH4J5KYARCD8hYfEBuiqWcH4q9AfBmXgdZAPB1N7B80l+iBsjsWR2UiG4ju5RlAXIQlWFixWM4AVTuDUBj2A3EhEcFVCFVLVKRMAOISPIaVQNWQFMu9QFyBRbwCKkdWsukE4hokfg1UjOhkgw20QZMHjI0XMCJXAdQAAAEGADeFI/Bt015LAAAAAElFTkSuQmCC)}.fall[data-v-3a0a054e],.rise[data-v-3a0a054e]{background-repeat:no-repeat;background-size:100% 100%;width:.2rem}.rise[data-v-3a0a054e]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkQ0MEE3ODcwODk3MTExRTg5QTBFRjg5MDhGQzcyOUYxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkQ0MEE3ODcxODk3MTExRTg5QTBFRjg5MDhGQzcyOUYxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RDQwQTc4NkU4OTcxMTFFODlBMEVGODkwOEZDNzI5RjEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RDQwQTc4NkY4OTcxMTFFODlBMEVGODkwOEZDNzI5RjEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5p8djjAAAA20lEQVR42mL8//8/Awwwzo5hwAJYgVgGiO9jk/yfugSFz8RAGFQD8WYg1iRCLUEDw4G4Aoi1gXguEPNTYqAREE8DYnYo3xKIZ5BroCQQrwZiITTxCCCuItVAbiBeC8RKOPQ0A3EAsQZyAfFCqPfw6VkBxLbYJFnQ+J5ArAPE50EpAoh/A7E+NBwvAPE/UOoCYj4gzgHi60D8Bp+BR4DYDWoQA9SAg0CsCMQ+SAbCfPOZkAtfYvHFL6hrn1EjHSKrYaKWgSSBUQNHDYQAZiwZgCIDPwLxO2INBAgwAEBzJEc4RIrGAAAAAElFTkSuQmCC)}.satis-info-container[data-v-ad998582]{background-color:#fff}.group-info[data-v-ad998582]{margin-left:.2rem;margin-right:.2rem;height:.9rem;border-bottom:1px solid #ebeff3;-ms-flex-pack:justify;justify-content:space-between}.current-item-info[data-v-ad998582],.group-info[data-v-ad998582],.group-info div[data-v-ad998582]{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.current-item-info[data-v-ad998582]{-ms-flex-direction:row;flex-direction:row;min-height:2rem}.current-month[data-v-ad998582]{-ms-flex:1;flex:1;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.current-month span[data-v-ad998582]:nth-child(2){font-size:.6rem;font-weight:700;height:.6rem;color:#0e1721}.gradient-line[data-v-ad998582]{-ms-flex:0;flex:0;width:1px;min-height:2rem;background:linear-gradient(rgba(245,245,247,0),#f5f5f7,rgba(245,245,247,0))}.datetime[data-v-53783e00]{background:#fff;height:.9rem;min-height:.9rem;font-weight:700;font-size:14px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding-left:.2rem}.container[data-v-7847a428]{height:100%;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.tab-container[data-v-7847a428]{display:-ms-flexbox;display:flex;min-height:.9rem;height:.9rem}.tab[data-v-7847a428]{-ms-flex:1;flex:1;font-size:14px;cursor:pointer;border-bottom:1px solid #ebeff3;height:.9rem}.tabSelected[data-v-7847a428]{color:#cd3d3d;border-bottom:3px solid #cd3d3d}*{list-style:none;font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50}:not(input,textarea),a,div,em,i,li,span,ul{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}blockquote,body,dd,div,dl,dt,fieldset,form,h1,h2,h3,h4,h5,h6,input,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0}fieldset,img,input,textarea{border:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:400}ol,ul{list-style:none}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}body,html{-webkit-user-select:none;-moz-user-select:none;user-select:none;height:100%}a:active,a:hover{text-decoration:underline}a,img{-webkit-touch-callout:none}img{width:100%;vertical-align:middle}ol,ul{margin:0}input{outline:none;border:0}button{border:0;margin:0;padding:0}body{font-size:16px;background:#f3f5f6;-webkit-overflow-scrolling:touch}a{text-decoration:none}a,button,input,textarea{-webkit-tap-highlight-color:rgba(0,0,0,0);outline:0}.flex{display:flex;display:-webkit-flex}.flex-flow-r-w{flex-flow:row wrap}.flex-flow-c-n{flex-flow:column nowrap}.flex-flow-c-w{flex-flow:column wrap}.flex-in{display:inline-flex}.flex-wrap{flex-wrap:wrap}.flex-wrap-r{flex-wrap:wrap-reverse}.flex-l{align-items:flex-start}.flex-l-l{justify-content:flex-start}.flex-c{align-items:center}.flex-c-c{justify-content:center}.flex-r{align-items:flex-end}.flex-r-r{justify-content:flex-end}.flex-item-gsb-1{flex:1 1 auto}.flex-item-gsb-0{flex:0 0 auto}.flex-self-l{align-self:flex-start}.flex-self-c{align-self:center}.flex-self-r{align-self:flex-end}.flex-dir-column{flex-direction:column}.pl-li-del{width:.4rem;height:.4rem;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkZEQ0I0RDFERjRFRjExRTY4QjY2RDI5RkZDN0I2RDY2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkZEQ0I0RDFFRjRFRjExRTY4QjY2RDI5RkZDN0I2RDY2Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkRDQjREMUJGNEVGMTFFNjhCNjZEMjlGRkM3QjZENjYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RkRDQjREMUNGNEVGMTFFNjhCNjZEMjlGRkM3QjZENjYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5o5fmTAAADEklEQVR42uyYX4hMURzHZ5Y1EV5Qil28KCW0eNk0pFV2bavFkvVvy0YmD/KgVps/D5stD2LzN3+yYieREVqSl0WtWsxKSPtgkxKitK+Mz6nfrdtt77nn3DszzYNffTqnmXt/53t/55zf+RPP5XKxUrayWIlbyQscG+XlV8nkDIqlsARmwmQYAyPwQz0CWRj081HV15d/gQjbSqFYCeUmr8BduABfbdqK20wShDVRtMOCkEFXkT0Fh+CPSQSNBCJsPMVFaM7T0PoIO+FZkMAyA3GzZAw153Hsz4WnsC1SF8skUOKmFHCithLFS9YCETeO4gPMKUI2qUHkE9suvl4kccoeEJCJxgJ5uJ5iQxHzcQKu2kTwjMbZMMyG1ZYi1kmPvPP7n8AsDBQoua5C09AvxsswPKK+2ULcHfgkK4yfHTOJYCqgsUV8xHlJsmmK/YbinJ5Jap6txfc0X4H8OZ1ihUFEdvHsEamfgOMG4k7DHgPfG3URrLYYU4cRuVvqB+Ca5/9Gj7iUod9qncDFlgP/HKyV+nYYcEUu4+rWlIXPKp3AyhApIuP66jrBtlvdVqETOCFkHnsOq+A79Mq+MG0ZOcf+6gSWx8LbVFd9EmwqxJZ/JKQfNeZ6nPUdvshOO7Imr8CfIcU5Y+4+vJG6mjC1Ifz91gnMRhCnJsQamA835beHsMPS56BOYL+NOFYSvzynlssuqXdDm4XfAV+BNPiWYsjASaNGnGN74aDUO+GkocDbQWtxd4CD9YjLyNIYlIQ7oEXq++BGgO8hfGeDBHY5J65RTG2/74k40yR8xTVZXgY8e9Roy0/jHa7u8dp7+AbLLQf/Y9nJJHz+/0z0Kk03rO2Sy0azeSHExWSlSZjuYrQC+RIV1oYibvk7abPf6tDEC+q6YksRxN2irbZQB3deVLOutYDi0rTRFOlmQQ7VdQFniVDdanKmMbofRGSvTI6ePAhTa3WN6eoSt70CJgUtk6TbYLk9U0vYWbjs+fj8CvTc29TLbtq5wPTuStSq8FrdHMALn94pjMBi2f9L9Kj2T4ABAKem4KEcAONNAAAAAElFTkSuQmCC) no-repeat 50%/80%}@media screen and (max-width:10000px){html{font-size:100px}}@media screen and (max-width:750px){html{font-size:100px}}@media screen and (max-width:720px){html{font-size:96px}}@media screen and (max-width:414px){html{font-size:55.2px}}@media screen and (max-width:412px){html{font-size:54.933333px}}@media screen and (max-width:384px){html{font-size:51.2px}}@media screen and (max-width:375px){html{font-size:50px}}@media screen and (max-width:360px){html{font-size:48px}}@media screen and (max-width:320px){html{font-size:42.66667px}}.page-in-enter-active,.page-in-leave-active,.page-out-enter-active,.page-out-leave-active{will-change:transform;transition:all .5s;height:100%;width:100%;top:0;position:absolute;backface-visibility:visible;perspective:1000}.page-out-enter{opacity:0;transform:translate3d(-100%,0,0);-webkit-transform:translate3d(-100%,0,0)}.page-out-enter-to{opacity:1}.page-out-leave-active{opacity:.5}.page-in-enter,.page-out-leave-active{transform:translate3d(100%,0,0);-webkit-transform:translate3d(100%,0,0)}.page-in-enter-to{transform:translateX(0)}.page-in-leave-active{opacity:.5}.list-in-enter-active,.list-in-leave-active,.list-out-enter-active,.list-out-leave-active{will-change:transform;transition:all .3s;width:100%;backface-visibility:visible;perspective:1000}.list-in-enter{transform:translate3d(100%,0,0);-webkit-transform:translate3d(100%,0,0)}.list-in-enter-to{transform:translateX(0)}.list-in-leave-active{opacity:0;transform:translate3d(100%,0,0);-webkit-transform:translate3d(100%,0,0)}.list-out-enter{opacity:1;background-color:#0e1721}.list-out-enter-to{opacity:1;background-color:red;transform:translate3d(100%,0,0);-webkit-transform:translate3d(100%,0,0)}.list-out-leave-active{background-color:blue;opacity:1}.margin-left-normal{margin-left:.2rem}.padding-left-normal{padding-left:.2rem}.margin-bottom-normal{margin-bottom:.2rem}.margin-top-normal{margin-top:.2rem}.flexCenter{align-items:center}.flexStart{align-items:flex-start}.flexEnd{align-items:flex-end}.textLeft{text-align:left}.textRight{text-align:right}.textCenter{text-align:center}.flex-1{flex:1}.right-arrow{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg0MEQyNjY4ODk3NDExRTg5MDM5QjIwOUVFNTYzMDk5IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg0MEQyNjY5ODk3NDExRTg5MDM5QjIwOUVFNTYzMDk5Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODQwRDI2NjY4OTc0MTFFODkwMzlCMjA5RUU1NjMwOTkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6ODQwRDI2Njc4OTc0MTFFODkwMzlCMjA5RUU1NjMwOTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7tRQBKAAABkElEQVR42uzYTShEURTA8feQNCUrC4qVlSILUmxkykcJC5SFbGwsrHxsscZKlmqKhWZSImkwbCRlocjOimJhpTQxpef/6kzdXlNEc8/EO/XbnKbm9N4599wZ1/M8p5CiyCmwCAv6Kkq+86Gd1Pmvv2gw2vZ/Xtk4VuGqvTIjRrCOYrxhVvMJdWNDivFjBvOaBV3jPpBbwLRWQU/ozFHUEia1mvoBUTwaOb+516TZVabsDl14DhTlN/uw1kl9K03+YuT8Zt9En9bquEIPXo1cKRLyWlV22QX6kTZyZdhFu9ZyPcUQMkYugn00a237A4ziw8hVSL5B6/qR6+rpaj0hv7m3jLXiyAT24sZ2QR3YlgnLRlrG/9L2E2qViYoYuXcM4Mz2lDUhiXIjl5HT+tj2OVSPQ5mkbPgTNoY92yd1HY5QGZiwCcRt77IapFAdKGYKMdvbvgonqA3k5+T6Yf0+1JijmEUsa90Yk9K02fWwIldY1V8dcTlzWvLxi+MnBTnSvDEnT+GGf8eEBf21gj4FGAACLkg+INwFMQAAAABJRU5ErkJggg==);height:.4rem}.right-arrow,.top3-rank{background-repeat:no-repeat;background-size:100% 100%;width:.4rem}.top3-rank{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAwCAYAAABjezibAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjk1RDAxMTlGODk2RTExRTg4QTkzREQ3Nzc0M0Q3QjVCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjk1RDAxMUEwODk2RTExRTg4QTkzREQ3Nzc0M0Q3QjVCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTVEMDExOUQ4OTZFMTFFODhBOTNERDc3NzQzRDdCNUIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OTVEMDExOUU4OTZFMTFFODhBOTNERDc3NzQzRDdCNUIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz71w19RAAABa0lEQVR42uzZTStEURjA8WOyNF9EJBqpySRKFt4+gbJiNzU2EqVEycIoO1bKTjYzspGkbMbLigUrCzY2SkYi4f/Uo2YxuXdumXvUc+pX071nuv85tztTcxouMhmnYxg5dKLJxTPKOMMq9uRAQk8sooDeGOOcXlsaitrkGjGEWeffkKaSrOCU83fkJDDlcWBKApMeByYTzvNhgRZogRZogRZogRZogRZogRZogRZogRZogRZogf8i8B3z6MKVb4GydSB/JS/gVF8v4yPuwFdMI43LiuNvmEE3ruMKPEE7Vn5ZqRI6sIbPegW+IIse3IRcZdnB6sNtlMDnGuYfohXrEVbkGG3YwFfI95Ql8DzExCdMoD/KKlQMWYxJDOAuzMMngfmASftowWYNnzxoHOid2AqYl5dA2bhbqnLyEWMYxP0ffAfLXRnHKB6qnJem4s9DMqcTj/Qh2EUztuvwY1HQO7Sj15aGEW1y3wIMAFBGQ8gZXCR/AAAAAElFTkSuQmCC);height:.48rem;line-height:.48rem}.after3-rank{background-color:#474f5a;border-radius:3px;line-height:.4rem}.after3-rank,.infoIcon{width:.4rem;height:.4rem}.infoIcon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkU3Mjc1QTdBODk3MDExRThCMDY5OEVBMEUyODNBMzAzIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkU3Mjc1QTdCODk3MDExRThCMDY5OEVBMEUyODNBMzAzIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RTcyNzVBNzg4OTcwMTFFOEIwNjk4RUEwRTI4M0EzMDMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RTcyNzVBNzk4OTcwMTFFOEIwNjk4RUEwRTI4M0EzMDMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5p8ldUAAADN0lEQVR42syYTUhUURTH3xtkNokYtahFIZkxRYRRhqVhK2eIpnaRRoZt+gCDNq3CVbughUVkyyiFdn2hkYsgzYKyD8imLKwkRkL7IjNCmP4Hzsj1emd89543Mhf+3Pdm3j3n9879Ovf5mUzGK+ZSkr3wfd+qYVfvwAZUCWgnFINWQUv47yloDEpBD6He5kTdsI39bOD82YsAgICKomqGTkKbLYPxHOogM4D9Fzog4JLsoELYax/pBQF5OxRAgFG3XYJaQh5eV6ETAJ1yBgTcSho/0KYCzYFXNI4BmbYGBNwKVP1QZYEn6geoHpDjJsBInm7tWQQ4j330sM95JZKj0QWoWuCUlphb0LeAz1ezz4UB8Sa0trUK4F5A69Fl+6iGxgO2a2XfuQHxQAkvJZLSlZ2ZqL+iumnRtoMZckbwAFQlBNyo3ccs2lYxw/ytjktbCIO+BVGYRD0A7YYaLNsTw7XZLTg7nbvvPSL6d0WSI6xriu8Y0bs4LjSa4fF2CDoFTQtsxU1d3CAw+Bo6iEnxUplwtPKfd7RHLBf1CMYcjT2FjkNHtN/fCl44ZprFLlnKT+godB1ao/23SwBYYQIsdTA0wpkOJat6+rRHAFiaa5mxLVuV67vK+KvkXURc1AhKZt0QJsgX5X6vkGvaBJgWGNS7VwqYNgGmwgBE95ZTficETJkABx2NUbYypNwnQhjbgybAPkdjdzD+1MN1kuvfAsA+E+ATaNQFUEvXKEH4JUg8RpllLiBHodPS2F/ovnK/HSrj/fiwI+AVtUf0fLCTd4eg5ROM/VHu30BboDrHnYR8X86ZsMLZD1TtNgkmunWbFtFj0GnH6LUzg5dvJ6GtqwmqDbjQPwAk7SJRjlqZI9xj9j2nGM/FcLga1TNo+SIlqBM0NBC9z4HOxfxgUrj92WxrSRUuyLmYICnkjbxkFKqQ7Ub25VkBMmQ/j8XhAsCRzVr24TkBMiQtHTXQOWgmBLAZtlXDtvMW2w+Ya1Gd4VketQSjj5bd0FmAvV/wBObyhVUBXYpqPycG9Xlm+wR/IaNPeDcA9j3wEVECaABexml/Of9Ei+0YgCadz7A6YLGWiFfk5b8AAwA5ABhuepl6tAAAAABJRU5ErkJggg==);background-repeat:no-repeat;background-size:100% 100%}.alignLeft{text-align:left}.fontColor1{color:#6b6f7b}.fontColor2{color:#333}.fontColor3{color:#cd0001}.fontColor4{color:#0e1721}.fontColor5{color:#cd3d3d}.white{background:#fff}.bgColor1{background-color:#cd3d3d}.bgColor2{background-color:#fff}.bgColor3{background-color:#f9f9fb}.bgColor4{background-color:#cd3d3d}.font14{font-size:14px}.visibility{visibility:visible}.inVisibility{display:none}.hidden{visibility:hidden}.list-container[data-v-7f20d94e]{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:auto;-ms-flex:1;flex:1}.list-chart[data-v-7f20d94e]{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;overflow-x:hidden}.decimal[data-v-7f20d94e]{list-style-type:decimal}.chart[data-v-7f20d94e],.decimal[data-v-7f20d94e]{overflow-y:auto;-ms-flex:1;flex:1;width:100%}li[data-v-7f20d94e]{display:-ms-flexbox;display:flex;margin:auto .2rem;padding-left:.1rem;height:.9rem;-ms-flex-align:center;align-items:center;cursor:pointer;font-size:14px}li[data-v-7f20d94e]:nth-child(2n){background:#f9f9fb}.rank[data-v-7f20d94e]{color:#fff;margin-right:.1rem;text-align:center;-ms-flex-align:center;align-items:center;vertical-align:middle}.orgName[data-v-7f20d94e]{-ms-flex:1;flex:1;text-align:left}button[data-v-7f20d94e]{border-radius:3px;width:40%;height:100%;background:#f3f4f7;color:#6b6f7b}.buttonSelected[data-v-7f20d94e]{background:#cd3d3d;color:#fff}.bottom-tab[data-v-7f20d94e]{margin:0 .2rem;border-top:1px solid #ebeff3;height:.6rem;padding:.2rem 0;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around;-ms-flex-align:center;align-items:center}.tab-container[data-v-5661caf0]{display:-ms-flexbox;display:flex;min-height:.9rem;height:.9rem}.tab[data-v-5661caf0]{-ms-flex:1;flex:1;font-size:14px;cursor:pointer;border-bottom:1px solid #ebeff3;height:.9rem}.tabSelected[data-v-5661caf0]{color:#cd3d3d;border-bottom:3px solid #cd3d3d}.tab-container[data-v-7d8e6766]{display:-ms-flexbox;display:flex;min-height:.9rem;height:.9rem}.tab[data-v-7d8e6766]{-ms-flex:1;flex:1;font-size:14px;cursor:pointer;border-bottom:1px solid #ebeff3;height:.9rem}.tabSelected[data-v-7d8e6766]{color:#cd3d3d;border-bottom:3px solid #cd3d3d}.title-bar[data-v-46b53100]{background:#cd3d3d;height:1rem;min-height:1rem;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.title-bar span[data-v-46b53100]{color:#fff;vertical-align:center}.back[data-v-46b53100]{position:absolute;left:0;padding-left:.2rem;padding-right:.2rem;height:1rem;line-height:1rem}.back img[data-v-46b53100]{width:.5rem;height:.5rem}.title[data-v-46b53100]{font-size:20px}.base-page[data-v-02503e36]{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;background-color:#f5f5f7}.title-bar[data-v-02503e36]{position:fixed;top:0;width:100%;z-index:999}.main[data-v-02503e36]{margin-top:1rem;overflow:auto;-ms-flex:1;flex:1;flex-direction:column}.loading[data-v-673f16e7],.main[data-v-02503e36]{display:-ms-flexbox;display:flex;-ms-flex-direction:column}.loading[data-v-673f16e7]{position:fixed;width:30vw;height:30vw;z-index:9999;background:rgba(0,0,0,.7);flex-direction:column;vertical-align:middle;text-align:center}.weui-toast[data-v-673f16e7]{position:fixed;width:7.6em;min-height:7.6em;top:calc(50% - 7.6em / 2);left:50%;margin-left:-3.8em;background:hsla(0,0%,7%,.7);text-align:center;border-radius:5px;color:#fff}.weui-toast__content[data-v-673f16e7]{margin:0 0 15px;color:#fff}.vux-loading .weui-toast[data-v-673f16e7]{z-index:999}.weui-icon_toast.weui-loading[data-v-673f16e7]{margin:30px 0 0;width:38px;height:38px;vertical-align:baseline;display:inline-block}.vux-mask-enter-active[data-v-673f16e7],.vux-mask-enter[data-v-673f16e7],.vux-mask-leave-active[data-v-673f16e7]{position:relative;z-index:1}.vux-mask-enter[data-v-673f16e7],.vux-mask-leave-active[data-v-673f16e7]{opacity:0}.vux-mask-enter-active[data-v-673f16e7],.vux-mask-leave-active[data-v-673f16e7]{transition:opacity .3s}.vux-loading-no-text .weui-toast[data-v-673f16e7]{min-height:98px}.weui-mask[data-v-673f16e7]{position:fixed;z-index:1000;top:0;right:0;left:0;bottom:0;background:rgba(0,0,0,.6)}.weui-mask_transparent[data-v-673f16e7]{position:fixed;z-index:1000;top:1rem;right:0;left:0;bottom:0}.weui-loading[data-v-673f16e7]{width:20px;height:20px;display:inline-block;vertical-align:middle;animation:weuiLoading-data-v-673f16e7 1s steps(12) infinite;background:transparent url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=") no-repeat;background-size:100%}.weui-loading.weui-loading_transparent[data-v-673f16e7]{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxMjAnIGhlaWdodD0nMTIwJyB2aWV3Qm94PScwIDAgMTAwIDEwMCc+PHBhdGggZmlsbD0nbm9uZScgZD0nTTAgMGgxMDB2MTAwSDB6Jy8+PHJlY3QgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjU2KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgwIC0zMCknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjUpJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKDMwIDEwNS45OCA2NSknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjQzKScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSg2MCA3NS45OCA2NSknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjM4KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSg5MCA2NSA2NSknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjMyKScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgxMjAgNTguNjYgNjUpJy8+PHJlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC4yOCknIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoMTUwIDU0LjAyIDY1KScvPjxyZWN0IHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyB4PSc0Ni41JyB5PSc0MCcgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwuMjUpJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKDE4MCA1MCA2NSknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjIpJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKC0xNTAgNDUuOTggNjUpJy8+PHJlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC4xNyknIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoLTEyMCA0MS4zNCA2NSknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjE0KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgtOTAgMzUgNjUpJy8+PHJlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC4xKScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgtNjAgMjQuMDIgNjUpJy8+PHJlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC4wMyknIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoLTMwIC01Ljk4IDY1KScvPjwvc3ZnPgo=")}@keyframes weuiLoading-data-v-673f16e7{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.picker-mask{position:fixed;z-index:1000;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.46)}@keyframes pickerShow{0%{opacity:0}to{opacity:1}}.picker-mask.time-picker-ani{animation:pickerShow .2s linear}.picker-container{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:280px;opacity:1;font-family:PingFang SC,HanHei SC,Helvetica Neue,Helvetica,sans-serif;line-height:1.5;background-color:#fff;box-shadow:0 0 10px rgba(0,0,0,.8);-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none}.picker-container i{font-style:normal}.picker-container [data-active]{position:relative}.picker-container .picker-disabled.active:after,.picker-container [data-active]:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background-image:radial-gradient(circle,#000 10%,transparent 10.01%);background-repeat:no-repeat;background-position:50%;pointer-events:none;background-size:0 0;opacity:0;transition:background .5s,opacity 1s}.picker-container .active:after{background-size:1000% 1000%;opacity:.2}.picker-container .picker-disabled{color:#d6d6d6}.picker-head{padding:10px 16px;line-height:1.5;color:#ececec;background-color:#00bcd4}.picker-head-active{color:#fff}.picker-year{font-size:14px;width:4em}.picker-date{font-size:24px;text-indent:-2px}.picker-content{position:relative;overflow:hidden;width:100%;height:224px;font-size:12px;color:rgba(0,0,0,.8)}.picker-content li,.picker-content ul{list-style:none;margin:0;padding:0}.date-picker-main{width:100%;transform:translateX(-100%) translateZ(0)}.date-picker-main:after{content:"";display:table;clear:both}.scroller-picker-main{position:relative;text-align:center}.scroller-picker-main li{padding:10px 0;overflow:hidden}.scroller-picker-main .picker-active{color:#00bcd4}.scroller-picker-midd{position:absolute;top:50%;width:100%;height:40px;margin-top:-20px;box-sizing:border-box}.scroller-picker-midd:after,.scroller-picker-midd:before{content:"";position:absolute;left:0;width:100%;border-top:1px solid #e2e3e5}.scroller-picker-midd:before{top:0;-webkit-transform:scaleY(.5) translateZ(0);transform-origin:left top;transform:scaleY(.5) translateZ(0)}.scroller-picker-midd:after{bottom:0;-webkit-transform:scaleY(.5) translateZ(0);transform-origin:left bottom;transform:scaleY(.5) translateZ(0)}.picker-actions-arrow{z-index:1;position:absolute;top:0;left:8px;right:8px;font-size:14px;line-height:20px}.picker-actions-arrow i{cursor:pointer;float:left;padding:16px 14px}.picker-actions-arrow i:last-child{float:right}.picker-actions-arrow i[data-active]:after{height:42px;top:50%;transform:translateY(-50%);border-radius:50%}.picker-bdy{float:left;width:100%;padding:0 8px;margin-right:-100%;position:relative;box-sizing:border-box}.picker-bdy-curr{left:100%}.picker-bdy-next{left:200%}.date-picker-title{text-align:center;padding:16px;font-size:14px;font-weight:800;line-height:20px}.date-picker-days i{position:relative;width:14.28%;height:12px;padding:6px 0;text-align:center;display:inline-block;line-height:1;vertical-align:top;cursor:pointer;overflow:hidden}.date-picker-days i[data-active]:after{width:24px;left:50%;transform:translate(-50%);border-radius:50%}.date-picker-days-bdy i span{position:relative}.date-picker-days-bdy i:before{content:"";left:50%;top:50%;width:0;height:0;position:absolute;border-radius:50%;background-color:#00bcd4;transform:translate(-50%,-50%)}.picker-bdy-curr .date-picker-days-bdy i.picker-active{color:#fff}.picker-bdy-curr .date-picker-days-bdy i.picker-active:before{width:24px;height:24px}.date-picker-days-bdy .picker-now{color:#00bcd4}.date-picker-days-title{font-weight:500}.date-picker-days-bdy i[data-val="0"]{color:transparent}.date-picker-days-bdy i[data-val="0"]:before{content:none}.picker-foot{padding:6px 10px;text-align:right;color:#393939}.picker-act{padding:5px 15px;margin-left:10px;text-decoration:none;display:inline-block;font-size:14px;font-weight:600;color:inherit;background-color:transparent;border-radius:2px;transition:background-color .2s linear}.picker-act:hover{background-color:hsla(0,0%,60%,.2)}.picker-act-clear{margin-left:0;float:left}.time-picker-container .picker-head{text-align:center;font-size:38px;font-weight:300}.time-picker-container .picker-cell{margin-left:-20px}.time-picker-container .picker-cell[data-active]:after{width:30px;height:30px;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:50%}.time-picker-container .picker-cell-inner{margin-left:-12px}.time-picker-container .picker-active{z-index:1;color:#fff;pointer-events:none}.time-picker-container .picker-active b{position:absolute;left:50%;top:50%;margin-top:-1px;margin-left:-1px;width:2px;height:2px;background-color:#fff;border-radius:50%}.time-picker-main{position:absolute;top:50%;left:50%;height:200px;width:200px;transform:translate3d(-50%,-50%,0);border-radius:50%;background-color:rgba(0,0,0,.05)}.time-picker-main>ul{position:absolute;top:1px;right:1px;bottom:1px;left:1px}.time-picker-main:before{content:"";position:absolute;top:50%;left:50%;width:8px;height:8px;border-radius:50%;background-color:rgba(0,188,212,.9);transform:translate(-50%,-50%)}.time-picker-main-minutes>.time-picker-minutes-1{top:10px;right:10px;bottom:10px;left:10px}.time-picker-minutes-1 .picker-cell{width:6px;margin-left:-3px;margin-top:-6px;transform-origin:50% 96px}.time-picker-minutes-1 .picker-cell i{margin-top:-3px}.time-picker-minutes-1 .picker-active b{margin-top:-4px}.time-picker-minutes-10 .picker-cell{width:80px;margin-left:-40px}.picker-hour,.picker-minute{display:inline-block;width:46px}.picker-hour[data-active]:after,.picker-minute[data-active]:after{height:46px;top:5px}.picker-hour{text-align:right}.picker-minute{text-align:left}.picker-cell{position:absolute!important;top:0;left:50%;width:40px;height:28px;transform-origin:50% 99px;transition:all .2s}.picker-cell i{position:absolute;top:50%;left:50%;pointer-events:none}.picker-cell-inner{top:30px;width:24px;height:24px;transform-origin:50% 69px}.time-picker-line{top:99px;left:100px;width:70px;height:2px;pointer-events:none;transform-origin:0 50%;transition:all .2s}.time-picker-line,.time-picker-line:before{position:absolute;background-color:rgba(0,188,212,.9)}.time-picker-line:before{content:"";left:100%;top:0;margin-top:-14px;width:30px;height:30px;border-radius:50%}.time-picker-line-inner{width:42px}
\ No newline at end of file
{"version":3,"sources":["webpack:///./src/App.vue?33dd","webpack:///./src/screen/ProjectSatisfaction.vue?beb2","webpack:///./src/components/CommonTable.vue?2e4e","webpack:///./src/components/SatisfactionInfo.vue?f688","webpack:///./src/components/DateTime.vue?5726","webpack:///./src/screen/GroupSatisfaction.vue?e467","webpack:///./src/assets/css/base.css","webpack:///./src/assets/css/app.css","webpack:///./src/components/CommonList.vue?0923","webpack:///./src/screen/AreaSatisfaction.vue?c99e","webpack:///./src/screen/CitySatisfaction.vue?ac9b","webpack:///./src/components/TitleBar.vue?b5d9","webpack:///./src/components/BasePage.vue?61ff","webpack:///./src/components/Loading.vue?3711","webpack:///./~/date-time-picker/src/css/index.css"],"names":[],"mappings":"AACA,sBACE,WAAa,CCDf,4BACE,oBACA,aACA,0BACI,sBACJ,mBACA,WAAa,CCNf,kCACC,mBACC,mBAAsB,CAExB,+BACC,oBACA,aACA,sBACI,mBACJ,YACA,gBACC,+BAAiC,CAEnC,6BACE,cACA,WACI,MAAQ,CAEd,sBACC,oBACA,aACA,aACA,sBACI,kBAAoB,CAEzB,uBACE,WACI,OACL,gBACA,kBAAqB,CAEtB,8CACE,YAAc,CAMhB,qEALE,oBACA,aACA,qBACI,sBAAwB,CAW7B,uBARC,YACD,YAKA,sBACI,kBAAoB,CAEzB,+BACE,oBACI,0BAA4B,CAElC,gCACE,oBACA,aACA,sBACI,mBACJ,iBACA,eACA,qBACI,sBAAwB,CAE9B,uBACE,YACA,iBACA,eAAiB,CAEnB,6BACE,YACA,iBACA,cAAgB,CAElB,oCACC,kBAAoB,CAErB,uBACE,UAAY,CAEd,qBACC,aAAuB,CAExB,uBACC,aAAsB,CAEvB,uBACE,8CAAuD,CAKzD,8CAJE,4BACA,0BACA,WAAc,CAOf,uBAJC,8CAAuD,CAIxD,46FC/FD,uCACE,qBAAwB,CAE1B,6BAKE,kBACA,mBACA,aACA,gCACA,sBACI,6BAA+B,CAQrC,kGAjBE,oBACA,aACA,sBACI,kBAAoB,CAsBzB,oCALC,uBACI,mBACJ,eAAiB,CAInB,gCACE,WACI,OACJ,oBACA,aACA,0BACI,qBAAuB,CAE7B,kDACE,gBACA,gBACA,aACA,aAAe,CAEjB,gCACE,WACI,OACJ,UACA,gBACA,2EAAgG,CCjDlG,2BACE,gBACA,aACA,iBACA,gBACA,eACA,oBACA,aACA,sBACI,mBACJ,kBAAqB,CCVvB,4BACE,YACA,oBACA,aACA,0BACI,qBAAuB,CAE7B,gCACE,oBACA,aACA,iBACA,YAAe,CAEjB,sBACC,WACI,OACH,eACA,eACA,gCACA,YAAe,CAEjB,8BACE,cACA,+BAAiC,CCnBnC,EACI,gBACA,8CACA,mCACA,kCACA,kBACA,aAAe,CAYnB,2CAOI,2BACA,yBACA,wBACA,sBACA,qBACA,gBAAkB,CAGtB,iGAAuH,SAAS,SAA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E1B,gCACE,oBACA,aACA,iBACA,YAAe,CAEjB,sBACC,WACI,OACH,eACA,eACA,gCACA,YAAe,CAEjB,8BACE,cACA,+BAAiC,CChBnC,gCACE,oBACA,aACA,iBACA,YAAe,CAEjB,sBACC,WACI,OACH,eACA,eACA,gCACA,YAAe,CAEjB,8BACE,cACA,+BAAiC,CChBnC,4BACE,mBACA,YACA,gBACA,oBACA,aACA,qBACI,uBACJ,sBACI,kBAAoB,CAE1B,iCACE,WACA,qBAAuB,CAEzB,uBACE,kBACA,OACA,mBACA,oBACA,YACA,gBAAkB,CAEpB,2BACE,YACA,YAAe,CAEjB,wBACE,cAAgB,CC5BlB,4BACE,oBACA,aACA,0BACI,sBACJ,YACA,wBAAqC,CAEvC,4BACE,eACA,MACA,WACA,WAAa,CAEf,uBACE,gBACA,cACA,WACI,OACJ,oBACA,aACA,0BACI,qBAAuB,CCtB7B,0BACI,eACA,WACA,YACA,aACA,0BACA,oBACA,aACA,0BACI,sBACJ,sBACA,iBAAmB,CAEvB,6BACI,eACA,YACA,iBACA,0BACA,SACA,mBACA,4BACA,kBACA,kBACA,UAAe,CAEnB,sCACI,gBACA,UAAe,CAEnB,0CACE,WAAa,CAEf,+CACE,gBACA,WACA,YACA,wBACA,oBAAsB,CAExB,iHAEE,kBACA,SAAW,CAEb,yEACE,SAAW,CAEb,gFACE,sBAA0B,CAE5B,kDACE,eAAiB,CAEnB,4BACI,eACA,aACA,MACA,QACA,OACA,SACA,yBAA8B,CAGlC,wCACI,eACA,aACA,SACA,QACA,OACA,QAAU,CAEd,+BACI,WACA,YACA,qBACA,sBACA,4DACA,m5DACA,oBAAsB,CAE1B,wDACM,8oEAAgpE,CAEtpE,uCACA,GACI,sBAAmC,CAEvC,GACI,uBAAqC,CACxC,CC1FD,aAAc,eAAe,aAAa,MAAM,OAAO,WAAW,YAAY,gCAAoC,CAClH,8BACE,GACE,SAAW,CAEb,GACE,SAAW,CACZ,CAEH,sBACE,GACE,SAAW,CAEb,GACE,SAAW,CACZ,CAEH,6BAA8B,wCAAwC,+BAAgC,CAEtG,kBAAmB,kBAA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","file":"static/css/app.9e5ff92c4238ee75bc97b1ec14da0796.css","sourcesContent":["\n#app[data-v-5f795eed] {\n height: 100%;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/App.vue","\n.container[data-v-3ad6a846] {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n background: rgb(245, 245, 247);\n height: 100%;\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/screen/ProjectSatisfaction.vue","\n.table-container[data-v-3a0a054e] {\n\tpadding-left: 0.2rem;\n padding-right: 0.2rem;\n}\n.table-header[data-v-3a0a054e] {\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-ms-flex-align: center;\n\t align-items: center;\n\theight: 1rem;\n\tfont-weight: bold;\n border-bottom: 1px solid #f0f0f2;\n}\n.table-body[data-v-3a0a054e] {\n overflow: auto;\n -ms-flex: 1;\n flex: 1;\n}\n.row[data-v-3a0a054e] {\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\theight: 0.9rem;\n\t-ms-flex-align: center;\n\t align-items: center;\n}\n.col1[data-v-3a0a054e] {\n -ms-flex: 1;\n flex: 1;\n\ttext-align: left;\n\tpadding-left: 0.2rem;\n}\n.col2[data-v-3a0a054e], .col3[data-v-3a0a054e] {\n width: 1.1rem;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center;\n}\n.col4[data-v-3a0a054e] {\n width: 0.5rem;\n\theight: 100%;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-ms-flex-pack: center;\n\t justify-content: center;\n\t-ms-flex-align: center;\n\t align-items: center;\n}\n.contentStart[data-v-3a0a054e] {\n -ms-flex-pack: start;\n justify-content: flex-start;\n}\n.signContainer[data-v-3a0a054e] {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n line-height: 15px;\n font-size: 15px;\n -ms-flex-pack: center;\n justify-content: center;\n}\n.sign[data-v-3a0a054e] {\n height: 12px;\n line-height: 12px;\n margin-left: 3px;\n}\n.countValue[data-v-3a0a054e] {\n height: 12px;\n line-height: 12px;\n font-size: 12px;\n}\n.row[data-v-3a0a054e]:nth-child(even) {\n\tbackground: #f9f9fb;\n}\n.gray[data-v-3a0a054e] {\n color: gray;\n}\n.up[data-v-3a0a054e] {\n\tcolor: rgb(0, 154, 91);\n}\n.down[data-v-3a0a054e] {\n\tcolor: rgb(205, 0, 1);\n}\n.fall[data-v-3a0a054e] {\n background-image: url(../assets/images/ic_fall@2x.png);\n background-repeat: no-repeat;\n background-size: 100% 100%;\n width: 0.2rem;\n}\n.rise[data-v-3a0a054e] {\n background-image: url(../assets/images/ic_rise@2x.png);\n background-repeat: no-repeat;\n background-size: 100% 100%;\n width: 0.2rem;\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/CommonTable.vue","\n.satis-info-container[data-v-ad998582] {\n background-color: white;\n}\n.group-info[data-v-ad998582] {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n margin-left: 0.2rem;\n margin-right: 0.2rem;\n height: 0.9rem;\n border-bottom: 1px solid #ebeff3;\n -ms-flex-pack: justify;\n justify-content: space-between;\n}\n.group-info div[data-v-ad998582] {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n}\n.current-item-info[data-v-ad998582] {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: row;\n flex-direction: row;\n min-height: 2rem;\n -ms-flex-align: center;\n align-items: center;\n}\n.current-month[data-v-ad998582] {\n -ms-flex: 1;\n flex: 1;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.current-month span[data-v-ad998582]:nth-child(2) {\n font-size: 0.6rem;\n font-weight: bold;\n height: 0.6rem;\n color: #0e1721;\n}\n.gradient-line[data-v-ad998582] {\n -ms-flex: 0;\n flex: 0;\n width: 1px;\n min-height: 2rem;\n background: linear-gradient(rgba(245, 245, 247, 0), rgb(245, 245, 247), rgba(245, 245, 247, 0));\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/SatisfactionInfo.vue","\n.datetime[data-v-53783e00] {\n background: white;\n height: 0.9rem;\n min-height: 0.9rem;\n font-weight: bold;\n font-size: 14px;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n padding-left: 0.2rem;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/DateTime.vue","\n.container[data-v-7847a428] {\n height: 100%;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.tab-container[data-v-7847a428] {\n display: -ms-flexbox;\n display: flex;\n min-height: 0.9rem;\n height: 0.9rem;\n}\n.tab[data-v-7847a428] {\n\t-ms-flex: 1;\n\t flex: 1;\n font-size: 14px;\n cursor: pointer;\n border-bottom: solid #ebeff3 1px;\n height: 0.9rem;\n}\n.tabSelected[data-v-7847a428] {\n color: #cd3d3d;\n border-bottom: solid #cd3d3d 3px;\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/screen/GroupSatisfaction.vue","/*\r\n 框架 全局 基础样式\r\n ** 可写在这 **\r\n */\r\n\r\n* {\r\n list-style: none;\r\n font-family: 'Avenir', Helvetica, Arial, sans-serif;\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n text-align: center;\r\n color: #2c3e50;\r\n}\r\n\r\n*:not(input,textarea) {\r\n -webkit-touch-callout: none;\r\n -webkit-user-select: none;\r\n -khtml-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n}\r\n\r\nul,\r\nli,\r\ndiv,\r\nspan,\r\nem,\r\na,\r\ni {\r\n -webkit-touch-callout: none;\r\n -webkit-user-select: none;\r\n -khtml-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n}\r\n\r\nbody, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, input, textarea, p, blockquote, th, td{margin:0;padding:0;}\r\nfieldset, img, input, textarea{border:0;}\r\naddress, caption, cite, code, dfn, em, th, var{font-style:normal; font-weight:normal;}\r\nol, ul{list-style:none;}\r\nh1, h2, h3, h4, h5, h6{font-size:100%; font-weight:normal;}\r\nhtml,body{-webkit-user-select:none;-moz-user-select:none;user-select:none;height:100%;}\r\n\r\na:active,\r\na:hover {\r\n text-decoration: underline;\r\n}\r\n\r\na,img{-webkit-touch-callout:none}\r\nimg{ width: 100%; vertical-align:middle;}\r\n\r\nol,\r\nul {\r\n margin: 0;\r\n}\r\n\r\ninput {\r\n outline: none;\r\n border: 0;\r\n}\r\n\r\nbutton {\r\n border: 0;\r\n margin: 0;\r\n padding: 0;\r\n}\r\n\r\nbody {\r\n font-size: 16px;\r\n background: #f3f5f6;\r\n -webkit-overflow-scrolling: touch;\r\n}\r\n\r\na {\r\n text-decoration: none;\r\n}\r\n\r\na,button,input,textarea{\r\n -webkit-tap-highlight-color: rgba(0,0,0,0);\r\n outline:0;\r\n}\r\n\r\n\r\n.flex {\r\n display: flex;\r\n display: -webkit-flex;\r\n}\r\n/* 排列方法 row=从左到右,column=从上到下 */\r\n/* wrap=换行排列 */\r\n.flex-flow-r-w {\r\n flex-flow: row wrap;\r\n}\r\n.flex-flow-c-n {\r\n flex-flow: column nowrap;\r\n}\r\n.flex-flow-c-w {\r\n flex-flow: column wrap;\r\n}\r\n.flex-in {\r\n display: -webkit-flex;\r\n display: inline-flex;\r\n}\r\n.flex-wrap {\r\n flex-wrap: wrap;\r\n}\r\n.flex-wrap-r {\r\n flex-wrap: wrap-reverse;\r\n}\r\n.flex-l {\r\n align-items: flex-start;\r\n}\r\n.flex-l-l {\r\n justify-content: flex-start;\r\n}\r\n.flex-c {\r\n align-items: center;\r\n}\r\n.flex-c-c {\r\n justify-content: center;\r\n}\r\n.flex-r {\r\n align-items: flex-end;\r\n}\r\n.flex-r-r {\r\n justify-content: flex-end;\r\n}\r\n.flex-item-gsb-1 {\r\n flex: 1 1 auto;\r\n}\r\n.flex-item-gsb-0 {\r\n flex: 0 0 auto;\r\n}\r\n/* 元素左对齐布局 */\r\n.flex-self-l {\r\n align-self: flex-start;\r\n}\r\n/* 元素中间齐布局 */\r\n.flex-self-c {\r\n align-self: center;\r\n}\r\n/* 元素右对齐布局 */\r\n.flex-self-r {\r\n align-self: flex-end;\r\n}\r\n/* 子元素换行布局 */\r\n.flex-dir-column {\r\n flex-direction: column;\r\n}\r\n\r\n.pl-li-del {\r\n width: 0.4rem;\r\n height: 0.4rem;\r\n background: url(../images/ic_cancel_selected@2x.png) no-repeat center/80%;\r\n}\r\n\r\n/* 自适应 */\r\n@media screen and (max-width: 10000px) {\r\n html {\r\n font-size: 100px;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 750px) {\r\n html {\r\n font-size: 100px;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 720px) {\r\n html {\r\n font-size: 96px;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 414px) {\r\n html {\r\n font-size: 55.2px;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 412px) {\r\n html {\r\n font-size: 54.933333px;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 384px) {\r\n html {\r\n font-size: 51.2px;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 375px) {\r\n html {\r\n font-size: 50px;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 360px) {\r\n html {\r\n font-size: 48px;\r\n }\r\n}\r\n\r\n@media screen and (max-width: 320px) {\r\n html {\r\n font-size: 42.66667px;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/assets/css/base.css",".page-out-enter-active,\n.page-out-leave-active,\n.page-in-enter-active,\n.page-in-leave-active {\n will-change: transform;\n transition: all 500ms;\n height: 100%;\n width: 100%;\n top: 0;\n position: absolute;\n backface-visibility: visible;\n perspective: 1000;\n}\n\n/* 页面退出动画效果 */\n.page-out-enter {\n opacity: 0;\n transform: translate3d(-100%, 0, 0);\n -webkit-transform: translate3d(-100%, 0, 0);\n}\n\n.page-out-enter-to {\n opacity: 1;\n}\n\n.page-out-leave-active {\n opacity: 0.5;\n transform: translate3d(100%, 0, 0);\n -webkit-transform: translate3d(100%, 0, 0);\n}\n\n\n/* 页面进入动画效果 */\n.page-in-enter {\n transform: translate3d(100%, 0, 0);\n -webkit-transform: translate3d(100%, 0, 0);\n}\n\n.page-in-enter-to {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n}\n\n.page-in-leave-active {\n opacity: 0.5;\n}\n\n.list-out-enter-active,\n.list-out-leave-active,\n.list-in-enter-active,\n.list-in-leave-active {\n will-change: transform;\n transition: all 300ms;\n width: 100%;\n backface-visibility: visible;\n perspective: 1000;\n}\n/* 页面进入动画效果 */\n.list-in-enter {\n transform: translate3d(100%, 0, 0);\n -webkit-transform: translate3d(100%, 0, 0);\n}\n\n.list-in-enter-to {\n -webkit-transform: translateX(0);\n transform: translateX(0);\n}\n\n.list-in-leave-active {\n opacity: 0;\n transform: translate3d(100%, 0, 0);\n -webkit-transform: translate3d(100%, 0, 0);\n}\n\n/* 页面退出动画效果 */\n.list-out-enter {\n opacity: 1;\n background-color: #0e1721;\n}\n\n.list-out-enter-to {\n opacity: 1;\n background-color: red;\n transform: translate3d(100%, 0, 0);\n -webkit-transform: translate3d(100%, 0, 0);\n}\n\n.list-out-leave-active {\n background-color: blue;\n opacity: 1;\n}\n\n.margin-left-normal {\n margin-left: 0.2rem;\n}\n.padding-left-normal {\n padding-left: 0.2rem;\n}\n\n.margin-bottom-normal {\n margin-bottom: 0.2rem;\n}\n\n.margin-top-normal {\n margin-top: 0.2rem;\n}\n\n.flexCenter {\n align-items: center;\n}\n\n.flexStart {\n align-items: flex-start;\n}\n\n.flexEnd {\n align-items: flex-end;\n}\n\n.textLeft {\n text-align: left;\n}\n\n.textRight {\n text-align: right;\n}\n\n.textCenter {\n text-align: center;\n}\n\n.flex-1 {\n flex: 1;\n}\n\n.right-arrow {\n background-image: url(../images/ic_arrow_left@2x.png);\n background-repeat: no-repeat;\n background-size: 100% 100%;\n width: 0.4rem;\n height: 0.4rem;\n}\n\n.top3-rank {\n background-image: url(../images/bg_ranking@2x.png);\n background-repeat: no-repeat;\n background-size: 100% 100%;\n width: 0.4rem;\n height: 0.48rem;\n line-height: 0.48rem;\n}\n\n.after3-rank {\n background-color: #474f5a;\n border-radius: 3px;\n width: 0.4rem;\n height: 0.4rem;\n line-height: 0.4rem;\n}\n\n.infoIcon {\n background-image: url(../images/ic_explain@2x.png);\n background-repeat: no-repeat;\n background-size: 100% 100%;\n width: 0.4rem;\n height: 0.4rem;\n}\n\n.alignLeft {\n text-align: left;\n}\n\n.fontColor1 {\n color: #6b6f7b;\n}\n\n.fontColor2 {\n color: #333333;\n}\n\n.fontColor3 {\n color: #cd0001;\n}\n\n.fontColor4 {\n color: #0e1721;\n}\n\n.fontColor5 {\n color: #cd3d3d;\n}\n\n.white {\n background: white;\n}\n\n.bgColor1 {\n background-color: #cd3d3d;\n}\n\n.bgColor2 {\n background-color: white;\n}\n\n.bgColor3 {\n background-color: #f9f9fb;\n}\n\n.bgColor4 {\n background-color: #cd3d3d;\n}\n\n.font14 {\n font-size: 14px;\n}\n\n.visibility {\n visibility: visible;\n}\n\n.inVisibility {\n display: none;\n}\n\n.hidden {\n visibility: hidden;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/assets/css/app.css","\n.list-container[data-v-7f20d94e] {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n overflow: auto;\n -ms-flex: 1;\n flex: 1;\n}\n.list-chart[data-v-7f20d94e] {\n display: -ms-flexbox;\n display: flex;\n -ms-flex: 1;\n flex: 1;\n overflow-x: hidden;\n}\n.decimal[data-v-7f20d94e] {\n list-style-type: decimal;\n overflow-y: auto;\n -ms-flex: 1;\n flex: 1;\n width: 100%;\n}\n.chart[data-v-7f20d94e] {\n overflow-y: auto;\n width: 100%;\n -ms-flex: 1;\n flex: 1;\n}\nli[data-v-7f20d94e] {\n display: -ms-flexbox;\n display: flex;\n margin: auto 0.2rem;\n padding-left: 0.1rem;\n height: 0.9rem;\n -ms-flex-align: center;\n align-items: center;\n cursor: pointer;\n font-size: 14px;\n}\nli[data-v-7f20d94e]:nth-child(even) {\n background: #f9f9fb;\n}\n.rank[data-v-7f20d94e] {\n color: white;\n margin-right: 0.1rem;\n text-align: center;\n -ms-flex-align: center;\n align-items: center;\n vertical-align: middle;\n}\n.orgName[data-v-7f20d94e] {\n -ms-flex: 1;\n flex: 1;\n text-align: left;\n}\nbutton[data-v-7f20d94e] {\n border-radius: 3px;\n width: 40%;\n height: 100%;\n background: #f3f4f7;\n color: #6b6f7b;\n}\n.buttonSelected[data-v-7f20d94e] {\n background: #cd3d3d;\n color: white;\n}\n.bottom-tab[data-v-7f20d94e] {\n margin: 0 0.2rem;\n border-top: 1px solid #ebeff3;\n height: 0.6rem;\n padding: 0.2rem 0;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: distribute;\n justify-content: space-around;\n -ms-flex-align: center;\n align-items: center;\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/CommonList.vue","\n.tab-container[data-v-5661caf0] {\n display: -ms-flexbox;\n display: flex;\n min-height: 0.9rem;\n height: 0.9rem;\n}\n.tab[data-v-5661caf0] {\n\t-ms-flex: 1;\n\t flex: 1;\n font-size: 14px;\n cursor: pointer;\n border-bottom: solid #ebeff3 1px;\n height: 0.9rem;\n}\n.tabSelected[data-v-5661caf0] {\n color: #cd3d3d;\n border-bottom: solid #cd3d3d 3px;\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/screen/AreaSatisfaction.vue","\n.tab-container[data-v-7d8e6766] {\n display: -ms-flexbox;\n display: flex;\n min-height: 0.9rem;\n height: 0.9rem;\n}\n.tab[data-v-7d8e6766] {\n\t-ms-flex: 1;\n\t flex: 1;\n font-size: 14px;\n cursor: pointer;\n border-bottom: solid #ebeff3 1px;\n height: 0.9rem;\n}\n.tabSelected[data-v-7d8e6766] {\n color: #cd3d3d;\n border-bottom: solid #cd3d3d 3px;\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/screen/CitySatisfaction.vue","\n.title-bar[data-v-46b53100] {\n background: #CD3D3D;\n height: 1rem;\n min-height: 1rem;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center;\n -ms-flex-align: center;\n align-items: center;\n}\n.title-bar span[data-v-46b53100] {\n color: white;\n vertical-align: center;\n}\n.back[data-v-46b53100] {\n position: absolute;\n left: 0px;\n padding-left: 0.2rem;\n padding-right: 0.2rem;\n height: 1rem;\n line-height: 1rem;\n}\n.back img[data-v-46b53100] {\n width: 0.5rem;\n height: 0.5rem;\n}\n.title[data-v-46b53100] {\n font-size: 20px;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/TitleBar.vue","\n.base-page[data-v-02503e36] {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n height: 100%;\n background-color: rgb(245, 245, 247);\n}\n.title-bar[data-v-02503e36] {\n position: fixed;\n top: 0;\n width: 100%;\n z-index: 999;\n}\n.main[data-v-02503e36] {\n margin-top: 1rem;\n overflow: auto;\n -ms-flex: 1;\n flex: 1;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/BasePage.vue","\n.loading[data-v-673f16e7] {\n position: fixed;\n width: 30vw;\n height: 30vw;\n z-index: 9999;\n background: rgba(0, 0, 0, 0.7);\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n vertical-align: middle;\n text-align: center;\n}\n.weui-toast[data-v-673f16e7] {\n position: fixed;\n width: 7.6em;\n min-height: 7.6em;\n top: calc(50% - 7.6em / 2.0);\n left: 50%;\n margin-left: -3.8em;\n background: rgba(17,17,17,0.7);\n text-align: center;\n border-radius: 5px;\n color: #FFFFFF;\n}\n.weui-toast__content[data-v-673f16e7] {\n margin: 0 0 15px;\n color: #FFFFFF;\n}\n.vux-loading .weui-toast[data-v-673f16e7] {\n z-index: 999;\n}\n.weui-icon_toast.weui-loading[data-v-673f16e7] {\n margin: 30px 0 0;\n width: 38px;\n height: 38px;\n vertical-align: baseline;\n display: inline-block;\n}\n.vux-mask-enter[data-v-673f16e7], .vux-mask-leave-active[data-v-673f16e7],\n.vux-mask-leave-active[data-v-673f16e7], .vux-mask-enter-active[data-v-673f16e7] {\n position: relative;\n z-index: 1;\n}\n.vux-mask-enter[data-v-673f16e7], .vux-mask-leave-active[data-v-673f16e7] {\n opacity: 0;\n}\n.vux-mask-leave-active[data-v-673f16e7], .vux-mask-enter-active[data-v-673f16e7] {\n transition: opacity 300ms;\n}\n.vux-loading-no-text .weui-toast[data-v-673f16e7] {\n min-height: 98px;\n}\n.weui-mask[data-v-673f16e7] {\n position: fixed;\n z-index: 1000;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n background: rgba(0, 0, 0, .6);\n}\n/** 透明遮罩层 预留顶部标题栏高度,阻止页面上下滚动 */\n.weui-mask_transparent[data-v-673f16e7]{\n position: fixed;\n z-index: 1000;\n top: 1rem;\n right: 0;\n left: 0;\n bottom: 0;\n}\n.weui-loading[data-v-673f16e7] {\n width: 20px;\n height: 20px;\n display: inline-block;\n vertical-align: middle;\n animation: weuiLoading-data-v-673f16e7 1s steps(12, end) infinite;\n background: transparent url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=\") no-repeat;\n background-size: 100%;\n}\n.weui-loading.weui-loading_transparent[data-v-673f16e7]{\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxMjAnIGhlaWdodD0nMTIwJyB2aWV3Qm94PScwIDAgMTAwIDEwMCc+PHBhdGggZmlsbD0nbm9uZScgZD0nTTAgMGgxMDB2MTAwSDB6Jy8+PHJlY3QgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjU2KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgwIC0zMCknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjUpJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKDMwIDEwNS45OCA2NSknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjQzKScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSg2MCA3NS45OCA2NSknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjM4KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSg5MCA2NSA2NSknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjMyKScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgxMjAgNTguNjYgNjUpJy8+PHJlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC4yOCknIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoMTUwIDU0LjAyIDY1KScvPjxyZWN0IHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyB4PSc0Ni41JyB5PSc0MCcgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwuMjUpJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKDE4MCA1MCA2NSknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjIpJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKC0xNTAgNDUuOTggNjUpJy8+PHJlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC4xNyknIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoLTEyMCA0MS4zNCA2NSknLz48cmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjE0KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgtOTAgMzUgNjUpJy8+PHJlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC4xKScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgtNjAgMjQuMDIgNjUpJy8+PHJlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC4wMyknIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoLTMwIC01Ljk4IDY1KScvPjwvc3ZnPgo=\");\n}\n@keyframes weuiLoading-data-v-673f16e7 {\n0% {\n transform: rotate3d(0, 0, 1, 0deg);\n}\n100% {\n transform: rotate3d(0, 0, 1, 360deg);\n}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Loading.vue",".picker-mask {position:fixed;z-index:1000;top:0;left:0;width:100%;height:100%;background-color:rgba(0, 0, 0, .46);}\n@-webkit-keyframes pickerShow {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes pickerShow {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n.picker-mask.time-picker-ani {-webkit-animation:pickerShow .2s linear;animation:pickerShow .2s linear;}\n\n.picker-container {position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);width:280px;opacity:1;font-family:'PingFang SC', 'HanHei SC', 'Helvetica Neue', 'Helvetica', sans-serif;line-height:1.5;background-color:#fff;box-shadow:0 0 10px rgba(0, 0, 0, .8);-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;}\n.picker-container i {font-style:normal;}\n.picker-container [data-active] {position:relative;}\n.picker-container [data-active]:after,\n.picker-container .picker-disabled.active:after {content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background-image:-webkit-radial-gradient(circle, #000000 10%, transparent 10.01%);background-image:-o-radial-gradient(circle, #000000 10%, transparent 10.01%);background-image:radial-gradient(circle, #000000 10%, transparent 10.01%);background-repeat:no-repeat;background-position:50%;pointer-events:none;-webkit-background-size:0% 0%;background-size:0% 0%;opacity:0;-webkit-transition:background .5s, opacity 1s;transition: background .5s, opacity 1s;}\n.picker-container .active:after {-webkit-background-size:1000% 1000%;background-size:1000% 1000%;opacity:0.2;}\n.picker-container .picker-disabled {color:#d6d6d6;}\n\n.picker-head {padding:10px 16px;line-height:1.5;color:#ececec;background-color:#00bcd4;}\n.picker-head-active {color:#fff;}\n.picker-year {font-size:14px;width:4em;}\n.picker-date {font-size:24px;text-indent:-2px;}\n.picker-content {position:relative;overflow:hidden;width:100%;height:224px;font-size:12px;color:rgba(0, 0, 0, 0.8);}\n.picker-content ul,\n.picker-content li {list-style:none;margin:0;padding:0;}\n\n.date-picker-main {width:100%;-webkit-transform:translateX(-100%) translateZ(0);transform:translateX(-100%) translateZ(0);}\n.date-picker-main:after {content:\"\";display:table;clear:both;}\n\n.scroller-picker-main {position:relative;text-align:center;}\n.scroller-picker-main li {padding:10px 0;overflow:hidden;}\n.scroller-picker-main .picker-active {color:#00bcd4;}\n.scroller-picker-midd {position:absolute;top:50%;width:100%;height:40px;margin-top:-20px;-webkit-box-sizing:border-box;box-sizing:border-box;}\n.scroller-picker-midd:before,\n.scroller-picker-midd:after {content:\"\";position:absolute;left:0;width:100%;border-top:1px solid #e2e3e5;}\n.scroller-picker-midd:before {top:0;-webkit-transform:scaleY(.5) translateZ(0);-webkit-transform-origin:left top;transform-origin:left top;transform:scaleY(.5) translateZ(0);}\n.scroller-picker-midd:after {bottom:0;-webkit-transform:scaleY(.5) translateZ(0);-webkit-transform-origin:left bottom;transform-origin:left bottom;transform:scaleY(.5) translateZ(0);}\n\n.picker-actions-arrow {z-index:1;position:absolute;top:0;left:8px;right:8px;font-size:14px;line-height:20px;}\n.picker-actions-arrow i {cursor:pointer;float:left;padding:16px 14px;}\n.picker-actions-arrow i:last-child {float:right;}\n.picker-actions-arrow i[data-active]:after {height:42px;top:50%;-webkit-transform:translate(0, -50%);transform:translate(0, -50%);border-radius:50%;}\n\n.picker-bdy {float:left;width:100%;padding:0 8px;margin-right:-100%;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;}\n.picker-bdy-curr {left:100%;}\n.picker-bdy-next {left:200%;}\n\n.date-picker-title {text-align:center;padding:16px;font-size:14px;font-weight:800;line-height:20px;}\n\n.date-picker-days {/*padding-bottom:8px;*/}\n.date-picker-days i {position:relative;width:14.28%;height:12px;padding:6px 0;text-align:center;display:inline-block;line-height:1;vertical-align:top;cursor:pointer;overflow:hidden;}\n.date-picker-days i[data-active]:after {width:24px;left:50%;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);border-radius:50%;}\n\n.date-picker-days-bdy i span {position:relative;}\n.date-picker-days-bdy i:before {content:\"\";left:50%;top:50%;width:0;height:0;position:absolute;border-radius:50%;background-color:#00bcd4;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);}\n/*.date-picker-days-bdy i:hover,*/\n.picker-bdy-curr .date-picker-days-bdy i.picker-active {color:#fff;}\n/*.date-picker-days-bdy i:hover:before,*/\n.picker-bdy-curr .date-picker-days-bdy i.picker-active:before {width:24px;height:24px;}\n/*.date-picker-days-bdy i:hover:before {transition:all .2s;}*/\n.date-picker-days-bdy .picker-now {color:#00bcd4;}\n\n.date-picker-days-title {font-weight:500;}\n.date-picker-days-bdy i[data-val=\"0\"] {color:transparent;}\n.date-picker-days-bdy i[data-val=\"0\"]:before {content:none;}\n\n.picker-foot {padding:6px 10px;text-align:right;color:#393939;}\n.picker-act {padding:5px 15px;margin-left:10px;text-decoration:none;display:inline-block;font-size:14px;font-weight:600;color:inherit;background-color:transparent;border-radius:2px;-webkit-transition:background-color .2s linear;transition:background-color .2s linear;}\n.picker-act:hover {background-color:rgba(153, 153, 153, 0.2);}\n.picker-act-clear {margin-left:0;float:left;}\n\n.time-picker-container .picker-head {text-align:center;font-size:38px;font-weight:300;}\n/*.time-picker-container .picker-content {height:200px;}*/\n.time-picker-container .picker-cell {margin-left:-20px;}\n.time-picker-container .picker-cell[data-active]:after {width:30px;height:30px;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);border-radius:50%;}\n.time-picker-container .picker-cell-inner {margin-left:-12px;}\n.time-picker-container .picker-active {z-index:1;color:#fff;pointer-events:none;}\n.time-picker-container .picker-active b {position:absolute;left:50%;top:50%;margin-top:-1px;margin-left:-1px;width:2px;height:2px;background-color:#fff;border-radius:50%;}\n\n.time-picker-main {position:absolute;top:50%;left:50%;height:200px;width:200px;-webkit-transform:translate3d(-50%, -50%, 0);transform:translate3d(-50%, -50%, 0);border-radius:50%;background-color:rgba(0, 0, 0, 0.05);}\n.time-picker-main > ul {position:absolute;top:1px;right:1px;bottom:1px;left:1px;}\n.time-picker-main:before {content:\"\";position:absolute;top:50%;left:50%;width:8px;height:8px;border-radius:50%;background-color:rgba(0, 188, 212, 0.9);-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);}\n\n.time-picker-main-minutes > .time-picker-minutes-1 {top:10px;right:10px;bottom:10px;left:10px;}\n.time-picker-minutes-1 .picker-cell {width:6px;margin-left:-3px;margin-top:-6px;-webkit-transform-origin:50% 96px;transform-origin:50% 96px;}\n.time-picker-minutes-1 .picker-cell i {margin-top:-3px;}\n.time-picker-minutes-1 .picker-active b {margin-top:-4px;}\n\n.time-picker-minutes-10 .picker-cell {width:80px;margin-left:-40px;}\n\n.picker-hour, .picker-minute {display:inline-block;width:46px;}\n.picker-hour[data-active]:after, .picker-minute[data-active]:after {height:46px;top:5px;}\n.picker-hour {text-align:right;}\n.picker-minute {text-align:left;}\n.picker-cell {position:absolute!important;top:0;left:50%;width:40px;height:28px;-webkit-transform-origin:50% 99px;transform-origin:50% 99px;-webkit-transition:all .2s;transition:all .2s;}\n.picker-cell i {position:absolute;top:50%;left:50%;pointer-events:none;}\n.picker-cell-inner {top:30px;width:24px;height:24px;-webkit-transform-origin:50% 69px;transform-origin:50% 69px;}\n\n.time-picker-line {position:absolute;top:99px;left:100px;width:70px;height:2px;pointer-events:none;background-color:rgba(0, 188, 212, 0.9);-webkit-transform-origin:0 50%;transform-origin:0 50%;-webkit-transition:all .2s;transition:all .2s;}\n.time-picker-line:before {content:\"\";position:absolute;left:100%;top:0;margin-top:-14px;width:30px;height:30px;background-color:rgba(0, 188, 212, 0.9);border-radius:50%;}\n.time-picker-line-inner {width:42px;}\n\n\n\n// WEBPACK FOOTER //\n// ./~/date-time-picker/src/css/index.css"],"sourceRoot":""}
\ No newline at end of file
webpackJsonp([1],{1e3:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"base-page"},[n("title-bar",{attrs:{title:t.title}}),t._v(" "),n("loading",{ref:"loading",attrs:{show:this.$store.state.showLoading}}),t._v(" "),n("div",{staticClass:"main"},[t._t("default")],2)],1)},staticRenderFns:[]}},1001:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"table-container white"},[n("div",{ref:"theader",staticClass:"table-header"},[n("span",{staticClass:"col1 fontColor2"},[t._v("指标名称")]),t._v(" "),n("span",{staticClass:"col2 fontColor2 textCenter"},[t._v("本月")]),t._v(" "),n("span",{staticClass:"col3 fontColor2 textCenter"},[t._v("累计")]),t._v(" "),n("span",{staticClass:"col4 fontColor2"})]),t._v(" "),n("div",{ref:"tbody",staticClass:"table-body"},t._l(t.list,function(e,a){return n("div",{key:a,staticClass:"row"},[n("span",{staticClass:"fontColor1 font14 col1"},[t._v(t._s(e.indicatorName))]),t._v(" "),n("div",{staticClass:"col2"},[n("span",{class:[parseFloat(e.thisMonthNum)?"textRight":"flexCenter","fontColor1","font14","flex-1"]},[t._v(t._s(e.thisMonthNum))]),t._v(" "),n("div",{class:[parseFloat(e.thisMonthCountValue)?"left contentStart":"flexCenter","signContainer","flex-1"]},[n("span",{class:[e.thisMonthCountValue>0?"rise":e.thisMonthCountValue<0?"fall":"","sign"]}),t._v(" "),n("span",{class:[e.thisMonthCountValue>0?"up":e.thisMonthCountValue<0?"down":"fontColor1 font14","countValue"]},[t._v(t._s(t.formatCountValue(e.thisMonthCountValue)))])])]),t._v(" "),n("div",{staticClass:"col3"},[n("span",{class:[parseFloat(e.totalNum)?"textRight":"flexCenter","fontColor1","font14","flex-1"]},[t._v(t._s(e.totalNum))]),t._v(" "),n("div",{class:[parseFloat(e.thisMonthCountValue)?"left contentStart":"flexCenter","signContainer","flex-1"]},[n("span",{class:[e.totalCountValue>0?"rise":e.totalCountValue<0?"fall":"","sign"]}),t._v(" "),n("span",{class:[e.totalCountValue>0?"up":e.totalCountValue<0?"down":"fontColor1 font14","countValue"]},[t._v(t._s(t.formatCountValue(e.totalCountValue)))])])]),t._v(" "),n("div",{staticClass:"col4"},[0!=e.remark?n("span",{staticClass:"infoIcon",on:{click:function(n){t.alertTip(e.remark)}}}):t._e()])])}))])},staticRenderFns:[]}},1002:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("page",{attrs:{title:t.title}},[n("date-time",{staticClass:"datetime",attrs:{date:t.currentMonth}}),t._v(" "),n("satisfaction-info",{staticClass:"margin-top-normal margin-bottom-normal",attrs:{lastYearBenchmarking:t.lastYearBenchmarking,groupAccumulative:t.groupAccumulative,satisfactionThisMonth:t.satisfactionThisMonth,groupSatisfactionTotal:t.groupSatisfactionTotal}}),t._v(" "),n("index-table",{attrs:{list:t.currentTwoIndicators,type:t.type}})],1)},staticRenderFns:[]}},1003:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"title-bar"},[t.isShowBack?n("span",{staticClass:"back",on:{click:t.back}},[n("img",{attrs:{src:t.backIcon}})]):t._e(),t._v(" "),n("span",{staticClass:"title"},[t._v(t._s(t.title))])])},staticRenderFns:[]}},1004:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"datetime"},[n("span",{staticClass:"fontColor2"},[t._v(t._s(t.date))])])},staticRenderFns:[]}},1005:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("page",{attrs:{title:this.currentOrgName}},[n("date-time",{staticClass:"datetime",attrs:{date:t.currentMonth}}),t._v(" "),n("satisfaction-info",{staticClass:"margin-top-normal margin-bottom-normal",attrs:{lastYearBenchmarking:t.lastYearBenchmarking,groupAccumulative:t.groupAccumulative,satisfactionThisMonth:t.satisfactionThisMonth,groupSatisfactionTotal:t.groupSatisfactionTotal}}),t._v(" "),n("div",{staticClass:"tab-container"},[n("button",{class:["tab","white",{tabSelected:"list"==t.currentTab}],on:{click:function(e){t.currentTab="list"}}},[t._v("\n "+t._s(t.listTab)+"\n ")]),t._v(" "),n("button",{class:["tab","white",{tabSelected:"table"==t.currentTab}],on:{click:function(e){t.currentTab="table"}}},[t._v("\n "+t._s(t.tableTab)+"\n ")])]),t._v(" "),n("keep-alive",[n(t.currentTabComponent,{tag:"component",attrs:{type:t.type,list:t.getCurrentList,mode:t.currentListMode},on:{"enter-next-page":t.enterNextPage}})],1)],1)},staticRenderFns:[]}},1006:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement;return(t._self._c||e)("div",{ref:"sortchart",attrs:{id:"sortchart"}})},staticRenderFns:[]}},1007:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{attrs:{id:"app"}},[n("transition",{attrs:{name:this.$router.isBack?"page-out":"page-in"}},[n("router-view")],1)],1)},staticRenderFns:[]}},1008:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("transition",{attrs:{name:t.transition}},[n("div",{directives:[{name:"show",rawName:"v-show",value:t.show,expression:"show"}],staticClass:"weui-loading_toast vux-loading",class:t.text?"":"vux-loading-no-text"},[n("div",{staticClass:"weui-mask_transparent"}),t._v(" "),n("div",{staticClass:"weui-toast",style:{position:t.position}},[n("i",{staticClass:"weui-loading weui-icon_toast"}),t._v(" "),t.text?n("p",{staticClass:"weui-toast__content"},[t._v(t._s(t.text||"loading"))]):t._e()])])])},staticRenderFns:[]}},1009:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"container"},[n("title-bar",{attrs:{title:t.title,isShowBack:this.$vPlusModule,backHandle:t.backHandle}}),t._v(" "),n("date-time",{staticClass:"datetime",attrs:{date:t.currentMonth}}),t._v(" "),n("satisfaction-info",{staticClass:"margin-top-normal margin-bottom-normal",attrs:{lastYearBenchmarking:t.lastYearBenchmarking,satisfactionThisMonth:t.satisfactionThisMonth,groupSatisfactionTotal:t.groupSatisfactionTotal}}),t._v(" "),n("div",{staticClass:"tab-container"},[n("button",{class:["tab","white",{tabSelected:"list"==t.currentTab}],on:{click:function(e){t.currentTab="list"}}},[t._v("\n "+t._s(t.listTab)+"\n ")]),t._v(" "),n("button",{class:["tab","white",{tabSelected:"table"==t.currentTab}],on:{click:function(e){t.currentTab="table"}}},[t._v("\n "+t._s(t.tableTab)+"\n ")])]),t._v(" "),n("keep-alive",[n(t.currentTabComponent,{tag:"component",attrs:{type:t.type,list:t.getCurrentList,mode:t.currentListMode},on:{"enter-next-page":t.enterNextPage}})],1)],1)},staticRenderFns:[]}},101:function(t,e,n){"use strict";n.d(e,"b",function(){return a}),n.d(e,"f",function(){return i}),n.d(e,"d",function(){return o}),n.d(e,"a",function(){return r}),n.d(e,"c",function(){return s}),n.d(e,"e",function(){return c});var a="navigator",i="system",o="userInteraction",r="dataInteraction",s="account",c="geoLocation"},1010:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("page",{attrs:{title:this.currentOrgName}},[n("date-time",{staticClass:"datetime",attrs:{date:t.currentMonth}}),t._v(" "),n("satisfaction-info",{staticClass:"margin-top-normal margin-bottom-normal",attrs:{lastYearBenchmarking:t.lastYearBenchmarking,groupAccumulative:t.groupAccumulative,satisfactionThisMonth:t.satisfactionThisMonth,groupSatisfactionTotal:t.groupSatisfactionTotal}}),t._v(" "),n("div",{staticClass:"tab-container"},[n("button",{class:["tab","white",{tabSelected:"list"==t.currentTab}],on:{click:function(e){t.currentTab="list"}}},[t._v("\n "+t._s(t.listTab)+"\n ")]),t._v(" "),n("button",{class:["tab","white",{tabSelected:"table"==t.currentTab}],on:{click:function(e){t.currentTab="table"}}},[t._v("\n "+t._s(t.tableTab)+"\n ")])]),t._v(" "),n("keep-alive",[n(t.currentTabComponent,{tag:"component",attrs:{type:t.type,list:t.getCurrentList,mode:t.currentListMode},on:{"enter-next-page":t.enterNextPage}})],1)],1)},staticRenderFns:[]}},1011:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"list-container white"},[n("div",{ref:"listChartContainer",staticClass:"list-chart"},["list"==t.currentMode?n("ul",{class:["decimal"]},t._l(t.currentList,function(e,a){return n("li",{key:a,on:{click:function(n){t.itemClickHandle(e)}}},[n("span",{staticClass:"rank",class:{"top3-rank":e.rank<4,"after3-rank":e.rank>3}},[t._v(t._s(e.rank))]),t._v(" "),n("span",{staticClass:"orgName"},[t._v(t._s(e.orgName))]),t._v(" "),n("span",[t._v(t._s(e.orgAccount)+"分")]),t._v(" "),n("span",{staticClass:"right-arrow"})])})):t._e(),t._v(" "),n("transition",{attrs:{name:"list-in"}},[n("keep-alive",{key:"chart"},["chart"==t.currentMode?n("sort-chart",{key:"chart",class:["chart"],attrs:{height:t.height,list:t.list,type:t.type},on:{"chart-item-click":t.itemClickHandle}}):t._e()],1)],1)],1),t._v(" "),n("div",{staticClass:"bottom-tab"},[n("button",{class:[{buttonSelected:"list"==t.currentMode}],attrs:{type:"button"},on:{click:function(e){t.changeMode("list")}}},[t._v("列表模式")]),t._v(" "),n("button",{class:[{buttonSelected:"chart"==t.currentMode}],attrs:{type:"button"},on:{click:function(e){t.changeMode("chart")}}},[t._v("图表模式")])])])},staticRenderFns:[]}},1012:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"satis-info-container"},[n("div",{staticClass:"group-info"},[n("div",[n("span",{staticClass:"fontColor1"},[t._v("去年标杆满意度")]),t._v(" "),n("span",{staticClass:"fontColor3 margin-left-normal"},[t._v(t._s(t.lastYearBenchmarking))])]),t._v(" "),t.groupAccumulative?n("div",[n("span",{staticClass:"fontColor1"},[t._v("集团累计满意度")]),t._v(" "),n("span",{staticClass:"fontColor3 margin-left-normal"},[t._v(t._s(t.groupAccumulative))])]):t._e()]),t._v(" "),n("div",{staticClass:"current-item-info"},[n("div",{staticClass:"current-month"},[n("span",{staticClass:"fontColor1"},[t._v("本月满意度")]),t._v(" "),n("span",{staticClass:"fontColor4"},[t._v(t._s(t.satisfactionThisMonth))])]),t._v(" "),n("div",{staticClass:"gradient-line"}),t._v(" "),n("div",{staticClass:"current-month"},[n("span",{staticClass:"fontColor1"},[t._v("累计满意度")]),t._v(" "),n("span",{staticClass:"fontColor4"},[t._v(t._s(t.groupSatisfactionTotal))])])])])},staticRenderFns:[]}},1015:function(t,e,n){function a(t){n(989)}var i=n(33)(n(440),n(1007),a,"data-v-5f795eed",null);t.exports=i.exports},1016:function(t,e,n){function a(t){n(983)}var i=n(33)(n(441),n(1e3),a,"data-v-02503e36",null);t.exports=i.exports},1017:function(t,e,n){var a=n(33)(n(443),n(1006),null,null,null);t.exports=a.exports},1018:function(t,e,n){function a(t){n(990)}var i=n(33)(n(446),n(1008),a,"data-v-673f16e7",null);t.exports=i.exports},1019:function(t,e,n){function a(t){n(986)}var i=n(33)(n(448),n(1003),a,"data-v-46b53100",null);t.exports=i.exports},102:function(t,e,n){"use strict";var a=n(54),i=n.n(a),o=n(55),r=n.n(o),s=function(){function t(e){i()(this,t),this.nativeApi=e}return r()(t,[{key:"log",value:function(){this.nativeApi.log()}},{key:"debugLog",value:function(){this.nativeApi.debugLog()}},{key:"error",value:function(){this.nativeApi.error()}},{key:"info",value:function(){this.nativeApi.info()}},{key:"warn",value:function(){this.nativeApi.warn()}},{key:"nativeApi",get:function(){return this._nativeApi},set:function(t){this._nativeApi=t}},{key:"config",get:function(){return this.nativeApi.config}},{key:"debug",get:function(){return this.nativeApi.debug}},{key:"platform",get:function(){return this.nativeApi.platform}},{key:"ready",get:function(){return this.nativeApi.ready}}],[{key:"moduleName",get:function(){return""}}]),t}();e.a=s},1020:function(t,e,n){function a(t){n(988)}var i=n(33)(n(449),n(1005),a,"data-v-5661caf0",null);t.exports=i.exports},1021:function(t,e,n){function a(t){n(992)}var i=n(33)(n(450),n(1010),a,"data-v-7d8e6766",null);t.exports=i.exports},1022:function(t,e,n){function a(t){n(991)}var i=n(33)(n(451),n(1009),a,"data-v-7847a428",null);t.exports=i.exports},1023:function(t,e,n){function a(t){n(985)}var i=n(33)(n(452),n(1002),a,"data-v-3ad6a846",null);t.exports=i.exports},1062:function(t,e,n){n(399),t.exports=n(398)},179:function(t,e,n){function a(t){n(984)}var i=n(33)(n(444),n(1001),a,"data-v-3a0a054e",null);t.exports=i.exports},180:function(t,e,n){function a(t){n(987)}var i=n(33)(n(445),n(1004),a,"data-v-53783e00",null);t.exports=i.exports},181:function(t,e,n){function a(t){n(994)}var i=n(33)(n(447),n(1012),a,"data-v-ad998582",null);t.exports=i.exports},248:function(t,e,n){function a(t){n(993)}var i=n(33)(n(442),n(1011),a,"data-v-7f20d94e",null);t.exports=i.exports},262:function(t,e,n){"use strict";function a(){var t=void 0;return function(e){return e&&(t=e),t}}function i(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"log";if(e){var a=window.console||{},i=a[n]||a.log,o=[],r=t.length;if(r>0&&"number"==typeof t[0])o=t;else for(var s=0;s<r;s++)o.push(t[s]),0===s&&r>1?o.push("=>"):s<r-1&&o.push(",");i.apply(a,o)}}n.d(e,"a",function(){return h}),e.b=a,e.c=i;var o=n(143),r=n.n(o),s=n(103),c=n.n(s),u=n(142),l=n.n(u),h=function(){var t=l()(r.a.mark(function t(e){return r.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",new c.a(function(t,n){setTimeout(function(){t()},e)}));case 1:case"end":return t.stop()}},t,this)}));return function(e){return t.apply(this,arguments)}}()},263:function(t,e,n){"use strict";var a=function(t,e){var n=t;navigator.notification.alert(n,e,"","确定")},i=function(t,e){var n=t;navigator.notification.confirm(n,function(t){e(1==t?!0:!1)},"",["确定","取消"])};e.a={Alert:a,Confirm:i}},264:function(t,e,n){"use strict";var a={},i={Host:"http://csm.cndrealty.com/csm/staticfactionReport",TestHost:"http://csmtest.cndrealty.com/csm/staticfactionReport",LogOut:"loginout",GroupSatisfaction:"/getGroupSatisfaction",OverallSatisfaction:"/getOverAllSatisfaction",GroupSatisfactionAvg:"/getGroupSatisfactionAvg",TwoIndicators:"/getTwoIndicators",HouseSituation:"/getHouseSituation",RoomData:"/getRoomData",ProjectInfoToRoom:"/getProjectInfoToRoom",ProjectInfoToRisk:"/getProjectInfoRisk"};for(var o in i)if(i.hasOwnProperty(o)){var r=o.toUpperCase();a[r]=i[o]}e.a=a},398:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=n(118),i=n.n(a),o=n(247),r=n(1015),s=n.n(r),c=n(433),u=n(439),l=n(1019),h=n.n(l),f=n(1016),d=n.n(f),p=n(141),m=n.n(p),v=n(431),g=n(263),A=n(417);m.a.defaults.baseURL=v.a.HOST,o.a.prototype.$axios=m.a,o.a.prototype.getViewportSize=function(){return{width:window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,height:window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight}},o.a.use(A.a,i()({debug:!0,maxRetryTimes:10,retrySleepTime:100})),o.a.prototype.$vPlusModule=!1,o.a.config.productionTip=!1,o.a.component("title-bar",h.a),o.a.component("page",d.a),o.a.prototype.$dialog=g.a;var y=void 0;document.addEventListener("deviceready",function(){y=new o.a({el:"#app",router:c.a,store:u.a,render:function(t){return t(s.a)}})}),e.default=y},417:function(t,e,n){"use strict";var a=n(419);e.a={install:function(t,e){var i=n.i(a.a)(e);t.$nativeApi=i,t.prototype.$nativeApi=i}}},418:function(t,e,n){"use strict";var a=n(143),i=n.n(a),o=n(142),r=n.n(o),s=n(103),c=n.n(s),u=n(75),l=n.n(u),h=n(54),f=n.n(h),d=n(55),p=n.n(d),m=n(78),v=n.n(m),g=n(77),A=n.n(g),y=n(427),M=n(262),b={MIDEA_COMMON:"MideaCommon",MIDEA_USER:"MideaUser",MIDEA_BARCODE:"MideaBarcode",MIDEA_MAP:"MideaMap",MIDEA_ANNTO:"MideaAnnto",MIDEA_SALE:"MideaSale"},k=function(t){function e(t){f()(this,e),t=t||{},t.platform="cordova";var n=v()(this,(e.__proto__||l()(e)).call(this,t));if("undefined"!=typeof window&&void 0!==window.document){var a=n;if(!window.document.getElementById("cordovaJS")){var i=window.document.createElement("script");i.id="cordovaJS",i.src="cordova.js",i.type="text/javascript",i.async=!1,i.onload=function(){console.log("Loading Cordova Plugin..."),window.document.addEventListener("deviceready",function(){a.doReady(a)},!1)},i.onerror=function(){console.error("Cannot Load Cordova Plugin!")},window.document.body.appendChild(i)}}return n}return A()(e,t),p()(e,[{key:"callApi",value:function(t,e,a){var o=this;return o.log(t,e,a),new c.a(function(s,c){r()(i.a.mark(function r(){var u;return i.a.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:u=0;case 1:if(!(u<o.maxRetryTimes)){i.next=13;break}if(o.ready&&window.cordova){i.next=10;break}if(u!==o.maxRetryTimes-1){i.next=7;break}c("Cordova is not ready, no retry"),i.next=10;break;case 7:return i.next=9,n.i(M.a)(o.retrySleepTime*(u+1));case 9:console.error("Cordova is not ready, retry later");case 10:u++,i.next=1;break;case 13:try{window.cordova.exec(function(t){s(t)},function(t){c(t)},t,e,a||[])}catch(t){c(t)}case 14:case"end":return i.stop()}},r,this)}))()})}},{key:"methods",set:function(t){this._methods=t},get:function(){return this._methods}},{key:"moduleNames",get:function(){return b}}]),e}(y.a);e.a=k},419:function(t,e,n){"use strict";var a=n(418),i=n(424),o=n(422),r=n(425),s=n(421),c=n(423),u=n(420);e.a=function(t){return new a.a(t).setModules(i.a,o.a,r.a,s.a,c.a,u.a)}},420:function(t,e,n){"use strict";var a=n(75),i=n.n(a),o=n(54),r=n.n(o),s=n(55),c=n.n(s),u=n(78),l=n.n(u),h=n(77),f=n.n(h),d=n(101),p=n(102),m=function(t){function e(){return r()(this,e),l()(this,(e.__proto__||i()(e)).apply(this,arguments))}return f()(e,t),c()(e,[{key:"getH5Info",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"getH5Info",t)}},{key:"saveH5Info",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"saveH5Info",t)}},{key:"getMessageUnread",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"getMessageUnread",t)}},{key:"getExtra",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"getExtra",t)}},{key:"getDeviceInfo",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"getDeviceInfo",t)}}],[{key:"moduleName",get:function(){return d.a}}]),e}(p.a);e.a=m},421:function(t,e,n){"use strict";var a=n(75),i=n.n(a),o=n(54),r=n.n(o),s=n(55),c=n.n(s),u=n(78),l=n.n(u),h=n(77),f=n.n(h),d=n(101),p=n(102),m=function(t){function e(){return r()(this,e),l()(this,(e.__proto__||i()(e)).apply(this,arguments))}return f()(e,t),c()(e,[{key:"getUser",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_USER,"getUser",t)}},{key:"isLogin",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_USER,"isLogin",t)}},{key:"logout",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_USER,"logout",t)}},{key:"authPassword",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_USER,"authPassword",t)}},{key:"getUserPassword",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_USER,"getUserPassword",t)}},{key:"toLogin",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_USER,"toLogin",t)}}],[{key:"moduleName",get:function(){return d.c}}]),e}(p.a);e.a=m},422:function(t,e,n){"use strict";var a=n(75),i=n.n(a),o=n(54),r=n.n(o),s=n(55),c=n.n(s),u=n(78),l=n.n(u),h=n(77),f=n.n(h),d=n(101),p=n(102),m=function(t){function e(){return r()(this,e),l()(this,(e.__proto__||i()(e)).apply(this,arguments))}return f()(e,t),c()(e,[{key:"startUpdatingLocation",value:function(t){return this.nativeApi.callApi("MideaMap","startUpdatingLocation",t)}},{key:"stopUpdatingLocation",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_MAP,"stopUpdatingLocation",t)}},{key:"getPois",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_MAP,"getPois",t)}},{key:"location",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_MAP,"location",t)}},{key:"selectWidget",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_MAP,"selectWidget",t)}},{key:"navToWithFrom",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_MAP,"navToWithFrom",t)}}],[{key:"moduleName",get:function(){return d.e}}]),e}(p.a);e.a=m},423:function(t,e,n){"use strict";var a=n(75),i=n.n(a),o=n(54),r=n.n(o),s=n(55),c=n.n(s),u=n(78),l=n.n(u),h=n(77),f=n.n(h),d=n(101),p=n(102),m=function(t){function e(){return r()(this,e),l()(this,(e.__proto__||i()(e)).apply(this,arguments))}return f()(e,t),c()(e,[{key:"showSetView",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"showSetView",t)}},{key:"showMyView",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"showMyView",t)}},{key:"showAppView",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"showAppView",t)}},{key:"startApp",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"startApp",t)}},{key:"vcard",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_USER,"vcard",t)}},{key:"showWidget",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"showWidget",t)}},{key:"selectWidget",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"selectWidget",t)}},{key:"exit",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"exit",t)}},{key:"openSysBrowser",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"openSysBrowser",t)}}],[{key:"moduleName",get:function(){return d.b}}]),e}(p.a);e.a=m},424:function(t,e,n){"use strict";var a=n(75),i=n.n(a),o=n(54),r=n.n(o),s=n(55),c=n.n(s),u=n(78),l=n.n(u),h=n(77),f=n.n(h),d=n(101),p=n(102),m=function(t){function e(){return r()(this,e),l()(this,(e.__proto__||i()(e)).apply(this,arguments))}return f()(e,t),c()(e,[{key:"getContact",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_USER,"getContact",t)}},{key:"language",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"language",t)}},{key:"showNav",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"showNav",t)}},{key:"hideNav",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"hideNav",t)}},{key:"showMenu",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"showMenu",t)}},{key:"showInput",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"showInput",t)}},{key:"hideInput",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"hideInput",t)}},{key:"toggleInput",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"toggleInput",t)}},{key:"showFloat",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"showFloat",t)}},{key:"hideFloat",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"hideFloat",t)}},{key:"statusBarColor",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"statusBarColor",t)}},{key:"statusBarStyle",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"statusContentStyle",t)}},{key:"copy",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"copy",t)}},{key:"paste",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"paste",t)}},{key:"apk",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"apk",t)}},{key:"callPhone",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"callPhone",t)}},{key:"webview",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"webview",t)}},{key:"getBase64s",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"getBase64s",t)}},{key:"scan",value:function(t){return this.nativeApi.callApi("MideaBarcode","scan",t)}},{key:"onEvent",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"onEvent",t)}},{key:"setBounces",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"setBounces",t)}}],[{key:"moduleName",get:function(){return d.f}}]),e}(p.a);e.a=m},425:function(t,e,n){"use strict";var a=n(75),i=n.n(a),o=n(54),r=n.n(o),s=n(55),c=n.n(s),u=n(78),l=n.n(u),h=n(77),f=n.n(h),d=n(101),p=n(102),m=function(t){function e(){return r()(this,e),l()(this,(e.__proto__||i()(e)).apply(this,arguments))}return f()(e,t),c()(e,[{key:"orientation",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"orientation",t)}},{key:"shake",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"shake",t)}},{key:"shakeStop",value:function(t){return this.nativeApi.callApi(this.nativeApi.moduleNames.MIDEA_COMMON,"shakeStop",t)}}],[{key:"moduleName",get:function(){return d.d}}]),e}(p.a);e.a=m},426:function(t,e,n){"use strict";function a(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=new Error;throw n.message=t,e&&(n.name=e),n}e.a=a},427:function(t,e,n){"use strict";var a=n(54),i=n.n(a),o=n(55),r=n.n(o),s=n(262),c=n(426),u=n.i(s.b)(),l=function(){function t(e){if(i()(this,t),u())return u();this.config=e,u(this)}return r()(t,[{key:"doReady",value:function(t){t.ready=!0}},{key:"setModule",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.moduleName||t.name;if(!e){var a=t.toString(),i=a.match(/class\s+(.*?)\s+[\S\s]*\{/i),o=a.match(/function\s+(.*?)\s*\(.*?\)[\S\s]*\{/i);e=i&&i.length>1?i[1]:o&&o.length>1?o[1]:""}return e=e?e.slice(0,1).toLowerCase()+e.slice(1):"",console.log(e),(!e||e.length<=3)&&n.i(c.a)("Cannot found Module Name: "+e+"\n"+t.toString(),"MissedModule"),this.addModuleName(e),this[e]=new t(this),this}},{key:"setModules",value:function(){for(var t=arguments.length,e=t>0?arguments:[],n=0;n<t;n++)this.setModule(e[n]);return this}},{key:"addModuleName",value:function(t){var e=this.moduleList;e.push(t),this.moduleList=e}},{key:"log",value:function(){n.i(s.c)(arguments,this.debug,"log")}},{key:"debugLog",value:function(){n.i(s.c)(arguments,this.debug,"debug")}},{key:"error",value:function(){n.i(s.c)(arguments,this.debug,"error")}},{key:"info",value:function(){n.i(s.c)(arguments,this.debug,"info")}},{key:"warn",value:function(){n.i(s.c)(arguments,this.debug,"warn")}},{key:"config",get:function(){return this._config||{}},set:function(t){this._config=t}},{key:"debug",get:function(){return this.config.debug||!1}},{key:"platform",get:function(){return this.config.platform||"native"}},{key:"maxRetryTimes",get:function(){return"number"==typeof this.config.maxRetryTimes?this.config.maxRetryTimes:5}},{key:"retrySleepTime",get:function(){return"number"==typeof this.config.retrySleepTime?this.config.retrySleepTime:100}},{key:"ready",get:function(){return this.config.ready||!1},set:function(t){this.config.ready=t}},{key:"moduleList",set:function(t){this.config.moduleList=t},get:function(){return this.config.moduleList||[]}}]),t}();e.a=l},428:function(t,e,n){"use strict";var a=n(188);n.n(a)},429:function(t,e,n){"use strict";function a(){var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";this.encode=function(n){var a,i,o,r,s,c,u,l="",h=0;for(n=e(n);h<n.length;)a=n.charCodeAt(h++),i=n.charCodeAt(h++),o=n.charCodeAt(h++),r=a>>2,s=(3&a)<<4|i>>4,c=(15&i)<<2|o>>6,u=63&o,isNaN(i)?c=u=64:isNaN(o)&&(u=64),l=l+t.charAt(r)+t.charAt(s)+t.charAt(c)+t.charAt(u);return l},this.decode=function(e){var a,i,o,r,s,c,u,l="",h=0;for(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");h<e.length;)r=t.indexOf(e.charAt(h++)),s=t.indexOf(e.charAt(h++)),c=t.indexOf(e.charAt(h++)),u=t.indexOf(e.charAt(h++)),a=r<<2|s>>4,i=(15&s)<<4|c>>2,o=(3&c)<<6|u,l+=String.fromCharCode(a),64!=c&&(l+=String.fromCharCode(i)),64!=u&&(l+=String.fromCharCode(o));return l=n(l)};var e=function(t){t=t.replace(/\r\n/g,"\n");for(var e="",n=0;n<t.length;n++){var a=t.charCodeAt(n);a<128?e+=String.fromCharCode(a):a>127&&a<2048?(e+=String.fromCharCode(a>>6|192),e+=String.fromCharCode(63&a|128)):(e+=String.fromCharCode(a>>12|224),e+=String.fromCharCode(a>>6&63|128),e+=String.fromCharCode(63&a|128))}return e},n=function(t){for(var e="",n=0,a=0,i=0;n<t.length;)if((a=t.charCodeAt(n))<128)e+=String.fromCharCode(a),n++;else if(a>191&&a<224)i=t.charCodeAt(n+1),e+=String.fromCharCode((31&a)<<6|63&i),n+=2;else{i=t.charCodeAt(n+1);var o=t.charCodeAt(n+2);e+=String.fromCharCode((15&a)<<12|(63&i)<<6|63&o),n+=3}return e}}var i=new a;e.a=i},430:function(t,e,n){"use strict";function a(t){return 200===t.status?t.data:{code:-404,message:t.statusText,data:t.statusText}}function i(t){return new r.a(function(e,n){t.code!=g?n(t.message):e(t.data)})}n.d(e,"a",function(){return d}),n.d(e,"b",function(){return p}),n.d(e,"d",function(){return m}),n.d(e,"c",function(){return v});var o=n(103),r=n.n(o),s=n(143),c=n.n(s),u=n(142),l=n.n(u),h=n(264),f=n(434),d=function(){var t=l()(c.a.mark(function t(e){var o,r,s;return c.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return o=e.orgId,r=e.orgMonth,t.next=3,n.i(f.a)(h.a.GROUPSATISFACTION,{orgId:o,orgMonth:r});case 3:return s=t.sent,t.abrupt("return",i(a(s)));case 5:case"end":return t.stop()}},t,this)}));return function(e){return t.apply(this,arguments)}}(),p=function(){var t=l()(c.a.mark(function t(e){var o,r,s,u;return c.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return o=e.orgId,r=e.quotaCode,s=e.orgMonth,t.next=3,n.i(f.a)(h.a.OVERALLSATISFACTION,{orgId:o,quotaCode:r,orgMonth:s});case 3:return u=t.sent,t.abrupt("return",i(a(u)));case 5:case"end":return t.stop()}},t,this)}));return function(e){return t.apply(this,arguments)}}(),m=function(){var t=l()(c.a.mark(function t(e){var o,r,s;return c.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return o=e.orgId,r=e.orgMonth,t.next=3,n.i(f.a)(h.a.TWOINDICATORS,{orgId:o,orgMonth:r});case 3:return s=t.sent,t.abrupt("return",i(a(s)));case 5:case"end":return t.stop()}},t,this)}));return function(e){return t.apply(this,arguments)}}(),v=function(){var t=l()(c.a.mark(function t(e){var o,r,s;return c.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return o=e.orgId,r=e.orgMonth,t.next=3,n.i(f.a)(h.a.GROUPSATISFACTIONAVG,{orgId:o,orgMonth:r});case 3:return s=t.sent,t.abrupt("return",i(a(s)));case 5:case"end":return t.stop()}},t,this)}));return function(e){return t.apply(this,arguments)}}(),g=(function(){var t=l()(c.a.mark(function t(e){var o,r,s,u;return c.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return o=e.projectId,r=e.batchNum,s=e.userId,t.next=3,n.i(f.a)(h.a.HOUSESITUATION,{projectId:o,batchNum:r,userId:s});case 3:return u=t.sent,t.abrupt("return",i(a(u)));case 5:case"end":return t.stop()}},t,this)}))}(),function(){var t=l()(c.a.mark(function t(e){var o,r;return c.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return o=e.type,t.next=3,n.i(f.a)(h.a.ROOMDATA,{type:o});case 3:return r=t.sent,t.abrupt("return",i(a(r)));case 5:case"end":return t.stop()}},t,this)}))}(),function(){var t=l()(c.a.mark(function t(e){var o,r,s,u;return c.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return o=e.projectId,r=e.batchNum,s=e.type,t.next=3,n.i(f.a)(h.a.PROJECTINFOTOROOM,{projectId:o,batchNum:r,type:s});case 3:return u=t.sent,t.abrupt("return",i(a(u)));case 5:case"end":return t.stop()}},t,this)}))}(),function(){var t=l()(c.a.mark(function t(e){var o,r,s,u;return c.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return o=e.projectId,r=e.batchNum,s=e.orgId,t.next=3,n.i(f.a)(h.a.PROJECTINFOTORISK,{projectId:o,batchNum:r,orgId:s});case 3:return u=t.sent,t.abrupt("return",i(a(u)));case 5:case"end":return t.stop()}},t,this)}))}(),0)},431:function(t,e,n){"use strict";var a=(n(428),n(264)),i=(n(432),n(711));n.n(i);n.d(e,"a",function(){return a.a})},432:function(t,e,n){"use strict";var a=n(76),i=(n.n(a),n(141));n.n(i)},433:function(t,e,n){"use strict";var a=n(247),i=n(1013),o=n(1023),r=n.n(o),s=n(1022),c=n.n(s),u=n(1020),l=n.n(u),h=n(1021),f=n.n(h);a.a.use(i.a);var d=new i.a({routes:[{path:"/",name:"GroupSatisfaction",component:c.a},{path:"/areaSatisfaction",name:"AreaSatisfaction",component:l.a},{path:"/citySatisfaction",name:"CitySatisfaction",component:f.a},{path:"/projectSatisfaction",name:"ProjectSatisfaction",component:r.a}]});d.myHistory=[],i.a.prototype.isBack=!1,d.afterEach(function(t,e){-1==d.myHistory.indexOf(t.fullPath)?(d.isBack=!1,d.myHistory.push(t.fullPath)):d.myHistory[d.myHistory.length-1]==e.fullPath&&(d.isBack=!0,d.myHistory.pop())}),e.a=d},434:function(t,e,n){"use strict";function a(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new r.a(function(n,a){l()({method:"post",url:t,data:e,dataType:"json",headers:{"Content-Type":"application/json; charset=UTF-8"},cancelToken:new d(function(t){h=t})}).then(function(t){n(t)}).catch(function(t){a(i(t))})})}function i(t){var e=t;if("ECONNABORTED"==t.code)return e="请求超时!请检查网络连接是否正常!";if("操作取消"!=t.message&&t.response)switch(t.response.status){case 404:e="404错误!请检查url是否拼写正确!\n"+t.request.responseURL;break;case 400:e="请求错误(400)";break;case 401:e="未授权,请重新登录(401)";break;case 403:e="拒绝访问(403)";break;case 408:e="请求超时(408)";break;case 500:e="服务器错误(500)";break;case 501:e="服务未实现(501)";break;case 502:e="网络错误(502)";break;case 503:e="服务不可用(503)";break;case 504:e="网络超时(504)";break;case 505:e="HTTP版本不受支持(505)";break;default:e=t}return e}e.a=a;var o=n(103),r=n.n(o),s=n(188),c=n.n(s),u=n(141),l=n.n(u);l.a.defaults.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Basic c21zc2VydmljZXVzZXI6ZmRjVXNlcjY1NCNAIQ=="},l.a.defaults.timeout=6e4;var h=void 0,f={},d=l.a.CancelToken;l.a.interceptors.request.use(function(t){var e=c()(t.data),n=t.url+"?"+e;return f[n]?(f[n]("操作取消"),f[n]=h):f[n]=h,t},function(t){return r.a.reject(t)}),l.a.interceptors.response.use(function(t){return t},function(t){return r.a.reject(t)})},435:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),n.d(e,"getVUserInfo",function(){return l}),n.d(e,"getUserInfo",function(){return h}),n.d(e,"getHttpHost",function(){return f}),n.d(e,"getHttpHeadValue",function(){return d}),n.d(e,"clearVuexData",function(){return p});var a=n(188),i=n.n(a),o=n(103),r=n.n(o),s=n(429),c=n(141),u=n.n(c),l=function(t,e){var n=t.commit;return new r.a(function(t,a){var o=e.data,r=o.uname,c=o.pwd,l=o.host,h={username:r,password:s.a.encode(c)};u()({method:"post",url:l+"app/loginNew",data:h}).then(function(e){if(console.log("comein:"+i()(e.data)),200===e.data.status){var o=e.data.record,u="Basic "+s.a.encode(r+":"+c);n("getInfos",{data:{userInfo:o,host:l,header:u}}),t()}else a(e.data.exception)}).catch(function(t){console.log("fail:"+i()(t)),a(t)})})},h=function(t,e){var n=t.commit;return new r.a(function(t,a){cordova.exec(function(a){var i=JSON.parse(a);n("getInfo",{data:i,type:e.type}),t()},function(e){navigator.notification.alert(e),t()},"YFPlugin",e.type,[])})},f=function(t,e){var n=t.commit;return new r.a(function(t,a){cordova.exec(function(a){n("getInfo",{data:a,type:e.type}),t()},function(e){navigator.notification.alert(e),t()},"YFPlugin",e.type,[])})},d=function(t,e){var n=t.commit;return new r.a(function(t,a){cordova.exec(function(a){n("getInfo",{data:a,type:e.type}),t()},function(e){navigator.notification.alert(e),t()},"YFPlugin",e.type,[])})},p=function(t,e){var n=t.commit,a=t.state;n("reSetStateData",{userInfo:a.userInfo,HttpHeadValue:a.HttpHeadValue,HttpHost:a.HttpHost})}},436:function(t,e,n){"use strict";var a=n(143),i=n.n(a),o=n(142),r=n.n(o),s=n(430),c={type:"group",month:"",group:{info:{},list:[],table:[]},area:{info:{},list:[],table:[]},city:{info:{},list:[],table:[]},project:{info:{},list:[],table:[]},lastYearBenchmarking:"",groupAccumulative:"",groupMean:"",lastYearGroupMean:"",industryBenchmarking:""},u={satisfactionThisMonth:function(t){return t[t.type].info.monthSatisfaction?t[t.type].info.monthSatisfaction:""},benchmarkSatisfactionLastYear:function(t){return t[t.type].info.lastYearSatisfaction?t[t.type].info.lastYearSatisfaction:""},groupSatisfactionTotal:function(t){return t[t.type].info.totalSatisfaction?t[t.type].info.totalSatisfaction:""},currentList:function(t){return t[t.type].list},currentTwoIndicators:function(t){return t[t.type].table},month:function(t){return t.month},currentMonth:function(t){return 6==t.month.length?t.month.substring(0,4)+"年"+t.month.substring(4)+"月":t.month},lastYearBenchmarking:function(t){return t.lastYearBenchmarking},groupAccumulative:function(t){return t.groupAccumulative},groupMean:function(t){return t.groupMean},lastYearGroupMean:function(t){return t.lastYearGroupMean},industryBenchmarking:function(t){return t.industryBenchmarking},currentListMode:function(t){return t[t.type].listMode||"list"},currentOrgId:function(t){return t[t.type].orgId},currentOrgName:function(t){return t[t.type].orgName}},l={setMonth:function(t,e){(0,t.commit)("setMonth",e)},setParentItem:function(t,e){(0,t.commit)("setParentItem",e)},saveRouteParams:function(t,e){(0,t.commit)("saveRouteParams",e)},setListMode:function(t,e){(0,t.commit)("setListMode",e)},setSatisfactionType:function(t,e){(0,t.commit)("setSatisfactionType",e)},getGroupSatisfaction:function(t,e){var a=this,o=t.commit;return r()(i.a.mark(function t(){var r,c;return i.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,n.i(s.a)(e);case 2:r=t.sent,c=e.orgId,r instanceof Array&&r.length>0&&(o("setGroupSatisfaction",r[0]),""==c&&(o("setLastYearBenchmarking",r[0].lastYearSatisfaction),o("setGroupAccumulative",r[0].totalSatisfactionGroup)));case 5:case"end":return t.stop()}},t,a)}))()},getOverallSatisfaction:function(t,e){var a=this,o=t.commit;return r()(i.a.mark(function t(){var r;return i.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,n.i(s.b)(e);case 2:r=t.sent,r instanceof Array&&o("setGroupSatisfactionSortList",r);case 4:case"end":return t.stop()}},t,a)}))()},getGroupSatisfactionAvg:function(t,e){var a=this,o=t.commit;return r()(i.a.mark(function t(){var r;return i.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,n.i(s.c)(e);case 2:r=t.sent,r instanceof Array&&r.length>0&&(o("setGroupMean",r[0].totalSatisfaction),o("setLastYearGroupMean",r[0].lastYearSatisfactionGroup),o("setIndustryBenchmarking",r[0].lastYearSatisfactionSign));case 4:case"end":return t.stop()}},t,a)}))()},getTwoIndicators:function(t,e){var a=this,o=t.commit;return r()(i.a.mark(function t(){var r,c,u;return i.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,n.i(s.d)(e);case 2:r=t.sent,r&&r.monthList&&r.totalList&&r.monthList.length==r.totalList.length&&(c=[],r.monthList.map(function(t,e){c.push({rank:t.rank,indicatorName:t.indexName,thisMonthNum:t.indexValue,thisMonthCountValue:t.countValue,remark:t.remark,totalNum:r.totalList[e].indexValue,totalCountValue:r.totalList[e].countValue})}),u=function(t,e){return parseInt(t.rank)-parseInt(e.rank)},o("setTwoIndicators",c.sort(u)));case 4:case"end":return t.stop()}},t,a)}))()},resetByType:function(t,e){(0,t.commit)("resetByType")},reset:function(t){(0,t.commit)("resetState")}},h={setMonth:function(t,e){t.month=e},setParentItem:function(t,e){t[t.type].parent=e},saveRouteParams:function(t,e){var n=e.type,a=e.orgId,i=e.orgName,o=e.mode;t[n].orgId=a,t[n].orgName=i,t[n].listMode=o},setListMode:function(t,e){t[t.type].listMode=e},setSatisfactionType:function(t,e){t.type=e},setLastYearBenchmarking:function(t,e){t.lastYearBenchmarking=e},setGroupAccumulative:function(t,e){t.groupAccumulative=e},setGroupSatisfaction:function(t,e){t[t.type].info=e},setGroupSatisfactionSortList:function(t,e){t[t.type].list=e},setGroupMean:function(t,e){t.groupMean=e},setLastYearGroupMean:function(t,e){t.lastYearGroupMean=e},setIndustryBenchmarking:function(t,e){t.industryBenchmarking=e},setTwoIndicators:function(t,e){t[t.type].table=e},resetByType:function(t,e){t[e]={info:{},list:[],table:[]}},resetState:function(t){t.type="group",t.month="",t.group={info:{},list:[],table:[]},t.area={info:{},list:[],table:[]},t.city={info:{},list:[],table:[]},t.project={info:{},list:[],table:[]},t.lastYearBenchmarking="",t.groupAccumulative="",t.groupMean="",t.lastYearGroupMean="",t.industryBenchmarking=""}};e.a={namespaced:!0,state:c,getters:u,actions:l,mutations:h}},437:function(t,e,n){"use strict";var a=n(118),i=n.n(a);e.a={showLoading:function(t,e){t.showLoading=e},getInfo:function(t,e){switch(e.type){case"getUserInfo":t.userInfo=e.data;break;case"getHttpHeadValue":t.HttpHeadValue=e.data;break;case"getHttpHost":t.HttpHost=e.data}},getInfos:function(t,e){var n=e.data,a=n.userInfo,i=n.host,o=n.header;t.userInfo=a,t.HttpHost=i,t.HttpHeadValue=o},reSetStateData:function(t,e){i()(t,e)}}},438:function(t,e,n){"use strict";e.a={userInfo:null,HttpHeadValue:null,HttpHost:null,showLoading:!1}},439:function(t,e,n){"use strict";var a=n(247),i=n(115),o=n(435),r=n(437),s=n(438),c=n(436);a.a.use(i.a);a.a.config.debug=!1,e.a=new i.a.Store({modules:{satisfaction:c.a},state:s.a,mutations:r.a,actions:o,strict:!1})},440:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={name:"app",created:function(){console.log("当前环境:","production")}}},441:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=n(1018),i=n.n(a);e.default={name:"BasePage",props:["title"],components:{loading:i.a}}},442:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=n(76),i=n.n(a),o=n(118),r=n.n(o),s=n(1017),c=n.n(s);e.default={name:"CommonList",props:{type:{type:String,required:!0},mode:{type:String,default:"list",validator:function(t){return-1!==["list","chart"].indexOf(t)}},list:{type:Array,required:!0}},data:function(){return{currentMode:this.mode,height:0}},computed:{currentList:function(){var t=this,e=1;return this.list.map(function(n,a){return a>0&&Number(n.beforeOrgAccount)!==Number(t.list[a-1].beforeOrgAccount)&&(e=a+1),r()({},n,{rank:e})})}},methods:{itemClickHandle:function(t){this.$emit("enter-next-page",i()({},t,{mode:this.currentMode}))},changeMode:function(t){"list"==t?this.currentMode="list":"chart"==t&&(this.currentMode="chart"),this.$store.commit("satisfaction/setListMode",this.currentMode)}},components:{"sort-chart":c.a}}},443:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=n(118),i=n.n(a),o=n(76),r=n.n(o),s=n(719),c=(n.n(s),n(115));e.default={name:"SortChart",props:{type:{type:String,required:!0},list:{type:Array,required:!0}},data:function(){return{endValue:0}},mounted:function(){this.initChart()},watch:{list:function(t,e){this.updateChartData()}},computed:r()({},n.i(c.b)({groupMean:"satisfaction/groupMean",lastYearGroupMean:"satisfaction/lastYearGroupMean",industryBenchmarking:"satisfaction/industryBenchmarking"}),{dataSource:function(){return this.list.map(function(t,e){return i()({},t,{orgAccount:parseFloat(t.orgAccount)})})},minValue:function(){var t=0;return this.list.map(function(e,n){var a=parseFloat(e.orgAccount);0==n?t=a:e.orgAccount&&(t=Math.min(t,a))}),this.groupMean&&(t=Math.min(t,this.groupMean)),this.lastYearGroupMean&&(t=Math.min(t,this.lastYearGroupMean)),this.industryBenchmarking&&(t=Math.min(t,this.industryBenchmarking)),t=t>1?t-1:0},maxValue:function(){var t=0;return this.list.map(function(e,n){var a=parseFloat(e.orgAccount);0==n?t=a:e.orgAccount&&(t=Math.max(t,a))}),this.groupMean&&(t=Math.max(t,this.groupMean)),this.lastYearGroupMean&&(t=Math.max(t,this.lastYearGroupMean)),this.industryBenchmarking&&(t=Math.max(t,this.industryBenchmarking)),t=t+1>100?100:t+1}}),methods:{getLabelValue:function(t,e){return t+":"+e},chartOpt:function(){return{grid:{left:"5%",top:30,bottom:10,containLabel:!0},color:["#cd3d3d","#efb703","#0c73c2"],legend:{show:!0,top:5,left:"center",selectedMode:!1,data:[]},xAxis:{scale:!0,position:"top",splitLine:{show:!1},axisTick:{length:2},axisLine:{lineStyle:{color:"#f0f0f2"}},axisLabel:{color:"#708ca6"},min:0,max:10,splitNumber:8},yAxis:{type:"category",axisTick:{show:!1},axisLine:{show:!1},axisLabel:{interval:0,show:!0,color:"transparent",formatter:function(t,e){return t&&t.length>6?t.substring(0,6):t}},inverse:!0},dataZoom:{type:"inside",zoomLock:!0,startValue:0,orient:"vertical"},series:[{type:"bar",label:{show:!0,position:"left",color:"#6b6f7b",formatter:function(t){var e=t.data,n="";return n=e.orgName.length>6?e.orgName.substring(0,6)+"\n"+e.orgName.substring(6)+"\n":e.orgName+"\n",n+=e.orgAccount+"分"}},barWidth:36,barCategoryGap:10,color:"#4eceff",emphasis:{itemStyle:{color:"#4eceff"}}},{type:"line",name:"集团均值",id:"groupMean",lineStyle:{width:0},showSymbol:!1,markLine:{silent:!0,symbol:["",""],label:{show:!1},lineStyle:{type:"solid",color:"#cd3d3d"},data:[]}},{type:"line",name:"去年集团均值",id:"lastYearGroupMean",lineStyle:{width:0},showSymbol:!1,markLine:{silent:!0,symbol:["",""],label:{show:!1},lineStyle:{type:"solid",color:"#efb703"},data:[]}},{type:"line",name:"行业标杆",id:"industryBenchmarking",lineStyle:{width:0},showSymbol:!1,markLine:{silent:!0,symbol:["",""],label:{show:!1},lineStyle:{type:"solid",color:"#0c73c2"},data:[]}}]}},initChart:function(){this.$echart=s.init(this.$refs.sortchart),this.$echartHeight=this.$el.clientHeight,this.$echart.getZr().on("click",this.itemClick),this.$echart.setOption(this.chartOpt()),this.updateChartData()},itemClick:function(t){if(!(this.list.length<=0)){var e=-1;if(this.$echart.containPixel({seriesIndex:0},[t.event.zrX,t.event.zrY])){e=this.$echart.convertFromPixel({gridIndex:0},[t.event.zrX,t.event.zrY])[1],this.$echart.dispatchAction({type:"highlight",seriesIndex:0,dataIndex:e}),this.$emit("chart-item-click",this.list[e]),-1!=e&&this.$echart.dispatchAction({type:"downplay",seriesIndex:0,dataIndex:e})}}},resetChart:function(){this.$echart.clear(),this.$echart.setOption(this.chartOpt())},resizeChart:function(){var t=(this.$echartHeight-50)/56,e=this.dataSource.length;this.endValue=e>t?parseInt(t):e;var n=50+56*(e>t?t:e);this.$echart.setOption({xAxis:{min:this.minValue,max:this.maxValue},dataZoom:{endValue:this.endValue}}),1==e?(n=70,this.$echart.setOption({grid:{height:n},dataZoom:{endValue:0}})):this.$echart.resize({height:n})},updateChartData:function(){this.dataSource instanceof Array&&this.dataSource.length>0?(this.$echart.setOption({dataset:{dimensions:["orgName","orgAccount"],source:this.dataSource}}),this.addMarkLine(),this.resizeChart()):this.resetChart()},addMarkLine:function(){var t=[];this.groupMean&&(t.push({name:this.getLabelValue("集团均值",this.groupMean),icon:"line"}),this.$echart.setOption({series:[{},{name:this.getLabelValue("集团均值",this.groupMean),markLine:{data:[{name:"集团均值",xAxis:this.groupMean}]}}]})),this.lastYearGroupMean&&(t.push({name:this.getLabelValue("去年集团均值",this.lastYearGroupMean),icon:"line"}),this.$echart.setOption({series:[{},{},{name:this.getLabelValue("去年集团均值",this.lastYearGroupMean),markLine:{data:[{name:"去年集团均值",xAxis:this.lastYearGroupMean}]}}]})),this.industryBenchmarking&&(t.push({name:this.getLabelValue("行业标杆",this.industryBenchmarking),icon:"line"}),this.$echart.setOption({series:[{},{},{},{name:this.getLabelValue("行业标杆",this.industryBenchmarking),markLine:{data:[{name:"行业标杆",xAxis:this.industryBenchmarking}]}}]})),t.length>0&&this.$echart.setOption({legend:{data:t}})},getEndValue:function(){return this.endValue}}}},444:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=n(263);e.default={name:"CommonTable",props:{type:{type:String},list:{type:Array,required:!0}},created:function(){},mounted:function(){this.$refs.tbody.style.height=window.innerHeight-this.$el.offsetTop-this.$refs.theader.offsetHeight+"px"},watch:{list:function(t,e){this.$refs.tbody.style.height=window.innerHeight-this.$el.offsetTop-this.$refs.theader.offsetHeight+"px"}},methods:{alertTip:function(t){a.a.Alert(t,function(){})},formatCountValue:function(t){return parseInt(t)?Math.abs(t):t}}}},445:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={name:"DateTime",props:["date"]}},446:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={name:"loading",model:{prop:"show",event:"change"},props:{show:{type:Boolean,default:!0},text:{type:String,default:"加载中..."},position:{type:String,default:"fixed"},transition:{type:String,default:"vux-mask"}},watch:{show:function(t){this.$emit("update:show",t)}}}},447:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={name:"SatisfactionInfo",props:["lastYearBenchmarking","groupAccumulative","satisfactionThisMonth","groupSatisfactionTotal"]}},448:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=n(999),i=n.n(a);e.default={name:"TitleBar",props:{title:String,isShowBack:{type:Boolean,default:!0},backIcon:{type:String,default:i.a},backHandle:{type:Function}},methods:{back:function(){this.backHandle?this.backHandle():this.$router.back()}}}},449:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=n(76),i=n.n(a),o=n(115),r=n(248),s=n.n(r),c=n(179),u=n.n(c),l=n(181),h=n.n(l),f=n(180),d=n.n(f);e.default={name:"AreaSatisfaction",created:function(){this.setSatisfactionType(this.type),this.$router.isBack?this.$store.commit("satisfaction/resetByType","city"):this.fetchData()},data:function(){return{type:"area",currentTab:"list",listTab:"总体满意度排名(累计)",tableTab:"区域二级指标"}},computed:i()({},n.i(o.b)("satisfaction",["month","currentMonth","currentList","currentTwoIndicators","satisfactionThisMonth","benchmarkSatisfactionLastYear","groupSatisfactionTotal","lastYearBenchmarking","groupAccumulative","currentListMode","currentOrgId","currentOrgName"]),{currentTabComponent:function(){return"common-"+this.currentTab},getCurrentList:function(){return"list"==this.currentTab?this.currentList||[]:this.currentTwoIndicators||[]}}),components:{"satisfaction-info":h.a,"common-list":s.a,"common-table":u.a,"date-time":d.a},methods:i()({},n.i(o.c)("satisfaction",["getGroupSatisfaction","getOverallSatisfaction","getGroupSatisfactionAvg","getTwoIndicators","setSatisfactionType","saveRouteParams","setListMode"]),n.i(o.d)(["showLoading"]),{fetchData:function(){var t=this;this.showLoading(!0),this.$axios.all([this.getGroupSatisfaction({orgId:this.currentOrgId,orgMonth:this.month}),this.getOverallSatisfaction({orgId:this.currentOrgId,quotaCode:"",orgMonth:this.month}),this.getGroupSatisfactionAvg({orgId:"",orgMonth:this.month}),this.getTwoIndicators({orgId:this.currentOrgId,orgMonth:this.month})]).then(this.$axios.spread(function(){t.showLoading(!1)})).catch(function(e){t.showLoading(!1),t.$dialog.Alert(e,function(){})})},enterNextPage:function(t){var e=t.mode,n=t.orgId,a=t.orgName;this.saveRouteParams({type:"city",orgId:n,orgName:a,mode:e}),this.setListMode(e),this.$router.push({name:"CitySatisfaction",params:t})}})}},450:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=n(76),i=n.n(a),o=n(115),r=n(248),s=n.n(r),c=n(179),u=n.n(c),l=n(181),h=n.n(l),f=n(180),d=n.n(f);e.default={name:"AreaSatisfaction",created:function(){this.setSatisfactionType(this.type),this.$router.isBack?this.$store.commit("satisfaction/resetByType","project"):this.fetchData()},data:function(){return{type:"city",currentTab:"list",listTab:"总体满意度排名(累计)",tableTab:"城市二级指标"}},computed:i()({},n.i(o.b)("satisfaction",["month","currentMonth","currentList","currentTwoIndicators","satisfactionThisMonth","benchmarkSatisfactionLastYear","groupSatisfactionTotal","lastYearBenchmarking","groupAccumulative","currentListMode","currentOrgId","currentOrgName"]),{currentTabComponent:function(){return"common-"+this.currentTab},getCurrentList:function(){return"list"==this.currentTab?this.currentList||[]:this.currentTwoIndicators||[]}}),components:{"satisfaction-info":h.a,"common-list":s.a,"common-table":u.a,"date-time":d.a},methods:i()({},n.i(o.c)("satisfaction",["getGroupSatisfaction","getOverallSatisfaction","getGroupSatisfactionAvg","getTwoIndicators","setSatisfactionType","saveRouteParams","setListMode"]),n.i(o.d)(["showLoading"]),{fetchData:function(){var t=this;this.showLoading(!0),this.$axios.all([this.getGroupSatisfaction({orgId:this.currentOrgId,orgMonth:this.month}),this.getOverallSatisfaction({orgId:this.currentOrgId,quotaCode:"",orgMonth:this.month}),this.getGroupSatisfactionAvg({orgId:"",orgMonth:this.month}),this.getTwoIndicators({orgId:this.currentOrgId,orgMonth:this.month})]).then(this.$axios.spread(function(){t.showLoading(!1)})).catch(function(e){t.showLoading(!1),t.$dialog.Alert(e,function(){})})},enterNextPage:function(t){var e=t.mode,n=t.orgId,a=t.orgName;this.saveRouteParams({type:"project",orgId:n,orgName:a,mode:e}),this.setListMode(e),this.$router.push({name:"ProjectSatisfaction",params:t})}})}},451:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=n(76),i=n.n(a),o=n(982),r=(n.n(o),n(981)),s=(n.n(r),n(115)),c=n(248),u=n.n(c),l=n(179),h=n.n(l),f=n(181),d=n.n(f),p=n(180),m=n.n(p);e.default={name:"GroupSatisfaction",created:function(){console.log("is v+ module: "+this.$vPlusModule),this.setSatisfactionType(this.type),this.$router.isBack?this.$store.commit("satisfaction/resetByType","area"):(this.setMonth(this.getMonth),this.setListMode("list"),this.fetchData())},data:function(){return{title:"集团满意度",type:"group",orgId:"",currentTab:"list",listTab:"总体满意度排名(累计)",tableTab:"集团二级指标"}},computed:i()({},n.i(s.b)("satisfaction",["month","currentMonth","currentList","currentTwoIndicators","satisfactionThisMonth","benchmarkSatisfactionLastYear","groupSatisfactionTotal","lastYearBenchmarking","currentListMode"]),{getMonth:function(){var t=new Date,e=t.getMonth(),n=t.getFullYear();return 0==e&&(n-=1,e=12),n+""+(e<10?"0"+e:e)},currentTabComponent:function(){return"common-"+this.currentTab},getCurrentList:function(){return"list"==this.currentTab?this.currentList||[]:this.currentTwoIndicators||[]}}),components:{"satisfaction-info":d.a,"common-list":u.a,"common-table":h.a,"date-time":m.a},methods:i()({},n.i(s.c)("satisfaction",["setMonth","getGroupSatisfaction","getOverallSatisfaction","getGroupSatisfactionAvg","getTwoIndicators","setSatisfactionType","saveRouteParams","setListMode"]),n.i(s.d)(["showLoading"]),{fetchData:function(){var t=this;this.showLoading(!0),this.$axios.all([this.getGroupSatisfaction({orgId:this.orgId,orgMonth:this.getMonth}),this.getOverallSatisfaction({orgId:this.orgId,quotaCode:"",orgMonth:this.getMonth}),this.getGroupSatisfactionAvg({orgId:"",orgMonth:this.getMonth}),this.getTwoIndicators({orgId:this.orgId,orgMonth:this.getMonth})]).then(this.$axios.spread(function(){t.showLoading(!1)})).catch(function(e){t.showLoading(!1),t.$dialog.Alert(e,function(){})})},enterNextPage:function(t){var e=t.mode,n=t.orgId,a=t.orgName;this.saveRouteParams({type:"area",orgId:n,orgName:a,mode:e}),this.setListMode(e),this.$router.push({name:"AreaSatisfaction",params:t})},backHandle:function(){this.$vPlusModule?this.$nativeApi.navigator.exit():this.$router.back()}})}},452:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=n(76),i=n.n(a),o=n(115),r=n(179),s=n.n(r),c=n(181),u=n.n(c),l=n(180),h=n.n(l);e.default={name:"ProjectSatisfaction",created:function(){this.setSatisfactionType(this.type),this.fetchData()},data:function(){return{type:"project"}},computed:i()({},n.i(o.b)("satisfaction",["month","currentMonth","satisfactionThisMonth","benchmarkSatisfactionLastYear","groupSatisfactionTotal","lastYearBenchmarking","groupAccumulative","currentTwoIndicators"]),{title:function(){return this.$route.params.orgName},orgId:function(){return this.$route.params.orgId}}),methods:i()({},n.i(o.c)("satisfaction",["getGroupSatisfaction","getTwoIndicators","setSatisfactionType"]),n.i(o.d)(["showLoading"]),{fetchData:function(){var t=this;this.showLoading(!0),this.$axios.all([this.getGroupSatisfaction({orgId:this.orgId,orgMonth:this.month}),this.getTwoIndicators({orgId:this.orgId,orgMonth:this.month})]).then(this.$axios.spread(function(){t.showLoading(!1)})).catch(function(e){t.showLoading(!1),t.$dialog.Alert(e,function(){})})}}),components:{"satisfaction-info":u.a,"index-table":s.a,"date-time":h.a}}},980:function(t,e){},981:function(t,e){},982:function(t,e){},983:function(t,e){},984:function(t,e){},985:function(t,e){},986:function(t,e){},987:function(t,e){},988:function(t,e){},989:function(t,e){},990:function(t,e){},991:function(t,e){},992:function(t,e){},993:function(t,e){},994:function(t,e){},999:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY5OTk3MUUyODk3MTExRThBOERDQkZBN0RENjQ2NTAyIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjY5OTk3MUUzODk3MTExRThBOERDQkZBN0RENjQ2NTAyIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Njk5OTcxRTA4OTcxMTFFOEE4RENCRkE3REQ2NDY1MDIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Njk5OTcxRTE4OTcxMTFFOEE4RENCRkE3REQ2NDY1MDIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz58/7kYAAABHklEQVR42tzYvQrCMBQFYOvmoi/hqmsHNwdHBzcRwdUXFNHF1ccQBEFd1M0f4gl26Ng099zeGjg4pX5NS3pzE+dcw/JoKv/fEDkj66ITEsUVHCBbpIXckY6lFUyRVYZ7IfPCM/0KkpMiN/cbT2QcMt80jg2MxjGBIjgWUAzHAOZxH2Qae00mbiZxXSlcD7lK46SAHndh4CSAVFwskI6LAargygLVcGWAeZwfC3axEYNbKlRCQcCDNs4npGB9V3IoCbibLnK0/IgrQcZuM3SkxEZNRf7tp64WxUItyi06UvJxUJDSL7U4krE19CUPTxoH9yikVuvDIyfWgOabR7Vov0UjNVvAvsu6QdrII/s11UTfIyPkhOwsNtFLja8AAwAOeHfzcw5HuwAAAABJRU5ErkJggg=="}},[1062]);
//# sourceMappingURL=app.f6aed37b9c3087dc5100.js.map
\ No newline at end of file
This diff could not be displayed because it is too large.
!function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r=window.webpackJsonp;window.webpackJsonp=function(t,c,i){for(var u,a,f,s=0,l=[];s<t.length;s++)a=t[s],o[a]&&l.push(o[a][0]),o[a]=0;for(u in c)Object.prototype.hasOwnProperty.call(c,u)&&(e[u]=c[u]);for(r&&r(t,c,i);l.length;)l.shift()();if(i)for(s=0;s<i.length;s++)f=n(n.s=i[s]);return f};var t={},o={2:0};n.e=function(e){function r(){u.onerror=u.onload=null,clearTimeout(a);var n=o[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),o[e]=void 0)}var t=o[e];if(0===t)return new Promise(function(e){e()});if(t)return t[2];var c=new Promise(function(n,r){t=o[e]=[n,r]});t[2]=c;var i=document.getElementsByTagName("head")[0],u=document.createElement("script");u.type="text/javascript",u.charset="utf-8",u.async=!0,u.timeout=12e4,n.nc&&u.setAttribute("nonce",n.nc),u.src=n.p+"static/js/"+e+"."+{0:"ec3ecc7b129bd5a914c9",1:"f6aed37b9c3087dc5100"}[e]+".js";var a=setTimeout(r,12e4);return u.onerror=u.onload=r,i.appendChild(u),c},n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,r,t){n.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},n.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(r,"a",r),r},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n.oe=function(e){throw console.error(e),e}}([]);
//# sourceMappingURL=manifest.8326d7bec85bb0bbc184.js.map
\ No newline at end of file
{"version":3,"sources":["webpack:///static/js/manifest.8326d7bec85bb0bbc184.js","webpack:///webpack/bootstrap 43576fbfbf73348891c9"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","parentJsonpFunction","window","chunkIds","moreModules","executeModules","chunkId","result","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","shift","s","2","e","onScriptComplete","script","onerror","onload","clearTimeout","timeout","chunk","Error","undefined","installedChunkData","Promise","resolve","promise","reject","head","document","getElementsByTagName","createElement","type","charset","async","nc","setAttribute","src","p","0","1","setTimeout","appendChild","m","c","value","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","oe","err","console","error"],"mappings":"CAAS,SAAUA,GCuCnB,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAI,EAAAJ,EACAK,GAAA,EACAH,WAUA,OANAJ,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,GAGAI,EAAAE,GAAA,EAGAF,EAAAD,QA1DA,GAAAK,GAAAC,OAAA,YACAA,QAAA,sBAAAC,EAAAC,EAAAC,GAIA,IADA,GAAAX,GAAAY,EAAAC,EAAAT,EAAA,EAAAU,KACQV,EAAAK,EAAAM,OAAoBX,IAC5BQ,EAAAH,EAAAL,GACAY,EAAAJ,IACAE,EAAAG,KAAAD,EAAAJ,GAAA,IAEAI,EAAAJ,GAAA,CAEA,KAAAZ,IAAAU,GACAQ,OAAAC,UAAAC,eAAAd,KAAAI,EAAAV,KACAF,EAAAE,GAAAU,EAAAV,GAIA,KADAO,KAAAE,EAAAC,EAAAC,GACAG,EAAAC,QACAD,EAAAO,SAEA,IAAAV,EACA,IAAAP,EAAA,EAAYA,EAAAO,EAAAI,OAA2BX,IACvCS,EAAAd,IAAAuB,EAAAX,EAAAP,GAGA,OAAAS,GAIA,IAAAZ,MAGAe,GACAO,EAAA,EA6BAxB,GAAAyB,EAAA,SAAAZ,GA+BA,QAAAa,KAEAC,EAAAC,QAAAD,EAAAE,OAAA,KACAC,aAAAC,EACA,IAAAC,GAAAf,EAAAJ,EACA,KAAAmB,IACAA,GACAA,EAAA,MAAAC,OAAA,iBAAApB,EAAA,aAEAI,EAAAJ,OAAAqB,IAvCA,GAAAC,GAAAlB,EAAAJ,EACA,QAAAsB,EACA,UAAAC,SAAA,SAAAC,GAA0CA,KAI1C,IAAAF,EACA,MAAAA,GAAA,EAIA,IAAAG,GAAA,GAAAF,SAAA,SAAAC,EAAAE,GACAJ,EAAAlB,EAAAJ,IAAAwB,EAAAE,IAEAJ,GAAA,GAAAG,CAGA,IAAAE,GAAAC,SAAAC,qBAAA,WACAf,EAAAc,SAAAE,cAAA,SACAhB,GAAAiB,KAAA,kBACAjB,EAAAkB,QAAA,QACAlB,EAAAmB,OAAA,EACAnB,EAAAI,QAAA,KAEA/B,EAAA+C,IACApB,EAAAqB,aAAA,QAAAhD,EAAA+C,IAEApB,EAAAsB,IAAAjD,EAAAkD,EAAA,aAAArC,EAAA,KAAwEsC,EAAA,uBAAAC,EAAA,wBAAsDvC,GAAA,KAC9H,IAAAkB,GAAAsB,WAAA3B,EAAA,KAgBA,OAfAC,GAAAC,QAAAD,EAAAE,OAAAH,EAaAc,EAAAc,YAAA3B,GAEAW,GAIAtC,EAAAuD,EAAAxD,EAGAC,EAAAwD,EAAAtD,EAGAF,EAAAK,EAAA,SAAAoD,GAA2C,MAAAA,IAG3CzD,EAAA0D,EAAA,SAAAvD,EAAAwD,EAAAC,GACA5D,EAAA6D,EAAA1D,EAAAwD,IACAxC,OAAA2C,eAAA3D,EAAAwD,GACAI,cAAA,EACAC,YAAA,EACAC,IAAAL,KAMA5D,EAAAkE,EAAA,SAAA9D,GACA,GAAAwD,GAAAxD,KAAA+D,WACA,WAA2B,MAAA/D,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAJ,GAAA0D,EAAAE,EAAA,IAAAA,GACAA,GAIA5D,EAAA6D,EAAA,SAAAO,EAAAC,GAAsD,MAAAlD,QAAAC,UAAAC,eAAAd,KAAA6D,EAAAC,IAGtDrE,EAAAkD,EAAA,GAGAlD,EAAAsE,GAAA,SAAAC,GAA8D,KAApBC,SAAAC,MAAAF,GAAoBA","file":"static/js/manifest.8326d7bec85bb0bbc184.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// install a JSONP callback for chunk loading\n/******/ \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n/******/ \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n/******/ \t\t// add \"moreModules\" to the modules object,\n/******/ \t\t// then flag all \"chunkIds\" as loaded and fire callback\n/******/ \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n/******/ \t\tfor(;i < chunkIds.length; i++) {\n/******/ \t\t\tchunkId = chunkIds[i];\n/******/ \t\t\tif(installedChunks[chunkId]) {\n/******/ \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n/******/ \t\t\t}\n/******/ \t\t\tinstalledChunks[chunkId] = 0;\n/******/ \t\t}\n/******/ \t\tfor(moduleId in moreModules) {\n/******/ \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n/******/ \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n/******/ \t\twhile(resolves.length) {\n/******/ \t\t\tresolves.shift()();\n/******/ \t\t}\n/******/ \t\tif(executeModules) {\n/******/ \t\t\tfor(i=0; i < executeModules.length; i++) {\n/******/ \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\treturn result;\n/******/ \t};\n/******/\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// objects to store loaded and loading chunks\n/******/ \tvar installedChunks = {\n/******/ \t\t2: 0\n/******/ \t};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/ \t// This file contains only the entry chunk.\n/******/ \t// The chunk loading function for additional chunks\n/******/ \t__webpack_require__.e = function requireEnsure(chunkId) {\n/******/ \t\tvar installedChunkData = installedChunks[chunkId];\n/******/ \t\tif(installedChunkData === 0) {\n/******/ \t\t\treturn new Promise(function(resolve) { resolve(); });\n/******/ \t\t}\n/******/\n/******/ \t\t// a Promise means \"currently loading\".\n/******/ \t\tif(installedChunkData) {\n/******/ \t\t\treturn installedChunkData[2];\n/******/ \t\t}\n/******/\n/******/ \t\t// setup Promise in chunk cache\n/******/ \t\tvar promise = new Promise(function(resolve, reject) {\n/******/ \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n/******/ \t\t});\n/******/ \t\tinstalledChunkData[2] = promise;\n/******/\n/******/ \t\t// start chunk loading\n/******/ \t\tvar head = document.getElementsByTagName('head')[0];\n/******/ \t\tvar script = document.createElement('script');\n/******/ \t\tscript.type = 'text/javascript';\n/******/ \t\tscript.charset = 'utf-8';\n/******/ \t\tscript.async = true;\n/******/ \t\tscript.timeout = 120000;\n/******/\n/******/ \t\tif (__webpack_require__.nc) {\n/******/ \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n/******/ \t\t}\n/******/ \t\tscript.src = __webpack_require__.p + \"static/js/\" + chunkId + \".\" + {\"0\":\"ec3ecc7b129bd5a914c9\",\"1\":\"f6aed37b9c3087dc5100\"}[chunkId] + \".js\";\n/******/ \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n/******/ \t\tscript.onerror = script.onload = onScriptComplete;\n/******/ \t\tfunction onScriptComplete() {\n/******/ \t\t\t// avoid mem leaks in IE.\n/******/ \t\t\tscript.onerror = script.onload = null;\n/******/ \t\t\tclearTimeout(timeout);\n/******/ \t\t\tvar chunk = installedChunks[chunkId];\n/******/ \t\t\tif(chunk !== 0) {\n/******/ \t\t\t\tif(chunk) {\n/******/ \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n/******/ \t\t\t\t}\n/******/ \t\t\t\tinstalledChunks[chunkId] = undefined;\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t\thead.appendChild(script);\n/******/\n/******/ \t\treturn promise;\n/******/ \t};\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// on error function for async loading\n/******/ \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n/******/ })\n/************************************************************************/\n/******/ ([]);\n\n\n// WEBPACK FOOTER //\n// static/js/manifest.8326d7bec85bb0bbc184.js"," \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t2: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData === 0) {\n \t\t\treturn new Promise(function(resolve) { resolve(); });\n \t\t}\n\n \t\t// a Promise means \"currently loading\".\n \t\tif(installedChunkData) {\n \t\t\treturn installedChunkData[2];\n \t\t}\n\n \t\t// setup Promise in chunk cache\n \t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t});\n \t\tinstalledChunkData[2] = promise;\n\n \t\t// start chunk loading\n \t\tvar head = document.getElementsByTagName('head')[0];\n \t\tvar script = document.createElement('script');\n \t\tscript.type = 'text/javascript';\n \t\tscript.charset = 'utf-8';\n \t\tscript.async = true;\n \t\tscript.timeout = 120000;\n\n \t\tif (__webpack_require__.nc) {\n \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t}\n \t\tscript.src = __webpack_require__.p + \"static/js/\" + chunkId + \".\" + {\"0\":\"ec3ecc7b129bd5a914c9\",\"1\":\"f6aed37b9c3087dc5100\"}[chunkId] + \".js\";\n \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n \t\tscript.onerror = script.onload = onScriptComplete;\n \t\tfunction onScriptComplete() {\n \t\t\t// avoid mem leaks in IE.\n \t\t\tscript.onerror = script.onload = null;\n \t\t\tclearTimeout(timeout);\n \t\t\tvar chunk = installedChunks[chunkId];\n \t\t\tif(chunk !== 0) {\n \t\t\t\tif(chunk) {\n \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n \t\t\t\t}\n \t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t}\n \t\t};\n \t\thead.appendChild(script);\n\n \t\treturn promise;\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 43576fbfbf73348891c9"],"sourceRoot":""}
\ No newline at end of file
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
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 sign in to comment