Commit 794ad5d6 by golton_gao

update: first commit

parents
Showing with 2365 additions and 0 deletions
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-2"
],
"plugins": [
"transform-runtime"
],
"comments": false,
"env": {
"test": {
"presets": ["env", "stage-2"],
"plugins": [ "istanbul" ]
}
}
}
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
build/*.js
build/config/*.js
src/libraries/packages/npms/
\ No newline at end of file
// http://eslint.org/docs/user-guide/configuring
module.exports = {
root: true,
parser: 'babel-eslint',
parserOptions: {
sourceType: 'module'
},
env: {
browser: true,
},
// required to lint *.vue files
plugins: [
'html'
],
// add your custom rules here
'rules': {
// allow debugger during development
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0
}
}
.DS_Store
node_modules/
dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
test/unit/coverage
test/e2e/reports
selenium-debug.log
# Editor directories and files
.idea
.vscode
*.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": {}
}
}
## 20210902
1.新增`党(团)派加入时间`字段 2.移除`职级`字段 3.`奖惩关系`修改为`奖惩信息`
## 20211026
1.调整授权提示
{
"name": "简历",
"identifier": "com.cnd.hr.resume",
"build": 3566,
"version": "3.5.66",
"releaseNote": "绩效弹窗更新"
}
# new-template
> 美信云轻量级 VueJS 移动开发框架
## 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
# run unit tests
npm run unit
# run e2e tests
npm run e2e
# run all tests
npm test
```
开发环境在 test.js 文件修改账号
注意:打正式包和测试包,需要修改 prod.js 的内容:
baseUrl: 'https://jffcvp.cndrealty.com:4433/',
appkey: '781d2ec4' // 正式
baseUrl: 'https://mxytest.cndrealty.com:4433/', //测试
appkey: 'd504275e' // 测试
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')
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')
console.log(chalk.cyan(' Build complete.\n'))
console.log(chalk.yellow(
' Tip: built files are meant to be served over an HTTP server.\n' +
' Opening index.html over file:// won\'t work.\n'
))
})
})
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)
}
}
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, '../../dist/index.html'),
assetsRoot: path.resolve(__dirname, '../../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: '',
productionSourceMap: false,
appConfFile: 'CubeModule.json',
eslint: true,
autoRoutes: true,
autoImportStyle: true,
optimizeCss: true,
i18n: true,
friendlyErrorsPlugin: false,
packToZip: true,
vux: 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: {},
appConfFile: 'CubeModule.json',
eslint: true,
autoRoutes: true,
autoImportStyle: true,
optimizeCss: true,
i18n: true,
friendlyErrorsPlugin: true,
vux: true,
// 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
}
}
module.exports = {
NODE_ENV: '"production"'
}
var merge = require('webpack-merge')
var devEnv = require('./dev.env')
module.exports = merge(devEnv, {
NODE_ENV: '"testing"'
})
/* 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 = (process.env.NODE_ENV === 'testing' || process.env.NODE_ENV === 'production')
? require('./webpack.prod.conf')
: require('./webpack.dev.conf')
// default port where dev server listens for incoming traffic
var port = process.env.PORT || config.dev.port
var os = require('os')
var platform = os.platform()
var childProcess = require('child_process')
console.log(platform)
if (platform !== 'win32') {
// 杀掉占用端口的进程
childProcess.exec('kill -9 `lsof -t -i:' + port + ' >/dev/null 2>&1`',function (error, stdout, stderr) {
console.log('killing the occupied port: ' + port)
if (error !== null) {
// console.error('exec error: ' + error)
}
})
}
// 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')
var env = process.env.NODE_ENV
var isAutoImportStyle = env === 'development' ? config.dev.autoImportStyle : config.build.autoImportStyle
var LessInjectorLoader = path.resolve(__dirname, '../src/libraries/packages/loaders/less-injector-loader/index.js')
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)
}
}
function generateAutoImportStyleLessLoaders () {
return 'vue-style-loader!css-loader!less-loader!' + LessInjectorLoader + '?baseDir=shared&libDir=libraries&srcDir=src'
}
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
return {
postcss: generateLoaders(),
less: isAutoImportStyle ? generateAutoImportStyleLessLoaders() : 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
}
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 merge = require('webpack-merge')
var env = process.env.NODE_ENV
var isEslint = env === 'development' ? config.dev.eslint : config.build.eslint
var isFriendlyErrorsPlugin = env === 'development' ? config.dev.friendlyErrorsPlugin : config.build.friendlyErrorsPlugin
var OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
var ExtractTextPlugin = require('extract-text-webpack-plugin')
function resolve(dir) {
return path.join(__dirname, '..', dir)
}
function generateCSSLoader() {
if (process.env.NODE_ENV === 'production') {
return ExtractTextPlugin.extract({
use: 'css-loader',
fallback: 'style-loader'
})
} else {
return ['style-loader', 'css-loader']
}
}
var rules = utils.styleLoaders({
sourceMap: config.dev.cssSourceMap
})
rules = rules.concat([
{
test: /\.(png|jpe?g|gif)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 1000,
name: utils.assetsPath('media/[name].[hash:7].[ext]')
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
}
])
var baseWebpackConfig = {
entry: {
app: './src/js/index.js'
},
output: {
path: config.build.assetsRoot,
filename: '[name].js',
publicPath: process.env.NODE_ENV === 'production'
? config.build.assetsPublicPath
: config.dev.assetsPublicPath
},
resolve: {
extensions: ['.js', '.json'],
alias: {
'@': resolve('src'),
'configuration': resolve(process.env.NODE_ENV === 'production'
? './src/config/prod'
: './src/config/test')
}
},
module: {
rules: rules.concat([
{
test: /\.js$/,
loader: 'babel-loader',
include: [resolve('src')],
exclude: /(node_modules)/
},
// {
// test: /\.less$/,
// use: [
// 'style-loader',
// { loader: 'css-loader', options: { importLoaders: 1 } },
// 'less-loader'
// ]
// }
{
test: /\.css$/,
use: generateCSSLoader()
},
{
test: /\.svg/,
use: {
loader: 'svg-url-loader'
}
}
])
}
}
// 集成eslint
if (isEslint) {
baseWebpackConfig = merge(baseWebpackConfig, {
module: {
rules: [{
test: /\.(js)$/,
loader: 'eslint-loader',
enforce: 'pre',
include: [resolve('src')],
options: {
formatter: require('eslint-friendly-formatter')
}
}]
}
})
}
// 集成友好错误提示插件
if (isFriendlyErrorsPlugin) {
baseWebpackConfig = merge(baseWebpackConfig, {
plugins: [
new FriendlyErrorsPlugin()
]
})
}
module.exports = baseWebpackConfig
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 CopyWebpackPlugin = require('copy-webpack-plugin')
// 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, {
// cheap-module-eval-source-map is faster for development
devtool: '#cheap-module-eval-source-map',
plugins: [
new webpack.DefinePlugin({
'process.env': config.dev.env
}),
// 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
})
]
})
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 env = process.env.NODE_ENV === 'testing'
? require('../config/test.env')
: config.build.env
var rules = utils.styleLoaders({
sourceMap: config.build.productionSourceMap,
extract: true
})
var webpackConfig = merge(baseWebpackConfig, {
module: {
rules: rules
},
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
}),
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: process.env.NODE_ENV === 'testing'
? 'index.html'
: 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: ['.*']
},
{
from: path.resolve(path.join(__dirname, '../', config.build.appConfFile)),
to: path.resolve(path.join(config.build.assetsRoot, config.build.appConfFile)),
toType: 'file',
force: true,
flatten: true
}
])
]
})
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.packToZip){
webpackConfig.plugins.push(
new ZipPlugin({
path: config.build.assetsRoot,
filename: 'package.zip'
})
)
}
if (config.build.bundleAnalyzerReport) {
var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
webpackConfig.plugins.push(new BundleAnalyzerPlugin())
}
module.exports = webpackConfig
// This is the webpack config used for unit tests.
var utils = require('./utils')
var webpack = require('webpack')
var merge = require('webpack-merge')
var CopyWebpackPlugin = require('copy-webpack-plugin')
var baseConfig = require('./webpack.base.conf')
var webpackConfig = merge(baseConfig, {
// use inline sourcemap for karma-sourcemap-loader
module: {
rules: utils.styleLoaders()
},
devtool: '#inline-source-map',
resolveLoader: {
alias: {
// necessary to to make lang="scss" work in test when using vue-loader's ?inject option
// see discussion at https://github.com/vuejs/vue-loader/issues/724
'scss-loader': 'sass-loader'
}
},
plugins: [
new webpack.DefinePlugin({
'process.env': require('./config/test.env')
}),
new CopyWebpackPlugin([
{
from: './src/libraies/components/Pictrue/6.jpg',
to: 'images/6.jpg'
}
])
]
})
// no need for app entry during tests
delete webpackConfig.entry
module.exports = webpackConfig
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<title>简历</title>
</head>
<body>
<div class="header">
</div>
<a class="header__button" id="back"></a>
<div class="container">
<div class="banner">
<a class="banner__img loading" id="mainPhoto">
<img>
</a>
<div id="name">正在加载</div>
</div>
<!-- Root element of PhotoSwipe. Must have class pswp. -->
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
<!-- Background of PhotoSwipe.
It's a separate element as animating opacity is faster than rgba(). -->
<div class="pswp__bg"></div>
<!-- Slides wrapper with overflow:hidden. -->
<div class="pswp__scroll-wrap">
<!-- Container that holds slides.
PhotoSwipe keeps only 3 of them in the DOM to save memory.
Don't modify these 3 pswp__item elements, data is added later on. -->
<div class="pswp__container">
<div class="pswp__item"></div>
<div class="pswp__item"></div>
<div class="pswp__item"></div>
</div>
<!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
<div class="pswp__ui pswp__ui--hidden">
<div class="pswp__top-bar">
<!-- Controls are self-explanatory. Order can be changed. -->
<div class="pswp__counter"></div>
<button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
<button class="pswp__button pswp__button--save">保存</button>
<!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
<!-- element will get class pswp__preloader--active when preloader is running -->
<div class="pswp__preloader">
<div class="pswp__preloader__icn">
<div class="pswp__preloader__cut">
<div class="pswp__preloader__donut"></div>
</div>
</div>
</div>
</div>
<div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
<div class="pswp__share-tooltip"></div>
</div>
<button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
</button>
<button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
</button>
<div class="pswp__caption">
<div class="pswp__caption__center"></div>
</div>
</div>
</div>
</div>
</div>
<div class="toast" id="toast">
<div class="toast-content"></div>
</div>
<!-- 自定义弹窗 -->
<div class="my__modal">
<div class="modal__content">
<!-- 头部 -->
<div class="modal__header">
</div>
<!-- 内容 -->
<div class="modal__body">
</div>
<!-- 尾部 -->
<div class="model__footer">
<div class="model__line"></div>
<span class="modal__close">&times;</span>
</div>
</div>
</div>
<div class="tips__modal">
<div class="tips__content">
<!-- 头部 -->
<div class="tips__header">
提示
</div>
<!-- 内容 -->
<div class="tips__body">
<div><span style="font-weight: 500;">年度绩效结果分为:</span>优秀、良好、合格、待改进</div>
<div><span style="font-weight: 500;">月度绩效结果分为:</span>A、B+、B、B-、C</div>
<div class="tips__title">1、出现如下情形之一,评价等级为A:</div>
<div>(1)工作成效显著,且时间较大幅度提前。</div>
<div>(2)员工独立思考,有创新方法,工作成效超出预期。</div>
<div class="tips__title">2.评价等级为B(±):</div>
<div> 评价B+:和过往比有较大进步或在工作难度/强度较大的情况下仍保质保量完成工作。</div>
<div> 评价B:按时保质完成工作。</div>
<div> 评价B-:工作出现偏差,无法按时保质完成。</div>
<div class="tips__title">3.出现如下情形之一,评价等级为C:</div>
<div>(1)工作出现重大失误,被公司通报批评。</div>
<div>(2)工作完成时间较计划存在较大幅度延后。</div>
<div>(3)工作成效差或远低于预期。</div>
</div>
<!-- 尾部 -->
<div class="tips__footer">
<div class="tips__line"></div>
<span class="tips__close">&times;</span>
</div>
</div>
</div>
</div>
<script defer src="cordova.js"></script>
</body>
</html>
This diff could not be displayed because it is too large.
{
"name": "h5-dev-resume",
"version": "1.0.1",
"description": "建发简历",
"author": "liyj31 <yujun2.li@meicloud.com>",
"private": true,
"scripts": {
"dev": "cross-env PACK_ENV=dev node build/dev-server.js",
"start": "npm run dev",
"build": "node build/build.js",
"build:prod": "cross-env PACK_ENV=product node build/build.js",
"build:report": "npm run build --report"
},
"dependencies": {
"axios": "^0.16.1",
"fastclick": "^1.0.6",
"iscroll": "^5.2.0",
"vconsole": "^3.9.4"
},
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1",
"babel-eslint": "^7.1.1",
"babel-loader": "^7.1.1",
"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",
"cross-env": "^4.0.0",
"eslint": "^3.19.0",
"eslint-friendly-formatter": "^3.0.0",
"eslint-loader": "^1.7.1",
"eslint-plugin-html": "^3.0.0",
"eventsource-polyfill": "^0.9.6",
"express": "^4.14.1",
"mocha": "^3.2.0",
"chai": "^3.5.0",
"sinon": "^2.1.0",
"sinon-chai": "^2.8.0",
"inject-loader": "^3.0.0",
"babel-plugin-istanbul": "^4.1.1",
"phantomjs-prebuilt": "^2.1.14",
"chromedriver": "^2.27.2",
"cross-spawn": "^5.0.1",
"nightwatch": "^0.9.12",
"selenium-server": "^3.0.1",
"less": "^2.7.2",
"opn": "^4.0.2",
"ora": "^1.2.0",
"rimraf": "^2.6.0",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"style-loader": "^0.17.0",
"touch": "^1.0.0",
"url-loader": "^0.5.8",
"yaml-loader": "^0.4.0",
"css-loader": "^0.28.0",
"file-loader": "^0.11.1",
"json-loader": "^0.5.4",
"less-loader": "^4.0.4",
"loader-utils": "^1.1.0",
"webpack": "^2.3.3",
"webpack-bundle-analyzer": "^2.2.1",
"webpack-dev-middleware": "^1.10.0",
"webpack-hot-middleware": "^2.18.0",
"webpack-merge": "^4.1.0",
"zip-webpack-plugin": "^1.1.0",
"html-webpack-plugin": "^2.28.0",
"compression-webpack-plugin": "^0.4.0",
"copy-webpack-plugin": "^4.0.1",
"extract-text-webpack-plugin": "^2.0.0",
"friendly-errors-webpack-plugin": "^1.1.3",
"optimize-css-assets-webpack-plugin": "^1.3.0",
"connect-history-api-fallback": "^1.3.0",
"http-proxy-middleware": "^0.17.3",
"svg-url-loader": "^2.2.0"
},
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<svg width="264" height="88" viewBox="0 0 264 88" xmlns="http://www.w3.org/2000/svg"><title>default-skin 2</title><g fill="none" fill-rule="evenodd"><g><path d="M67.002 59.5v3.768c-6.307.84-9.184 5.75-10.002 9.732 2.22-2.83 5.564-5.098 10.002-5.098V71.5L73 65.585 67.002 59.5z" id="Shape" fill="#fff"/><g fill="#fff"><path d="M13 29v-5h2v3h3v2h-5zM13 15h5v2h-3v3h-2v-5zM31 15v5h-2v-3h-3v-2h5zM31 29h-5v-2h3v-3h2v5z" id="Shape"/></g><g fill="#fff"><path d="M62 24v5h-2v-3h-3v-2h5zM62 20h-5v-2h3v-3h2v5zM70 20v-5h2v3h3v2h-5zM70 24h5v2h-3v3h-2v-5z"/></g><path d="M20.586 66l-5.656-5.656 1.414-1.414L22 64.586l5.656-5.656 1.414 1.414L23.414 66l5.656 5.656-1.414 1.414L22 67.414l-5.656 5.656-1.414-1.414L20.586 66z" fill="#fff"/><path d="M111.785 65.03L110 63.5l3-3.5h-10v-2h10l-3-3.5 1.785-1.468L117 59l-5.215 6.03z" fill="#fff"/><path d="M152.215 65.03L154 63.5l-3-3.5h10v-2h-10l3-3.5-1.785-1.468L147 59l5.215 6.03z" fill="#fff"/><g><path id="Rectangle-11" fill="#fff" d="M160.957 28.543l-3.25-3.25-1.413 1.414 3.25 3.25z"/><path d="M152.5 27c3.038 0 5.5-2.462 5.5-5.5s-2.462-5.5-5.5-5.5-5.5 2.462-5.5 5.5 2.462 5.5 5.5 5.5z" id="Oval-1" stroke="#fff" stroke-width="1.5"/><path fill="#fff" d="M150 21h5v1h-5z"/></g><g><path d="M116.957 28.543l-1.414 1.414-3.25-3.25 1.414-1.414 3.25 3.25z" fill="#fff"/><path d="M108.5 27c3.038 0 5.5-2.462 5.5-5.5s-2.462-5.5-5.5-5.5-5.5 2.462-5.5 5.5 2.462 5.5 5.5 5.5z" stroke="#fff" stroke-width="1.5"/><path fill="#fff" d="M106 21h5v1h-5z"/><path fill="#fff" d="M109.043 19.008l-.085 5-1-.017.085-5z"/></g></g></g></svg>
\ No newline at end of file
/*! PhotoSwipe main CSS by Dmitry Semenov | photoswipe.com | MIT license */
/*
Styles for basic PhotoSwipe functionality (sliding area, open/close transitions)
*/
/* pswp = photoswipe */
.pswp {
display: none;
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
overflow: hidden;
-ms-touch-action: none;
touch-action: none;
z-index: 1500;
-webkit-text-size-adjust: 100%;
/* create separate layer, to avoid paint on window.onscroll in webkit/blink */
-webkit-backface-visibility: hidden;
outline: none; }
.pswp * {
-webkit-box-sizing: border-box;
box-sizing: border-box; }
.pswp img {
max-width: none; }
/* style is added when JS option showHideOpacity is set to true */
.pswp--animate_opacity {
/* 0.001, because opacity:0 doesn't trigger Paint action, which causes lag at start of transition */
opacity: 0.001;
will-change: opacity;
/* for open/close transition */
-webkit-transition: opacity 333ms cubic-bezier(0.4, 0, 0.22, 1);
transition: opacity 333ms cubic-bezier(0.4, 0, 0.22, 1); }
.pswp--open {
display: block; }
.pswp--zoom-allowed .pswp__img {
/* autoprefixer: off */
cursor: -webkit-zoom-in;
cursor: -moz-zoom-in;
cursor: zoom-in; }
.pswp--zoomed-in .pswp__img {
/* autoprefixer: off */
cursor: -webkit-grab;
cursor: -moz-grab;
cursor: grab; }
.pswp--dragging .pswp__img {
/* autoprefixer: off */
cursor: -webkit-grabbing;
cursor: -moz-grabbing;
cursor: grabbing; }
/*
Background is added as a separate element.
As animating opacity is much faster than animating rgba() background-color.
*/
.pswp__bg {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: #000;
opacity: 0;
-webkit-transform: translateZ(0);
transform: translateZ(0);
-webkit-backface-visibility: hidden;
will-change: opacity; }
.pswp__scroll-wrap {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: hidden; }
.pswp__container,
.pswp__zoom-wrap {
-ms-touch-action: none;
touch-action: none;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0; }
/* Prevent selection and tap highlights */
.pswp__container,
.pswp__img {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-tap-highlight-color: transparent;
-webkit-touch-callout: none; }
.pswp__zoom-wrap {
position: absolute;
width: 100%;
-webkit-transform-origin: left top;
-ms-transform-origin: left top;
transform-origin: left top;
/* for open/close transition */
-webkit-transition: -webkit-transform 333ms cubic-bezier(0.4, 0, 0.22, 1);
transition: transform 333ms cubic-bezier(0.4, 0, 0.22, 1); }
.pswp__bg {
will-change: opacity;
/* for open/close transition */
-webkit-transition: opacity 333ms cubic-bezier(0.4, 0, 0.22, 1);
transition: opacity 333ms cubic-bezier(0.4, 0, 0.22, 1); }
.pswp--animated-in .pswp__bg,
.pswp--animated-in .pswp__zoom-wrap {
-webkit-transition: none;
transition: none; }
.pswp__container,
.pswp__zoom-wrap {
-webkit-backface-visibility: hidden; }
.pswp__item {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
overflow: hidden; }
.pswp__img {
position: absolute;
width: auto;
height: auto;
top: 0;
left: 0; }
/*
stretched thumbnail or div placeholder element (see below)
style is added to avoid flickering in webkit/blink when layers overlap
*/
.pswp__img--placeholder {
-webkit-backface-visibility: hidden; }
/*
div element that matches size of large image
large image loads on top of it
*/
.pswp__img--placeholder--blank {
background: #222; }
.pswp--ie .pswp__img {
width: 100% !important;
height: auto !important;
left: 0;
top: 0; }
/*
Error message appears when image is not loaded
(JS option errorMsg controls markup)
*/
.pswp__error-msg {
position: absolute;
left: 0;
top: 50%;
width: 100%;
text-align: center;
font-size: 14px;
line-height: 16px;
margin-top: -8px;
color: #CCC; }
.pswp__error-msg a {
color: #CCC;
text-decoration: underline; }
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
<title>绩效考核@2x</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="android" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="03个人简历-02更多" transform="translate(-10.000000, -1272.000000)" fill="#9B9B9B">
<g id="绩效考核" transform="translate(0.000000, 1262.000000)">
<g id="title">
<g id="绩效考核" transform="translate(10.000000, 10.000000)">
<path d="M12.4058178,8.6784436 L16.5321313,5.45461418 L15.9003808,4.64601043 L11.7740673,7.86983985 L8.55490973,3.74950609 L7.83255389,4.31387233 L3.8800274,7.29231467 L4.49756959,8.11182084 L8.3769765,5.18847804 L11.5993956,9.31298644 L12.4079994,8.68123595 L12.4058178,8.6784436 Z M13.7209747,17.4181263 L5.9562472,17.4181263 L3.58008338,19.7942901 C3.38482124,19.9895522 3.06823875,19.9895522 2.8729766,19.7942901 L2.85449786,19.7758113 C2.65923571,19.5805492 2.65923571,19.2639667 2.85449786,19.0687046 L4.50507615,17.4181263 L2,17.4181263 C1.44771525,17.4181263 1,16.970411 1,16.4181263 L1,2 L1,2 C1,1.44771525 1.44771525,1 2,1 L2,1 L18,1 C18.5522847,1 19,1.44771525 19,2 L19,16.4181263 C19,16.970411 18.5522847,17.4181263 18,17.4181263 L15.1721458,17.4181263 L16.8227241,19.0687046 C17.0179862,19.2639667 17.0179862,19.5805492 16.8227241,19.7758113 L16.8042453,19.7942901 C16.6089832,19.9895522 16.2924007,19.9895522 16.0971385,19.7942901 L13.7209747,17.4181263 Z M4,10 L4,15.3658605 L5,15.3658605 L5,10 L4,10 Z M7.66666667,8 L7.66666667,15.3658605 L8.66666667,15.3658605 L8.66666667,8 L7.66666667,8 Z M11.3333333,11.2613289 L11.3333333,15.3658605 L12.3333333,15.3658605 L12.3333333,11.2613289 L11.3333333,11.2613289 Z M15,9.20906313 L15,15.3658605 L16,15.3658605 L16,9.20906313 L15,9.20906313 Z" id="Combined-Shape"></path>
</g>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
<title>基本信息@2x</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="android" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="03个人简历-02更多" transform="translate(-10.000000, -203.000000)" fill="#9B9B9B">
<g id="基本信息" transform="translate(0.000000, 193.000000)">
<g id="title">
<g id="基本" transform="translate(10.000000, 10.000000)">
<path d="M7.54500155,9.35681026 C6.02571618,8.49887367 5,6.86922126 5,5 C5,2.23857625 7.23857625,0 10,0 C12.7614237,0 15,2.23857625 15,5 C15,6.86922126 13.9742838,8.49887367 12.4549984,9.35681026 C16.3702103,10.5078168 19,14.1546402 19,16 C19,18.209139 15.0261826,20 10,20 C4.97381738,20 1,18.209139 1,16 C1,14.1546402 3.62978965,10.5078168 7.54500155,9.35681026 Z M10,8.50304114 C11.1045695,8.50304114 12,7.60761064 12,6.50304114 C11.4031677,6.49745642 8.6194458,6.50085913 8,6.50304114 C8,7.60761064 8.8954305,8.50304114 10,8.50304114 Z" id="Combined-Shape"></path>
</g>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
<title>教育@2x</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="android" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="03个人简历-02更多" transform="translate(-10.000000, -1750.000000)" fill-rule="nonzero" fill="#9B9B9B">
<g id="教育" transform="translate(0.000000, 1740.000000)">
<g id="title">
<g id="教育" transform="translate(10.000000, 10.000000)">
<path d="M19.1423392,6.69816764 L19.1423392,10.0045224 L19.8383626,10.7006823 L18.3869786,12.2109747 L16.9178752,10.7452437 L17.9239376,9.83046784 L17.9239376,7.22013645 C13.6549318,8.98025341 12.2864327,9.52732943 11.3397856,9.95444444 C10.3930409,10.38154 9.71122807,10.3794542 8.77214425,10.0255361 C7.8331384,9.67173489 3.36311891,8.04038986 1.14358674,6.97807018 C-0.337563353,6.26929825 -0.432904483,5.81990253 1.16900585,5.21842105 C3.25955166,4.42423002 6.71500975,3.15224172 8.54664717,2.45810916 C9.63089669,2.01945419 10.2041326,1.78005848 11.1993567,2.28023392 C12.9763938,3.01405458 17.0369201,4.5377193 19.0559259,5.37134503 C20.8135867,6.13846004 19.6319688,6.39066277 19.1423392,6.69816764 Z M15.4877778,9.48274854 L15.4877778,14.7032943 C15.4877778,14.7032943 13.5247758,16.7915205 10.0740351,16.7915205 C6.35785575,16.7915205 4.35052632,14.7032943 4.35052632,14.7032943 L4.35052632,9.83048733 C5.52196881,10.3076803 6.83744639,10.7183041 8.42937622,11.2632943 C9.4105653,11.6123002 10.6555556,11.7330019 11.5457115,11.2632943 C12.5780312,10.837232 13.97,10.132924 15.4877778,9.48274854 Z" id="Shape"></path>
</g>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title></title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="群">
<path d="M11.8626735,10.0444564 C12.7182301,9.43334457 13.2071195,8.33334329 13.2071195,7.23334201 L13.2071195,7.11111964 C13.2071195,5.27778418 11.6182288,3.68889344 9.78489333,3.68889344 C7.95155786,3.68889344 6.36266713,5.27778418 6.36266713,7.11111964 C6.36266713,8.21112092 6.85155658,9.18889344 7.70711313,9.92223403 C5.62933294,10.7777906 4.16266457,12.7333484 4.28488693,15.0555733 C4.40710929,17.5000206 6.60711185,17.622243 9.66267097,17.622243 C12.7182301,17.622243 15.040455,17.622243 15.1626774,15.0555733 C15.4071221,12.8555708 13.8182314,10.9000129 11.8626735,10.0444564 L11.8626735,10.0444564 Z M6.1182224,9.80001166 C5.62933294,9.06667748 5.38488821,8.21112092 5.38488821,7.35556437 C5.38488821,6.13334073 5.7515553,5.03333945 6.60711185,4.1777829 C6.97377895,3.68889344 7.46266841,3.44444871 7.95155786,3.20000398 C7.34044604,2.4666698 6.48488949,2.1000027 5.50711057,2.1000027 C3.55155274,2.1000027 2.08488437,3.68889344 2.08488437,5.52222891 C2.08488437,6.62223019 2.57377383,7.6000027 3.42933038,8.33334329 C1.35155018,9.18889984 -0.11511819,11.26668 0.00710417493,13.4666826 C0.129326539,15.3000181 1.47377255,15.7889075 3.42933038,16.0333522 C3.42933038,15.7889075 3.30710801,15.5444628 3.30710801,15.3000181 C3.30710801,12.9777931 4.40710929,11.0222353 6.1182224,9.80001166 Z M16.1404563,8.33334329 C16.9960128,7.72223147 17.4849023,6.62223019 17.4849023,5.52222891 C17.4849023,3.56667108 16.0182339,2.1000027 14.0626761,2.1000027 C13.0848972,2.1000027 12.2293406,2.4666698 11.6182288,3.20000398 C13.2071195,3.93333817 14.1848985,5.40000654 14.3071208,7.23334201 L14.3071208,7.35556437 C14.3071208,8.21112092 14.0626761,9.18889984 13.5737866,9.92223403 C15.4071221,11.1444577 16.5071234,13.2222379 16.384901,15.4222404 C16.384901,15.6666852 16.384901,15.9111299 16.2626786,16.1555746 C18.2182365,16.0333522 19.4404601,15.5444628 19.5626825,13.588905 C19.6849049,11.1444577 18.2182365,9.18889984 16.1404563,8.33334329 Z" id="形状" fill="#9B9B9B" fill-rule="nonzero"></path>
<rect id="矩形" x="0" y="0" width="20" height="20" rx="1"></rect>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
<title>当前任职@2x</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="android" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="03个人简历-02更多" transform="translate(-10.000000, -753.000000)" fill="#9B9B9B">
<g id="当前" transform="translate(0.000000, 743.000000)">
<g id="title">
<g id="当前任职" transform="translate(10.000000, 10.000000)">
<path d="M5.17250078,11.0784051 C3.21489483,11.6539084 1.9,13.4773201 1.9,14.4 C1.9,15.5045695 3.88690869,16.4 6.4,16.4 C8.91309131,16.4 10.9,15.5045695 10.9,14.4 C10.9,13.4773201 9.58510517,11.6539084 7.62749922,11.0784051 C8.38714191,10.6494368 8.9,9.83461063 8.9,8.9 C8.9,7.51928813 7.78071187,6.4 6.4,6.4 C5.01928813,6.4 3.9,7.51928813 3.9,8.9 C3.9,9.83461063 4.41285809,10.6494368 5.17250078,11.0784051 Z M5.5,2.8 L5.5,2 L5.5,2 C5.5,1.44771525 5.94771525,1 6.5,1 L13.5,1 C14.0522847,1 14.5,1.44771525 14.5,2 L14.5,2.8 L18,2.8 C18.5522847,2.8 19,3.24771525 19,3.8 L19,18 C19,18.5522847 18.5522847,19 18,19 L2,19 C1.44771525,19 1,18.5522847 1,18 L1,3.8 C1,3.24771525 1.44771525,2.8 2,2.8 L2,2.8 L5.5,2.8 Z M7.8,1.9 C7.52385763,1.9 7.3,2.12385763 7.3,2.4 L7.3,3.2 C7.3,3.47614237 7.52385763,3.7 7.8,3.7 L7.8,3.7 L12.2,3.7 C12.4761424,3.7 12.7,3.47614237 12.7,3.2 L12.7,3.2 L12.7,2.4 C12.7,2.12385763 12.4761424,1.9 12.2,1.9 L7.8,1.9 Z M6.4,10.6515206 C5.84771525,10.6515206 5.4,10.2038053 5.4,9.65152057 C5.7097229,9.65042956 7.10158386,9.64872821 7.4,9.65152057 C7.4,10.2038053 6.95228475,10.6515206 6.4,10.6515206 Z M11.35,8.2 C11.1014719,8.2 10.9,8.40147186 10.9,8.65 L10.9,8.65 L10.9,8.65 C10.9,8.89852814 11.1014719,9.1 11.35,9.1 L17.65,9.1 C17.8985281,9.1 18.1,8.89852814 18.1,8.65 C18.1,8.40147186 17.8985281,8.2 17.65,8.2 L11.35,8.2 Z M13.15,10.9 C12.9014719,10.9 12.7,11.1014719 12.7,11.35 L12.7,11.35 L12.7,11.35 C12.7,11.5985281 12.9014719,11.8 13.15,11.8 L17.65,11.8 C17.8985281,11.8 18.1,11.5985281 18.1,11.35 C18.1,11.1014719 17.8985281,10.9 17.65,10.9 L13.15,10.9 Z"></path>
</g>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
<title>历史@2x</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="android" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="03个人简历-02更多" transform="translate(-10.000000, -879.000000)" fill="#9B9B9B">
<g id="历史" transform="translate(0.000000, 869.000000)">
<g id="title">
<g id="历史" transform="translate(10.000000, 10.000000)">
<path d="M10.8662178,10.5 L16,10.5 C16.2761424,10.5 16.5,10.2761424 16.5,10 C16.5,9.72385763 16.2761424,9.5 16,9.5 L10.8662178,9.5 C10.7783981,9.348186 10.651814,9.22160185 10.5,9.1337822 L10.5,3.5 C10.5,3.22385763 10.2761424,3 10,3 C9.72385763,3 9.5,3.22385763 9.5,3.5 L9.5,9.1337822 C9.20109931,9.30668691 9,9.62985882 9,10 C9,10.5522847 9.44771525,11 10,11 C10.3701412,11 10.6933131,10.7989007 10.8662178,10.5 Z M10,19 C5.02943725,19 1,14.9705627 1,10 C1,5.02943725 5.02943725,1 10,1 C14.9705627,1 19,5.02943725 19,10 C19,14.9705627 14.9705627,19 10,19 Z"></path>
</g>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>奖杯</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="奖杯">
<path d="M18.307073,4.27061049 L16.4346885,4.27061049 L16.4346885,1.69585553 C16.4346885,1.30796763 16.13023,1 15.7372182,1 L4.25771589,1 C3.87483597,1 3.56478887,1.30796763 3.56478887,1.69585553 L3.56478887,4.27061049 L1.68786108,4.27061049 C1.30948422,4.27061049 1,4.58358075 1,4.96646602 L1,8.83407898 C1,9.94279497 1.44232421,10.9618294 2.16440044,11.6974214 L2.16938596,11.6974214 C2.80347177,12.3388173 3.64835664,12.7760605 4.59182616,12.8804246 C5.63396073,14.5108187 7.37804852,15.6342579 9.30935466,15.8434539 L9.30935466,17.5981413 L6.29719576,17.5981413 C5.91885909,17.5981413 5.60424864,17.9111726 5.60424864,18.2991012 C5.60424864,18.6767804 5.91881889,19 6.29719576,19 L13.7028042,19 C14.0812213,19 14.4002544,18.6767804 14.4002544,18.2991012 C14.4002544,17.9111726 14.0812213,17.598121 13.7028042,17.598121 L10.6951685,17.598121 L10.6951685,15.8434539 C12.6214288,15.6342579 14.3710449,14.5108187 15.4126769,12.8804246 C16.3314801,12.7760402 17.1622729,12.3535608 17.7913129,11.7320332 L17.8305537,11.6974214 C18.55263,10.9618091 19,9.94279497 19,8.83407898 L19,4.96646602 C19,4.58362143 18.690556,4.27061049 18.307073,4.27061049 Z M3.15724269,10.7129174 C2.6756374,10.2160898 2.38581383,9.56507504 2.38581383,8.83407898 L2.38581383,5.66744621 L3.56478887,5.66744621 L3.56478887,9.48055883 C3.57992636,10.0721316 3.66797708,10.6483711 3.83054927,11.219974 C3.57488053,11.0911661 3.34894398,10.9170903 3.15724269,10.7129377 L3.15724269,10.7129174 Z M12.8409525,7.71257168 L11.3290935,8.81901005 L11.9124798,10.6213446 C11.9602443,10.7588156 11.8832099,10.9072681 11.7473545,10.9517021 C11.6629424,10.9777321 11.5712531,10.9609956 11.5051547,10.9072477 L10.0004121,9.79720991 L8.48481393,10.9127588 C8.37093098,10.9999593 8.20767529,10.9722008 8.1233034,10.8589499 C8.07364922,10.7865335 8.05905452,10.699272 8.08834445,10.6213446 L8.67195187,8.81901005 L7.1488151,7.70518973 C7.03517338,7.61979908 7.00769271,7.45654208 7.09397438,7.34327083 C7.14149764,7.27083418 7.22231132,7.23376174 7.30310489,7.23376174 L9.17647446,7.23567332 L9.75278453,5.43122382 C9.79861915,5.29761663 9.94537036,5.21773702 10.0812057,5.26245577 C10.1619993,5.29017367 10.2206394,5.35520804 10.2463912,5.43124415 L10.8225003,7.23567332 L12.6979003,7.23376174 C12.8409123,7.23376174 12.9566247,7.34878188 12.9566247,7.49361451 C12.9566849,7.58447554 12.9108503,7.66431448 12.8409525,7.71257168 L12.8409525,7.71257168 Z M17.6142063,8.83409932 C17.6142063,9.56507504 17.3193168,10.2161101 16.8478031,10.7129377 L16.8181715,10.7429129 C16.6219269,10.9318339 16.4055392,11.1008256 16.1695311,11.2199536 C16.3365662,10.6483508 16.420134,10.0721113 16.4346885,9.4805385 L16.4346885,5.66744621 L17.6142063,5.66744621 L17.6142063,8.83409932 Z" id="形状" fill="#9B9B9B" fill-rule="nonzero"></path>
<rect id="矩形" x="0" y="0" width="20" height="20" rx="1"></rect>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
<title>工作经历@2x</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="android" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="03个人简历-02更多" transform="translate(-10.000000, -1472.000000)" fill-rule="nonzero" fill="#9B9B9B">
<g id="工作经历" transform="translate(0.000000, 1462.000000)">
<g id="title">
<g id="工作经历" transform="translate(10.000000, 10.000000)">
<path d="M16.5000047,4.03791343 C16.5000047,4.03791343 12.1297022,4.03791343 3.38909724,4.03791343 C3.38909724,4.03791343 2.45541582,4.03791343 2.45541582,5.05722531 L2.45541582,6.09240489 L17.541083,6.09240489 L17.541083,5.05722531 C17.541083,4.03791343 16.5000047,4.03791343 16.5000047,4.03791343 Z M5.93572384,2 C5.93572384,2 4.92104072,2.07238269 4.92104072,3.09240489 L15.0778267,3.09240489 C15.0778267,2.07238269 14.0602994,2 14.0610104,2 L5.93572384,2 Z M18.5385575,5.47418424 L18.5385575,7.09584906 L1.45888788,7.09584906 L1.45888788,5.47418424 L0.858041888,6.0772475 C0.257195893,6.68102109 -0.173706678,6.84297447 0.0687649006,8.1172919 C0.308392238,9.38592675 1.47524227,16.3477913 1.64731888,17.2896781 C1.83859411,18.3231964 2.8895413,18.30899 2.8895413,18.30899 L17.1100372,18.30899 C17.1100372,18.30899 18.1616955,18.3239068 18.3522597,17.2896781 C18.5257584,16.3477913 19.6911863,9.38592675 19.9315247,8.1172919 C20.1732852,6.84297447 19.7430937,6.68102109 19.1394035,6.0772475 L18.5385575,5.47418424 Z M13.0449052,12.6015538 L6.95182908,12.6015538 C5.9364349,12.6015538 5.9364349,11.582242 5.9364349,11.582242 L5.9364349,9.54290788 L7.00013674,9.54290788 L7.00013674,11.6024147 L13.0063746,11.6024147 L13.0063746,9.54290788 L14.0610104,9.54290788 L14.0610104,11.582242 C14.0610104,11.582242 14.0610104,12.6015538 13.0449052,12.6015538 Z" id="Shape"></path>
</g>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
import cube from '../../CubeModule.json';
const RENDER_TYPE = {
A: Symbol('A'),
B: Symbol('B'),
C: Symbol('C'),
D: Symbol('D'),
E: Symbol('E'),
F: Symbol('F'),
G: Symbol('G'),
H: Symbol('H'),
};
let config = {
identifier: cube.identifier,
ssoTokenPlaceholder: '___mideatoken___',
uidPlaceholder: '___uid___',
isMock: false,
mockPath: 'json/',
code: 'cnd-hr-res',
yjyCode: 'yjy-hr-res',
hjCode: 'hj-hr-res',
wyCode: 'cnd-wyhr-base',
methods: {
resume: '/hrInterface/resumeBaseV.do?',
yjyResume: '',
hjResume: '',
wyResume: '/hrInterface/resumeBaseV.do',
photo: 'imm-api/api/emp/getExtInfo',
},
renderType: RENDER_TYPE,
renderItem: {
resumeBaseVo: {
name: '基本信息',
type: RENDER_TYPE.A,
img: 'base',
list: {
gender: '性别',
birthday: '出生年月',
fnative: '籍贯',
marriage: '婚姻状况',
political: '政治面貌',
partyAccessionDate: '党(团)派加入时间',
highesttitle: '最高职称',
highestedu: '最高学历',
highdegree: '最高学位',
jobtime: '参加工作时间',
worktime: '入司时间',
idcardno: '身份证(护照)',
},
},
jobVoList: {
name: '当前任职',
type: RENDER_TYPE.B,
img: 'job',
list: {
title: 'depart',
subTitle: ['job'],
note: ['jobstarttime', 'jobendtime'],
},
},
jobHistoryVoList: {
name: '历史任职',
type: RENDER_TYPE.B,
img: 'jobhistory',
list: {
title: 'depart',
subTitle: ['job'],
note: ['jobstarttime', 'jobendtime'],
},
},
// assessVoList: {
// name: '绩效考核',
// type: RENDER_TYPE.D,
// img: 'assess',
// list: {
// title: 'assyear',
// note: 'assgrade',
// },
// },
workVoList: {
name: '工作经历',
type: RENDER_TYPE.B,
img: 'work',
list: {
title: 'company',
subTitle: ['job'],
note: ['jobstarttime', 'jobendtime'],
},
},
eduVoList: {
name: '教育经历',
type: RENDER_TYPE.C,
img: 'edu',
list: {
title: 'school',
subTitle: ['major', 'educational', 'degree'],
note: 'graduationtime',
},
},
familyVoList: {
name: '社会关系',
type: RENDER_TYPE.E,
img: 'family',
list: {
title: 'name',
title1: 'relation',
title2: 'phone',
subTitle: ['political', 'birthday', 'workUnit'],
subTitleName: ['政治面貌', '出生日期', '工作单位'],
},
},
assessVoList: {
name: '员工绩效',
type: RENDER_TYPE.D,
img: 'reward',
list: {
// 物业
title: 'assyear',
note: 'assgrade',
// 房产
yearShow: 'yearShow',
performance: 'performance',
appraise: 'appraise',
award: 'award',
punish: 'punish',
},
},
rewardPunishVoList: {
name: '奖惩信息',
type: RENDER_TYPE.F,
img: 'reward',
list: {
title: 'content',
title1: 'type',
subTitle: 'company',
subTitle1: 'year',
},
},
},
};
export default config;
import common from './common';
const config = {
product: true,
ssoToken: 'token',
// baseUrl: 'https://jffcvp.cndrealty.com:4433/',
// appkey: '781d2ec4', // 正式
baseUrl: 'https://mxytest.cndrealty.com:4433/', //测试
appkey: 'd504275e', // 测试
};
export default Object.assign(config, common);
import common from './common';
// const config = {
// product: false,
// ssoToken: 'token',
// userid: '10000487',
// appKey: 'd504275e',
// uid: 'liujing',
// token: 'T4769421750076416',
// baseUrl: 'https://mxytest.cndrealty.com:4433/',
// };
// const config = {
// product: false,
// ssoToken: 'token',
// userid: '46000011',
// appKey: 'd504275e',
// uid: 'hqhuang@cndrealty.com',
// token: 'T4769446611354624',
// baseUrl: 'https://mxytest.cndrealty.com:4433/',
// };
// const config = {
// product: false,
// ssoToken: 'token',
// userid: '10000717',
// appKey: 'd504275e',
// uid: 'xiewei',
// token: 'T4583667530875904',
// baseUrl: 'https://mxytest.cndrealty.com:4433/',
// };
// const config = {
// product: false,
// ssoToken: 'token',
// userid: '10015264',
// appKey: 'd504275e',
// uid: 'suyh@cndrealty.com',
// token: 'T4777933018317824',
// baseUrl: 'https://mxytest.cndrealty.com:4433/',
// };
const config = {
product: false,
ssoToken: 'token',
userid: '10001285',
appKey: 'd504275e',
uid: 'xycao@cndrealty.com',
token: 'T4777979921957888',
baseUrl: 'https://mxytest.cndrealty.com:4433/',
};
export default Object.assign(config, common);
{
"error": "",
"errorCode": 0,
"data": {
"jobVoList": [{
"id": "0000000000050191",
"username": "程冰",
"jobendtime": "9999-12-31",
"job": "集团副总经理",
"personid": "10000370",
"depart": "建发房地产集团有限公司",
"director": null,
"jobstarttime": "2014-02-01"
}],
"resumeBaseVo": {
"id": "0000000000000370",
"username": "程冰",
"birthday": "1973-12-28",
"personid": "10000370",
"fnative": "安徽巢湖市庐江县",
"gender": "女",
"highdegree": "无",
"highestedu": "本科",
"highesttitle": "助理会计师",
"jobtime": "1994-10-01",
"marriage": "已婚",
"political": "中共党员",
"worktime": "1997-02-01"
},
"assessVoList": [],
"jobHistoryVoList": [{
"id": "0000000000050191",
"username": "程冰",
"jobendtime": "9999-12-31",
"job": "集团副总经理",
"personid": "10000370",
"depart": "建发房地产集团有限公司",
"director": null,
"jobstarttime": "2014-02-01"
}, {
"id": "0000000000045935",
"username": "程冰",
"jobendtime": "2014-01-31",
"job": "集团副总经理",
"personid": "10000370",
"depart": "建发房地产集团有限公司",
"director": null,
"jobstarttime": "2013-02-01"
}, {
"id": "0000000000041315",
"username": "程冰",
"jobendtime": "2013-01-31",
"job": "集团副总经理",
"personid": "10000370",
"depart": "建发房地产集团有限公司",
"director": null,
"jobstarttime": "2012-02-01"
}, {
"id": "0000000000032035",
"username": "程冰",
"jobendtime": "2012-01-31",
"job": "集团副总经理",
"personid": "10000370",
"depart": "建发房地产集团有限公司",
"director": null,
"jobstarttime": "2011-02-01"
}, {
"id": "0000000000025456",
"username": "程冰",
"jobendtime": "2011-01-31",
"job": "集团副总经理",
"personid": "10000370",
"depart": "建发房地产集团有限公司",
"director": null,
"jobstarttime": "2010-06-01"
}, {
"id": "0000000000030600",
"username": "程冰",
"jobendtime": "2011-01-31",
"job": "总经理(兼)",
"personid": "10000370",
"depart": "房地产集团营销管理中心",
"director": null,
"jobstarttime": "2010-02-01"
}, {
"id": "0000000000030599",
"username": "程冰",
"jobendtime": "2010-01-31",
"job": "总经理(兼)",
"personid": "10000370",
"depart": "房地产集团营销管理中心",
"director": null,
"jobstarttime": "2009-02-01"
}, {
"id": "00006184",
"username": "程冰",
"jobendtime": "2009-01-31",
"job": "总经理(兼)",
"personid": "10000370",
"depart": "销售管理中心",
"director": null,
"jobstarttime": "2008-02-01"
}, {
"id": "00004103",
"username": "程冰",
"jobendtime": "2010-05-31",
"job": "集团副总经理",
"personid": "10000370",
"depart": "建发房地产集团有限公司",
"director": null,
"jobstarttime": "2008-02-01"
}, {
"id": "00006186",
"username": "程冰",
"jobendtime": "2009-01-31",
"job": "中心总经理(兼)",
"personid": "10000370",
"depart": "策划管理中心",
"director": null,
"jobstarttime": "2008-02-01"
}, {
"id": "00002772",
"username": "程冰",
"jobendtime": "2008-01-31",
"job": "集团总经理助理",
"personid": "10000370",
"depart": "建发房地产集团有限公司",
"director": null,
"jobstarttime": "2007-02-01"
}, {
"id": "00001811",
"username": "程冰",
"jobendtime": "2008-01-31",
"job": "总经理(兼)",
"personid": "10000370",
"depart": null,
"director": null,
"jobstarttime": "2007-02-01"
}, {
"id": "0000000000008308",
"username": "程冰",
"jobendtime": "2006-01-31",
"job": "总经理(兼)",
"personid": "10000370",
"depart": "房地产集团厦门事业部",
"director": null,
"jobstarttime": "2005-02-01"
}, {
"id": "0000000000008305",
"username": "程冰",
"jobendtime": "2007-01-31",
"job": "集团总经理助理",
"personid": "10000370",
"depart": "建发房地产集团有限公司",
"director": null,
"jobstarttime": "2005-02-01"
}, {
"id": "0000000000008304",
"username": "程冰",
"jobendtime": "2005-01-31",
"job": "经理(兼)",
"personid": "10000370",
"depart": "房地产集团营销部",
"director": null,
"jobstarttime": "2004-02-01"
}, {
"id": "0000000000008310",
"username": "程冰",
"jobendtime": "2004-05-31",
"job": "总经理",
"personid": "10000370",
"depart": "厦门品传置业顾问有限公司",
"director": null,
"jobstarttime": "2004-02-01"
}, {
"id": "0000000000008303",
"username": "程冰",
"jobendtime": "2004-01-31",
"job": "经理",
"personid": "10000370",
"depart": "房地产公司营销部",
"director": null,
"jobstarttime": "2003-02-01"
}, {
"id": "0000000000008302",
"username": "程冰",
"jobendtime": "2003-01-31",
"job": "经理",
"personid": "10000370",
"depart": "房地产公司销售部",
"director": null,
"jobstarttime": "2002-05-01"
}, {
"id": "0000000000008301",
"username": "程冰",
"jobendtime": "2000-02-28",
"job": "经理助理",
"personid": "10000370",
"depart": "厦门建发集团房地产有限公司",
"director": null,
"jobstarttime": "1999-02-01"
}],
"workVoList": [],
"eduVoList": [{
"id": "0000000000395939",
"username": "程冰",
"major": "工商管理",
"personid": "10000370",
"school": "厦门大学",
"graduationtime": "2004-09-01",
"educational": "本科",
"degree": "无"
}, {
"id": "0000000000395940",
"username": "程冰",
"major": "审计",
"personid": "10000370",
"school": "集美大学",
"graduationtime": "1995-07-01",
"educational": "",
"degree": "无"
}]
},
"userid": "10000370",
"success": true
}
let ready = false
let config = window.config || {}
function doReady (fn) {
if (sessionStorage.getItem(config.appName)) {
app.exit().catch(err => {
console.error(err)
})
}
ready = true
sessionStorage.setItem(config.appName, ready)
fn.apply(window)
}
const MODULE_NAMES = {
MIDEA_COMMON: 'MideaCommon',
MIDEA_USER: 'MideaUser',
MIDEA_BARCODE: 'MideaBarcode',
MIDEA_MAP: 'MideaMap',
MIDEA_ANNTO: 'MideaAnnto',
MIDEA_SALE: 'MideaSale'
}
const app = {
/**
* 监听设备准备
* @param {any} fn 回调
*/
ready (fn, prod) {
if (!ready && prod) {
window.document.addEventListener('deviceready', () => {
doReady(fn)
}, false)
} else {
doReady(fn)
}
},
/**
* 调用cordova对象的exec方法
* @param module 所属模块
* @param method 方法名称
* @param params 附带参数
* @return {Promise}
*/
callApi (module, method, params) {
return new Promise((resolve, reject) => {
if (window.cordova) {
cordova.exec(function (msg) {
resolve(msg)
}, function (msg) {
reject(msg)
}, module, method, params || [])
} else {
reject('cordova is not exist.')
}
})
},
/**
* 从获取用户信息
* @returns {Promise}
*/
getUser () {
return app.callApi(MODULE_NAMES.MIDEA_USER, 'getUser')
},
/**
* 跳转到目标app
*/
jumpToView () {
let appHref = config.appHref
window.location.replace(appHref)
},
/**
* 退出应用
* @returns {Promise}
*/
exit () {
return app.callApi(MODULE_NAMES.MIDEA_COMMON, 'exit', [])
},
statusBarColor (r, g, b, a) {
return app.callApi(MODULE_NAMES.MIDEA_COMMON, 'statusBarColor', [r, g, b, a])
},
getExtra (id) {
return app.callApi(MODULE_NAMES.MIDEA_COMMON, 'getExtra', [id])
},
saveToGallery (url) {
return app.callApi(MODULE_NAMES.MIDEA_COMMON, 'saveToGallery', [url])
}
}
export default app
import axios from 'axios';
/**
* MAS通用调用类
* @class MAS
*/
export default class MAS {
static getInstance() {
if (!MAS.__instance) {
MAS.__instance = new MAS();
}
return MAS.__instance;
}
/**
* 接口类型
* @readonly
* @static
* @memberof MAS
*/
static get TYPE() {
return {
PROXY: 'mas-api/proxy?alias=',
RESTFUL: 'mas-api/restful/',
};
}
/**
* 默认token的key
* @readonly
* @static
* @memberof MAS
*/
static get TOKEN_KEY() {
return 'access_token';
}
/**
* 回答器,包含结果认证,只限mas请求接口
* @param {{}} result 请求结果
* @returns {{}} 返回处理的结果
* @memberof MAS
*/
responser(result) {
if (result.status === 200) {
let data = result.data;
if (data instanceof Object) {
if (MAS.ERROR_CODE[data.code]) {
return Promise.reject(Object.assign(data, errorCode[data.code]));
}
}
return data;
} else {
throw new Error(result.statusText);
}
}
/**
* 通用请求接口
* @param {String} url 接口地址
* @param {{}} params 参数
* @param {{}} options 配置 {baseUrl: 指定根地址, method: 指定调用方法}
* @returns {Promise} Axios
* @memberof MAS
*/
getData(url, params, options = {}) {
let method = (options && options.method) || this.method || 'get';
// let baseUrl = (options && options.baseUrl) || this.baseUrl;
return axios({
// url: `${baseUrl}/${url}`,
url: url,
method,
params: method === 'get' && params,
data: method === 'post' && params,
...options,
}).then(result => this.responser(result));
}
/**
* Proxy方式调用,MAS配置接口
* @param {String} alias MAS配置接口代码
* @param {{}} params 参数
* @param {{}} options 配置 {baseUrl: 指定根地址, method: 指定调用方法}
* @returns {Promise} Axios
* @memberof MAS
*/
proxy(alias, params, options) {
params = Object.assign(
{
[this.tokenKey]: this.token,
},
params,
options
);
return this.getData(`${MAS.TYPE.PROXY}${alias}`, params, options);
}
/**
* Restful方式调用,MAS配置接口,如果是Restful方式,必须在初始化时指定restful code,否则必须每次在option只指定
* @param {String} url 请求地址,restful配置的后段
* @param {{}} params 参数
* @param {{}} options 配置 {code: restful code,baseUrl: 指定根地址, method: 指定调用方法}
* @returns {Promise} Axios
* @memberof MAS
*/
restful(url, params, options) {
let code = (options && options.code) || this.code;
params = Object.assign(
{
[this.tokenKey]: this.token,
},
params,
options
);
return this.getData(`${this.baseUrl}${MAS.TYPE.RESTFUL}${code}${url}`, params, options);
}
/**
* 配置
* @param {Object} { baseUrl, method, code, token, tokenKey } baseUrl-接口根地址,method:默认调用方法,默认get,code:默认restful代码,token:访问令牌,tokenKey:访问令牌的key
* @returns {MAS}
* @memberof MAS
*/
config({ baseUrl, method, code, token, tokenKey }) {
this.baseUrl = baseUrl;
this.method = method;
this.code = code;
this.token = token;
this.tokenKey = tokenKey;
return this;
}
/**
* 根地址
* @memberof MAS
*/
get baseUrl() {
return this._baseUrl;
}
/**
* 根地址
* @memberof MAS
*/
set baseUrl(baseUrl) {
this._baseUrl = baseUrl;
}
/**
* 调用方法
* @memberof MAS
*/
get method() {
return this._method;
}
/**
* 调用方法
* @memberof MAS
*/
set method(method) {
this._method = method;
}
/**
* restful代码
* @memberof MAS
*/
get code() {
return this._code;
}
/**
* restful代码
* @memberof MAS
*/
set code(code) {
this._code = code;
}
/**
* 访问令牌
* @memberof MAS
*/
get token() {
return this._token;
}
/**
* 访问令牌
* @memberof MAS
*/
set token(token) {
this._token = token;
}
/**
* 访问令牌key
* @memberof MAS
*/
get tokenKey() {
return this._tokenKey || MAS.TOKEN_KEY;
}
/**
* 访问令牌key
* @memberof MAS
*/
set tokenKey(tokenKey) {
this._tokenKey = tokenKey;
}
}
const errorCode = {
'40001': { errCode: '40001', errMsg: '找不到Map校验accessToken!', isReportErr: 'false' },
'40002': { errCode: '40002', errMsg: 'MAP校验不通过!', isReportErr: 'false' },
'40003': { errCode: '40003', errMsg: 'MAP校验出错!', isReportErr: 'false' },
'40011': { errCode: '40011', errMsg: 'MAS中对应的alias参数没有提供', isReportErr: 'false' },
'40021': { errCode: '40021', errMsg: 'MAS转接超时!', isReportErr: 'true' },
'40031': { errCode: '40031', errMsg: '后台服务器连接异常!', isReportErr: 'true' },
'40041': { errCode: '40041', errMsg: '请求参数错误!', isReportErr: 'false' },
'40101': { errCode: '40101', errMsg: 'MAS端没找到token值', isReportErr: 'false' },
'40102': { errCode: '40102', errMsg: 'MAS Token校验不通过!', isReportErr: 'false' },
'40110': { errCode: '40110', errMsg: 'MAS系统处理异常,请联系MAS管理员。', isReportErr: 'true' },
'40112': { errCode: '40112', errMsg: 'MAS服务器没有对应配置,请联系MAS管理员', isReportErr: 'false' },
'40113': { errCode: '40113', errMsg: 'MAS SOAP配置错误', isReportErr: 'true' },
'40120': { errCode: '40120', errMsg: 'MAS图片转换配置错误(图片替换表达式没填)', isReportErr: 'true' },
'40600': { errCode: '40600', errMsg: 'MAS调用返回错误', isReportErr: 'false' },
'40601': { errCode: '40601', errMsg: 'MAS调用URL错误', isReportErr: 'false' },
'40610': { errCode: '40610', errMsg: 'MAS调用数据库脚本失败', isReportErr: 'true' },
'40620': { errCode: '40620', errMsg: 'MAS调用流下载失败', isReportErr: 'true' },
'40631': { errCode: '40631', errMsg: 'MAS调用Webservice失败', isReportErr: 'true' },
'40640': { errCode: '40640', errMsg: 'MAS调用通用表单失败', isReportErr: 'true' },
'40650': { errCode: '40650', errMsg: 'MAS调用HTTP GET失败', isReportErr: 'true' },
'40670': { errCode: '40670', errMsg: 'MAS调用HTTP POST失败', isReportErr: 'true' },
'40690': { errCode: '40690', errMsg: 'MAS调用HTTP AUTO失败', isReportErr: 'true' },
'40691': { errCode: '40691', errMsg: 'MAS调用HTTP DELETE失败', isReportErr: 'true' },
'40692': { errCode: '40692', errMsg: 'MAS调用HTTP PUT失败', isReportErr: 'true' },
'40699': { errCode: '40699', errMsg: 'MAS转发失败', isReportErr: 'true' },
'40700': { errCode: '40700', errMsg: 'MAS不支持该配置服务', isReportErr: 'true' },
'40701': { errCode: '40701', errMsg: 'MAS接口配置错误', isReportErr: 'true' },
'40800': { errCode: '40800', errMsg: 'MAS全局配置参数没设置', isReportErr: 'true' },
'40801': { errCode: '40801', errMsg: 'MAS全局配置参数类型错误', isReportErr: 'true' },
'40810': { errCode: '40810', errMsg: 'MAS没找到相应的RESTFul配置', isReportErr: 'false' },
'40900': { errCode: '40900', errMsg: '账号映射出错', isReportErr: 'true' },
'41000': { errCode: '41000', errMsg: '清除缓存失败', isReportErr: 'true' },
'42000': { errCode: '42000', errMsg: '通用表单模板配置不存在', isReportErr: 'false' },
'42001': { errCode: '42001', errMsg: '通用表单服务不存在', isReportErr: 'false' },
'42002': { errCode: '42002', errMsg: '通用表单系统模块配置不存在', isReportErr: 'false' },
'42010': { errCode: '42010', errMsg: '通用表单调用返回错误', isReportErr: 'true' },
};
/**
* 错误代码
* @type {{}}
*/
MAS.ERROR_CODE = errorCode;
File mode changed
// A custom Nightwatch assertion.
// the name of the method is the filename.
// can be used in tests like this:
//
// browser.assert.elementCount(selector, count)
//
// for how to write custom assertions see
// http://nightwatchjs.org/guide#writing-custom-assertions
exports.assertion = function (selector, count) {
this.message = 'Testing if element <' + selector + '> has count: ' + count
this.expected = count
this.pass = function (val) {
return val === this.expected
}
this.value = function (res) {
return res.value
}
this.command = function (cb) {
var self = this
return this.api.execute(function (selector) {
return document.querySelectorAll(selector).length
}, [selector], function (res) {
cb.call(self, res)
})
}
}
require('babel-register')
var config = require('../../build/config')
var requireContext = require('../../src/libraries/packages/npms/require-context')
var list = requireContext('../../src', true, /tests\/e2e\//)
console.log('============== --------- e2e test list ===============')
console.log(list)
// http://nightwatchjs.org/gettingstarted#settings-file
module.exports = {
src_folders: ['test/e2e/specs'],
// src_folders: list,
output_folder: 'test/e2e/reports',
custom_assertions_path: ['test/e2e/custom-assertions'],
selenium: {
start_process: true,
server_path: require('selenium-server').path,
host: '127.0.0.1',
port: 4444,
cli_args: {
'webdriver.chrome.driver': require('chromedriver').path
}
},
test_settings: {
default: {
selenium_port: 4444,
selenium_host: 'localhost',
silent: true,
globals: {
devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port)
}
},
chrome: {
desiredCapabilities: {
browserName: 'chrome',
javascriptEnabled: true,
acceptSslCerts: true
}
},
firefox: {
desiredCapabilities: {
browserName: 'firefox',
javascriptEnabled: true,
acceptSslCerts: true
}
}
}
}
// 1. start the dev server using production config
process.env.NODE_ENV = 'testing'
var server = require('../../build/dev-server.js')
server.ready.then(() => {
// 2. run the nightwatch test suite against it
// to run in additional browsers:
// 1. add an entry in test/e2e/nightwatch.conf.json under "test_settings"
// 2. add it to the --env flag below
// or override the environment flag, for example: `npm run e2e -- --env chrome,firefox`
// For more information on Nightwatch's config file, see
// http://nightwatchjs.org/guide#settings-file
var opts = process.argv.slice(2)
if (opts.indexOf('--config') === -1) {
opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js'])
}
if (opts.indexOf('--env') === -1) {
opts = opts.concat(['--env', 'chrome'])
}
var spawn = require('cross-spawn')
var runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' })
runner.on('exit', function (code) {
server.close()
process.exit(code)
})
runner.on('error', function (err) {
server.close()
throw err
})
})
// For authoring Nightwatch tests, see
// http://nightwatchjs.org/guide#usage
module.exports = {
'default e2e tests': function (browser) {
// automatically uses dev Server port from /config.index.js
// default: http://localhost:8080
// see nightwatch.conf.js
const devServer = browser.globals.devServerURL
browser
.url(devServer)
.waitForElementVisible('#app', 5000)
.assert.elementPresent('.hello')
.assert.containsText('h1', 'Welcome to Your Vue.js App')
.assert.elementCount('img', 1)
.end()
}
}
{
"env": {
"mocha": true
},
"globals": {
"expect": true,
"sinon": true
}
}
import Vue from 'vue'
Vue.config.productionTip = false
// require all test files (files that ends with .spec.js)
const testsContext = require.context('../../src', true, /tests\/unit\/.*\.spec$/)
testsContext.keys().forEach(testsContext)
// require all src files except main.js for coverage.
// you can also change this to match only the subset of files that
// you want coverage for.
// const srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/)
// srcContext.keys().forEach(srcContext)
console.log('============== --------- unit test list ===============')
console.log(testsContext.keys())
// This is a karma config file. For more details see
// http://karma-runner.github.io/0.13/config/configuration-file.html
// we are also using it with karma-webpack
// https://github.com/webpack/karma-webpack
var webpackConfig = require('../../build/webpack.test.conf')
module.exports = function (config) {
config.set({
// to run in additional browsers:
// 1. install corresponding karma launcher
// http://karma-runner.github.io/0.13/config/browsers.html
// 2. add it to the `browsers` array below.
browsers: ['PhantomJS'],
frameworks: ['mocha', 'sinon-chai', 'phantomjs-shim'],
reporters: ['spec', 'coverage'],
files: ['./index.js'],
preprocessors: {
'./index.js': ['webpack', 'sourcemap']
},
webpack: webpackConfig,
webpackMiddleware: {
noInfo: true
},
coverageReporter: {
dir: './coverage',
reporters: [
{ type: 'lcov', subdir: '.' },
{ type: 'text-summary' }
]
}
})
}
import Vue from 'vue'
import Hello from '@/components/Hello'
describe('Hello.vue', () => {
it('should render correct contents', () => {
const Constructor = Vue.extend(Hello)
const vm = new Constructor().$mount()
expect(vm.$el.querySelector('.hello h1').textContent)
.to.equal('Welcome to Your Vue.js App')
})
})
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